HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

David Nuescheler 谈 JCR 和 REST

  • 2008-07-24
  • 本文字数:4120 字

    阅读完需:约 14 分钟

InfoQ: 您能向大家快速地概括一下什么是 JCR/JSR-170 吗?

David Nuescheler (DN): 我认为这个问题可归结为对内容仓库特性集的解释。

通常如果用一句话描述,我总是将内容仓库说成是,“关系数据库”和“文件系统”的“集大成者”,外加所有那些我们一直没有但不得不内建在我们自己应用中的好东西。

这包括如事务、伸缩性、数据库端的查询、使用超大文件带来的真正好处、流、访问控制和文件系统端的层次结构,以及诸如版本标定、全文检索,以及两者都不支持但非常重要的“数据优先”方法。

JCR 是描述所有这些特性的 Java API。

InfoQ: 您对当今市场中的 JCR 采用情况怎么看?

DN: 当它开始被采用时,我总是认为,从 API 的实现者和使用者两方面进行思考很重要。

首先据我了解,在 JCR 初始版本发布后的仅仅两年间,就有超过一打的仓库与 JCR v1.0(即 JSR-170)相兼容,我为此而感到激动。尽管某些仓库如预料的那样是通过第三方连接器实现这种兼容,但是大多数已经具备了直接与 JCR 兼容的能力。这既包括主要的仓库厂商,也包括一些刚刚面世、革命性的新仓库。另一个非常鼓舞人心的事实是,现在已经有 4 个 JCR 的开源实现,我认为这表明了实现者对规范的极大支持,同时也表明该规范已具备跟其他在 Java 领域内被广泛大量采用的规范相提并论的资格。

更重要的是,在 API 使用者中的采用情况超出想象,而且我认为这是采用过程中更重要的一部分。在很多方面,它真正推动了人人都期待的仓库合并。每个新的内容管理项目如今可以依赖基于标准现成可用的内容仓库,而不是从头构建另一个“他们自己的”内容仓库。这对开发者意味着,他们可以从项目开始就拥有可信赖的诸如访问控制、功能齐全的版本标定或全文检索等特性。每周我们都可以看到大量建构在 Apache Jackrabbit 上的新应用,它是访问最多的内容仓库实现,我认为你可以毫不夸张地说,假如没有 JCR,那些应用的每个开发者可能都已在 Hibernate 这类工具之上构建自己的专用内容仓库了。

InfoQ: 您的雇主, Day 公司如何从中获利呢?

DN: 回到 2001 年,我们是在那时启动的这个 JCR 规范进程。我们这么做是因为缺少行业标准,而且我们认为自己主要是一个必须自行开发内容仓库的应用提供商。我们完成了它。但是我们的客户非常不满意,因为他们所有有价值的内容被锁定到了一个专有的贮窖中。因此我们想确保我们为我们的所有内容应用(包括 Web 内容管理、数字资产管理和社会协作软件)都提供了一个基于标准的开放平台。既然缺少这样的标准,我们就有责任为我们的客户做这方面的事情。

因此,总的来说,开放和与标准兼容是我们内容应用的关键卖点。

同时,籍由我们介入 JCR 和我们以 Apache Jackrabbit 为中心的开源活动,我们开始销售名为 CRX 的高伸缩性和企业级商业全兼容内容仓库。

CRX 是一个在很多方面都非常令人震惊的产品,比方说,它允许仓库中全部细粒度内容以事务的方式被持久化成简单、老式的 tar 文件,在我们的压力测试中,这种方式要胜过传统关系数据库支持的持久化层好几倍。

InfoQ: 最近,有很多关于 Atom AtomPub 的宣传,而且甚至有人声称它们要淘汰JCR 。您对此怎么看?

DN: 坦白说,我依旧很费解为什么人们认为这些协议和 API 是相互竞争的。回想起人们对比 WebDAV 和 JCR(顺便说一句,从特性集的角度看,我认为它是非常中肯的对比)的日子,当时我们在比较 HTTP 和 Servlet API。你不会听到有人说这样的话,“现在我有了 HTTP,为什么我还需要 API?”。程序员使用的是 API,而不是协议。

现在,将 Atom 与 AtomPub 和 JCR 作对比,从功能的角度看有点搞笑。尽管 Atom 与 AtomPub 提供了读写能力,但是 JCR 肯定在许多不同方面都超越了它们(搜索、锁、版本标定、访问控制等)。从技术的角度看,我认为 Atom 与 AtomPub 是 WebDAV 集合处理的轻量级(可能正是所需要的)替代品,但是仅此而已。

InfoQ: 但是,API 标准将解决方案绑定到了一门特殊的编程语言上(这次是 Java),这难道不是一个普遍的问题吗?难道我不想让内容可以被其他平台访问?

