[jboss-svn-commits] JBL Code SVN: r15896 - in labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools: reteoo and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 17 14:26:24 EDT 2007


Author: mark.proctor at jboss.com
Date: 2007-10-17 14:26:24 -0400 (Wed, 17 Oct 2007)
New Revision: 15896

Added:
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/ExecutorServiceFactory.java
Modified:
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java
   labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ClassUtils.java
Log:
JBRULES-1281 ExecutorService cannot be shared
-Added cached reflection class resolve and object instantiator to ClassUtil.
-Made RuleBaseUpdateListenerFactory and ExecutorServiceFactory use ClassUtil.
-Now each new stateful or stateless session get's its own instance of ExecutorService."

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -91,7 +91,7 @@
     private boolean                     indexRightBetaMemory;
     private AssertBehaviour             assertBehaviour;
     private LogicalOverride             logicalOverride;
-    private ExecutorService             executorService;
+    private String                      executorService;
     private ConsequenceExceptionHandler consequenceExceptionHandler;
     private String                      ruleBaseUpdateHandler;
 
@@ -212,8 +212,8 @@
         setLogicalOverride( LogicalOverride.determineLogicalOverride( this.chainedProperties.getProperty( "drools.logicalOverride",
                                                                                                           "discard" ) ) );
 
-        setExecutorService( RuleBaseConfiguration.determineExecutorService( this.chainedProperties.getProperty( "drools.executorService",
-                                                                                                                "org.drools.concurrent.DefaultExecutorService" ) ) );
+        setExecutorService( this.chainedProperties.getProperty( "drools.executorService",
+                                                                "org.drools.concurrent.DefaultExecutorService" ) );
 
         setConsequenceExceptionHandler( RuleBaseConfiguration.determineConsequenceExceptionHandler( this.chainedProperties.getProperty( "drools.consequenceExceptionHandler",
                                                                                                                                         "org.drools.base.DefaultConsequenceExceptionHandler" ) ) );
@@ -368,11 +368,11 @@
         this.logicalOverride = logicalOverride;
     }
 
-    public ExecutorService getExecutorService() {
+    public String getExecutorService() {
         return executorService;
     }
 
-    public void setExecutorService(ExecutorService executorService) {
+    public void setExecutorService(String executorService) {
         checkCanChange(); // throws an exception if a change isn't possible;    	
         this.executorService = executorService;
     }
@@ -542,11 +542,6 @@
         }
     }
 
