[jboss-svn-commits] JBL Code SVN: r6102 - in labs/jbossrules/trunk/drools-repository/src: main/java/org/drools/repository test/java/org/drools/repository
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Sep 7 07:27:01 EDT 2006
Author: michael.neale at jboss.com
Date: 2006-09-07 07:26:55 -0400 (Thu, 07 Sep 2006)
New Revision: 6102
Added:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java
Modified:
labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RepositorySession.java
labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
Log:
JBRULES-464
Added: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java 2006-09-07 09:39:41 UTC (rev 6101)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java 2006-09-07 11:26:55 UTC (rev 6102)
@@ -0,0 +1,197 @@
+package org.drools.repository;
+
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.jcr.LoginException;
+import javax.jcr.Node;
+import javax.jcr.PathNotFoundException;
+import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.SimpleCredentials;
+import javax.jcr.Workspace;
+
+import org.apache.jackrabbit.core.TransientRepository;
+import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
+import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
+import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
+import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
+import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
+import org.apache.log4j.Logger;
+
+/** This contains code to initialise the repository for jackrabbit */
+public class RepositoryConfigurator {
+
+ private static final Logger log = Logger.getLogger(RepositoryConfigurator.class);
+ private Repository repository;
+
+
+ /**
+ * This will create a new repository (or clear an existing one)
+ * @param clearRepository True if you want it to wipe the contents and set it up.
+ */
+ public RepositoryConfigurator(boolean clearRepository) {
+ try {
+
+ repository = new TransientRepository();
+
+ if(clearRepository) {
+ Session session = login();
+ this.clearRepository(session);
+ this.setupRepository(session);
+ }
+
+
+ }
+ catch (Exception e) {
+ log.error("Caught Exception", e);
+ }
+ }
+
+ public RepositoryConfigurator() {
+ this(false);
+ }
+
+ /** Create a new user session */
+ public Session login() throws LoginException,
+ RepositoryException {
+ Session session = repository.login(
+ new SimpleCredentials("username", "password".toCharArray()));
+
+ if(session == null) {
+ log.error("LOGIN FAILED! SESSION IS NULL!");
+ throw new RulesRepositoryException("Unable to login to repository.");
+ }
+ return session;
+ }
+
+ /**
+ * Clears out the entire tree below the rules repository node of the JCR repository.
+ */
+ public void clearRepository(Session session) {
+ try {
+
+ if (session.getRootNode().hasNode( RulesRepository.RULES_REPOSITORY_NAME )) {
+ System.out.println("Clearing rules repository");
+ Node node = session.getRootNode().getNode(RulesRepository.RULES_REPOSITORY_NAME);
+ node.remove();
+ } else {
+ System.out.println("Repo not setup, ergo not clearing it !");
+ }
+ }
+ catch(PathNotFoundException e) {
+ //doesn't exist yet. no biggie.
+ }
+ catch(RepositoryException e) {
+ //this will happen on the first setup. no biggie.
+ }
+ }
+
+ /**
+ * Attempts to setup the repository. If the work that it tries to do has already been done, it
+ * will return with modifying the repository.
+ *
+ * @throws RulesRepositoryException
+ */
+ protected void setupRepository(Session session) throws RulesRepositoryException {
+ System.out.println("Setting up the repository, registering node types etc.");
+ try {
+ Node root = session.getRootNode();
+ Workspace ws = session.getWorkspace();
+
+ //no need to set it up again, skip it if it has.
+ boolean registered = false;
+ String uris[] = ws.getNamespaceRegistry().getURIs();
+ for ( int i = 0; i < uris.length; i++ ) {
+ if (RulesRepository.DROOLS_URI.equals( uris[i]) ) {
+ registered = true;
+ }
+ }
+
+ if (!registered) {
+ ws.getNamespaceRegistry().registerNamespace("drools", RulesRepository.DROOLS_URI);
+
+ this.registerNodeTypesFromCndFile("/node_type_definitions/versionable_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/dsl_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/tag_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/state_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/rule_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/function_node_type.cnd", ws);
+ this.registerNodeTypesFromCndFile("/node_type_definitions/rulepackage_node_type.cnd", ws);
+ }
+
+ // Setup the rule repository node
+ Node repositoryNode = RulesRepository.addNodeIfNew(root, RulesRepository.RULES_REPOSITORY_NAME, "nt:folder");
+
+ // Setup the Rule area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.RULE_AREA, "nt:folder");
+
+ //Setup the Rule area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.FUNCTION_AREA, "nt:folder");
+
+ // Setup the RulePackageItem area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.RULE_PACKAGE_AREA, "nt:folder");
+
+ // Setup the DSL area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.DSL_AREA, "nt:folder");
+
+ //Setup the DSL area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.TAG_AREA, "nt:folder");
+
+ //Setup the State area
+ RulesRepository.addNodeIfNew(repositoryNode, RulesRepository.STATE_AREA, "nt:folder");
+
+ session.save();
+ }
+ catch(Exception e) {
+ log.error("Caught Exception", e);
+ System.err.println(e.getMessage());
+ throw new RulesRepositoryException(e);
+ }
+ }
+
+ private void registerNodeTypesFromCndFile(String cndFileName, Workspace ws) throws RulesRepositoryException, InvalidNodeTypeDefException {
+ try {
+ //Read in the CND file
+ Reader in = new InputStreamReader(this.getClass().getResourceAsStream( cndFileName ));
+
+ // Create a CompactNodeTypeDefReader
+ CompactNodeTypeDefReader cndReader = new CompactNodeTypeDefReader(in, cndFileName);
+
+ // Get the List of NodeTypeDef objects
+ List ntdList = cndReader.getNodeTypeDefs();
+
+ // Get the NodeTypeManager from the Workspace.
+ // Note that it must be cast from the generic JCR NodeTypeManager to the
+ // Jackrabbit-specific implementation.
+ NodeTypeManagerImpl ntmgr = (NodeTypeManagerImpl)ws.getNodeTypeManager();
+
+ // Acquire the NodeTypeRegistry
+ NodeTypeRegistry ntreg = ntmgr.getNodeTypeRegistry();
+
+ // Loop through the prepared NodeTypeDefs
+ for(Iterator i = ntdList.iterator(); i.hasNext();) {
+ // Get the NodeTypeDef...
+ NodeTypeDef ntd = (NodeTypeDef)i.next();
+
+ log.debug("Attempting to regsiter node type named: " + ntd.getName());
+
+ // ...and register it
+ ntreg.registerNodeType(ntd);
+ }
+ }
+ catch(InvalidNodeTypeDefException e) {
+ log.warn("InvalidNodeTypeDefinitionException caught when trying to add node from CND file: " + cndFileName + ". This will happen if the node type was already registered. " + e);
+ throw e;
+ }
+ catch(Exception e) {
+ log.error("Caught Exception", e);
+ throw new RulesRepositoryException(e);
+ }
+ }
+
+
+}
Modified: labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2006-09-07 09:39:41 UTC (rev 6101)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java 2006-09-07 11:26:55 UTC (rev 6102)
@@ -1,11 +1,5 @@
package org.drools.repository;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.Reader;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
@@ -14,26 +8,16 @@
import java.util.Map;
import java.util.StringTokenizer;
-import javax.jcr.NamespaceException;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.Property;
import javax.jcr.PropertyIterator;
-import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
-import javax.jcr.Workspace;
-import org.apache.jackrabbit.core.TransientRepository;
-import org.apache.jackrabbit.core.nodetype.InvalidNodeTypeDefException;
-import org.apache.jackrabbit.core.nodetype.NodeTypeDef;
-import org.apache.jackrabbit.core.nodetype.NodeTypeManagerImpl;
-import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry;
-import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
import org.apache.log4j.Logger;
@@ -67,10 +51,10 @@
* if there is sufficient demand, we can modify our versioning scheme to be better aligned with JCR's
* versioning abilities.
*
- * @author btruitt
+ * @author Ben Truitt
*/
public class RulesRepository {
- private static final String DROOLS_URI = "http://www.jboss.org/drools-repository/1.0";
+ public static final String DROOLS_URI = "http://www.jboss.org/drools-repository/1.0";
private static final Logger log = Logger.getLogger(RulesRepository.class);
@@ -108,171 +92,19 @@
* The name of the rules repository within the JCR repository
*/
public final static String RULES_REPOSITORY_NAME = "drools:repository";
-
- private Repository repository;
+
private Session session;
/**
- * This will create the JCR repository automatically if it does not already exist.
- * It will call setupRepository() to attempt to setup the repository, in case
- * it has not already been setup.
+ * This requires a JCR session be setup, and the repository be configured.
*/
- public RulesRepository() {
- this(false);
+ public RulesRepository(Session session) {
+ this.session = session;
}
-
- /**
- * This will create the JCR repository automatically if it does not already exist.
- * It will call setupRepository() to attempt to setup the repository, in case
- * it has not already been setup.
- *
- * @param clearRepository whether or not to erase the contents of the rules repository
- * portion of the JCR repository
- */
- public RulesRepository(boolean clearRepository) {
- try {
- //TODO: probably want to do something more serious than automatic creation of a
- // transientRepository here. (e.g. manual creation of the repository to be
- // JCR implementation neutral). be sure to update the javadoc
- repository = new TransientRepository();
- session = repository.login(
- new SimpleCredentials("username", "password".toCharArray()));
- if(this.session == null) {
- log.error("LOGIN FAILED! SESSION IS NULL!");
- }
-
- if(clearRepository) {
- this.clearRepository();
- }
-
- setupRepository();
- }
- catch (Exception e) {
- log.error("Caught Exception", e);
- }
- }
- /**
- * Clears out the entire tree below the rules repository node of the JCR repository.
- */
- public void clearRepository() {
- try {
- log.info("Clearing rules repository");
- Node node = session.getRootNode().getNode(RULES_REPOSITORY_NAME);
- node.remove();
- }
- catch(PathNotFoundException e) {
- //doesn't exist yet. no biggie.
- }
- catch(RepositoryException e) {
- //this will happen on the first setup. no biggie.
- }
- }
- private void registerNodeTypesFromCndFile(String cndFileName, Workspace ws) throws RulesRepositoryException, InvalidNodeTypeDefException {
- try {
- //Read in the CND file
- Reader in = new InputStreamReader(this.getClass().getResourceAsStream( cndFileName ));
-
- // Create a CompactNodeTypeDefReader
- CompactNodeTypeDefReader cndReader = new CompactNodeTypeDefReader(in, cndFileName);
-
- // Get the List of NodeTypeDef objects
- List ntdList = cndReader.getNodeTypeDefs();
-
- // Get the NodeTypeManager from the Workspace.
- // Note that it must be cast from the generic JCR NodeTypeManager to the
- // Jackrabbit-specific implementation.
- NodeTypeManagerImpl ntmgr = (NodeTypeManagerImpl)ws.getNodeTypeManager();
-
- // Acquire the NodeTypeRegistry
- NodeTypeRegistry ntreg = ntmgr.getNodeTypeRegistry();
-
- // Loop through the prepared NodeTypeDefs
- for(Iterator i = ntdList.iterator(); i.hasNext();) {
- // Get the NodeTypeDef...
- NodeTypeDef ntd = (NodeTypeDef)i.next();
-
- log.debug("Attempting to regsiter node type named: " + ntd.getName());
-
- // ...and register it
- ntreg.registerNodeType(ntd);
- }
- }
- catch(InvalidNodeTypeDefException e) {
- log.warn("InvalidNodeTypeDefinitionException caught when trying to add node from CND file: " + cndFileName + ". This will happen if the node type was already registered. " + e);
- throw e;
- }
- catch(Exception e) {
- log.error("Caught Exception", e);
- throw new RulesRepositoryException(e);
- }
- }
-
/**
- * Attempts to setup the repository. If the work that it tries to do has already been done, it
- * will return with modifying the repository.
- *
- * @throws RulesRepositoryException
- */
- protected void setupRepository() throws RulesRepositoryException {
- try {
- Node root = session.getRootNode();
- Workspace ws = session.getWorkspace();
-
- //no need to set it up again, skip it if it has.
- boolean registered = false;
- String uris[] = ws.getNamespaceRegistry().getURIs();
- for ( int i = 0; i < uris.length; i++ ) {
- if (DROOLS_URI.equals( uris[i]) ) {
- registered = true;
- }
- }
-
- if (!registered) {
- ws.getNamespaceRegistry().registerNamespace("drools", DROOLS_URI);
-
- this.registerNodeTypesFromCndFile("/node_type_definitions/versionable_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/dsl_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/tag_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/state_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/rule_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/function_node_type.cnd", ws);
- this.registerNodeTypesFromCndFile("/node_type_definitions/rulepackage_node_type.cnd", ws);
- }
-
- // Setup the rule repository node
- Node repositoryNode = addNodeIfNew(root, RULES_REPOSITORY_NAME, "nt:folder");
-
- // Setup the Rule area
- addNodeIfNew(repositoryNode, RULE_AREA, "nt:folder");
-
- //Setup the Rule area
- addNodeIfNew(repositoryNode, FUNCTION_AREA, "nt:folder");
-
- // Setup the RulePackageItem area
- addNodeIfNew(repositoryNode, RULE_PACKAGE_AREA, "nt:folder");
-
- // Setup the DSL area
- addNodeIfNew(repositoryNode, DSL_AREA, "nt:folder");
-
- //Setup the DSL area
- addNodeIfNew(repositoryNode, TAG_AREA, "nt:folder");
-
- //Setup the State area
- addNodeIfNew(repositoryNode, STATE_AREA, "nt:folder");
-
- session.save();
- }
- catch(Exception e) {
- log.error("Caught Exception", e);
- System.err.println(e.getMessage());
- throw new RulesRepositoryException(e);
- }
- }
-
- /**
* Will add a node named 'nodeName' of type 'type' to 'parent' if such a node does not already
* exist.
*
@@ -283,7 +115,7 @@
* existed, a reference to the pre-existant node.
* @throws RulesRepositoryException
*/
- protected Node addNodeIfNew(Node parent, String nodeName, String type) throws RulesRepositoryException {
+ protected static Node addNodeIfNew(Node parent, String nodeName, String type) throws RulesRepositoryException {
Node node;
try {
node = parent.getNode(nodeName);
@@ -391,7 +223,7 @@
if(tries == 1) {
//hmm..repository must have gotten screwed up. set it up again
log.warn("The repository appears to have become corrupted. It will be re-setup now.");
- this.setupRepository();
+ throw new RulesRepositoryException("Unable to get the main rule repo node. Repository is not setup correctly.", e);
}
else {
log.error("Unable to correct repository corruption");
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RepositorySession.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RepositorySession.java 2006-09-07 09:39:41 UTC (rev 6101)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RepositorySession.java 2006-09-07 11:26:55 UTC (rev 6102)
@@ -1,5 +1,10 @@
package org.drools.repository;
+import javax.jcr.LoginException;
+import javax.jcr.RepositoryException;
+
+import junit.framework.Assert;
+
import org.drools.repository.RulesRepository;
public class RepositorySession {
@@ -9,7 +14,15 @@
public static RulesRepository getRepository() {
Object repoInstance = repo.get();
if ( repoInstance == null ) {
- repoInstance = new RulesRepository( true );
+ RepositoryConfigurator config = new RepositoryConfigurator(true);
+
+ try {
+ repoInstance = new RulesRepository( config.login() );
+ } catch ( LoginException e ) {
+ Assert.fail( "Unable to login " + e.getMessage() );
+ } catch ( RepositoryException e ) {
+ Assert.fail("Repo exception when logging in: " + e.getMessage());
+ }
repo.set( repoInstance );
}
Modified: labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java
===================================================================
--- labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java 2006-09-07 09:39:41 UTC (rev 6101)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java 2006-09-07 11:26:55 UTC (rev 6102)
@@ -35,8 +35,9 @@
}
- public void xxtestRun() throws Exception {
- repo = new RulesRepository(false);
+ public void xxtestRun() throws Exception {
+ RepositoryConfigurator config = new RepositoryConfigurator(false);
+ repo = new RulesRepository(config.login());
long start = System.currentTimeMillis();
//setupData( repo );
@@ -59,10 +60,10 @@
}
- /** This tests it "bare" just setting properties on node types directly. */
- public void xxxtestBare() throws Exception {
- hackit();
- }
+// /** This tests it "bare" just setting properties on node types directly. */
+// public void xxxtestBare() throws Exception {
+// hackit();
+// }
private List listACat(RulesRepository repo) {
long start = System.currentTimeMillis();
@@ -138,43 +139,43 @@
}
- private void hackit() throws Exception {
-
-
- RulesRepository repo = new RulesRepository(true);
- Session session = repo.getSession();
-
-
- Node folderNode = session.getRootNode().getNode("drools:repository/drools:rule_area");
-
- for (int i=1 ; i <= 50; i++) {
-
- System.out.println("doing: Rule " + i);
-
- //create the node - see section 6.7.22.6 of the spec
- Node ruleNode = folderNode.addNode("Rule_" + i, RuleItem.RULE_NODE_TYPE_NAME );
-
- ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, "Rule_" + i);
-
- //TODO: set this property correctly once we've figured out logging in / JAAS
- ruleNode.setProperty(RuleItem.CONTRIBUTOR_PROPERTY_NAME, "not yet implemented");
-
- ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
- ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
- ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, "LHS_" + i);
- ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, "RHS_" + i);
- ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
-
-
- Calendar lastModified = Calendar.getInstance();
- ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
- if (i % 500 == 0) {
- System.out.println("saving......");
- session.save();
- System.out.println("finished.");
- }
- }
-
- }
+// private void hackit() throws Exception {
+//
+//
+// RulesRepository repo = new RulesRepository(true);
+// Session session = repo.getSession();
+//
+//
+// Node folderNode = session.getRootNode().getNode("drools:repository/drools:rule_area");
+//
+// for (int i=1 ; i <= 50; i++) {
+//
+// System.out.println("doing: Rule " + i);
+//
+// //create the node - see section 6.7.22.6 of the spec
+// Node ruleNode = folderNode.addNode("Rule_" + i, RuleItem.RULE_NODE_TYPE_NAME );
+//
+// ruleNode.setProperty(RuleItem.TITLE_PROPERTY_NAME, "Rule_" + i);
+//
+// //TODO: set this property correctly once we've figured out logging in / JAAS
+// ruleNode.setProperty(RuleItem.CONTRIBUTOR_PROPERTY_NAME, "not yet implemented");
+//
+// ruleNode.setProperty(RuleItem.DESCRIPTION_PROPERTY_NAME, "");
+// ruleNode.setProperty(RuleItem.FORMAT_PROPERTY_NAME, RuleItem.RULE_FORMAT);
+// ruleNode.setProperty(RuleItem.LHS_PROPERTY_NAME, "LHS_" + i);
+// ruleNode.setProperty(RuleItem.RHS_PROPERTY_NAME, "RHS_" + i);
+// ruleNode.setProperty( VersionableItem.CHECKIN_COMMENT, "Initial" );
+//
+//
+// Calendar lastModified = Calendar.getInstance();
+// ruleNode.setProperty(RuleItem.LAST_MODIFIED_PROPERTY_NAME, lastModified);
+// if (i % 500 == 0) {
+// System.out.println("saving......");
+// session.save();
+// System.out.println("finished.");
+// }
+// }
+//
+// }
}
More information about the jboss-svn-commits
mailing list