[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