[jboss-svn-commits] JBL Code SVN: r6142 - 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
Mon Sep 11 11:43:33 EDT 2006


Author: michael.neale at jboss.com
Date: 2006-09-11 11:43:26 -0400 (Mon, 11 Sep 2006)
New Revision: 6142

Modified:
   labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java
   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:
refactoring

Modified: 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-11 15:37:51 UTC (rev 6141)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RepositoryConfigurator.java	2006-09-11 15:43:26 UTC (rev 6142)
@@ -1,5 +1,6 @@
 package org.drools.repository;
 
+import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.Iterator;
@@ -22,41 +23,33 @@
 import org.apache.jackrabbit.core.nodetype.compact.CompactNodeTypeDefReader;
 import org.apache.log4j.Logger;
 
-/** This contains code to initialise the repository for jackrabbit */
+/** 
+ * This contains code to initialise the repository for jackrabbit.
+ * This is mostly a collection of utilities. 
+ * Any jackrabbit specific code needs to go in here.
+ */
 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.
+    /** 
+     * @return a new Repository instance. 
+     * There should only be one instance of this in an application.
+     * Generally, one repository (which may be bineded to JNDI) can spawn multiple sessions
+     * for each user as needed.
+     * Typically this would be created on application startup.
      */
-    public RepositoryConfigurator(boolean clearRepository) {
+    public Repository createRepository() {
         try {
-
-            repository = new TransientRepository();
-            
-            if(clearRepository) {    
-                Session session = login();
-                this.clearRepository(session);
-                this.setupRepository(session); 
-            }
-            
-                       
+            return new TransientRepository();
+        } catch ( IOException e ) {
+            throw new RulesRepositoryException("Unable to create a Repository instance.", e);
         }
-        catch (Exception e) {
-            log.error("Caught Exception", e);
-        }         
     }
     
-    public RepositoryConfigurator() {
-        this(false);
-    }
-
-    /** Create a new user session */
-    public Session login() throws LoginException,
+    
+    /** Create a new user session for the given repository instance. */
+    public Session login(Repository repository) throws LoginException,
                         RepositoryException {
         Session session = repository.login(
                                    new SimpleCredentials("username", "password".toCharArray()));
@@ -71,7 +64,7 @@
     /**
      * Clears out the entire tree below the rules repository node of the JCR repository.
      */
-    public void clearRepository(Session session) {
+    public void clearRulesRepository(Session session) {
         try {
             
             if (session.getRootNode().hasNode( RulesRepository.RULES_REPOSITORY_NAME )) {
@@ -92,11 +85,12 @@
     
     /**
      * Attempts to setup the repository.  If the work that it tries to do has already been done, it 
-     * will return with modifying the repository.
+     * will return without modifying the repository.
+     * This will not erase any data.
      * 
      * @throws RulesRepositoryException     
      */
-    protected void setupRepository(Session session) throws RulesRepositoryException {
+    public void setupRulesRepository(Session session) throws RulesRepositoryException {
         System.out.println("Setting up the repository, registering node types etc.");
         try {
             Node root = session.getRootNode();

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-11 15:37:51 UTC (rev 6141)
+++ labs/jbossrules/trunk/drools-repository/src/main/java/org/drools/repository/RulesRepository.java	2006-09-11 15:43:26 UTC (rev 6142)
@@ -54,6 +54,7 @@
  * @author Ben Truitt
  */
 public class RulesRepository {
+
     public static final String DROOLS_URI = "http://www.jboss.org/drools-repository/1.0";
 
     private static final Logger log = Logger.getLogger(RulesRepository.class);
@@ -678,7 +679,7 @@
     public StateItem getState(String name) throws RulesRepositoryException {
         try {
             Node folderNode = this.getAreaNode(STATE_AREA);
-            Node stateNode = this.addNodeIfNew(folderNode, name, StateItem.STATE_NODE_TYPE_NAME);
+            Node stateNode = RulesRepository.addNodeIfNew(folderNode, name, StateItem.STATE_NODE_TYPE_NAME);
             return new StateItem(this, stateNode);
         }
         catch(Exception e) {
@@ -699,6 +700,9 @@
      * @throws RulesRepositoryException 
      */
     public CategoryItem getOrCreateCategory(String tagName) throws RulesRepositoryException {
+        if (tagName == null || "".equals( tagName )) {
+            throw new RuntimeException("Empty category name not permitted.");
+        }
         log.debug("getting tag with name: " + tagName);
         
         try {
@@ -709,7 +713,7 @@
             while(tok.hasMoreTokens()) {                                
                 String currentTagName = tok.nextToken();
                 
-                tagNode = this.addNodeIfNew(folderNode, currentTagName, CategoryItem.TAG_NODE_TYPE_NAME);
+                tagNode = RulesRepository.addNodeIfNew(folderNode, currentTagName, CategoryItem.TAG_NODE_TYPE_NAME);
                 folderNode = tagNode;
             }             
                                     

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-11 15:37:51 UTC (rev 6141)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/RepositorySession.java	2006-09-11 15:43:26 UTC (rev 6142)
@@ -1,12 +1,12 @@
 package org.drools.repository;
 
 import javax.jcr.LoginException;
+import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 
 import junit.framework.Assert;
 
-import org.drools.repository.RulesRepository;
-
 public class RepositorySession {
 
     private static ThreadLocal repo = new ThreadLocal();
@@ -14,17 +14,29 @@
     public static RulesRepository getRepository() {
         Object repoInstance = repo.get();
         if ( repoInstance == null ) {
-            RepositoryConfigurator config = new RepositoryConfigurator(true);
+            RepositoryConfigurator config = new RepositoryConfigurator();
             
+            //create a repo instance (startup)
+            Repository repository = config.createRepository();
+            
+            //create a session
+            Session session;
             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());
+                session = config.login( repository );
+                //clear out and setup
+                config.clearRulesRepository( session );
+                config.setupRulesRepository( session );
+                
+                
+                repoInstance = new RulesRepository( session );
+                
+                repo.set( repoInstance );                
+            } catch ( Exception e) {
+                Assert.fail("Unable to initialise repository :" + e.getMessage());
             }
-            repo.set( repoInstance );
             
+
+            
         }
         return (RulesRepository) 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-11 15:37:51 UTC (rev 6141)
+++ labs/jbossrules/trunk/drools-repository/src/test/java/org/drools/repository/ScalabilityTest.java	2006-09-11 15:43:26 UTC (rev 6142)
@@ -36,9 +36,10 @@
     }
     
     public void xxtestRun() throws Exception {
-        RepositoryConfigurator config = new RepositoryConfigurator(false);
-        repo = new RulesRepository(config.login());   
+        RepositoryConfigurator config = new RepositoryConfigurator();
         
+        repo = new RulesRepository(config.login(config.createRepository()));   
+        
         long start = System.currentTimeMillis();
         //setupData( repo );
         System.out.println("time to add, version and tag 5000: " + (System.currentTimeMillis() - start));




More information about the jboss-svn-commits mailing list