[jboss-svn-commits] JBL Code SVN: r22779 - in labs/jbossrules/trunk: drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java and 11 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Sep 15 12:14:18 EDT 2008
Author: tirelli
Date: 2008-09-15 12:14:18 -0400 (Mon, 15 Sep 2008)
New Revision: 22779
Modified:
labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/reteoo/MockRightTupleSink.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AverageAccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/CountAccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MaxAccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MinAccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleSink.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java
labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleComponent.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockRightTupleSink.java
Log:
Fixing accumulate marshalling
Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaDialect.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -379,14 +379,6 @@
dumpDir );
}
-// for ( String clazz : classes ) {
-// System.out.println( "---" + clazz + "----" );
-// for ( byte b : src.getBytes( clazz ) ) {
-// System.out.print( (char) b );
-// }
-// System.out.println( "--- END: " + clazz + "----" );
-// }
-
final CompilationResult result = this.compiler.compile( classes,
this.src,
this.packageStoreWrapper,
@@ -396,11 +388,7 @@
if ( result.getErrors().length > 0 ) {
for ( int i = 0; i < result.getErrors().length; i++ ) {
final CompilationProblem err = result.getErrors()[i];
-
- // System.out.println("Line: "+err.getStartLine());
- // LineMappings maps = this.pkg.getPackageCompilationData().getLineMappings( err.getFileName().replace( '/', '.' ).substring( 0, err.getFileName().length() - 5 ) );
- // int line = err.getStartLine() + maps.getStartLine() - maps.getOffset() -1;
- // System.out.println("Map: "+line);
+ System.out.println(err);
final ErrorHandler handler = (ErrorHandler) this.errorHandlers.get( err.getFileName() );
if ( handler instanceof RuleErrorHandler ) {
final RuleErrorHandler rh = (RuleErrorHandler) handler;
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaInvokers.mvel 2008-09-15 16:14:18 UTC (rev 22779)
@@ -189,7 +189,7 @@
{
private static final long serialVersionUID = 400L;
- public Object createContext() {
+ public java.io.Serializable createContext() {
return new @{ruleClassName}.@{className}();
}
Modified: labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-compiler/src/main/resources/org/drools/rule/builder/dialect/java/javaRule.mvel 2008-09-15 16:14:18 UTC (rev 22779)
@@ -27,7 +27,7 @@
private static final long serialVersionUID = 400L;
@if{supportsReverse == "true"}
- private java.util.Map reverseMap = new java.util.HashMap<org.drools.common.InternalFactHandle, ReverseSnapshot>();
+ private java.util.Map reverseMap = new java.util.HashMap<Integer, ReverseSnapshot>();
@end{}
@foreach{type : attributesTypes, attr : attributes} private @{type} @{attr};
@@ -51,7 +51,7 @@
@foreach{declr : innerDeclarations}@{declr.extractor.extractToClassName} @{declr.identifier}@end{","}
) throws Exception {
@if{supportsReverse == "true"}
- this.reverseMap.put( handle,
+ this.reverseMap.put( Integer.valueOf( handle.getId() ),
new ReverseSnapshot(
@foreach{declr : declarations}@{declr.identifier}@end{","}@if{innerDeclarations != empty && declarations != empty}, at end{}
@foreach{declr : innerDeclarations}@{declr.identifier}@end{","}
@@ -66,7 +66,7 @@
@foreach{type : globalTypes, identifier : globals} @{type} @{identifier} @end{","}
) throws Exception {
@if{supportsReverse == "true"}
- ReverseSnapshot snapshot = (ReverseSnapshot) this.reverseMap.remove( handle );
+ ReverseSnapshot snapshot = (ReverseSnapshot) this.reverseMap.remove( Integer.valueOf( handle.getId() ) );
@foreach{type : declarationTypes, declr : declarations}@{type} @{declr.identifier} = snapshot.@{declr.identifier};@end{}
@foreach{declr : innerDeclarations}@{declr.extractor.extractToClassName} @{declr.identifier} = snapshot.@{declr.identifier};@end{}
@end{}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -39,7 +39,6 @@
import org.drools.marshalling.DefaultMarshaller;
import org.drools.marshalling.Marshaller;
import org.drools.marshalling.RuleBaseNodes;
-import org.drools.process.instance.ProcessInstance;
import org.drools.reteoo.ObjectTypeNode;
import org.drools.reteoo.RuleTerminalNode;
import org.drools.rule.MapBackedClassLoader;
@@ -137,10 +136,11 @@
ruleBase = (RuleBase) map.get( "x" );
ruleBase.addPackage( pkg );
-
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
ruleBase = SerializationHelper.serializeObject( ruleBase );
-
+
session.setGlobal( "list",
new ArrayList() );
@@ -210,12 +210,13 @@
StatefulSession session = ruleBase.newStatefulSession();
// serialise the working memory before population
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
ruleBase.addPackage( pkg );
session.setGlobal( "list",
- new ArrayList() );
+ new ArrayList() );
final Person bob = new Person( "bob" );
session.insert( bob );
@@ -276,7 +277,7 @@
ruleBase.addPackage( pkg );
session.setGlobal( "list",
- new ArrayList() );
+ new ArrayList() );
final Person bob = new Person( "bob" );
session.insert( bob );
@@ -289,7 +290,8 @@
ruleBase = (RuleBase) map.get( "x" );
// now try serialising with a fully populated wm from a serialised rulebase
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
final Rule[] rules = ruleBase.getPackages()[0].getRules();
@@ -313,7 +315,8 @@
assertEquals( 2,
session.getAgenda().agendaSize() );
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
session.fireAllRules();
final List list = (List) session.getGlobal( "list" );
@@ -357,7 +360,8 @@
list.get( 0 ) );
// now recreate the rulebase, deserialize the session and test it
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
list = (List) session.getGlobal( "list" );
assertNotNull( list );
@@ -415,7 +419,7 @@
StatefulSession session = ruleBase.newStatefulSession();
session.setGlobal( "list",
- new ArrayList() );
+ new ArrayList() );
final Primitives p = new Primitives();
p.setBytePrimitive( (byte) 1 );
@@ -423,7 +427,8 @@
p.setIntPrimitive( (int) 3 );
session.insert( p );
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
assertEquals( 1,
IteratorToList.convert( session.iterateObjects() ).size() );
@@ -433,7 +438,8 @@
assertEquals( 3,
session.getAgenda().agendaSize() );
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
session.fireAllRules();
final List list = (List) session.getGlobal( "list" );
@@ -488,14 +494,17 @@
// serialize session and rulebase out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
GlobalResolver resolver = session.getGlobalResolver();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now deserialize the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
session.setGlobalResolver( resolver );
// dynamically add a new package
@@ -524,7 +533,8 @@
serializedRulebase = null;
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
// dispose session
@@ -562,8 +572,10 @@
GlobalResolver resolver = session.getGlobalResolver();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ Marshaller marshaller = new DefaultMarshaller();
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -575,7 +587,8 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -604,7 +617,8 @@
serializedRulebase = null;
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -634,8 +648,10 @@
GlobalResolver resolver = session.getGlobalResolver();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ Marshaller marshaller = new DefaultMarshaller();
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -647,7 +663,8 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -681,14 +698,17 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
- ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -728,13 +748,16 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -766,12 +789,13 @@
serializedRulebase = null;
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
}
-
+
/*
* I have tried both the scenarios
* 1. Remove a rule from a pkg.
@@ -784,7 +808,7 @@
public void testSerializeAddRemove_NoClassDefFoundError() throws Exception {
//Create a rulebase, a session, and test it
- RuleBase ruleBase = RuleBaseFactory.newRuleBase( );
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_0.drl" ) ) );
Package pkg = SerializationHelper.serializeObject( builder.getPackage() );
@@ -803,7 +827,9 @@
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -815,9 +841,11 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
results.clear();
- session.setGlobal( "results", results );
+ session.setGlobal( "results",
+ results );
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3_0.drl" ) ) );
@@ -825,10 +853,14 @@
ruleBase.addPackage( pkg );
- InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton", 20 ) );
- InternalFactHandle brie2 = (InternalFactHandle) session.insert( new Cheese( "brie", 20 ) );
- InternalFactHandle bob1 = (InternalFactHandle) session.insert( new Person( "bob", 20 ) );
- InternalFactHandle bob2 = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
+ InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 20 ) );
+ InternalFactHandle brie2 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 20 ) );
+ InternalFactHandle bob1 = (InternalFactHandle) session.insert( new Person( "bob",
+ 20 ) );
+ InternalFactHandle bob2 = (InternalFactHandle) session.insert( new Person( "bob",
+ 30 ) );
session.fireAllRules();
assertEquals( 3,
@@ -844,24 +876,33 @@
baos = new ByteArrayOutputStream();
marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos, marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
results.clear();
- session.setGlobal( "results", results );
+ session.setGlobal( "results",
+ results );
// CASE 1: remove rule
- ruleBase.removeRule("org.drools.test", "like stilton");
+ ruleBase.removeRule( "org.drools.test",
+ "like stilton" );
- InternalFactHandle stilton3 = (InternalFactHandle) session.insert( new Cheese( "stilton", 20 ) );
- InternalFactHandle brie3 = (InternalFactHandle) session.insert( new Cheese( "brie", 20 ) );
- InternalFactHandle bob3 = (InternalFactHandle) session.insert( new Person( "bob", 20 ) );
- InternalFactHandle bob4 = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
+ InternalFactHandle stilton3 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 20 ) );
+ InternalFactHandle brie3 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 20 ) );
+ InternalFactHandle bob3 = (InternalFactHandle) session.insert( new Person( "bob",
+ 20 ) );
+ InternalFactHandle bob4 = (InternalFactHandle) session.insert( new Person( "bob",
+ 30 ) );
session.fireAllRules();
assertEquals( 2,
@@ -871,20 +912,25 @@
assertEquals( bob3.getObject(),
results.get( 1 ) );
-
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller );
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller );
results.clear();
- session.setGlobal( "results", results );
+ session.setGlobal( "results",
+ results );
// CASE 2: remove pkg
- ruleBase.removePackage("org.drools.test");
+ ruleBase.removePackage( "org.drools.test" );
- InternalFactHandle stilton4 = (InternalFactHandle) session.insert( new Cheese( "stilton", 20 ) );
- InternalFactHandle brie4 = (InternalFactHandle) session.insert( new Cheese( "brie", 20 ) );
- InternalFactHandle bob5 = (InternalFactHandle) session.insert( new Person( "bob", 20 ) );
- InternalFactHandle bob6 = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
+ InternalFactHandle stilton4 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 20 ) );
+ InternalFactHandle brie4 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 20 ) );
+ InternalFactHandle bob5 = (InternalFactHandle) session.insert( new Person( "bob",
+ 20 ) );
+ InternalFactHandle bob6 = (InternalFactHandle) session.insert( new Person( "bob",
+ 30 ) );
session.fireAllRules();
assertEquals( 2,
@@ -898,39 +944,48 @@
serializedRulebase = null;
baos = new ByteArrayOutputStream();
marshaller = new DefaultMarshaller();
- ruleBase.writeStatefulSession( session, baos,marshaller );
+ ruleBase.writeStatefulSession( session,
+ baos,
+ marshaller );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// Deserialize the rulebase and the session
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
- session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ), marshaller ); // throws java.lang.ClassNotFoundException Exception
+ session = ruleBase.readStatefulSession( new ByteArrayInputStream( baos.toByteArray() ),
+ marshaller ); // throws java.lang.ClassNotFoundException Exception
results.clear();
- session.setGlobal( "results", results );
-
- InternalFactHandle stilton5 = (InternalFactHandle) session.insert( new Cheese( "stilton", 30 ) );
- InternalFactHandle brie5 = (InternalFactHandle) session.insert( new Cheese( "brie", 30 ) );
- InternalFactHandle bob7 = (InternalFactHandle) session.insert( new Person( "bob", 30 ) );
- InternalFactHandle bob8 = (InternalFactHandle) session.insert( new Person( "bob", 40 ) );
+ session.setGlobal( "results",
+ results );
+
+ InternalFactHandle stilton5 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 30 ) );
+ InternalFactHandle brie5 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 30 ) );
+ InternalFactHandle bob7 = (InternalFactHandle) session.insert( new Person( "bob",
+ 30 ) );
+ InternalFactHandle bob8 = (InternalFactHandle) session.insert( new Person( "bob",
+ 40 ) );
session.fireAllRules();
-
+
assertEquals( 2,
results.size() );
assertEquals( bob8.getObject(),
results.get( 0 ) );
assertEquals( bob7.getObject(),
results.get( 1 ) );
-
+
serializedSession = null;
serializedRulebase = null;
-
- session = SerializationHelper.getSerialisedStatefulSession( session, ruleBase );
+
+ session = SerializationHelper.getSerialisedStatefulSession( session,
+ ruleBase );
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
-
- session.dispose();
-
- }
+ session.dispose();
+
+ }
+
/**
* In this case we are dealing with facts which are not on the systems classpath.
*
@@ -1369,7 +1424,7 @@
rule1 += " not Cheese( price >= 5 )\n";
rule1 += "then\n";
rule1 += " list.add( new Integer( 5 ) );\n";
- rule1 += "end\n";
+ rule1 += "end\n";
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new StringReader( header + rule1 ) );
@@ -1438,22 +1493,22 @@
session.fireAllRules();
assertEquals( 4,
list.size() );
-
+
// now remove a person, should be no change
session.retract( session.getFactHandle( bobba ) );
session = getSerialisedStatefulSession( session );
session.fireAllRules();
assertEquals( 4,
- list.size() );
-
+ list.size() );
+
//removal remaining cheese, should increase by one, as one person left
session.retract( session.getFactHandle( brie ) );
session = getSerialisedStatefulSession( session );
session.fireAllRules();
assertEquals( 5,
- list.size() );
+ list.size() );
}
-
+
public void testExists() throws Exception {
String header = "package org.drools.test;\n";
header += "import java.util.List;\n";
@@ -1468,7 +1523,7 @@
rule1 += " exists Cheese( price >= 5 )\n";
rule1 += "then\n";
rule1 += " list.add( new Integer( 5 ) );\n";
- rule1 += "end\n";
+ rule1 += "end\n";
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new StringReader( header + rule1 ) );
@@ -1537,28 +1592,28 @@
session.fireAllRules();
assertEquals( 4,
list.size() );
-
+
// now remove a person, should be no change
session.retract( session.getFactHandle( bobba ) );
session = getSerialisedStatefulSession( session );
session.fireAllRules();
assertEquals( 4,
- list.size() );
-
+ list.size() );
+
//removal remaining cheese, no
session.retract( session.getFactHandle( brie ) );
session = getSerialisedStatefulSession( session );
session.fireAllRules();
assertEquals( 4,
- list.size() );
-
+ list.size() );
+
// put one cheese back in, with one person should increase by one
session = getSerialisedStatefulSession( session );
session.insert( stilton );
session.fireAllRules();
assertEquals( 5,
- list.size() );
- }
+ list.size() );
+ }
public void testTruthMaintenance() throws Exception {
String header = "package org.drools.test;\n";
@@ -1907,68 +1962,67 @@
assertEquals( "rule1",
list.get( 2 ) );
}
-
- public void testAccumulate() throws Exception {
- PackageBuilder builder = new PackageBuilder();
- Reader source = new StringReader(
- "package org.drools\n" +
- "\n" +
- "import org.drools.Message\n" +
- "\n" +
- "rule MyRule\n" +
- " when\n" +
- " Number( intValue >= 5 ) from accumulate ( m: Message( ), count( m ) )\n" +
- " then\n" +
- " System.out.println(\"Found messages\");\n" +
- "end");
- builder.addPackageFromDrl(source);
- Package pkg = builder.getPackage();
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
-
- session.insert(new Message());
- session = getSerialisedStatefulSession( session );
- session.insert(new Message());
- session.insert(new Message());
- session.insert(new Message());
- session.insert(new Message());
-
- assertEquals(1, session.getAgenda().getActivations().length);
- }
- public void testAccumulate2() throws Exception {
- PackageBuilder builder = new PackageBuilder();
- Reader source = new StringReader(
- "package org.drools\n" +
- "\n" +
- "import org.drools.Message\n" +
- "\n" +
- "rule MyRule\n" +
- " when\n" +
- " Number( intValue >= 5 ) from accumulate ( m: Message( ), count( m ) )\n" +
- " then\n" +
- " System.out.println(\"Found messages\");\n" +
- "end");
- builder.addPackageFromDrl(source);
- Package pkg = builder.getPackage();
- RuleBase ruleBase = RuleBaseFactory.newRuleBase();
- ruleBase.addPackage( pkg );
- StatefulSession session = ruleBase.newStatefulSession();
+ public void testAccumulate() throws Exception {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader( "package org.drools\n" + "\n" + "import org.drools.Message\n" + "global java.util.List results\n" + "\n" + "rule MyRule\n" + " when\n"
+ + " $n : Number( intValue >= 2 ) from accumulate ( m: Message( ), count( m ) )\n" + " then\n" + " results.add($n);\n" + "end" );
+ builder.addPackageFromDrl( source );
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.setGlobal( "results",
+ new ArrayList() );
+
+ session = getSerialisedStatefulSession( session );
+ session.insert( new Message() );
+ session = getSerialisedStatefulSession( session );
+ List results = (List) session.getGlobal( "results" );
+
+ session.insert( new Message() );
+ session.insert( new Message() );
session.fireAllRules();
-
+ assertEquals( 3,
+ ((Number) results.get( 0 )).intValue() );
+
session = getSerialisedStatefulSession( session );
- session.insert(new Message());
- session.insert(new Message());
- session.insert(new Message());
- session.insert(new Message());
- session.insert(new Message());
-
- assertEquals(1, session.getAgenda().getActivations().length);
- }
- protected RuleBase getRuleBase() throws Exception {
+ session.insert( new Message() );
+ session.insert( new Message() );
+ session = getSerialisedStatefulSession( session );
+ assertEquals( 1,
+ session.getAgenda().getActivations().length );
+ session.fireAllRules();
+ assertEquals( 5,
+ ((Number) results.get( 1 )).intValue() );
+ }
+
+ public void testAccumulate2() throws Exception {
+ PackageBuilder builder = new PackageBuilder();
+ Reader source = new StringReader( "package org.drools\n" + "\n" + "import org.drools.Message\n" + "\n" + "rule MyRule\n" + " when\n" + " Number( intValue >= 5 ) from accumulate ( m: Message( ), count( m ) )\n" + " then\n"
+ + " System.out.println(\"Found messages\");\n" + "end" );
+ builder.addPackageFromDrl( source );
+ Package pkg = builder.getPackage();
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ ruleBase.addPackage( pkg );
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.fireAllRules();
+
+ session = getSerialisedStatefulSession( session );
+ session.insert( new Message() );
+ session.insert( new Message() );
+ session.insert( new Message() );
+ session.insert( new Message() );
+ session.insert( new Message() );
+
+ assertEquals( 1,
+ session.getAgenda().getActivations().length );
+ }
+
+ protected RuleBase getRuleBase() throws Exception {
+
return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
null );
}
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/reteoo/MockRightTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/reteoo/MockRightTupleSink.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/reteoo/MockRightTupleSink.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -42,4 +42,9 @@
public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {
//To change body of implemented methods use File | Settings | File Templates.
}
+
+ public short getType() {
+ // TODO Auto-generated method stub
+ return NodeTypeEnums.JoinNode;
+ }
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -18,6 +18,7 @@
package org.drools.base.accumulators;
import java.io.Externalizable;
+import java.io.Serializable;
/**
* An interface for accumulate external function implementations
@@ -31,21 +32,21 @@
* Creates and returns a new context object
* @return
*/
- public Object createContext();
+ public Serializable createContext();
/**
* Initializes the accumulator
* @param context
* @throws Exception
*/
- public void init(Object context) throws Exception;
+ public void init(Serializable context) throws Exception;
/**
* Executes the accumulation action
* @param context
* @param value
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value);
/**
@@ -54,7 +55,7 @@
* @param value
* @throws Exception
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception;
/**
@@ -64,7 +65,7 @@
* @return
* @throws Exception
*/
- public Object getResult(Object context) throws Exception;
+ public Object getResult(Serializable context) throws Exception;
/**
* True if the function supports reverse. False otherwise.
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AverageAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AverageAccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/AverageAccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -21,6 +21,7 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.Externalizable;
+import java.io.Serializable;
/**
* An implementation of an accumulator capable of calculating average values
@@ -41,6 +42,8 @@
public static class AverageData implements Externalizable {
public int count = 0;
public double total = 0;
+
+ public AverageData() {}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
count = in.readInt();
@@ -57,14 +60,14 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
return new AverageData();
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object)
*/
- public void init(Object context) throws Exception {
+ public void init(Serializable context) throws Exception {
AverageData data = (AverageData) context;
data.count = 0;
data.total = 0;
@@ -73,7 +76,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object)
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value) {
AverageData data = (AverageData) context;
data.count++;
@@ -83,7 +86,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object)
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception {
AverageData data = (AverageData) context;
data.count--;
@@ -93,7 +96,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object)
*/
- public Object getResult(Object context) throws Exception {
+ public Object getResult(Serializable context) throws Exception {
AverageData data = (AverageData) context;
return new Double( data.count == 0 ? 0 : data.total / data.count );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/CountAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/CountAccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/CountAccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -21,6 +21,7 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.Externalizable;
+import java.io.Serializable;
/**
* An implementation of an accumulator capable of counting occurences
@@ -41,6 +42,8 @@
protected static class CountData implements Externalizable {
public long count = 0;
+ public CountData() {}
+
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
count = in.readLong();
}
@@ -54,14 +57,14 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
return new CountData();
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object)
*/
- public void init(Object context) throws Exception {
+ public void init(Serializable context) throws Exception {
CountData data = (CountData) context;
data.count = 0;
}
@@ -69,7 +72,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object)
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value) {
CountData data = (CountData) context;
data.count++;
@@ -78,7 +81,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object)
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception {
CountData data = (CountData) context;
data.count--;
@@ -87,7 +90,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object)
*/
- public Object getResult(Object context) throws Exception {
+ public Object getResult(Serializable context) throws Exception {
CountData data = (CountData) context;
return new Long( data.count );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/JavaAccumulatorFunctionExecutor.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -21,16 +21,13 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
-import java.util.Collections;
+import java.io.Serializable;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.common.InternalFactHandle;
import org.drools.rule.Declaration;
-import org.drools.rule.PredicateConstraint;
import org.drools.spi.Accumulator;
import org.drools.spi.CompiledInvoker;
import org.drools.spi.ReturnValueExpression;
@@ -51,7 +48,7 @@
private static final long serialVersionUID = 400L;
private ReturnValueExpression expression;
- private AccumulateFunction function;
+ private AccumulateFunction function;
public JavaAccumulatorFunctionExecutor() {
@@ -70,9 +67,9 @@
public void writeExternal(ObjectOutput out) throws IOException {
if ( this.expression instanceof CompiledInvoker ) {
- out.writeObject( null );
+ out.writeObject( null );
} else {
- out.writeObject(this.expression);
+ out.writeObject( this.expression );
}
out.writeObject( function );
}
@@ -80,11 +77,11 @@
/* (non-Javadoc)
* @see org.drools.spi.Accumulator#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
JavaAccumulatorFunctionContext context = new JavaAccumulatorFunctionContext();
context.context = this.function.createContext();
if ( this.function.supportsReverse() ) {
- context.reverseSupport = new HashMap<FactHandle, Object>();
+ context.reverseSupport = new HashMap<Integer, Serializable>();
}
return context;
}
@@ -110,14 +107,14 @@
Declaration[] declarations,
Declaration[] innerDeclarations,
WorkingMemory workingMemory) throws Exception {
- final Object value = this.expression.evaluate( handle.getObject(),
- leftTuple,
- declarations,
- innerDeclarations,
- workingMemory,
- workingMemoryContext ).getValue();
+ final Serializable value = (Serializable) this.expression.evaluate( handle.getObject(),
+ leftTuple,
+ declarations,
+ innerDeclarations,
+ workingMemory,
+ workingMemoryContext ).getValue();
if ( this.function.supportsReverse() ) {
- ((JavaAccumulatorFunctionContext) context).reverseSupport.put( handle,
+ ((JavaAccumulatorFunctionContext) context).reverseSupport.put( Integer.valueOf( handle.getId() ),
value );
}
this.function.accumulate( ((JavaAccumulatorFunctionContext) context).context,
@@ -155,9 +152,9 @@
public ReturnValueExpression getExpression() {
return expression;
}
-
+
public void wire(Object object) {
- setExpression( (ReturnValueExpression) object);
+ setExpression( (ReturnValueExpression) object );
}
public void setExpression(ReturnValueExpression expression) {
@@ -169,9 +166,25 @@
return null;
}
- private static class JavaAccumulatorFunctionContext {
- public Object context;
- public Map<FactHandle, Object> reverseSupport;
+ private static class JavaAccumulatorFunctionContext
+ implements
+ Externalizable {
+ public Serializable context;
+ public Map<Integer, Serializable> reverseSupport;
+
+ public JavaAccumulatorFunctionContext() {
+ }
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ context = (Externalizable) in.readObject();
+ reverseSupport = (Map<Integer, Serializable>) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( context );
+ out.writeObject( reverseSupport );
+ }
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MVELAccumulatorFunctionExecutor.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -25,7 +25,6 @@
import java.util.HashMap;
import java.util.Map;
-import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.base.mvel.DroolsMVELFactory;
import org.drools.base.mvel.MVELCompilationUnit;
@@ -47,17 +46,16 @@
Externalizable,
Accumulator {
- private static final long serialVersionUID = 400L;
+ private static final long serialVersionUID = 400L;
- private final Object dummy = new Object();
-
+ private final Object dummy = new Object();
+
private MVELCompilationUnit unit;
- private AccumulateFunction function;
-
- private DroolsMVELFactory model;
- private Serializable expression;
-
+ private AccumulateFunction function;
+ private DroolsMVELFactory model;
+ private Serializable expression;
+
public MVELAccumulatorFunctionExecutor() {
}
@@ -79,20 +77,20 @@
out.writeObject( unit );
out.writeObject( function );
}
-
+
public void compile(ClassLoader classLoader) {
expression = unit.getCompiledExpression( classLoader );
- model = unit.getFactory( );
- }
+ model = unit.getFactory();
+ }
/* (non-Javadoc)
* @see org.drools.spi.Accumulator#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
MVELAccumulatorFunctionContext context = new MVELAccumulatorFunctionContext();
context.context = this.function.createContext();
if ( this.function.supportsReverse() ) {
- context.reverseSupport = new HashMap<FactHandle, Object>();
+ context.reverseSupport = new HashMap<Integer, Serializable>();
}
return context;
}
@@ -124,11 +122,11 @@
handle.getObject(),
workingMemory,
null );
- final Object value = MVEL.executeExpression( this.expression,
- this.dummy,
- factory );
+ final Serializable value = (Serializable) MVEL.executeExpression( this.expression,
+ this.dummy,
+ factory );
if ( this.function.supportsReverse() ) {
- ((MVELAccumulatorFunctionContext) context).reverseSupport.put( handle,
+ ((MVELAccumulatorFunctionContext) context).reverseSupport.put( Integer.valueOf( handle.getId() ),
value );
}
this.function.accumulate( ((MVELAccumulatorFunctionContext) context).context,
@@ -142,7 +140,7 @@
Declaration[] declarations,
Declaration[] innerDeclarations,
WorkingMemory workingMemory) throws Exception {
- final Object value = ((MVELAccumulatorFunctionContext) context).reverseSupport.remove( handle );
+ final Object value = ((MVELAccumulatorFunctionContext) context).reverseSupport.remove( Integer.valueOf( handle.getId() ) );
this.function.reverse( ((MVELAccumulatorFunctionContext) context).context,
value );
}
@@ -166,9 +164,22 @@
return this.model.clone();
}
- private static class MVELAccumulatorFunctionContext {
- public Object context;
- public Map<FactHandle, Object> reverseSupport;
+ private static class MVELAccumulatorFunctionContext
+ implements
+ Externalizable {
+ public Serializable context;
+ public Map<Integer, Serializable> reverseSupport;
+
+ public void readExternal(ObjectInput in) throws IOException,
+ ClassNotFoundException {
+ context = (Serializable) in.readObject();
+ reverseSupport = (Map<Integer, Serializable>) in.readObject();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeObject( context );
+ out.writeObject( reverseSupport );
+ }
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MaxAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MaxAccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MaxAccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -17,9 +17,11 @@
*/
package org.drools.base.accumulators;
+import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.io.Serializable;
/**
* An implementation of an accumulator capable of calculating maximum values
@@ -29,8 +31,18 @@
*/
public class MaxAccumulateFunction implements AccumulateFunction {
- protected static class MaxData {
+ protected static class MaxData implements Externalizable {
public double max = Double.MIN_VALUE;
+
+ public MaxData() {}
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ max = in.readDouble();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeDouble(max);
+ }
}
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
@@ -43,14 +55,14 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
return new MaxData();
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object)
*/
- public void init(Object context) throws Exception {
+ public void init(Serializable context) throws Exception {
MaxData data = (MaxData) context;
data.max = Double.MIN_VALUE;
}
@@ -58,7 +70,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object)
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value) {
MaxData data = (MaxData) context;
data.max = Math.max( data.max, ((Number)value).doubleValue() );
@@ -67,14 +79,14 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object)
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception {
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object)
*/
- public Object getResult(Object context) throws Exception {
+ public Object getResult(Serializable context) throws Exception {
MaxData data = (MaxData) context;
return new Double( data.max );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MinAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MinAccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/MinAccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -17,9 +17,11 @@
*/
package org.drools.base.accumulators;
+import java.io.Externalizable;
import java.io.ObjectOutput;
import java.io.ObjectInput;
import java.io.IOException;
+import java.io.Serializable;
/**
* An implementation of an accumulator capable of calculating minimun values
@@ -37,46 +39,56 @@
}
- protected static class MaxData {
+ protected static class MinData implements Externalizable {
public double min = Double.MAX_VALUE;
+
+ public MinData() {}
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
+ min = in.readDouble();
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException {
+ out.writeDouble(min);
+ }
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#createContext()
*/
- public Object createContext() {
- return new MaxData();
+ public Serializable createContext() {
+ return new MinData();
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object)
*/
- public void init(Object context) throws Exception {
- MaxData data = (MaxData) context;
+ public void init(Serializable context) throws Exception {
+ MinData data = (MinData) context;
data.min = Double.MAX_VALUE;
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object)
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value) {
- MaxData data = (MaxData) context;
+ MinData data = (MinData) context;
data.min = Math.min( data.min, ((Number)value).doubleValue() );
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object)
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception {
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object)
*/
- public Object getResult(Object context) throws Exception {
- MaxData data = (MaxData) context;
+ public Object getResult(Serializable context) throws Exception {
+ MinData data = (MinData) context;
return new Double( data.min );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/accumulators/SumAccumulateFunction.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -21,6 +21,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.Externalizable;
+import java.io.Serializable;
/**
* An implementation of an accumulator capable of calculating sum of values
@@ -41,6 +42,8 @@
protected static class SumData implements Externalizable {
public double total = 0;
+ public SumData() {}
+
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
total = in.readDouble();
}
@@ -54,14 +57,14 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#createContext()
*/
- public Object createContext() {
+ public Serializable createContext() {
return new SumData();
}
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#init(java.lang.Object)
*/
- public void init(Object context) throws Exception {
+ public void init(Serializable context) throws Exception {
SumData data = (SumData) context;
data.total = 0;
}
@@ -69,7 +72,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#accumulate(java.lang.Object, java.lang.Object)
*/
- public void accumulate(Object context,
+ public void accumulate(Serializable context,
Object value) {
SumData data = (SumData) context;
data.total += ((Number) value).doubleValue();
@@ -78,7 +81,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#reverse(java.lang.Object, java.lang.Object)
*/
- public void reverse(Object context,
+ public void reverse(Serializable context,
Object value) throws Exception {
SumData data = (SumData) context;
data.total -= ((Number) value).doubleValue();
@@ -87,7 +90,7 @@
/* (non-Javadoc)
* @see org.drools.base.accumulators.AccumulateFunction#getResult(java.lang.Object)
*/
- public Object getResult(Object context) throws Exception {
+ public Object getResult(Serializable context) throws Exception {
SumData data = (SumData) context;
return new Double( data.total );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/BooleanFieldImpl.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -26,6 +26,7 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.io.Serializable;
/**
* @author etirelli
@@ -54,7 +55,7 @@
out.writeBoolean(value);
}
- public Object getValue() {
+ public Serializable getValue() {
return this.value ? Boolean.TRUE : Boolean.FALSE;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/DoubleFieldImpl.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -10,6 +10,7 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.io.Serializable;
public class DoubleFieldImpl
implements
@@ -33,7 +34,7 @@
out.writeDouble(value);
}
- public Object getValue() {
+ public Serializable getValue() {
return new Double( this.value );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/LongFieldImpl.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -10,6 +10,7 @@
import java.io.ObjectInput;
import java.io.IOException;
import java.io.ObjectOutput;
+import java.io.Serializable;
public class LongFieldImpl
implements
@@ -34,7 +35,7 @@
out.writeLong(value);
}
- public Object getValue() {
+ public Serializable getValue() {
return new Long( this.value );
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/field/ObjectFieldImpl.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;
@@ -64,7 +65,7 @@
enumName = (String) in.readObject();
fieldName = (String) in.readObject();
if ( !isEnum || enumName == null || fieldName == null ) {
- value = in.readObject();
+ value = (Serializable) in.readObject();
} else {
resolveEnumValue();
}
@@ -83,7 +84,7 @@
private void resolveEnumValue() {
try {
final Class<?> staticClass = Class.forName( enumName );
- value = staticClass.getField( fieldName ).get( null );
+ value = (Serializable) staticClass.getField( fieldName ).get( null );
} catch ( final Exception e ) {
throw new RuntimeDroolsException("Error deserializing enum value "+enumName+"."+fieldName+" : "+e.getMessage());
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/base/mvel/MVELAccumulator.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -43,15 +43,15 @@
implements
MVELCompileable,
Accumulator,
- Externalizable {
+ Externalizable {
private static final long serialVersionUID = 400L;
- MVELCompilationUnit initUnit;
- MVELCompilationUnit actionUnit;
- MVELCompilationUnit reverseUnit;
- MVELCompilationUnit resultUnit;
-
+ MVELCompilationUnit initUnit;
+ MVELCompilationUnit actionUnit;
+ MVELCompilationUnit reverseUnit;
+ MVELCompilationUnit resultUnit;
+
private DroolsMVELFactory prototype;
private Serializable init;
private Serializable action;
@@ -86,7 +86,7 @@
out.writeObject( reverseUnit );
out.writeObject( resultUnit );
}
-
+
public void compile(ClassLoader classLoader) {
init = initUnit.getCompiledExpression( classLoader );
action = actionUnit.getCompiledExpression( classLoader );
@@ -96,16 +96,16 @@
prototype = reverseUnit.getFactory();
} else {
prototype = resultUnit.getFactory();
- }
- }
+ }
+ }
/* (non-Javadoc)
* @see org.drools.spi.Accumulator#createContext()
*/
- public Object createContext() {
- Map<InternalFactHandle, Map<String, Object>> shadow = null;
+ public Serializable createContext() {
+ Map<Integer, Map<String, Object>> shadow = null;
if ( this.reverse != null ) {
- shadow = new HashMap<InternalFactHandle, Map<String, Object>>();
+ shadow = new HashMap<Integer, Map<String, Object>>();
}
return new MVELAccumulatorContext( new HashMap(),
shadow );
@@ -168,15 +168,15 @@
DroolsMVELFactory factory,
InternalFactHandle handle) {
DroolsMVELShadowFactory shad = (DroolsMVELShadowFactory) factory;
- Map<String, Object> varsMap = ((MVELAccumulatorContext) context).shadow.get( handle );
+ Map<String, Object> varsMap = ((MVELAccumulatorContext) context).shadow.get( Integer.valueOf( handle.getId() ) );
if ( varsMap == null ) {
varsMap = new HashMap<String, Object>();
- ((MVELAccumulatorContext) context).shadow.put( handle,
+ ((MVELAccumulatorContext) context).shadow.put( Integer.valueOf( handle.getId() ),
varsMap );
}
for ( String var : shad.getShadowVariables() ) {
varsMap.put( var,
- shad.getVariableResolver( var ).getValue() );
+ shad.getVariableResolver( var ).getValue() );
}
}
@@ -196,7 +196,7 @@
// set shadow values overriding actual values
// ALSO, since reverse() is called, we know the factory is a shadow factory
- ((DroolsMVELShadowFactory) factory).setShadowValues( ((MVELAccumulatorContext) context).shadow.get( handle ) );
+ ((DroolsMVELShadowFactory) factory).setShadowValues( ((MVELAccumulatorContext) context).shadow.get( Integer.valueOf( handle.getId() ) ) );
MVEL.executeExpression( this.reverse,
null,
@@ -204,7 +204,7 @@
// cleaning up shadow values map
((DroolsMVELShadowFactory) factory).setShadowValues( null );
- ((MVELAccumulatorContext) context).shadow.remove( handle );
+ ((MVELAccumulatorContext) context).shadow.remove( Integer.valueOf( handle.getId() ) );
}
/* (non-Javadoc)
@@ -240,13 +240,13 @@
implements
Serializable {
- private static final long serialVersionUID = -308602705153011537L;
+ private static final long serialVersionUID = -308602705153011537L;
- public final Map variables;
- public final Map<InternalFactHandle, Map<String, Object>> shadow;
+ public final Map variables;
+ public final Map<Integer, Map<String, Object>> shadow;
public MVELAccumulatorContext(final Map variables,
- final Map<InternalFactHandle, Map<String, Object>> shadow) {
+ final Map<Integer, Map<String, Object>> shadow) {
this.variables = variables;
this.shadow = shadow;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/common/EventFactHandle.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -2,10 +2,6 @@
import org.drools.FactHandle;
-import java.io.ObjectOutput;
-import java.io.ObjectInput;
-import java.io.IOException;
-
public class EventFactHandle extends DefaultFactHandle {
private static final long serialVersionUID = 5997141759543399455L;
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/InputMarshaller.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -2,11 +2,13 @@
import java.io.IOException;
import java.io.ObjectInputStream;
+import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
+import org.drools.RuntimeDroolsException;
import org.drools.SessionConfiguration;
import org.drools.base.ClassObjectType;
import org.drools.common.AgendaItem;
@@ -48,6 +50,8 @@
import org.drools.reteoo.RightTuple;
import org.drools.reteoo.RightTupleSink;
import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.AccumulateNode.AccumulateContext;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
import org.drools.reteoo.EvalConditionNode.EvalMemory;
import org.drools.reteoo.RuleTerminalNode.TerminalNodeMemory;
import org.drools.rule.EntryPoint;
@@ -89,23 +93,25 @@
*/
public static ReteooStatefulSession readSession(ReteooStatefulSession session,
MarshallerReaderContext context) throws IOException,
- ClassNotFoundException {
+ ClassNotFoundException {
int handleId = context.readInt();
long handleCounter = context.readLong();
- long propagationCounter = context.readLong();
-
+ long propagationCounter = context.readLong();
+
// these are for the InitialFactHandle, on a reset we just ignore
context.readInt();
- context.readLong();
-
- session.reset(handleId, handleCounter, propagationCounter);
- DefaultAgenda agenda = ( DefaultAgenda ) session.getAgenda();
-
+ context.readLong();
+
+ session.reset( handleId,
+ handleCounter,
+ propagationCounter );
+ DefaultAgenda agenda = (DefaultAgenda) session.getAgenda();
+
readAgenda( context,
- agenda );
-
- context.wm = session;
-
+ agenda );
+
+ context.wm = session;
+
readFactHandles( context );
readActionQueue( context );
@@ -117,12 +123,12 @@
readProcessInstances( context );
readWorkItems( context );
-
+
readTimers( context );
-
+
return session;
}
-
+
/**
* Create a new session into which to read the stream data
* @param context
@@ -177,7 +183,7 @@
readProcessInstances( context );
readWorkItems( context );
-
+
readTimers( context );
return session;
@@ -264,24 +270,14 @@
// load the handles
InternalFactHandle[] handles = new InternalFactHandle[size];
for ( int i = 0; i < size; i++ ) {
- int id = stream.readInt();
- long recency = stream.readLong();
+ InternalFactHandle handle = readFactHandle( context );
- int strategyIndex = stream.readInt();
- PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( strategyIndex );
- ObjectPlaceholder placeHolder = strategy.read( stream );
-
- Object object = placeHolder.resolveObject();
-
- InternalFactHandle handle = new DefaultFactHandle( id,
- object,
- recency );
- context.handles.put( id,
+ context.handles.put( handle.getId(),
handle );
handles[i] = handle;
context.wm.getObjectStore().addHandle( handle,
- object );
+ handle.getObject() );
readRightTuples( handle,
context );
@@ -317,6 +313,24 @@
readActivations( context );
}
+ public static InternalFactHandle readFactHandle(MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
+ int id = context.stream.readInt();
+ long recency = context.stream.readLong();
+
+ int strategyIndex = context.stream.readInt();
+ PlaceholderResolverStrategy strategy = context.resolverStrategyFactory.getStrategy( strategyIndex );
+ ObjectPlaceholder placeHolder = strategy.read( context.stream );
+
+ Object object = placeHolder.resolveObject();
+
+ InternalFactHandle handle = new DefaultFactHandle( id,
+ object,
+ recency );
+ return handle;
+
+ }
+
public static void readRightTuples(InternalFactHandle factHandle,
MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
@@ -332,18 +346,28 @@
RightTupleSink sink = (RightTupleSink) context.sinks.get( stream.readInt() );
- BetaMemory memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
-
RightTuple rightTuple = new RightTuple( factHandle,
sink );
context.rightTuples.put( new RightTupleKey( factHandle.getId(),
sink ),
rightTuple );
+ BetaMemory memory = null;
+ switch ( sink.getType() ) {
+ case NodeTypeEnums.AccumulateNode : {
+ memory = ((AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink )).betaMemory;
+ break;
+ }
+ default : {
+ memory = (BetaMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ break;
+ }
+ }
memory.getRightTupleMemory().add( rightTuple );
}
- public static void readLeftTuples(MarshallerReaderContext context) throws IOException {
+ public static void readLeftTuples(MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
ObjectInputStream stream = context.stream;
while ( stream.readShort() == PersisterEnums.LEFT_TUPLE ) {
@@ -358,7 +382,8 @@
}
public static void readLeftTuple(LeftTuple parentLeftTuple,
- MarshallerReaderContext context) throws IOException {
+ MarshallerReaderContext context) throws IOException,
+ ClassNotFoundException {
ObjectInputStream stream = context.stream;
InternalWorkingMemory wm = context.wm;
Map<Integer, BaseNode> sinks = context.sinks;
@@ -450,6 +475,58 @@
}
break;
}
+ case NodeTypeEnums.AccumulateNode : {
+ // accumulate nodes generate new facts on-demand and need special procedures when de-serializing from persistent storage
+ AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) sink );
+ memory.betaMemory.getLeftTupleMemory().add( parentLeftTuple );
+
+ AccumulateContext accctx = new AccumulateContext();
+ memory.betaMemory.getCreatedHandles().put( parentLeftTuple,
+ accctx,
+ false );
+ // first we de-serialize the generated fact handle
+ InternalFactHandle handle = readFactHandle( context );
+ accctx.result = new RightTuple( handle,
+ (RightTupleSink) sink );
+
+ // then we de-serialize the associated accumulation context
+ accctx.context = (Serializable) stream.readObject();
+ // then we de-serialize the boolean propagated flag
+ accctx.propagated = stream.readBoolean();
+
+ // then we de-serialize all the propagated tuples
+ short head = -1;
+ while ( (head = stream.readShort()) != PersisterEnums.END ) {
+ switch ( head ) {
+ case PersisterEnums.RIGHT_TUPLE : {
+ int factHandleId = stream.readInt();
+ RightTupleKey key = new RightTupleKey( factHandleId,
+ sink );
+ RightTuple rightTuple = context.rightTuples.get( key );
+ // just wiring up the match record
+ new LeftTuple( parentLeftTuple,
+ rightTuple,
+ sink,
+ true );
+ break;
+ }
+ case PersisterEnums.LEFT_TUPLE : {
+ LeftTupleSink childSink = (LeftTupleSink) sinks.get( stream.readInt() );
+ LeftTuple childLeftTuple = new LeftTuple( parentLeftTuple,
+ accctx.result,
+ childSink,
+ true );
+ readLeftTuple( childLeftTuple,
+ context );
+ break;
+ }
+ default : {
+ throw new RuntimeDroolsException( "Marshalling error. This is a bug. Please contact the development team." );
+ }
+ }
+ }
+ break;
+ }
case NodeTypeEnums.RuleTerminalNode : {
RuleTerminalNode ruleTerminalNode = (RuleTerminalNode) sink;
TerminalNodeMemory memory = (TerminalNodeMemory) wm.getNodeMemory( ruleTerminalNode );
@@ -505,7 +582,7 @@
if ( stream.readBoolean() ) {
String activationGroupName = stream.readUTF();
- ((DefaultAgenda)wm.getAgenda()).getActivationGroup( activationGroupName ).addActivation( activation );
+ ((DefaultAgenda) wm.getAgenda()).getActivationGroup( activationGroupName ).addActivation( activation );
}
boolean activated = stream.readBoolean();
@@ -515,11 +592,11 @@
if ( rule.getAgendaGroup() == null || rule.getAgendaGroup().equals( "" ) || rule.getAgendaGroup().equals( AgendaGroup.MAIN ) ) {
// Is the Rule AgendaGroup undefined? If it is use MAIN,
// which is added to the Agenda by default
- agendaGroup = (InternalAgendaGroup) ((DefaultAgenda)wm.getAgenda()).getAgendaGroup( AgendaGroup.MAIN );
+ agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( AgendaGroup.MAIN );
} else {
// AgendaGroup is defined, so try and get the AgendaGroup
// from the Agenda
- agendaGroup = (InternalAgendaGroup) ((DefaultAgenda)wm.getAgenda()).getAgendaGroup( rule.getAgendaGroup() );
+ agendaGroup = (InternalAgendaGroup) ((DefaultAgenda) wm.getAgenda()).getAgendaGroup( rule.getAgendaGroup() );
}
activation.setAgendaGroup( agendaGroup );
@@ -528,7 +605,7 @@
if ( rule.getRuleFlowGroup() == null ) {
agendaGroup.add( activation );
} else {
- InternalRuleFlowGroup rfg = (InternalRuleFlowGroup) ((DefaultAgenda)wm.getAgenda()).getRuleFlowGroup( rule.getRuleFlowGroup() );
+ InternalRuleFlowGroup rfg = (InternalRuleFlowGroup) ((DefaultAgenda) wm.getAgenda()).getRuleFlowGroup( rule.getRuleFlowGroup() );
rfg.addActivation( activation );
}
}
@@ -619,8 +696,8 @@
processInstance.setId( stream.readLong() );
String processId = stream.readUTF();
processInstance.setProcessId( processId );
- if (ruleBase != null) {
- processInstance.setProcess( ruleBase.getProcess( processId ) );
+ if ( ruleBase != null ) {
+ processInstance.setProcess( ruleBase.getProcess( processId ) );
}
processInstance.setState( stream.readInt() );
long nodeInstanceCounter = stream.readLong();
@@ -647,25 +724,26 @@
for ( int i = 0; i < nbSwimlanes; i++ ) {
String name = stream.readUTF();
String value = stream.readUTF();
- swimlaneContextInstance.setActorId( name, value );
+ swimlaneContextInstance.setActorId( name,
+ value );
}
}
while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
readNodeInstance( context,
- processInstance,
+ processInstance,
processInstance );
}
processInstance.internalSetNodeInstanceCounter( nodeInstanceCounter );
- if (wm != null) {
- processInstance.reconnect();
+ if ( wm != null ) {
+ processInstance.reconnect();
}
return processInstance;
}
public static NodeInstance readNodeInstance(MarshallerReaderContext context,
- NodeInstanceContainer nodeInstanceContainer,
+ NodeInstanceContainer nodeInstanceContainer,
RuleFlowProcessInstance processInstance) throws IOException {
ObjectInputStream stream = context.stream;
NodeInstanceImpl nodeInstance = null;
@@ -723,46 +801,43 @@
nodeInstance.setProcessInstance( processInstance );
nodeInstance.setId( id );
switch ( nodeType ) {
- case PersisterEnums.COMPOSITE_NODE_INSTANCE :
- int nbVariables = stream.readInt();
- if ( nbVariables > 0 ) {
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- ((CompositeContextNodeInstance) nodeInstance).getContextInstance(VariableScope.VARIABLE_SCOPE);
- for ( int i = 0; i < nbVariables; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- variableScopeInstance.setVariable( name, value );
- } catch ( ClassNotFoundException e ) {
- throw new IllegalArgumentException(
- "Could not reload variable " + name );
- }
- }
- }
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance(
- context,
- (CompositeContextNodeInstance) nodeInstance,
- processInstance );
- }
- break;
- case PersisterEnums.FOR_EACH_NODE_INSTANCE :
- while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
- readNodeInstance(
- context,
- (ForEachNodeInstance) nodeInstance,
- processInstance );
- }
- break;
- default :
- // do nothing
- }
+ case PersisterEnums.COMPOSITE_NODE_INSTANCE :
+ int nbVariables = stream.readInt();
+ if ( nbVariables > 0 ) {
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) ((CompositeContextNodeInstance) nodeInstance).getContextInstance( VariableScope.VARIABLE_SCOPE );
+ for ( int i = 0; i < nbVariables; i++ ) {
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ variableScopeInstance.setVariable( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload variable " + name );
+ }
+ }
+ }
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ (CompositeContextNodeInstance) nodeInstance,
+ processInstance );
+ }
+ break;
+ case PersisterEnums.FOR_EACH_NODE_INSTANCE :
+ while ( stream.readShort() == PersisterEnums.NODE_INSTANCE ) {
+ readNodeInstance( context,
+ (ForEachNodeInstance) nodeInstance,
+ processInstance );
+ }
+ break;
+ default :
+ // do nothing
+ }
return nodeInstance;
}
public static void readWorkItems(MarshallerReaderContext context) throws IOException {
- InternalWorkingMemory wm = context.wm;
- ObjectInputStream stream = context.stream;
+ InternalWorkingMemory wm = context.wm;
+ ObjectInputStream stream = context.stream;
while ( stream.readShort() == PersisterEnums.WORK_ITEM ) {
WorkItem workItem = readWorkItem( context );
wm.getWorkItemManager().internalAddWorkItem( workItem );
@@ -771,35 +846,36 @@
public static WorkItem readWorkItem(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
-
+
WorkItemImpl workItem = new WorkItemImpl();
workItem.setId( stream.readLong() );
workItem.setProcessInstanceId( stream.readLong() );
workItem.setName( stream.readUTF() );
workItem.setState( stream.readInt() );
-
+
int nbParameters = stream.readInt();
-
+
for ( int i = 0; i < nbParameters; i++ ) {
- String name = stream.readUTF();
- try {
- Object value = stream.readObject();
- workItem.setParameter(name, value);
- } catch (ClassNotFoundException e) {
- throw new IllegalArgumentException( "Could not reload parameter " + name );
- }
+ String name = stream.readUTF();
+ try {
+ Object value = stream.readObject();
+ workItem.setParameter( name,
+ value );
+ } catch ( ClassNotFoundException e ) {
+ throw new IllegalArgumentException( "Could not reload parameter " + name );
+ }
}
return workItem;
}
public static void readTimers(MarshallerReaderContext context) throws IOException {
- InternalWorkingMemory wm = context.wm;
- ObjectInputStream stream = context.stream;
-
- TimerManager timerManager = wm.getTimerManager();
- timerManager.internalSetTimerId( stream.readLong() );
-
+ InternalWorkingMemory wm = context.wm;
+ ObjectInputStream stream = context.stream;
+
+ TimerManager timerManager = wm.getTimerManager();
+ timerManager.internalSetTimerId( stream.readLong() );
+
while ( stream.readShort() == PersisterEnums.TIMER ) {
Timer timer = readTimer( context );
timerManager.internalAddTimer( timer );
@@ -808,15 +884,15 @@
public static Timer readTimer(MarshallerReaderContext context) throws IOException {
ObjectInputStream stream = context.stream;
-
+
Timer timer = new Timer();
timer.setId( stream.readLong() );
timer.setDelay( stream.readLong() );
timer.setPeriod( stream.readLong() );
timer.setProcessInstanceId( stream.readLong() );
- timer.setActivated( new Date(stream.readLong()) );
- if (stream.readBoolean()) {
- timer.setLastTriggered( new Date(stream.readLong()) );
+ timer.setActivated( new Date( stream.readLong() ) );
+ if ( stream.readBoolean() ) {
+ timer.setLastTriggered( new Date( stream.readLong() ) );
}
return timer;
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/marshalling/OutputMarshaller.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -36,6 +36,7 @@
import org.drools.process.instance.context.swimlane.SwimlaneContextInstance;
import org.drools.process.instance.context.variable.VariableScopeInstance;
import org.drools.process.instance.timer.TimerManager;
+import org.drools.reteoo.BetaNode;
import org.drools.reteoo.LeftTuple;
import org.drools.reteoo.LeftTupleSink;
import org.drools.reteoo.NodeTypeEnums;
@@ -43,6 +44,8 @@
import org.drools.reteoo.ReteooWorkingMemory;
import org.drools.reteoo.RightTuple;
import org.drools.reteoo.RuleTerminalNode;
+import org.drools.reteoo.AccumulateNode.AccumulateContext;
+import org.drools.reteoo.AccumulateNode.AccumulateMemory;
import org.drools.rule.EntryPoint;
import org.drools.rule.Rule;
import org.drools.ruleflow.instance.RuleFlowProcessInstance;
@@ -97,7 +100,7 @@
writeProcessInstances( context );
writeWorkItems( context );
-
+
writeTimers( context );
}
@@ -232,21 +235,11 @@
for ( InternalFactHandle handle : orderFacts( wm.getObjectStore() ) ) {
//stream.writeShort( PersisterEnums.FACT_HANDLE );
//InternalFactHandle handle = (InternalFactHandle) it.next();
- stream.writeInt( handle.getId() );
- stream.writeLong( handle.getRecency() );
+ writeFactHandle( context,
+ stream,
+ resolverStrategyFactory,
+ handle );
- context.out.println( "Object : int:" + handle.getId() + " long:" + handle.getRecency() );
- context.out.println( handle.getObject() );
-
- Object object = handle.getObject();
-
- PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( handle.getObject() );
-
- stream.writeInt( strategy.getIndex() );
-
- strategy.write( stream,
- object );
-
writeRightTuples( handle,
context );
}
@@ -260,6 +253,26 @@
writeActivations( context );
}
+ private static void writeFactHandle(MarshallerWriteContext context,
+ ObjectOutputStream stream,
+ PlaceholderResolverStrategyFactory resolverStrategyFactory,
+ InternalFactHandle handle) throws IOException {
+ stream.writeInt( handle.getId() );
+ stream.writeLong( handle.getRecency() );
+
+ context.out.println( "Object : int:" + handle.getId() + " long:" + handle.getRecency() );
+ context.out.println( handle.getObject() );
+
+ Object object = handle.getObject();
+
+ PlaceholderResolverStrategy strategy = resolverStrategyFactory.getStrategy( object );
+
+ stream.writeInt( strategy.getIndex() );
+
+ strategy.write( stream,
+ object );
+ }
+
public static InternalFactHandle[] orderFacts(ObjectStore objectStore) {
// this method is just needed for testing purposes, to allow round tripping
int size = objectStore.size();
@@ -355,11 +368,6 @@
context.out.println( "RightTuple int:" + rightTuple.getRightTupleSink().getId() );
}
- public void xxx(RightTuple rightTuple,
- MarshallerWriteContext context) {
-
- }
-
public static void writeLeftTuples(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
InternalWorkingMemory wm = context.wm;
@@ -460,6 +468,42 @@
}
break;
}
+ case NodeTypeEnums.AccumulateNode : {
+ context.out.println( "AccumulateNode" );
+ // accumulate nodes generate new facts on-demand and need special procedures when serializing to persistent storage
+ AccumulateMemory memory = (AccumulateMemory) context.wm.getNodeMemory( (BetaNode) leftTuple.getLeftTupleSink() );
+ AccumulateContext accctx = (AccumulateContext) memory.betaMemory.getCreatedHandles().get( leftTuple );
+ // first we serialize the generated fact handle
+ writeFactHandle( context,
+ stream,
+ context.resolverStrategyFactory,
+ accctx.result.getFactHandle() );
+ // then we serialize the associated accumulation context
+ stream.writeObject( accctx.context );
+ // then we serialize the boolean propagated flag
+ stream.writeBoolean( accctx.propagated );
+
+ // then we serialize all the propagated tuples
+ for ( LeftTuple childLeftTuple = getLeftTuple( leftTuple.getBetaChildren() ); childLeftTuple != null; childLeftTuple = (LeftTuple) childLeftTuple.getLeftParentPrevious() ) {
+ if( leftTuple.getLeftTupleSink().getId() == childLeftTuple.getLeftTupleSink().getId()) {
+ // this is a matching record, so, associate the right tuples
+ context.out.println( "RightTuple(match) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.RIGHT_TUPLE );
+ stream.writeInt( childLeftTuple.getRightParent().getFactHandle().getId() );
+ } else {
+ // this is a propagation record
+ context.out.println( "RightTuple(propagation) int:" + childLeftTuple.getLeftTupleSink().getId() + " int:" + childLeftTuple.getRightParent().getFactHandle().getId() );
+ stream.writeShort( PersisterEnums.LEFT_TUPLE );
+ stream.writeInt( childLeftTuple.getLeftTupleSink().getId() );
+ writeLeftTuple( childLeftTuple,
+ context,
+ recurse );
+ }
+ }
+ stream.writeShort( PersisterEnums.END );
+ context.out.println( "AccumulateNode --- END" );
+ break;
+ }
case NodeTypeEnums.RuleTerminalNode : {
context.out.println( "RuleTerminalNode" );
int pos = context.terminalTupleMap.size();
@@ -619,12 +663,14 @@
public static void writeProcessInstances(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
- List<ProcessInstance> processInstances = new ArrayList<ProcessInstance>(context.wm.getProcessInstances());
- Collections.sort(processInstances, new Comparator<ProcessInstance>() {
- public int compare(ProcessInstance o1, ProcessInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- });
+ List<ProcessInstance> processInstances = new ArrayList<ProcessInstance>( context.wm.getProcessInstances() );
+ Collections.sort( processInstances,
+ new Comparator<ProcessInstance>() {
+ public int compare(ProcessInstance o1,
+ ProcessInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
for ( ProcessInstance processInstance : processInstances ) {
stream.writeShort( PersisterEnums.PROCESS_INSTANCE );
writeProcessInstance( context,
@@ -643,18 +689,20 @@
VariableScopeInstance variableScopeInstance = (VariableScopeInstance) processInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>(variables.keySet());
- Collections.sort(keys, new Comparator<String>() {
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- });
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
stream.writeInt( keys.size() );
for ( String key : keys ) {
stream.writeUTF( key );
- stream.writeObject( variables.get(key) );
+ stream.writeObject( variables.get( key ) );
}
-
+
SwimlaneContextInstance swimlaneContextInstance = (SwimlaneContextInstance) processInstance.getContextInstance( SwimlaneContext.SWIMLANE_SCOPE );
Map<String, String> swimlaneActors = swimlaneContextInstance.getSwimlaneActors();
stream.writeInt( swimlaneActors.size() );
@@ -663,12 +711,14 @@
stream.writeUTF( entry.getValue() );
}
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>(processInstance.getNodeInstances());
- Collections.sort(nodeInstances, new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1, NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- });
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( processInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
for ( NodeInstance nodeInstance : nodeInstances ) {
stream.writeShort( PersisterEnums.NODE_INSTANCE );
writeNodeInstance( context,
@@ -702,64 +752,72 @@
stream.writeShort( PersisterEnums.JOIN_NODE_INSTANCE );
Map<Long, Integer> triggers = ((JoinInstance) nodeInstance).getTriggers();
stream.writeInt( triggers.size() );
- List<Long> keys = new ArrayList<Long>(triggers.keySet());
- Collections.sort(keys, new Comparator<Long>(){
- public int compare(Long o1, Long o2) {
- return o1.compareTo(o2);
- }
- });
+ List<Long> keys = new ArrayList<Long>( triggers.keySet() );
+ Collections.sort( keys,
+ new Comparator<Long>() {
+ public int compare(Long o1,
+ Long o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
for ( Long key : keys ) {
stream.writeLong( key );
- stream.writeInt( triggers.get(key) );
+ stream.writeInt( triggers.get( key ) );
}
} else if ( nodeInstance instanceof CompositeContextNodeInstance ) {
stream.writeShort( PersisterEnums.COMPOSITE_NODE_INSTANCE );
- CompositeContextNodeInstance compositeNodeInstance =
- (CompositeContextNodeInstance) nodeInstance;
- VariableScopeInstance variableScopeInstance = (VariableScopeInstance)
- compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
+ CompositeContextNodeInstance compositeNodeInstance = (CompositeContextNodeInstance) nodeInstance;
+ VariableScopeInstance variableScopeInstance = (VariableScopeInstance) compositeNodeInstance.getContextInstance( VariableScope.VARIABLE_SCOPE );
Map<String, Object> variables = variableScopeInstance.getVariables();
- List<String> keys = new ArrayList<String>(variables.keySet());
- Collections.sort(keys, new Comparator<String>() {
- public int compare(String o1, String o2) {
- return o1.compareTo(o2);
- }
- });
+ List<String> keys = new ArrayList<String>( variables.keySet() );
+ Collections.sort( keys,
+ new Comparator<String>() {
+ public int compare(String o1,
+ String o2) {
+ return o1.compareTo( o2 );
+ }
+ } );
stream.writeInt( keys.size() );
for ( String key : keys ) {
stream.writeUTF( key );
- stream.writeObject( variables.get(key) );
+ stream.writeObject( variables.get( key ) );
}
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>(compositeNodeInstance.getNodeInstances());
- Collections.sort(nodeInstances, new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1, NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- });
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( compositeNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
for ( NodeInstance subNodeInstance : nodeInstances ) {
stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context, subNodeInstance );
+ writeNodeInstance( context,
+ subNodeInstance );
}
stream.writeShort( PersisterEnums.END );
} else if ( nodeInstance instanceof ForEachNodeInstance ) {
stream.writeShort( PersisterEnums.FOR_EACH_NODE_INSTANCE );
ForEachNodeInstance forEachNodeInstance = (ForEachNodeInstance) nodeInstance;
- List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>(forEachNodeInstance.getNodeInstances());
- Collections.sort(nodeInstances, new Comparator<NodeInstance>() {
- public int compare(NodeInstance o1, NodeInstance o2) {
- return (int) (o1.getId() - o2.getId());
- }
- });
+ List<NodeInstance> nodeInstances = new ArrayList<NodeInstance>( forEachNodeInstance.getNodeInstances() );
+ Collections.sort( nodeInstances,
+ new Comparator<NodeInstance>() {
+ public int compare(NodeInstance o1,
+ NodeInstance o2) {
+ return (int) (o1.getId() - o2.getId());
+ }
+ } );
for ( NodeInstance subNodeInstance : nodeInstances ) {
- if (subNodeInstance instanceof CompositeContextNodeInstance) {
- stream.writeShort( PersisterEnums.NODE_INSTANCE );
- writeNodeInstance( context, subNodeInstance );
- }
+ if ( subNodeInstance instanceof CompositeContextNodeInstance ) {
+ stream.writeShort( PersisterEnums.NODE_INSTANCE );
+ writeNodeInstance( context,
+ subNodeInstance );
+ }
}
stream.writeShort( PersisterEnums.END );
} else {
- // TODO ForEachNodeInstance
- // TODO timer manager
+ // TODO ForEachNodeInstance
+ // TODO timer manager
throw new IllegalArgumentException( "Unknown node instance type: " + nodeInstance );
}
}
@@ -767,12 +825,14 @@
public static void writeWorkItems(MarshallerWriteContext context) throws IOException {
ObjectOutputStream stream = context.stream;
- List<WorkItem> workItems = new ArrayList<WorkItem>(context.wm.getWorkItemManager().getWorkItems());
- Collections.sort(workItems, new Comparator<WorkItem>() {
- public int compare(WorkItem o1, WorkItem o2) {
- return (int) (o2.getId() - o1.getId());
- }
- });
+ List<WorkItem> workItems = new ArrayList<WorkItem>( context.wm.getWorkItemManager().getWorkItems() );
+ Collections.sort( workItems,
+ new Comparator<WorkItem>() {
+ public int compare(WorkItem o1,
+ WorkItem o2) {
+ return (int) (o2.getId() - o1.getId());
+ }
+ } );
for ( WorkItem workItem : workItems ) {
stream.writeShort( PersisterEnums.WORK_ITEM );
writeWorkItem( context,
@@ -789,10 +849,10 @@
stream.writeUTF( workItem.getName() );
stream.writeInt( workItem.getState() );
Map<String, Object> parameters = workItem.getParameters();
- stream.writeInt(parameters.size());
- for (Map.Entry<String, Object> entry: parameters.entrySet()) {
- stream.writeUTF(entry.getKey());
- stream.writeObject(entry.getValue());
+ stream.writeInt( parameters.size() );
+ for ( Map.Entry<String, Object> entry : parameters.entrySet() ) {
+ stream.writeUTF( entry.getKey() );
+ stream.writeObject( entry.getValue() );
}
}
@@ -802,33 +862,37 @@
TimerManager timerManager = context.wm.getTimerManager();
stream.writeLong( timerManager.internalGetTimerId() );
- List<Timer> timers = new ArrayList<Timer>(timerManager.getTimers());
- Collections.sort(timers, new Comparator<Timer>() {
- public int compare(Timer o1, Timer o2) {
- return (int) (o2.getId() - o1.getId());
- }
- });
- for ( Timer timer: timers ) {
+ List<Timer> timers = new ArrayList<Timer>( timerManager.getTimers() );
+ Collections.sort( timers,
+ new Comparator<Timer>() {
+ public int compare(Timer o1,
+ Timer o2) {
+ return (int) (o2.getId() - o1.getId());
+ }
+ } );
+ for ( Timer timer : timers ) {
stream.writeShort( PersisterEnums.TIMER );
- writeTimer( context, timer );
+ writeTimer( context,
+ timer );
}
stream.writeShort( PersisterEnums.END );
}
- public static void writeTimer(MarshallerWriteContext context, Timer timer) throws IOException {
- ObjectOutputStream stream = context.stream;
- stream.writeLong( timer.getId() );
- stream.writeLong( timer.getDelay() );
- stream.writeLong( timer.getPeriod() );
- stream.writeLong( timer.getProcessInstanceId() );
- stream.writeLong( timer.getActivated().getTime() );
- Date lastTriggered = timer.getLastTriggered();
- if (lastTriggered != null) {
- stream.writeBoolean(true);
- stream.writeLong( timer.getLastTriggered().getTime() );
- } else {
- stream.writeBoolean(false);
- }
+ public static void writeTimer(MarshallerWriteContext context,
+ Timer timer) throws IOException {
+ ObjectOutputStream stream = context.stream;
+ stream.writeLong( timer.getId() );
+ stream.writeLong( timer.getDelay() );
+ stream.writeLong( timer.getPeriod() );
+ stream.writeLong( timer.getProcessInstanceId() );
+ stream.writeLong( timer.getActivated().getTime() );
+ Date lastTriggered = timer.getLastTriggered();
+ if ( lastTriggered != null ) {
+ stream.writeBoolean( true );
+ stream.writeLong( timer.getLastTriggered().getTime() );
+ } else {
+ stream.writeBoolean( false );
+ }
}
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/AccumulateNode.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -20,6 +20,7 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.io.Serializable;
import java.util.Arrays;
import org.drools.RuleBaseConfiguration;
@@ -632,13 +633,13 @@
public static class AccumulateContext
implements
Externalizable {
- public Object context;
- public RightTuple result;
- public boolean propagated;
+ public Serializable context;
+ public RightTuple result;
+ public boolean propagated;
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
- context = in.readObject();
+ context = (Serializable) in.readObject();
result = (RightTuple) in.readObject();
propagated = in.readBoolean();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleSink.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/reteoo/RightTupleSink.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -4,6 +4,9 @@
import org.drools.spi.PropagationContext;
public interface RightTupleSink extends Sink {
+
+ public short getType();
+
public void retractRightTuple(final RightTuple rightTuple,
final PropagationContext context,
final InternalWorkingMemory workingMemory);
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/rule/Accumulate.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -23,6 +23,7 @@
import java.io.ObjectOutput;
import java.io.IOException;
import java.io.ObjectInput;
+import java.io.Serializable;
import org.drools.RuntimeDroolsException;
import org.drools.WorkingMemory;
@@ -117,7 +118,7 @@
this.accumulator = accumulator;
}
- public Object createContext() {
+ public Serializable createContext() {
return this.accumulator.createContext();
}
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/Accumulator.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -16,6 +16,8 @@
package org.drools.spi;
+import java.io.Serializable;
+
import org.drools.WorkingMemory;
import org.drools.common.InternalFactHandle;
import org.drools.rule.Declaration;
@@ -46,7 +48,7 @@
*
* @return
*/
- public Object createContext();
+ public Serializable createContext();
/**
* Executes the initialization block of code
Modified: labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleComponent.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleComponent.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/main/java/org/drools/spi/RuleComponent.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -16,7 +16,6 @@
* limitations under the License.
*/
-import java.io.Externalizable;
/**
* Semantic component marker.
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockAccumulator.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -15,12 +15,13 @@
*/
package org.drools.reteoo;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-import java.io.ObjectOutput;
-import java.io.ObjectInput;
-import java.io.IOException;
import org.drools.WorkingMemory;
import org.drools.common.InternalFactHandle;
@@ -36,7 +37,7 @@
*/
public class MockAccumulator
implements
- Accumulator {
+ Accumulator, Serializable {
private static final long serialVersionUID = 400L;
@@ -67,7 +68,7 @@
return this.workingMemory;
}
- public Object createContext() {
+ public Serializable createContext() {
return this;
}
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockObjectSink.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -120,4 +120,9 @@
public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {
//To change body of implemented methods use File | Settings | File Templates.
}
+
+ public short getType() {
+ // TODO Auto-generated method stub
+ return NodeTypeEnums.JoinNode;
+ }
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockRightTupleSink.java
===================================================================
--- labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockRightTupleSink.java 2008-09-15 13:20:33 UTC (rev 22778)
+++ labs/jbossrules/trunk/drools-core/src/test/java/org/drools/reteoo/MockRightTupleSink.java 2008-09-15 16:14:18 UTC (rev 22779)
@@ -42,4 +42,8 @@
public void readExternal( ObjectInput in ) throws IOException, ClassNotFoundException {
//To change body of implemented methods use File | Settings | File Templates.
}
+
+ public short getType() {
+ return NodeTypeEnums.JoinNode;
+ }
}
More information about the jboss-svn-commits
mailing list