阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:431828
用户头像

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

关注

评论

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

如何优化模型渲染性能

3D建模设计

性能提升 渲染优化

向量召回:深入评估离线体系,探索优质召回方法

汀丶人工智能

人工智能 自然语言处理 语义搜索系统 文本匹配 向量召回

白皮书编写中英文ppt、mg动画解说视频、多国多人会议视频制作、

西安链酷科技

DAPP系统开发 项目白皮书

低代码加速软件开发进程

树上有只程序猿

低代码开发 JNPF

AGI 黑客松收官,Zilliz 向量数据库助力34支参赛队伍角逐大模型时代的Killer App

Zilliz

黑客松 Zilliz AGI 向量数据库

前端开发工具有哪些?17款前端工程师必备工具推荐!

彭宏豪95

效率 前端开发 开发工具 前端工程师 办公软件

平均检出率“

矩视智能

深度学习 机器视觉

金色财经发文、 区块链财经媒体发布文章

西安链酷科技

广告宣发

十几种排序算法的可视化效果,快来看看!

编程的平行世界

算法 可视化

体育直播在线观看软件平台开发,建立常态化的促消费机制

软件开发-梦幻运营部

加入鲲鹏HPC训练营,一起引领高性能计算新潮流

科技热闻

MatrixOne Logtail 设计解析

MatrixOrigin

分布式数据库 云原生数据库 MatrixOrigin MatrixOne HTAP数据库

链游开发需要多少钱 链游开发技术团队

西安链酷科技

链游开发

DVD-Cloner 2023 for Mac(DVD刻录软件) v10.20.738中文激活版

mac

苹果mac Windows软件 DVD-Cloner DVD复制软件

Python 爬虫实战之爬拼多多商品并做数据分析

Noah

公链开发团队 公链钱包

西安链酷科技

公链开发 区块链开发链游开发

如何选择适合自己的音视频产品

X2Rtc

开源 音视频 RTC

九月 NFT 行业解读:熊市情绪仍占上风

Footprint Analytics

区块链 NFT 链游

1024程序员节(源聚一堂北京站)节目有奖征集!

开放原子开源基金会

一键生成!盘点那些好用的3D建模AI生成工具!

Finovy Cloud

AI 3d建模

如何通过代码混淆绕过苹果机审,解决APP被拒问题

雪奈椰子

币圈项目媒体宣发资料 广告宣传推广 新闻媒体发文

西安链酷科技

宣发 包装 项目运营

如何设计 API?看这一篇就够了

高端章鱼哥

API

百度何俊杰:扎根百度技术“黑土地”,造大模型“生态雨林”

Geek_2d6073

经人行批准!华为旗下支付机构更名,进入负一屏“发现”页享华为支付

最新动态

国外服务器入门:为何越来越多的企业选择海外托管?

一只扑棱蛾子

国外服务器

公链项目生态搭建 dao组织建设 合约开发 - DAPP开发

西安链酷科技

代币 公链开发

XMind mac (XMind思维导图)v23.09中文激活版

mac

XMind 思维导图软件 苹果mac Windows软件

极光笔记 | 发送功能使用技巧分享

极光JIGUANG

营销 消息推送 邮件 邮件通知 海外市场

低代码:让软件开发不再遥不可及

互联网工科生

低代码 应用开发 JNPF

Scrum敏捷项目管理关键

顿顿顿

敏捷开发 敏捷项目管理 scrum敏捷工具

David Nuescheler谈JCR和REST_Java_Stefan Tilkov_InfoQ精选文章