集成Java内容仓库和Spring - 编程入门网
集成Java内容仓库和Spring时间:2011-05-20 infoq Costin Leau 译:胡键保存各种信息对于应用程序来说非常平常,大多数时候它们是保存在关系数据 库中。数据库处理规范数据类型十分在行,但是在处理如图像、文档等二进制数 据时却不是那么得心应手。尽管可以用文件系统作为替代——而且它们还提供了 更好的性能。但它们既没有提供用于搜索信息的查询语言,也没有提供表示关系 或事务的概念。 在很多情况下,允许第三方访问这些存储数据(随着应用程序的不断扩展,这 成为一个典型的需求)是一个漫长而复杂的过程(它们不会在一夜之间完成)。 内部存储结构很容易影响API架构,以及信息检索与遍历的方式。 什么是JSR-170 幸运的是,被称为Java内容仓库(Java Content Repository,JCR)的JSR- 170,试图以独立于具体实现的方式解决这些(以及其它)问题。即,不论底层资 源(如,数据库,本地或虚拟文件系统)是什么,API都将相同。在数据存储之上 ,JCR提供诸如访问粒度控制、版本控制、内容事件、全文检索和过滤等内容服务 。由Day Software领导的JSR-170背后的专家组令人印象深刻,包括内容管理系统 (CMS)提供商Vignette、Hummingbird Ltd.、Stellent和通用Java驱动解决方案 提供商,如BEA Systems、IBM和Oracle。该规范很可能成为内容管理和文档存储 方面事实上的标准。 经过几乎2年半的努力,工作最终于2005年6月完成,在javax.jcr包中,API包 含了大约50个类(主要是接口和异常)。2006年早些时候,发布了初始1.0版本的 参考实现(JackRabbit)。 JSR-170概览 Java内容仓库建立在仓库(除了是“用于安全地保存货物的地点”的通常含义 之外)概念之上,它提供了几个操作数据的特性。仓库使用“树结构”保存信息 ,如下图,树由节点和属性组成。圆圈代表节点,方框代表属性。1个节点有且只 有1个父亲,有任意数目的孩子(子节点)和任意数目的属性。1个属性有且只有 一个父亲(它是节点),它没有子节点,由一个名字和一个或多个值组成。属性 值的类型可以是:布尔(Boolean)、日期(Date)、双精(Double),长整 (Long),字符串(String)或流(Stream)。只有属性可以被用来存储信息, 节点则被用来创建树内部的“路径”。在某种程度上,这棵树类似文件系统的结 构,节点是目录,属性是实际的文件。 集成Java内容仓库和Spring(2)时间:2011-05-20 infoq Costin Leau 译:胡键仓库的功能被划分为几个“兼容性”级别,每个级别提供一组特定的特性: 级别 1对于所有实现,级别1是必须的,它提供对仓库的读访问,简而言之: 对节点和属性的读访问。 对属性值的读访问。 输出到XML/SAX。 支持XPATH语法的查询服务。 级别 2级别2提供写功能: 增加和移除节点和属性。 对属性值的写操作。 从XML/SAX输入数据。 值得注意的是,JCR的实现并不要求达到级别2或者更高层次。因此与只读仓库 一起工作也是完全符合规范的。 可选级别“可选”级别包含一些高级特性,它并不是读写仓库所必需的,但确 是真正为JSR-170增色的部分。这个级别包括(除了其它之外): 事务—— 它使仓库有可能与JMS或JDBC资源一起工作。 版本标定—— 允许仓库记录节点的不同状态,以备日后检索。规范对于这个 主题有相当的篇幅;该特性使得用JSR-170作为后端构建一个CVS的克隆成为可能 。 事件—— 亦称观察,它允许仓库内发生的任何活动都会被通知给客户端。 锁—— 可以冻结部分树的功能,它可以有效地返回一个只读的子树。 API回顾 使用JSR-170时,建议使用来自javax.jcr包的接口。这样,更换JCR实现时会 容易些 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |