针对不同的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:
Author NodeType:
Category NodeType:
为简化定义,节点只声明了name属性
二、实体类编写
Book实体类
Author实体类:
Category实体类
与Hibenrate所映射的实体类不同,Jackrabbit所映射的实体类一定要有path属性表示节点的存储路径
三、映射配置的编写
注:标签属性的定义描述参考第一篇文档
http://blog.youkuaiyun.com/javaman_chen/article/details/6661851
book.jbm.xml
author.jbm.xml
category.jbm.xml
有了映射配置文件之后,便可通过如下代码来获取ObjectContentManager对象实例

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:
- [demo:Book] > nt:unstructured
- - demo:name (string)
- + demo:Author (demo:Author)
- + demo:Category (demo:Category)
- [demo:Author] > nt:unstructured
- - demo:name (string)
- [demo:Category] > nt:unstructured
- - demo:name (string)
二、实体类编写
Book实体类

Author实体类:

Category实体类

与Hibenrate所映射的实体类不同,Jackrabbit所映射的实体类一定要有path属性表示节点的存储路径
三、映射配置的编写
注:标签属性的定义描述参考第一篇文档
http://blog.youkuaiyun.com/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>
- <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>
- <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>
- 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()...