Welcome 微信登录

首页 / 软件开发 / JAVA / 集成Java内容仓库和Spring

集成Java内容仓库和Spring2011-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)。只有属性可以被用来存储信息, 节点则被用来创建树内部的“路径”。在某种程度上,这棵树类似文件系统的结 构,节点是目录,属性是实际的文件。