JCR概念篇

来源:互联网 发布:泰安中商网络客服好吗 编辑:程序博客网 时间:2024/05/21 08:53

Java内容仓库,即Java Content Repository。内容仓库可以理解为一个用来存储文本和二进制数据(图片,word文档,PDF等等)的数据存储应用程序。大多数的内容仓库还提供了更加高级的功能,例如版本管理、全文检索、访问控制、内容分类和内容事件等等。JSR-170提供了一套标准的API来访问任何数据仓库。通过JSR-170,你开发代码只需要引用 javax.jcr.* 这些类和接口。它适用于任何兼容JSR-170规范的内容仓库。
内容仓库可以被直接访问(应用程序的本地内容仓库),或作为资源来访问(J2EE容器管理内容仓库并通过JNDI来访问),也可以用HTTP或RMI的方式通过网络访问。这些部署方式各有优缺点,确定部署方式应根据具体情况。通常服务端应用会采用第二种或第三种方式。不管怎样,从编程上的角度看,仅体现在如何初始化建立一个对内容仓库的引用有所不同。内容仓库有四种基本操作:读、写、查询和删除。
仓库的功能被划分为几个“兼容性”级别,如图1-1所示。每个级别提供一组特定的特性:
1)    级别1:对于所有实现,级别1是必须的,它提供对仓库的读访问,简而言之:对节点和属性的读访问。对属性值的读访问。输出到XML/SAX。支持XPATH语法的查询服务。
2)    级别2:提供写功能,增加和移除节点和属性。对属性值的写操作。从XML/SAX输入数据。
3)    可选级别:这个级别包含一些高级特性,它并不是读写仓库所必需的,但确是真正为JSR-170增色的部分。这个级别包括:
a.事务:它使仓库有可能与JMS或JDBC资源一起工作。
b.版本标定:允许仓库记录节点的不同状态,以备日后检索。规范对于这个主题有相当的篇幅;该特性使得用JSR-170作为后端构建一个CVS的克隆成为可能。
c.事件:亦称观察,它允许仓库内发生的任何活动都会被通知给客户端。
d.锁:可以冻结部分树的功能,它可以有效地返回一个只读的子树。

图1-1仓库级别

使用JSR-170开发的应用系统的结构如下图1-2。在该系统运行的时候,它可以操作内容仓库1,2,3中的任意一个。在这些内容仓库当中,只有2是直接支持JSR-170的,剩下的两个都需要JSR-170驱动来和应用系统交互。注意:你的应用系统完全不用关心你的数据是如何存储的。1可能使用了关系数据库来存储,而2使用了文件系统,至于3上,它甚至更前卫的使用了XML。

1-2  JSR-170开发的应用系统的结构

内容仓库由一组 workspace(工作空间)组成,这些workspace通常应该包含相似的内容。一个内容仓库有一个到多个workspace。每个workspace都是一个树状结构,都有一个唯一的树根节点(root node)。树上的item(元素)或者是个node(节点)或者是个property(属性)。
每个node都可以有零个到多个子节点和零个到多个子属性。只有根节点没有父节点,其余所有的节点都有一个父节点。property也必须有一个父节点,但它没有子节点或是子属性,property是叶子元素。property是真正存储数据的元素。1个property有且只有一个父亲(它是节点),property没有子节点,由一个名字和一个或多个值组成。
名称空间防止不同来源和不同应用程序域之间的项目和节点类型的命名冲突。名称空间被定义为带有一个前缀,中间用一个:(冒号)分隔。例如下面的两个名称空间。node type的组合就是说一个node可以有一个主类型加若干个mix类型。也就是说一个node可以没有mix类型,但一定要有主类型。JCR实现可以提供三种预定义混合类型:
1、   mix:versionable:允许节点支持版本管理
2、    mix:lockable:支持节点的锁定功能
3、    mix:referenceable:提供自动创建的jcr:uuid属性,给节点一个惟一可以引用的标识符。
预定义结点类型每个仓库都必须支持主节点类型nt:base。仓库还可以支持其他许多公共节点类型:
1、    nt:unstructured是最灵活的节点类型。它允许使用任意数量的子节点或属性,并且可以使用任意名称。这个节点类型表示JCRWiki的条目。
2、    nt:file表示文件。它需要一个叫做jcr:content的单一子节点。这个节点类型表示JCRWiki 条目中的图片和其他二进制内容。
3、    nt:folder节点类型可以表示文件夹,就像常规的文件系统中的文件夹一样。
4、    nt:resource通常表示文件的实际内容。
5、    nt:version 是支持版本管理的仓库所必需的节点类型。
一个PropertyDefinition可以指定如下这些属性如下所示:

requiredType:类型约束,表示这个属性只可以存放所定义的类型。是以下类型中的一个:STRING,BINARY,LONG,DOUBLE, DATE, PATH,NAME,PEFERENCE,UNDEFINED(这个属性可以是任意的类型的)
Value Constraints:将这个属性值限定的范围
Default Value:    用于设置这个属性的默认值。
autoCreated:    是否是自动创建,节点被创建时,node type 所定。autoCreated为true的properties也要求同时被创建。
Mandatory status:    为true表示,创建它的父节点类型的节点时,这个属性是一个必须有的Property,只要被创建了,就不能被删除。允许有多个值。
On-Parent-Version Status:    如果他的父节点的版本更新,它也随其更新
Protected Status:    为true表示这个属性是一个受保护的Property,这个Property不能被修改。
Multiple Values Status:    表示Property存储的是一个数组。