[jboss-svn-commits] JBL Code SVN: r15565 - in labs/jbossrules/trunk/drools-core/src/main: java/org/drools/base and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Oct 3 19:24:44 EDT 2007
Author: mark.proctor at jboss.com
Date: 2007-10-03 19:24:44 -0400 (Wed, 03 Oct 2007)
New Revision: 15565
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AsyncFireAllRulesRuleBaseUpdateListener.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FireAllRulesRuleBaseUpdateListener.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListener.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf
Log:
JBRULES-1241 Dynamic rules should be able to lock for a series of updates and fireAllRules should be optional
-the RuleBaseUpdateHandler is now configurable
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2007-10-03 23:24:34 UTC (rev 15564)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/RuleBaseConfiguration.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -29,6 +29,7 @@
import org.drools.concurrent.ExecutorService;
import org.drools.spi.ConflictResolver;
import org.drools.spi.ConsequenceExceptionHandler;
+import org.drools.spi.RuleBaseUpdateListener;
import org.drools.util.ChainedProperties;
/**
@@ -47,7 +48,8 @@
*/
/**
- * drools.shadowproxy = <true|false>
+ * drools.maintainTms = <true|false>
+ * drools.shadowproxy = <true|false> // sequentail=true always overrides setting this to false
* drools.shadowproxy.exclude = org.domainy.* org.domainx.ClassZ
* drools.sequential = <true|false>
* drools.sequential.agenda = <sequential|dynamic>
@@ -63,7 +65,8 @@
* drools.logicalOverride = <discard|preserve>
* drools.executorService = <qualified class name>
* drools.conflictResolver = <qualified class name>
- * drools.conflictExceptionHandler = <qualified class name>
+ * drools.consequenceExceptionHandler = <qualified class name>
+ * drools.ruleBaseUpdateHandler = <qualified class name>
*
*/
public class RuleBaseConfiguration
@@ -91,6 +94,7 @@
private LogicalOverride logicalOverride;
private ExecutorService executorService;
private ConsequenceExceptionHandler consequenceExceptionHandler;
+ private String ruleBaseUpdateHandler;
private ConflictResolver conflictResolver;
@@ -214,12 +218,16 @@
setConsequenceExceptionHandler( RuleBaseConfiguration.determineConsequenceExceptionHandler( this.chainedProperties.getProperty( "drools.consequenceExceptionHandler",
"org.drools.base.DefaultConsequenceExceptionHandler" ) ) );
+
+ setRuleBaseUpdateHandler( this.chainedProperties.getProperty( "drools.ruleBaseUpdateHandler",
+ "org.drools.base.FireAllRulesRuleBaseUpdateListener" ) );
setConflictResolver( RuleBaseConfiguration.determineConflictResolver( this.chainedProperties.getProperty( "drools.conflictResolver",
"org.drools.conflict.DepthConflictResolver" ) ) );
+ // sequential mode always overrides and sets this to false
setShadowProxy( determineShadowProxy( this.chainedProperties.getProperty( "drools.shadowproxy",
- null ) ) );
+ "true" ) ) );
setShadowProxyExcludes( this.chainedProperties.getProperty( "drools.shadowProxyExcludes",
"" ) );
@@ -378,7 +386,16 @@
checkCanChange(); // throws an exception if a change isn't possible;
this.consequenceExceptionHandler = consequenceExceptionHandler;
}
+
+ public String getRuleBaseUpdateHandler() {
+ return ruleBaseUpdateHandler;
+ }
+ public void setRuleBaseUpdateHandler(String ruleBaseUpdateHandler) {
+ checkCanChange(); // throws an exception if a change isn't possible;
+ this.ruleBaseUpdateHandler = ruleBaseUpdateHandler;
+ }
+
public AgendaGroupFactory getAgendaGroupFactory() {
if ( isSequential() ) {
if ( this.sequentialAgenda == SequentialAgenda.SEQUENTIAL ) {
@@ -401,14 +418,15 @@
}
private boolean determineShadowProxy(String userValue) {
+ if ( this.isSequential() ) {
+ // sequential never needs shadowing, so always override
+ return false;
+ }
+
if ( userValue != null ) {
return Boolean.valueOf( userValue ).booleanValue();
} else {
- if ( this.isSequential() ) {
- return false;
- } else {
- return true;
- }
+ return true;
}
}
@@ -533,7 +551,7 @@
private static ConsequenceExceptionHandler determineConsequenceExceptionHandler(String className) {
return (ConsequenceExceptionHandler) instantiateClass( "ConsequenceExceptionHandler",
className );
- }
+ }
private static Object instantiateClass(String type,
String className) {
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AsyncFireAllRulesRuleBaseUpdateListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AsyncFireAllRulesRuleBaseUpdateListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/AsyncFireAllRulesRuleBaseUpdateListener.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.drools.base;
+
+import org.drools.StatefulSession;
+import org.drools.event.BeforeRuleBaseUnlockedEvent;
+import org.drools.event.DefaultRuleBaseEventListener;
+import org.drools.spi.RuleBaseUpdateListener;
+
+public class AsyncFireAllRulesRuleBaseUpdateListener extends DefaultRuleBaseEventListener
+implements RuleBaseUpdateListener {
+ private StatefulSession session;
+
+ public AsyncFireAllRulesRuleBaseUpdateListener() {
+
+ }
+
+ public void setSession(StatefulSession session) {
+ this.session = session;
+ }
+
+ public void beforeRuleBaseUnlocked(BeforeRuleBaseUnlockedEvent event) {
+ if ( session.getRuleBase().getAdditionsSinceLock() > 0 ) {
+ session.asyncFireAllRules();
+ }
+ }
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FireAllRulesRuleBaseUpdateListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FireAllRulesRuleBaseUpdateListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/FireAllRulesRuleBaseUpdateListener.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -0,0 +1,28 @@
+/**
+ *
+ */
+package org.drools.base;
+
+import org.drools.StatefulSession;
+import org.drools.event.BeforeRuleBaseUnlockedEvent;
+import org.drools.event.DefaultRuleBaseEventListener;
+import org.drools.spi.RuleBaseUpdateListener;
+
+public class FireAllRulesRuleBaseUpdateListener extends DefaultRuleBaseEventListener
+implements RuleBaseUpdateListener {
+ private StatefulSession session;
+
+ public FireAllRulesRuleBaseUpdateListener() {
+
+ }
+
+ public void setSession(StatefulSession session) {
+ this.session = session;
+ }
+
+ public void beforeRuleBaseUnlocked(BeforeRuleBaseUnlockedEvent event) {
+ if ( session.getRuleBase().getAdditionsSinceLock() > 0 ) {
+ session.fireAllRules();
+ }
+ }
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2007-10-03 23:24:34 UTC (rev 15564)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/ReteooRuleBase.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -29,6 +29,7 @@
import org.drools.RuleBaseConfiguration;
import org.drools.StatefulSession;
import org.drools.StatelessSession;
+import org.drools.base.FireAllRulesRuleBaseUpdateListener;
import org.drools.common.AbstractRuleBase;
import org.drools.common.DefaultFactHandle;
import org.drools.common.InternalFactHandle;
@@ -36,15 +37,14 @@
import org.drools.concurrent.CommandExecutor;
import org.drools.concurrent.DefaultExecutorService;
import org.drools.concurrent.ExecutorService;
-import org.drools.event.BeforeRuleBaseUnlockedEvent;
-import org.drools.event.DefaultRuleBaseEventListener;
-import org.drools.event.RuleBaseEventListener;
import org.drools.rule.CompositePackageClassLoader;
import org.drools.rule.InvalidPatternException;
import org.drools.rule.Rule;
import org.drools.reteoo.ReteooWorkingMemory.WorkingMemoryReteAssertAction;
import org.drools.spi.FactHandleFactory;
import org.drools.spi.PropagationContext;
+import org.drools.spi.RuleBaseUpdateListener;
+import org.drools.spi.RuleBaseUpdateListenerFactory;
import org.drools.util.ObjectHashSet;
import sun.security.x509.IssuerAlternativeNameExtension;
@@ -68,6 +68,8 @@
private Rete rete;
private ReteooBuilder reteooBuilder;
+
+ private transient RuleBaseUpdateListenerFactory updateListenerFactory;
// ------------------------------------------------------------
// Constructors
@@ -250,56 +252,19 @@
null ) );
}
- // setup event listener for fireAllRules on rulebase modifications
- FireAllRulesBeforeUnlockEventListener listener = new DefaultFireAllRulesBeforeUnlockEventListener();
- listener.setSession( session );
- addEventListener( listener );
-
- return session;
- }
-
- public static interface FireAllRulesBeforeUnlockEventListener extends RuleBaseEventListener {
- public void setSession(StatefulSession session);
- }
-
- public static class DefaultFireAllRulesBeforeUnlockEventListener extends DefaultRuleBaseEventListener
- implements FireAllRulesBeforeUnlockEventListener {
- private StatefulSession session;
-
- public DefaultFireAllRulesBeforeUnlockEventListener() {
-
+ if ( this.updateListenerFactory == null ) {
+ this.updateListenerFactory = new RuleBaseUpdateListenerFactory();
}
-
- public void setSession(StatefulSession session) {
- this.session = session;
+
+ String listenerName = this.config.getRuleBaseUpdateHandler();
+ if ( listenerName != null && listenerName.length() > 0 ) {
+ RuleBaseUpdateListener listener = this.updateListenerFactory.createListener( listenerName, session );
+ addEventListener( listener );
}
- public void beforeRuleBaseUnlocked(BeforeRuleBaseUnlockedEvent event) {
- if ( session.getRuleBase().getAdditionsSinceLock() > 0 ) {
- session.fireAllRules();
- }
- }
+ return session;
}
- public static class AsyncFireAllRulesBeforeUnlockEventListener extends DefaultRuleBaseEventListener
- implements FireAllRulesBeforeUnlockEventListener {
- private StatefulSession session;
-
- public AsyncFireAllRulesBeforeUnlockEventListener() {
-
- }
-
- public void setSession(StatefulSession session) {
- this.session = session;
- }
-
- public void beforeRuleBaseUnlocked(BeforeRuleBaseUnlockedEvent event) {
- if ( session.getRuleBase().getAdditionsSinceLock() > 0 ) {
- session.asyncFireAllRules();
- }
- }
- }
-
public StatelessSession newStatelessSession() {
//orders the rules
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListener.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListener.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -0,0 +1,11 @@
+/**
+ *
+ */
+package org.drools.spi;
+
+import org.drools.StatefulSession;
+import org.drools.event.RuleBaseEventListener;
+
+public interface RuleBaseUpdateListener extends RuleBaseEventListener {
+ public void setSession(StatefulSession session);
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleBaseUpdateListenerFactory.java 2007-10-03 23:24:44 UTC (rev 15565)
@@ -0,0 +1,32 @@
+package org.drools.spi;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.drools.StatefulSession;
+
+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;
+ try {
+ listener = ( RuleBaseUpdateListener ) cls.newInstance();
+ listener.setSession( session );
+
+ return listener;
+ } catch ( Throwable e ) {
+ throw new RuntimeException("Unable to instantiate RuleBaseUpdateListener '" + className + "'", e );
+ }
+ }
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf 2007-10-03 23:24:34 UTC (rev 15564)
+++ labs/jbossrules/trunk/drools-core/src/main/resources/META-INF/drools.default.rulebase.conf 2007-10-03 23:24:44 UTC (rev 15565)
@@ -1,8 +1,12 @@
drools.maintainTms = true
+drools.shadowproxy = true
+drools.shadowproxy.exclude =
+drools.sequential = false
+drools.sequential.agenda = sequential
drools.removeIdentities = false
-drools.alphaMemory = false
drools.shareAlphaNodes = true
drools.shareBetaNodes = true
+drools.alphaMemory = false
drools.alphaNodeHashingThreshold = 3
drools.compositeKeyDepth = 3
drools.indexLeftBetaMemory = true
@@ -11,4 +15,5 @@
drools.logicalOverride = DISCARD
drools.executorService = org.drools.concurrent.DefaultExecutorService
drools.conflictResolver = org.drools.conflict.DepthConflictResolver
-drools.drools.consequenceExceptionHandler = org.drools.base.DefaultConsequenceExceptionHandler
\ No newline at end of file
+drools.consequenceExceptionHandler = org.drools.base.DefaultConsequenceExceptionHandler
+drools.ruleBaseUpdateHandler = org.drools.base.FireAllRulesRuleBaseUpdateListener
More information about the jboss-svn-commits
mailing list