Creating custom NodeTypes not persisting
hamakhaa1 Jul 24, 2011 6:09 PMHi there,
I am using modeshape 2.6.0 beta and trying to create a new NodeType programatically. Following is java and configuration.When I try a new nodetype and then try to fetch it it works fine.But if I try only to fetch I am getting NoSuchNodeTypeException.
Please can you help me out what I am missing in the following code:
package com.olive.jcr.api;
import java.io.IOException;
import javax.jcr.PropertyType;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Workspace;
import javax.jcr.nodetype.NodeType;
import javax.jcr.nodetype.NodeTypeManager;
import javax.jcr.nodetype.NodeTypeTemplate;
import javax.jcr.nodetype.PropertyDefinitionTemplate;
import org.modeshape.common.collection.Problem;
import org.modeshape.graph.Graph;
import org.modeshape.jcr.JcrConfiguration;
import org.modeshape.jcr.JcrEngine;
import org.xml.sax.SAXException;
public class JCRTest {
private static JcrEngine engine;
public static void main(String[] args){
if (engine != null) return; // already started
try {
JcrConfiguration config = new JcrConfiguration().loadFrom("src/main/java/com/olive/jcr/api/jpaConfig.xml");
engine = config.build();
engine.start();
if (engine.getProblems().hasProblems()) {
for (Problem problem : engine.getProblems()) {
System.err.println(problem.getMessageString());
}
throw new RuntimeException("Could not start due to problems");
}
Repository repository = (Repository) engine.getRepository("olive repository");
Session session = repository.login(); // Logs in with a guest session - works by default.
Workspace workspace = session.getWorkspace();
//createNodeType(workspace);
getNodeType(workspace);
session.save();
} catch (IOException e) {
System.out.print("exception"+e);
} catch (SAXException e) {
// TODO Auto-generated catch block
System.out.print("exception"+e); } catch (RepositoryException e) {
// TODO Auto-generated catch block
System.out.print("exception"+e);
}
}
/**
* Example to add nodetype
*/
private static void getNodeType(Workspace workspace){
NodeTypeManager mgr;
try {
mgr = workspace.getNodeTypeManager();
mgr.getAllNodeTypes();
NodeType nodeType = mgr.getNodeType("StandardArticle");
System.out.println(nodeType.getName());
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Example to create a node type Article
* @param workspace
*/
//TODO method to create node type
private static void createNodeType(Workspace workspace){
// Obtain the ModeShape-specific node type manager ...
NodeTypeManager nodeTypeManager;
try {
nodeTypeManager = workspace.getNodeTypeManager();
// Declare a mixin node type named "searchable" (with no namespace)
NodeTypeTemplate nodeType = nodeTypeManager.createNodeTypeTemplate();
nodeType.setName("StandardArticle");
//nodeType.setMixin(true);
// Add a property named "headline"
PropertyDefinitionTemplate headline = nodeTypeManager.createPropertyDefinitionTemplate();
headline.setName("headline");
headline.setMandatory(true);
headline.setRequiredType(PropertyType.STRING);
nodeType.getPropertyDefinitionTemplates().add(headline);
// Add a property named "teaser"
PropertyDefinitionTemplate teaser = nodeTypeManager.createPropertyDefinitionTemplate();
teaser.setName("teaser");
teaser.setMandatory(true);
teaser.setRequiredType(PropertyType.STRING);
nodeType.getPropertyDefinitionTemplates().add(teaser);
// Add a property named "body"
PropertyDefinitionTemplate body = nodeTypeManager.createPropertyDefinitionTemplate();
body.setName("body");
body.setMandatory(true);
body.setRequiredType(PropertyType.STRING);
// Register the custom node type
NodeType createdNodeType = nodeTypeManager.registerNodeType(nodeType,true);
System.out.println("node type name:"+createdNodeType.getName());
} catch (RepositoryException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-------------------------------------------------------------------------------------------------------Configuration
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:mode="http://www.modeshape.org/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0">
<!--
Define the sources for the content. These sources are directly accessible using the
ModeShape-specific Graph API. In fact, this is how the ModeShape JCR implementation works. You
can think of these as being similar to JDBC' DataSource objects, except that they expose
graph content via the Graph API instead of records via SQL or JDBC.
-->
<mode:repositories>
<mode:repository jcr:name="olive repository" mode:source="applicationStore">
<mode:options jcr:primaryType="mode:options">
<!-- Explicitly specify the "system" workspace in the "Cars" source. -->
<systemSourceName jcr:primaryType="mode:option" mode:value="system@applicationStore"/>
</mode:options>
</mode:repository>
</mode:repositories>
<mode:sources jcr:primaryType="nt:unstructured">
<!--
The 'JPA Store' repository is an JPA source with a single default workspace (though
others could be created, too).
-->
<!-- One source for the "/jcr:system" content ... -->
<mode:source jcr:name="applicationStore" mode:classname="org.modeshape.connector.store.jpa.JpaSource"
mode:description="The database store for our content"
mode:dialect="org.hibernate.dialect.MySQLDialect"
mode:driverClassName="com.mysql.jdbc.Driver"
mode:url="jdbc:mysql://localhost:3306/cms"
mode:username="root"
mode:password="root"
mode:defaultWorkspaceName="workspace1"
mode:autoGenerateSchema="disable"/>
<mode:predefinedWorkspaceNames>workspace1</mode:predefinedWorkspaceNames>
<mode:predefinedWorkspaceNames>system</mode:predefinedWorkspaceNames>
</mode:sources>
<!-- MIME type detectors and JCR repositories would be defined below -->
</configuration>