To help set-up a simple, out-of-the-box repository pre-populated with some content, ModeShape provides a way to configure such content using a simple xml format. This content can be imported either in a specific workspace, or imported by default in all predefined or new workspaces.
|Initial content is imported only the first time a repository starts up into the predefined workspaces or when a new workspace is created, if that workspace was configured as such.|
|The initial content feature is intended to allow the import of a simple structure and is not intended for large volumes of data or complex data structures. There are other, more powerful mechanisms like backup & restore or JCR XML import/export that may be better suited to those cases.|
Each initial content XML must define a single root node called jcr:root under the namespace http://www.jcp.org/jcr/1.0. This represents the root node of a workspace and all content is imported below it.
Each node has by default, the same name as the XML element which defines it and the properties the attributes of the XML element. Beside any number of custom properties, the JCR properties: jcr:name, jcr:primaryType and jcr:mixinTypes are supported, allowing for a node to have custom name, type and/or mixins. If not specified, the default node type of the created node will be nt:unstructured.
It is also possible to override the name of the nodes by defining the jcr:name attribute, which will then be used instead of the XML element's name.
By default, all the properties defined in an XML file are stored as string properties on the corresponding node. However, it is possible to define a custom property type for any given property, using any of the types defined via JCR's javax.jcr.PropertyType.
To specify a custom type for a property, one needs to define the property as a nested XML child element of the parent node:
Certain types have special requirements:
- date properties must be defined using the ISO 8601 format
- reference, weakreference and simplereference properties must use the absolute path of the node they refer to, which in turn must have the mix:referenceable mixin
- binary properties must define a path to a resource resolvable via java.io.File or via the ModeShape default classloader. If none of these 2 conditions is met, the actual UTF-8 bytes of the string value will be treated & stored as the binary.
The configuration necessary for a standalone repository to make use of the initial content is the following:
One needs to define an initialContent object inside the workspaces object, with the following content:
- each attribute name inside the initialContent object, with the exception of the * string, will be treated as the name of a workspace and will have precedence over anything else. This includes the empty string, which can be used to explicitly configure workspace without any initial content, when a default is defined (see below)
- the * character is interpreted as "default content" which means that any predefined or newly created workspaces, that aren't configured explicitly, will make use of this content
- the value of each attribute must be a simple string (including the empty string) which represents the URL of an XML file located in the runtime classpath
When using the Wildfly kit, initial content can be configured like so: