[jboss-svn-commits] JBL Code SVN: r23501 - in labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base: mvel and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Oct 17 17:51:44 EDT 2008
Author: tirelli
Date: 2008-10-17 17:51:44 -0400 (Fri, 17 Oct 2008)
New Revision: 23501
Added:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EnabledBoolean.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEnabledExpression.java
Modified:
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java
Log:
JBRULES-1805: fixing multithread bug
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EnabledBoolean.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EnabledBoolean.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/EnabledBoolean.java 2008-10-17 21:51:44 UTC (rev 23501)
@@ -0,0 +1,52 @@
+package org.drools.base;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+
+import org.drools.WorkingMemory;
+import org.drools.spi.Enabled;
+import org.drools.spi.Tuple;
+
+public class EnabledBoolean
+ implements
+ Enabled,
+ Externalizable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 400L;
+
+ public static final Enabled ENABLED_TRUE = new EnabledBoolean( true );
+ public static final Enabled ENABLED_FALSE = new EnabledBoolean( false );
+
+ private boolean value;
+
+ public EnabledBoolean() {
+ }
+
+ public EnabledBoolean(boolean value) {
+ this.value = value;
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ value = in.readBoolean();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeBoolean( value );
+ }
+
+ public boolean getValue(final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ return this.value;
+ }
+
+ public String toString() {
+ return String.valueOf( this.value );
+ }
+
+}
Added: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEnabledExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEnabledExpression.java (rev 0)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELEnabledExpression.java 2008-10-17 21:51:44 UTC (rev 23501)
@@ -0,0 +1,76 @@
+package org.drools.base.mvel;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
+
+import org.drools.WorkingMemory;
+import org.drools.rule.MVELDialectRuntimeData;
+import org.drools.rule.Package;
+import org.drools.spi.Enabled;
+import org.drools.spi.Tuple;
+import org.mvel.MVEL;
+
+public class MVELEnabledExpression
+ implements
+ Enabled,
+ MVELCompileable,
+ Externalizable {
+
+ private static final long serialVersionUID = 400L;
+
+ private MVELCompilationUnit unit;
+ private String id;
+
+ private Serializable expr;
+ private DroolsMVELFactory prototype;
+
+ public MVELEnabledExpression() {
+ }
+
+ public MVELEnabledExpression(final MVELCompilationUnit unit,
+ final String id) {
+ this.unit = unit;
+ this.id = id;
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ unit = (MVELCompilationUnit) in.readObject();
+ id = in.readUTF();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( unit );
+ out.writeUTF( id );
+ }
+
+ public void compile(ClassLoader classLoader) {
+ expr = unit.getCompiledExpression( classLoader );
+ prototype = unit.getFactory();
+ }
+
+ public boolean getValue(final Tuple tuple,
+ final WorkingMemory workingMemory) {
+ // it must be cloned for multi-thread safety
+ DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
+ factory.setContext( tuple,
+ null,
+ null,
+ workingMemory,
+ null );
+
+ // do we have any functions for this namespace?
+ Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" );
+ if ( pkg != null ) {
+ MVELDialectRuntimeData data = (MVELDialectRuntimeData) pkg.getDialectRuntimeRegistry().getDialectData( this.id );
+ factory.setNextFactory( data.getFunctionFactory() );
+ }
+
+ return ((Boolean) MVEL.executeExpression( this.expr,
+ factory )).booleanValue();
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java 2008-10-17 19:12:30 UTC (rev 23500)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELSalienceExpression.java 2008-10-17 21:51:44 UTC (rev 23501)
@@ -1,10 +1,10 @@
package org.drools.base.mvel;
-import java.io.Serializable;
import java.io.Externalizable;
import java.io.IOException;
+import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.io.ObjectInput;
+import java.io.Serializable;
import org.drools.WorkingMemory;
import org.drools.rule.MVELDialectRuntimeData;
@@ -25,8 +25,7 @@
private String id;
private Serializable expr;
- // @FIXME this factory is not threadsave for rulebases
- private DroolsMVELFactory factory;
+ private DroolsMVELFactory prototype;
public MVELSalienceExpression() {
}
@@ -50,16 +49,17 @@
public void compile(ClassLoader classLoader) {
expr = unit.getCompiledExpression( classLoader );
- factory = unit.getFactory();
+ prototype = unit.getFactory();
}
public int getValue(final Tuple tuple,
final WorkingMemory workingMemory) {
- this.factory.setContext( tuple,
- null,
- null,
- workingMemory,
- null );
+ DroolsMVELFactory factory = (DroolsMVELFactory) this.prototype.clone();
+ factory.setContext( tuple,
+ null,
+ null,
+ workingMemory,
+ null );
// do we have any functions for this namespace?
Package pkg = workingMemory.getRuleBase().getPackage( "MAIN" );
@@ -69,7 +69,7 @@
}
return ((Number) MVEL.executeExpression( this.expr,
- this.factory )).intValue();
+ factory )).intValue();
}
}
More information about the jboss-svn-commits
mailing list