We are calling "Mapping strategy" the algorithm used by the Persistence Manager to map a Java class into JCR nodes and/or properties.
In order to explain the basic mapping strategies, we will use the following simple object model :
- A page contains a path (of course), a pageInfo and a collection of paragraphs.
- The PageInfo class contains the title and the page description. We are using the pageInfo here to see all mapping features (see the bean-descriptors). In real application, this class is not necessary
- Each paragraph contains a path and a text field.
This object model could be too simple for real applications and it is just used here to simplify the description of the different mapping strategies.
Based on that object model, we can define the following Java classes:
Here is the resulting JCR structure if the page is stored on the path "/mysite/mypage1" and contains 2 paragraphs:
It is possible to have another kind of jcr structure by using other mapping strategies. See the sections Mapping Atomic Fields, Mapping Bean Fields, Mapping Collection Fields to get more information on that.
When you decide to map a bean class, you have to create a new class descriptor entry in the Persistence Manager descriptor file. Let's start with the simplest class-descriptor:
This class descriptor maps the class "org.apache.jackrabbit.ocm.testmodel.Paragraph" into the JCR type "nt:unstructured". Each field-descriptor maps one bean field into a JCR property. For example, the first field descriptor maps the java bean field "text" into the jcr property called "myjcrtext". The second field-descriptor is a specific case because it maps the jcr node path into a bean field called "path" (see below the section "The Path Field").
You can find more information on the field-descriptors in the page Mapping Atomic Fields.
It is also possible to map a bean class to a particular JCR node type by specifying the desired type in the attribute jcrType. The following class-descriptor map the class "org.apache.jackrabbit.ocm.testmodel.Paragraph" into the node type "my:paragraph".
Here are the class-descriptors required to map the classes Page, PageInfo and Paragraph:
In order to use correctly our example class with Apache Jackrabbit, you should import the following node type definitions with the Jackrabbit API.
Of course, node types "my:Page" and "my:PageInfo" are also required.
We are currently building a node type management tools which can import the node types from the class-descriptors.
Each mapped class contains a mandatory field called the "path field". It contains the JCR path associated to the object. For example, the following descriptor specify the bean field "myPath" as the path field.