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:
[demo:Book] > nt:unstructured
- demo:name (string)
+ demo:Author (demo:Author)
+ demo:Category (demo:Category)
Author NodeType:
[demo:Author] > nt:unstructured
- demo:name (string)
Category NodeType:
[demo:Category] > 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()...
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值