7007 发表于 2016-9-4 11:03:03

jackrabbit OCM(三)——映射应用1

针对不同的Jackrabbit存储结构,OCM有不同的映射处理方式,假设Jackrabbit存储结构如下:


Book节点拥有一个Author子节点表示作者,和多个Category子节点表示类别

基于这种存储结构,Book实体和Author及Category实体之间是聚合引用的关系,删除Book实体的同时,它所包含的Author及Catogory实体也一并删除

第一篇文档中已提到过,在做OCM映射处理的过程中,开发人员要处理3方面的信息内容,分别是:

1,JCR节点类型的定义

2,java实体类的编写

3,映射配置描述文件的编写

一、首先声明节点类型定义:

注:节点类型的定义使用Jackrabbit CND配置文件的格式,语法请参考:

http://jackrabbit.apache.org/node-type-notation.html

Book NodeType:
> nt:unstructured
- demo:name (string)
+ demo:Author (demo:Author)
+ demo:Category (demo:Category)Author NodeType:
> nt:unstructured
- demo:name (string)Category NodeType:
> nt:unstructured
- demo:name (string)为简化定义,节点只声明了name属性


二、实体类编写

Book实体类


Author实体类:


Category实体类


与Hibenrate所映射的实体类不同,Jackrabbit所映射的实体类一定要有path属性表示节点的存储路径


三、映射配置的编写

注:标签属性的定义描述参考第一篇文档

http://blog.csdn.net/javaman_chen/article/details/6661851


book.jbm.xml
<jackrabbit-ocm>
<class-descriptor
className="org.chen.demo.model.entity.Book"
jcrType="demo:Book"
jcrSuperTypes="nt:unstructured">
<field-descriptor
fieldName="path" jcrName="path" path="true" jcrType="String"/>
<field-descriptor
fieldName="name" jcrName="demo:name" jcrType="String"/>
<bean-descriptor
fieldName="author" jcrName="author" jcrType="demo:Author"
converter="org.apache.jackrabbit.ocm.manager.beanconverter.impl.DefaultBeanConverterImpl"/>
<collection-descriptor
fieldName="categories" jcrName="demo:Category" jcrElementName="category"
collectionConverter="org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl"
elementClassName="org.chen.demo.model.entity.Category"/>
</class-descriptor>
</jackrabbit-ocm>author.jbm.xml
<jackrabbit-ocm>
<class-descriptor
className="org.chen.demo.model.entity.Author"
jcrType="demo:Author"
jcrSuperTypes="nt:unstructured">
<field-descriptor
fieldName="path" jcrName="path" path="true" jcrType="String"/>
<field-descriptor
fieldName="name" jcrName="demo:name" jcrType="String"/>
</class-descriptor>
</jackrabbit-ocm>category.jbm.xml
<jackrabbit-ocm>
<class-descriptor
className="org.chen.demo.model.entity.Category"
jcrType="demo:Category"
jcrSuperTypes="nt:unstructured">
<field-descriptor
fieldName="path" jcrName="path" path="true" jcrType="String"/>
<field-descriptor
fieldName="name" jcrName="demo:name" jcrType="String"/>
</class-descriptor>
</jackrabbit-ocm>有了映射配置文件之后,便可通过如下代码来获取ObjectContentManager对象实例
String[] files={
"./mappings/book.jbm.xml",
"./mappings/author.jbm.xml",
"./mappings/category.jbm.xml"
};
Mapper mapper=new DigesterMapperImpl(files);
ObjectContentManager ocm=new ObjectContentManagerImpl(session,mapper);
//ocm.insert()...
//ocm.update()...
//ocm.delete()...
页: [1]
查看完整版本: jackrabbit OCM(三)——映射应用1