DN: 我并不认为这是个问题。它是一个特性。前面提到的协议允许以一种“平台中立的方式”来访问,不幸的是,这对开发者来说没有任何意义,因为他们将不得不自行编写封装解析器的 API。前面所说的 Servlet API 就是绑定到了 Java 平台,使得 Java 开发者能用 Http 进行访问。现在说 Servlet API 存在“普遍的问题”,就因为它被绑定到了一门特殊语言上,是不公平的说法。在内容仓库的世界里(与 HTTP 和 Servlet 的例子不同),我们缺少被广泛采纳的内容仓库协议。WebDAV 和 Atom 可能是最佳候选,但我确信将来在协议级别上会有被更广泛采纳的规范。我个人并不明白缺少优秀、被很好采纳的协议规范怎么就能被认为是 API 规范的缺陷。

我得高兴地说 JCR 已经被移植到了很多不同的语言环境,包括.NET、PHP、Perl,其中还包括 JavaScript。

InfoQ: 鉴于 REST 发明者 Roy Fielding 是 Day 的首席科学家,您对 REST 是怎么看的?

DN: 我认为我自己是“从小玩 Web 长大的”,某种程度上,我很早就开始使用 Web 了,在我学习传统应用开发技术之前,我就已经开始学习去理解和热爱 Web 架构。所以,我从未遇到过一般应用开发者碰到的问题,即让 Web 去适应他们有状态的应用开发范式。我是遇到的是问题的另一面,让应用去适应我的 Web 世界。

所以,当我初次见到 Roy 的时候,我就意识到我们已经将我们的应用按照 restful 架构构建了,只是不知道或正式地称之为 REST。只是觉得它是当时唯一自然的架构风格,当然,到现在也是一样。因此,你可以把我认为是一个“REST 的忠实信徒”或起个其他什么时髦的外号,亦或只是把我叫做“Web 小子” 以区别于“App 小子”。当然,Roy 在 2001 年发表的博士论文中对 REST 架构风格所做的形式化工作是 Web 社区非常重要的资产,我对大众花了如此长的时间来认识到它价值感到惊讶。

InfoQ: 如果可能的话,JCR 是如何与 REST 联系的?

DN: 在我看来,JCR 和 REST 在很多不同方面有关联。首先,两者都是以信息为中心的,而且都支持按层次方式处理信息。因此,JCR 的路径可以很直观地与 URL 对应,就像文件系统中的路径一样。我们首先进行的尝试之一就是将所有 JCR API 调用映射到 WebDAV,提供一个远程、RESTful 方式的 JCR API。

这样做不仅确保了从特性角度看我们在向 WebDAV 靠齐——这很重要,而且也表明我们没有违反 REST 架构风格所施加的任何约束。

对基于静态文件系统的网站来说,URL 到文件系统的映射非常自然。只要我看看 URL,我就非常清楚发生了什么。这是由于层次型的文件系统路径到 URL 的映射非常自然、直观。内容仓库令支持层次结构的存储得到了回归,并允许这种非常直观的映射。

我认为,JCR 是以 Web 为中心、面向 REST 应用的理想信息存储方式。

InfoQ: 您能给我们提供一些关于 Apache Sling 的背景资料吗?为什么这个世界需要另一个 Java Web 框架?

DN: 要是唱反调,我会假设这一立场,我还没看到一个 Java“Web”框架。

我认为,这个世界充满了那种将它们的服务暴露给“Web”的 Java“应用”框架,但是我真不愿意把它们称为“Web 框架”。

我一般认为,缺少一种并不把 Web 的无状态架构视为异端或不仅仅将 URL 认为“只是一个字符串”的框架。Sling 真的不是另一个“Java 应用框架”,而且也并不想成为它们中的一员。Sling 是首个我所看到的不仅遵循 Web 的基本原则和约束,而且实际上对它们“感觉良好”的“Web 框架”。

我们喜欢 Web 方式,并不想只要有可能就通过注入会话或延续(continuation)来绕过这些基本原则。我认为 Sling 和现有应用框架最大的一个区别就是它们和 URL 的关系。在象 J2EE 或 Struts 这样的现有应用框架中,URL 主要用来表示你的脚本或控制器(.jsp、.php、.do),并传入执行某个操作的参数。因此,你最终会得到一个丑陋的 URL,如…/view.jsp?id=123465,这当然不是面向资源的。在更加现代的框架中,人们开始更灵活地应用 URL,将它“视为一个字符串”,如允许使用正则表达式分割 URL。

虽然这支持一个更面向资源或甚至是 RESTful 架构,但是它绝对没有让人们按正确方式办事。它只是给人们更多的选择,而且在很多情况下,选择或让我们说缺乏好的缺省行为,都是不好的。

Sling 非常特别,因为 Sling 背靠内容仓库,暴露的层次名字空间可以非常自然的映射到通过一个 URL 暴露的名字空间,同时人们仍然能完全控制 URL,它还非常清楚地指导人们如何将他们的内容节点以一个设计良好的资源暴露出来。Sling 使“Web”回归了“Web 框架”。

InfoQ: 我必须承认,我还未曾看到非层次 URL 就是一个非 RESTful 的论点。Sling 对 REST 的其他方面支持如何,比如超媒体?

