jackrabbit OCM(一)
来源:互联网 发布:网络传播概论思维导图 编辑:程序博客网 时间:2024/05/10 23:49
OCM是Object Content Mapping的缩写,同Hibenrate的ORM功能类似,Jackrabbit提供了OCM的功能,只不过所映射的对象不是数据库表格,而是jcr节点,可以让我们以操作对象的方式来更新Jackrabbit存储结构。
Jackrabbit的OCM功能目前也仍处于修订状态,并且从1.5版本之后没有纳入API文档范围之内。针对JCR2.0的版本实现可以在这个网址进行下载
点击打开链接
jackrabbitOCM框架对外提供的最主要的一个类为ObjectContentManager,可通过如下代码实例化该对象:
ObjectContentManager ocm=new ObjectContentManagerImpl(session,mapper);
第一个参数为Repository的会话Session, ObjectContentManager通过它创建、管理JCR内容节点(包括节点的检索、新增、更新、删除等);
第二个参数为OCM要处理的映射描述信息
同hibenrate一样,OCM映射描述信息可通过两种方式来进行声明:
1.Annotation注解方式
*实体类注解为@Node
*原子字段类型注解为@Field,其中path=true表示该属性为节点的存储路径
*Bean字段类型注解为@Bean
*集合字段类型注解为@Collection
2.xml方式(类似Hibernate的hbm文件)
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE jackrabbit-ocm PUBLIC "-//The Apache Software Foundation//DTD
- Repository//EN" "http://jackrabbit.apache.org/dtd/jackrabbit-ocm-1.5.dtd">
- <jackrabbit-ocm>
- <class-descriptor className=“model.PressRelease”>
- <field-descriptor...../> <!--原子字段类型-->
- <bean-descriptor...../> <!--Bean字段类型-->
- <collection-descriptor...../> <!-集合字段类型-->
- </class-descriptor>
- </jackrabbit-ocm>
个人推荐第二种方式,这样可针对与同一个实体类,通过编写不同的XML映射描述,来实现不同方式的映射处理(ORM或OCM)。
OCM支持3种字段类型(Field Type)的映射处理,分别是:
1.Atomic Fields(原子字段类型):映射到节点的Property ;
2.Bean Filed(bean字段类型):映射到节点的Property或子节点;
3.Collection Filed(集合字段类型):映射到子节点或者节点的多值域(multivalue property)
在做映射处理的过程中,开发人员通常要处理3方面的信息内容,分别是:
1.JCR节点类型的定义:同数据库相比,每个JCR节点相当于是一张表,而节点类型相当于是表结构的定义
2.Java实体类的编写:OCM要映射出的实体类对象
3.映射配置描述文件的编写:XML映射描述信息
这3方面信息内容的展现在结构上是一一对应的关系,改变单方的同时也要级联修改其他方
原子字段类型
DTD声明如下:
- <!ELEMENT field-descriptor EMPTY>
- <!ATTLIST field-descriptor
- fieldName CDATA #REQUIRED
- jcrName CDATA #IMPLIED
- id (true | false) "false"
- path (true | false) "false"
- uuid (true | false) "false"
- converter CDATA #IMPLIED
- jcrDefaultValue CDATA #IMPLIED
- jcrValueConstraints CDATA #IMPLIED
- jcrType (String | Date | Long | Doube | Boolean | Binary) #IMPLIED
- jcrAutoCreated (true | false) "false"
- jcrMandatory (true | false) "false"
- jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
- jcrProtected (true | false) "false"
- jcrMultiple (true | false) "false"
- >
标签属性描述如下:
fieldName:所映射实体类的字段名称
jcrName:节点属性名
path:该字段属性是否为节点的存储路径
uuid:该字段属性是否为节点的唯一标识
converter:字段类型转换器,当实体类的字段属性与JCR节点的属性类型不一致时,可通过converter来完成彼此之间的相互转换
jcrDefaultValue:属性默认值
jcrValueConstraints:属性值约束
jcrType:节点属性类型,支持String , Date , Long , Doube , Boolean , Binary
jcrAutoCreated:该属性是否自动创建
jcrMandatory:该属性是否必须存在
jcrProtected:属性是否不可修改
jcrMultiple:属性是否为多值域(multiple value)
Bean字段类型
DTD描述如下:
- <!ELEMENT bean-descriptor EMPTY>
- <!ATTLIST bean-descriptor
- fieldName CDATA #REQUIRED
- jcrName CDATA #IMPLIED
- proxy (true | false) "false"
- autoRetrieve (true|false) "true"
- autoUpdate (true|false) "true"
- autoInsert (true|false) "true"
- converter CDATA #IMPLIED
- jcrType CDATA #IMPLIED
- jcrAutoCreated (true | false) "false"
- jcrMandatory (true | false) "false"
- jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
- jcrProtected (true | false) "false"
- jcrSameNameSiblings (true | false) "false"
- >
标签属性描述如下:
fieldName:所映射实体类的字段名称
jcrName:节点属性名
proxy:该属性是否延迟加载
autoRetrieve:是否级联查询
autoUpdate:是否级联更新
autoInsert:是否级联新增
converter:类型转换器,jackrabbit OCM框架对外提供了4种类型的转换器,以下内容中会有详细介绍。
jcrType:节点类型,默认为nt:unstructured
jcrAutoCreated:是否自动创建
jcrMandatory:是否必须存在
jcrProtected:是否不可修改
jcrSameNameSiblings:是否允许含有同名的兄弟节点
集合字段类型
DTD声明如下:
- <!ELEMENT collection-descriptor EMPTY>
- <!ATTLIST collection-descriptor
- fieldName CDATA #REQUIRED
- jcrName CDATA #IMPLIED
- proxy (true | false) "false"
- autoRetrieve (true|false) "true"
- autoUpdate (true|false) "true"
- autoInsert (true|false) "true"
- elementClassName CDATA #IMPLIED
- collectionClassName CDATA #IMPLIED
- collectionConverter CDATA #IMPLIED
- jcrElementName CDATA #IMPLIED
- jcrType CDATA #IMPLIED
- jcrAutoCreated (true | false) "false"
- jcrMandatory (true | false) "false"
- jcrOnParentVersion (COPY | VERSION | INITIALIZE | COMPUTE | IGNORE | ABORT) "COPY"
- jcrProtected (true | false) "false"
- jcrSameNameSiblings (true | false) "false"
- >
标签属性描述如下:
fieldName:所映射实体类的字段名称
jcrName:节点属性名
proxy:该属性是否延迟加载
autoRetrieve:是否级联查询
autoUpdate:是否级联更新
autoInsert:是否级联新增
elementClassName:集合中元素的类名称
collectionClassName:集合对象类名称
collectionConverter:类型转换器,jackrabbitOCM对外提供了8种集合类型转换器,在下面会有详细的介绍。
jcrElementName:元素节点名称
jcrType:元素节点类型
jcrAutoCreated:是否自动创建
jcrMandatory:是否必须存在
jcrProtected:是否不可修改
jcrSameNameSiblings:是否允许含有同名的兄弟节点
- jackrabbit OCM(一)
- jackrabbit OCM(一)
- Jackrabbit OCM(二)——ObjectContentManager对象
- Jackrabbit OCM(二)——ObjectContentManager对象
- jackrabbit OCM(三)——映射应用1
- jackrabbit OCM(三)——映射应用1
- 详析 Jackrabbit 各个模块 (一)
- OCM备考 一、Server config 之手工创建数据库
- OCM备考 一、Server config 之管理表空间
- OCM备考 一、Server config 之配置shared server
- OCM备考 一、Server config 之网络配置
- OCM考试经验--RMAN基础详解(一)--体系结构
- jackrabbit security
- jackrabbit sample
- jackrabbit version
- JackRabbit随笔
- 晒晒OCM
- 上海新炬近日再添OCM认证大师一名
- 刚学ibatis,小结一下
- 27、Windows内核编程,IRP的同步(1)
- Pivot 和 Unpivot
- RAID学习笔记
- 现在开始。。脚踏实地。。。多上论坛
- jackrabbit OCM(一)
- Unix调试利器之——内存断点
- SQL查询全年
- the first it security saas marketplace
- Jackrabbit OCM(二)——ObjectContentManager对象
- jackrabbit OCM(三)——映射应用1
- RegExp 对象
- Springle+EHCache 分布式缓存开发(三)
- Starting MySQL....The server quit without updating PID file 处理方法