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:
[java]  view plain copy
  1. [demo:Book] > nt:unstructured  
  2. - demo:name (string)  
  3. + demo:Author (demo:Author)  
  4. + demo:Category (demo:Category)  
Author NodeType:
[java]  view plain copy
  1. [demo:Author] > nt:unstructured  
  2. - demo:name (string)  
Category NodeType:
[java]  view plain copy
  1. [demo:Category] > nt:unstructured  
  2. - demo:name (string)  
为简化定义,节点只声明了name属性

二、实体类编写
Book实体类

Author实体类:

Category实体类

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

三、映射配置的编写
注:标签属性的定义描述参考第一篇文档
http://blog.csdn.net/javaman_chen/article/details/6661851

book.jbm.xml
[html]  view plain copy
  1. <jackrabbit-ocm>  
  2.     <class-descriptor   
  3.         className="org.chen.demo.model.entity.Book"  
  4.         jcrType="demo:Book"  
  5.         jcrSuperTypes="nt:unstructured">  
  6.         <field-descriptor  
  7.             fieldName="path" jcrName="path" path="true" jcrType="String"/>  
  8.         <field-descriptor  
  9.             fieldName="name" jcrName="demo:name" jcrType="String"/>  
  10.         <bean-descriptor  
  11.             fieldName="author" jcrName="author" jcrType="demo:Author"  
  12.             converter="org.apache.jackrabbit.ocm.manager.beanconverter.impl.DefaultBeanConverterImpl"/>  
  13.         <collection-descriptor  
  14.             fieldName="categories" jcrName="demo:Category" jcrElementName="category"  
  15.             collectionConverter="org.apache.jackrabbit.ocm.manager.collectionconverter.impl.NTCollectionConverterImpl"  
  16.             elementClassName="org.chen.demo.model.entity.Category"/>  
  17.     </class-descriptor>  
  18. </jackrabbit-ocm>  
author.jbm.xml
[html]  view plain copy
  1. <jackrabbit-ocm>  
  2.     <class-descriptor   
  3.         className="org.chen.demo.model.entity.Author"  
  4.         jcrType="demo:Author"  
  5.         jcrSuperTypes="nt:unstructured">  
  6.         <field-descriptor  
  7.             fieldName="path" jcrName="path" path="true" jcrType="String"/>  
  8.         <field-descriptor  
  9.             fieldName="name" jcrName="demo:name" jcrType="String"/>  
  10.     </class-descriptor>  
  11. </jackrabbit-ocm>  
category.jbm.xml
[html]  view plain copy
  1. <jackrabbit-ocm>  
  2.     <class-descriptor   
  3.         className="org.chen.demo.model.entity.Category"  
  4.         jcrType="demo:Category"  
  5.         jcrSuperTypes="nt:unstructured">  
  6.         <field-descriptor  
  7.             fieldName="path" jcrName="path" path="true" jcrType="String"/>  
  8.         <field-descriptor  
  9.             fieldName="name" jcrName="demo:name" jcrType="String"/>  
  10.     </class-descriptor>  
  11. </jackrabbit-ocm>  
有了映射配置文件之后,便可通过如下代码来获取ObjectContentManager对象实例
[java]  view plain copy
  1. String[] files={  
  2.     "./mappings/book.jbm.xml",  
  3.     "./mappings/author.jbm.xml",  
  4.     "./mappings/category.jbm.xml"  
  5. };  
  6. Mapper mapper=new DigesterMapperImpl(files);  
  7. ObjectContentManager ocm=new ObjectContentManagerImpl(session,mapper);  
  8. //ocm.insert()...  
  9. //ocm.update()...  
  10. //ocm.delete()...  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值