DN: 本质上,URL 的层次结构和 RESTful 没任何关系。回到网站还仍然是文件系统的日子里,URL“/news/newsitem.html”表示 “newsitem.html”位于文件系统某处的“news”文件夹显得很合理。增加一个归档文件夹或另一个新闻项目非常直接,因为层次 URL 的映射非常透明。当然,Web 服务器虽然给你所有可能去进行疯狂的映射,但是这种简单活被以非常简单直观的方式解决了。Sling 采用了和这完全相同的做法,其中 URL 的路径缺省被映射到内容仓库中的一个节点。当然,Sling 允许你去部分或完全控制 URL,但是我认为提供一个简单、直观和非常强大的缺省映射(一种验证过、伸缩性和拥护最佳“Web”实践的做法)是非常重要的。只是提供给开发者完成自己的 URL 空间映射的能力根本没什么用处,因为这将是我在项目启动时必须解决的第一件事,而且每个开发者的映射方式都千奇百怪。

大体上,我愿意说,Sling 在鼓励使用构成 REST 架构的 4 个约束方面干得非常好。这可能是最重要的区别,尽管其他应用框架可能允许你构建 RESTful 应用(如果你真的花时间的话),但 Sling“建造”的目的就是为开发 RESTful 仓库支持的 Web 应用提供完全开箱即用的支持,而且使得想忽略 REST 架构都难。

InfoQ: 非常感谢接受采访!

David Nuescheler 是位于瑞士的 Day 软件公司的技术战略和产品开发负责人。他是 JSR 170 和 JSR 283(Java 技术的内容仓库 API)规范的组长。他的小组已经为标准化内容仓库市场奋战了超过 4 年的时间。David 还是 Apache Jackrabbit 项目的提交者和 Apache 软件基金成员。

2008-07-24 02:431923
用户头像

发布了 255 篇内容, 共 56.9 次阅读, 收获喜欢 10 次。

关注

评论

发布
暂无评论
发现更多内容

企事业单位通用版招采系统(SRM),招采全过程闭环流程

金陵老街

AntDB数据库受邀参加第六届上海人工智能大会,分享AIGC时代核心交易系统升级方案

亚信AntDB数据库

AntDB AntDB数据库 企业号 5 月 PK 榜

架构师日记-深入理解软件设计模式 | 京东云技术团队

京东科技开发者

架构 设计模式 架构模式 编程语言、 企业号 5 月 PK 榜

系统日志规范及最佳实践

阿里技术

日志

无需nms,onnxruntime20行代码玩转RT-DETR

Openlab_cosmoplat

从集成工具到集成资产,企业数智化底座亟待升级

用友BIP

Tuxera NTFS2024Mac专业NTFS驱动软件

茶色酒

Tuxera NTFS2023

定档5.14 | 2023宿迁市网络安全大会暨第三届LINKUP+网络安全峰会开放报名中!

权说安全

App Uploader激活码获取

雪奈椰子

苹果电脑删除磁盘分区及双系统分区的办法

互联网搬砖工作者

浏览器管理脚本用什么软件?

真大的脸盆

Mac Mac 软件 脚本管理 管理脚本 浏览器脚本插件

软件测试/测试开发丨Pytest 测试框架学习笔记

测试人

软件测试 自动化测试 测试开发 pytest

基于ArkUI框架开发——图片模糊处理的实现

OpenHarmony开发者

Open Harmony

Final Cut Pro打开时卡在“正在验证音频单元...”

互联网搬砖工作者

共享电单车的未来市场如何?值得做吗?

共享电单车厂家

共享电单车投放 本铯共享电动车 共享电动车生产厂家 共享电单车发展趋势

ios APP开发测试教程

雪奈椰子

线上FullGC问题排查实践——手把手教你排查线上问题 | 京东云技术团队

京东科技开发者

GC fullstack 企业号 5 月 PK 榜 CPU告警

狂砍千万行代码,零故障!去哪儿网系统瘦身技术揭秘

Qunar技术沙龙

去哪儿网 系统瘦身

MySQL 分区

潜水员

MySQL 分区

全球连接器市场规模稳健增长,我国已成为全球最大的消费市场

华秋电子

EasyRecovery2024最新版电脑数据恢复软件

茶色酒

EasyRecovery Photo16

FL Studio2024最新中文版本水果编曲工具

茶色酒

FL Studio21

软件开发全文档获取(精华版)

金陵老街

GaussDB(DWS)网络流控与管控效果

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 5 月 PK 榜

Spartacus cart id 存储在浏览器 local storage 里面

汪子熙

angular SAP Hybris Spartacus 三周年连更

基于Java的ES全文检索,Neo4J,activiti审批流的知识库管理系统

金陵老街

Java Vue ES

Java:如何加密或解密PDF文档?

在下毛毛雨

Java 加密 PowerPoint 解密

绘画手残党的福音:涂鸦线稿秒变绝美图像

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 5 月 PK 榜

xcode打包导出ipa

雪奈椰子

读懂海尔智家大脑:深度体验的本质是深度生活

脑极体

智慧家居 全屋智能

电商广告营销中常见公式和优化手段

邴越

广告 营销 电商 信息流

David Nuescheler谈JCR和REST_Java_Stefan Tilkov_InfoQ精选文章