-    private static ExecutorService determineExecutorService(String className) {
-        return (ExecutorService) instantiateClass( "ExecutorService",
-                                                   className );
-    }
-
     private static ConsequenceExceptionHandler determineConsequenceExceptionHandler(String className) {
         return (ConsequenceExceptionHandler) instantiateClass( "ConsequenceExceptionHandler",
                                                                className );

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -38,6 +38,7 @@
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.rule.InvalidPatternException;
 import org.drools.rule.Rule;
+import org.drools.spi.ExecutorServiceFactory;
 import org.drools.spi.FactHandleFactory;
 import org.drools.spi.PropagationContext;
 
@@ -222,7 +223,7 @@
         ReteooStatefulSession session = null;
 
         synchronized ( this.pkgs ) {
-            ExecutorService executor = this.config.getExecutorService();
+            ExecutorService executor = ExecutorServiceFactory.createExecutorService(  this.config.getExecutorService() );;
             session = new ReteooStatefulSession( nextWorkingMemoryCounter(),
                                                  this,
                                                  executor );

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatefulSession.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -26,7 +26,6 @@
     private ExecutorService executor;
     
     private transient List                          ruleBaseListeners;
-    private transient RuleBaseUpdateListenerFactory updateListenerFactory;
 
     public ReteooStatefulSession(final int id,
                                  final InternalRuleBase ruleBase,
@@ -85,11 +84,8 @@
         if ( this.ruleBaseListeners == null || this.ruleBaseListeners == Collections.EMPTY_LIST ) {
             String listenerName = this.ruleBase.getConfiguration().getRuleBaseUpdateHandler();
             if ( listenerName != null && listenerName.length() > 0 ) {
-                if ( this.updateListenerFactory == null ) {
-                    this.updateListenerFactory = new RuleBaseUpdateListenerFactory();
-                }
-                RuleBaseUpdateListener listener = this.updateListenerFactory.createListener( listenerName,
-                                                                                             this );
+                RuleBaseUpdateListener listener = RuleBaseUpdateListenerFactory.createListener( listenerName,
+                                                                                                this );
                 this.ruleBaseListeners = Collections.singletonList( listener );
             } else {
                 this.ruleBaseListeners = Collections.EMPTY_LIST;

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ReteooStatelessSession.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -24,6 +24,7 @@
 import org.drools.reteoo.ReteooRuleBase.InitialFactHandleDummyObject;
 import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
 import org.drools.spi.AgendaFilter;
+import org.drools.spi.ExecutorServiceFactory;
 import org.drools.spi.GlobalExporter;
 import org.drools.spi.GlobalResolver;
 
@@ -165,7 +166,7 @@
         InternalWorkingMemory wm = newWorkingMemory();
 
         final AssertObject assertObject = new AssertObject( object );
-        ExecutorService executor = this.ruleBase.getConfiguration().getExecutorService();
+        ExecutorService executor = ExecutorServiceFactory.createExecutorService(  this.ruleBase.getConfiguration().getExecutorService() );
         executor.setCommandExecutor( new CommandExecutor( wm ) );
         executor.submit( assertObject );
         executor.submit( new FireAllRules( this.agendaFilter ) );
@@ -175,7 +176,7 @@
         InternalWorkingMemory wm = newWorkingMemory();
 
         final AssertObjects assertObjects = new AssertObjects( array );
-        ExecutorService executor = this.ruleBase.getConfiguration().getExecutorService();
+        ExecutorService executor = ExecutorServiceFactory.createExecutorService(  this.ruleBase.getConfiguration().getExecutorService() );
         executor.setCommandExecutor( new CommandExecutor( wm ) );
         executor.submit( assertObjects );
         executor.submit( new FireAllRules( this.agendaFilter ) );
@@ -185,7 +186,7 @@
         InternalWorkingMemory wm = newWorkingMemory();
 
         final AssertObjects assertObjects = new AssertObjects( collection );
-        ExecutorService executor = this.ruleBase.getConfiguration().getExecutorService();
+        ExecutorService executor = ExecutorServiceFactory.createExecutorService(  this.ruleBase.getConfiguration().getExecutorService() );
         executor.setCommandExecutor( new CommandExecutor( wm ) );
         executor.submit( assertObjects );
         executor.submit( new FireAllRules( this.agendaFilter ) );

Copied: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/ExecutorServiceFactory.java (from rev 15887, labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/ExecutorServiceFactory.java)
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/ExecutorServiceFactory.java	                        (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/ExecutorServiceFactory.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -0,0 +1,23 @@
+package org.drools.spi;
+
+import org.drools.util.ClassUtils;
+import org.drools.concurrent.ExecutorService;
+
+/** 
+ * Factory class that will return a ExecutorService based on the provided string className
+ *
+ */
+public class ExecutorServiceFactory {
+    
+    public static ExecutorService createExecutorService(String className) {        
+
+        try {
+            ExecutorService service = ( ExecutorService ) ClassUtils.instantiateObject( className );
+            
+            return service;            
+        } catch ( Throwable e ) {
+            throw new RuntimeException("Unable to instantiate ExecutorService '" + className + "'", e );
+        }        
+    }
+
+}

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -4,24 +4,17 @@
 import java.util.Map;
 
 import org.drools.StatefulSession;
+import org.drools.util.ClassUtils;
 
+/** 
+ * Factory class that will return a RuleBaseUpdateListener based on the provided string className
+ *
+ */
 public class RuleBaseUpdateListenerFactory {
-    private Map classes = new HashMap();
     
-    public RuleBaseUpdateListener createListener(String className, StatefulSession session) {       
-        Class cls = (Class) classes.get( className );
-        if ( cls == null ) {
-            try {
-                cls = Class.forName( className );
-                this.classes.put(  className, cls );
-            } catch ( Throwable e ) {
-                throw new RuntimeException("Unable to load RuleBaseUpdateListener '" + className + "'", e );
-            }            
-        }
-        
-        RuleBaseUpdateListener listener;
+    public static RuleBaseUpdateListener createListener(String className, StatefulSession session) {        
         try {
-            listener = ( RuleBaseUpdateListener ) cls.newInstance();
+            RuleBaseUpdateListener listener = ( RuleBaseUpdateListener ) ClassUtils.instantiateObject( className );
             listener.setSession( session );
             
             return listener;            
@@ -29,4 +22,5 @@
             throw new RuntimeException("Unable to instantiate RuleBaseUpdateListener '" + className + "'", e );
         }        
     }
+
 }

Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ClassUtils.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ClassUtils.java	2007-10-17 16:49:00 UTC (rev 15895)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/util/ClassUtils.java	2007-10-17 18:26:24 UTC (rev 15896)
@@ -1,9 +1,13 @@
 package org.drools.util;
 
 import java.io.File;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 public final class ClassUtils {
-
+    private static Map classes = Collections.synchronizedMap( new HashMap() );
+    
     /**
      * Please do not use - internal
      * org/my/Class.xxx -> org.my.Class
@@ -75,5 +79,32 @@
         
         return name.toString();
     }
+    
+    
+    /**
+     * This method will attempt to create an instance of the specified Class. It uses
+     * a syncrhonized HashMap to cache the reflection Class lookup.
+     * @param className
+     * @return
+     */
+    public static Object instantiateObject(String className) {
+        Class cls = (Class) ClassUtils.classes.get( className );
+        if ( cls == null ) {
+            try {
+                cls = Class.forName( className );
+                ClassUtils.classes.put(  className, cls );
+            } catch ( Throwable e ) {
+                throw new RuntimeException("Unable to load class '" + className + "'", e );
+            }            
+        }
+        
+        Object object = null;
+        try {
+            object = cls.newInstance();            
+        } catch ( Throwable e ) {
+            throw new RuntimeException("Unable to instantiate object for class '" + className + "'", e );
+        }  
+        return object;
+    }    
 
 }




More information about the jboss-svn-commits mailing list