[jboss-svn-commits] JBL Code SVN: r18850 - in labs/jbossrules/branches/4.0.x: drools-compiler/src/test/java/org/drools/integrationtests and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Mar 11 15:59:05 EDT 2008
Author: tirelli
Date: 2008-03-11 15:59:04 -0400 (Tue, 11 Mar 2008)
New Revision: 18850
Added:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_0.drl
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_1.drl
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_2.drl
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic3_0.drl
Modified:
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Address.java
labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
Log:
JBRULES-1503: fixing serialization problems and adding test cases
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Address.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Address.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/Address.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -1,7 +1,11 @@
package org.drools;
-public class Address {
+import java.io.Serializable;
+public class Address implements Serializable {
+
+ private static final long serialVersionUID = -8519011705761628197L;
+
private String street;
private String suburb;
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -0,0 +1,916 @@
+package org.drools.integrationtests;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.ObjectInput;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.drools.Address;
+import org.drools.Cheese;
+import org.drools.Person;
+import org.drools.Primitives;
+import org.drools.RuleBase;
+import org.drools.RuleBaseConfiguration;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.WorkingMemory;
+import org.drools.common.InternalFactHandle;
+import org.drools.compiler.PackageBuilder;
+import org.drools.rule.Package;
+import org.drools.rule.Rule;
+
+public class MarshallingTest extends TestCase {
+ public void xxxtestSerializable() throws Exception {
+
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg = serialisePackage( builder.getPackage() );
+
+ assertEquals( 0,
+ builder.getErrors().getErrors().length );
+
+ RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+ ruleBase.addPackage( pkg );
+
+ Map map = new HashMap();
+ map.put( "x",
+ ruleBase );
+ final byte[] ast = serializeOut( map );
+ map = (Map) serializeIn( ast );
+ ruleBase = (RuleBase) map.get( "x" );
+ final Rule[] rules = ruleBase.getPackages()[0].getRules();
+ assertEquals( 4,
+ rules.length );
+
+ assertEquals( "match Person 1",
+ rules[0].getName() );
+ assertEquals( "match Person 2",
+ rules[1].getName() );
+ assertEquals( "match Person 3",
+ rules[2].getName() );
+ assertEquals( "match Integer",
+ rules[3].getName() );
+
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ workingMemory.setGlobal( "list",
+ new ArrayList() );
+
+ final Person bob = new Person( "bob" );
+ workingMemory.insert( bob );
+
+ final byte[] wm = serializeOut( workingMemory );
+
+ workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+ assertEquals( 1,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertEquals( bob,
+ IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+ assertEquals( 2,
+ workingMemory.getAgenda().agendaSize() );
+
+ workingMemory.fireAllRules();
+
+ final List list = (List) workingMemory.getGlobal( "list" );
+
+ assertEquals( 3,
+ list.size() );
+ // because of agenda-groups
+ assertEquals( new Integer( 4 ),
+ list.get( 0 ) );
+
+ assertEquals( 2,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
+ }
+
+ public void xxxtestSerializeWorkingMemoryAndRuleBase1() throws Exception {
+ // has the first newStatefulSession before the ruleBase is serialised
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg = serialisePackage( builder.getPackage() );
+
+ assertEquals( 0,
+ builder.getErrors().getErrors().length );
+
+ RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ Map map = new HashMap();
+ map.put( "x",
+ ruleBase );
+ final byte[] ast = serializeOut( map );
+ map = (Map) serializeIn( ast );
+ ruleBase = (RuleBase) map.get( "x" );
+
+ final byte[] wm = serializeOut( workingMemory );
+
+ workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+ ruleBase.addPackage( pkg );
+
+ workingMemory.setGlobal( "list",
+ new ArrayList() );
+
+ final Person bob = new Person( "bob" );
+ workingMemory.insert( bob );
+
+ final Rule[] rules = ruleBase.getPackages()[0].getRules();
+
+ assertEquals( 4,
+ rules.length );
+
+ assertEquals( "match Person 1",
+ rules[0].getName() );
+ assertEquals( "match Person 2",
+ rules[1].getName() );
+ assertEquals( "match Person 3",
+ rules[2].getName() );
+ assertEquals( "match Integer",
+ rules[3].getName() );
+
+ assertEquals( 1,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertEquals( bob,
+ IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+ assertEquals( 2,
+ workingMemory.getAgenda().agendaSize() );
+
+ workingMemory.fireAllRules();
+
+ final List list = (List) workingMemory.getGlobal( "list" );
+
+ assertEquals( 3,
+ list.size() );
+ // because of agenda-groups
+ assertEquals( new Integer( 4 ),
+ list.get( 0 ) );
+
+ assertEquals( 2,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
+
+ }
+
+ public void xxxtestSerializeWorkingMemoryAndRuleBase2() throws Exception {
+ // has the first newStatefulSession after the ruleBase is serialised
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg = serialisePackage( builder.getPackage() );
+
+ assertEquals( 0,
+ builder.getErrors().getErrors().length );
+
+ RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+ // serialise a hashmap with the RuleBase as a key
+ Map map = new HashMap();
+ map.put( "x",
+ ruleBase );
+ final byte[] ast = serializeOut( map );
+ map = (Map) serializeIn( ast );
+ ruleBase = (RuleBase) map.get( "x" );
+
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ // serialise the working memory before population
+ final byte[] wm = serializeOut( workingMemory );
+ workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+ ruleBase.addPackage( pkg );
+
+ workingMemory.setGlobal( "list",
+ new ArrayList() );
+
+ final Person bob = new Person( "bob" );
+ workingMemory.insert( bob );
+
+ final Rule[] rules = ruleBase.getPackages()[0].getRules();
+
+ assertEquals( 4,
+ rules.length );
+
+ assertEquals( "match Person 1",
+ rules[0].getName() );
+ assertEquals( "match Person 2",
+ rules[1].getName() );
+ assertEquals( "match Person 3",
+ rules[2].getName() );
+ assertEquals( "match Integer",
+ rules[3].getName() );
+
+ assertEquals( 1,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertEquals( bob,
+ IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+ assertEquals( 2,
+ workingMemory.getAgenda().agendaSize() );
+
+ workingMemory.fireAllRules();
+
+ final List list = (List) workingMemory.getGlobal( "list" );
+
+ assertEquals( 3,
+ list.size() );
+ // because of agenda-groups
+ assertEquals( new Integer( 4 ),
+ list.get( 0 ) );
+
+ assertEquals( 2,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
+ }
+
+ public void FIXME_testSerializeWorkingMemoryAndRuleBase3() throws Exception {
+ // has the first newStatefulSession after the ruleBase is serialised
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg = serialisePackage( builder.getPackage() );
+
+ assertEquals( 0,
+ builder.getErrors().getErrors().length );
+
+ RuleBase ruleBase = getRuleBase();
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ ruleBase.addPackage( pkg );
+
+ workingMemory.setGlobal( "list",
+ new ArrayList() );
+
+ final Person bob = new Person( "bob" );
+ workingMemory.insert( bob );
+
+ // serialise a hashmap with the RuleBase as a key, after WM population
+ Map map = new HashMap();
+ map.put( "x",
+ ruleBase );
+ final byte[] ast = serializeOut( map );
+ map = (Map) serializeIn( ast );
+ ruleBase = (RuleBase) map.get( "x" );
+
+ // now try serialising with a fully populated wm from a serialised rulebase
+ final byte[] wm = serializeOut( workingMemory );
+ workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+ final Rule[] rules = ruleBase.getPackages()[0].getRules();
+
+ assertEquals( 4,
+ rules.length );
+
+ assertEquals( "match Person 1",
+ rules[0].getName() );
+ assertEquals( "match Person 2",
+ rules[1].getName() );
+ assertEquals( "match Person 3",
+ rules[2].getName() );
+ assertEquals( "match Integer",
+ rules[3].getName() );
+
+ assertEquals( 1,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertEquals( bob,
+ IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+ assertEquals( 2,
+ workingMemory.getAgenda().agendaSize() );
+
+ workingMemory.fireAllRules();
+
+ final List list = (List) workingMemory.getGlobal( "list" );
+
+ assertEquals( 3,
+ list.size() );
+ // because of agenda-groups
+ assertEquals( new Integer( 4 ),
+ list.get( 0 ) );
+
+ assertEquals( 2,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
+ assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
+ }
+
+ public void xxxtestSerializeAdd() throws Exception {
+
+ //Create a rulebase, a session, and test it
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ StatefulSession session = ruleBase.newStatefulSession();
+ List list = new ArrayList();
+ session.setGlobal( "list",
+ list );
+
+ InternalFactHandle stilton = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ InternalFactHandle brie = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 10 ) );
+ session.fireAllRules();
+
+ assertEquals( list.size(),
+ 1 );
+ assertEquals( "stilton",
+ list.get( 0 ) );
+
+ byte[] serializedSession = serializeOut( session );
+ session.dispose();
+
+ byte[] serializedRulebase = serializeOut( ruleBase );
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ list = (List) session.getGlobal( "list" );
+
+ assertNotNull( list );
+ assertEquals( list.size(),
+ 1 );
+ assertEquals( "stilton",
+ list.get( 0 ) );
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ InternalFactHandle brie2 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 10 ) );
+ InternalFactHandle bob = (InternalFactHandle) session.insert( new Person( "bob",
+ 30 ) );
+ session.fireAllRules();
+
+ assertEquals( list.size(),
+ 3 );
+ assertEquals( bob.getObject(),
+ list.get( 1 ) );
+ assertEquals( "stilton",
+ list.get( 2 ) );
+
+ session.dispose();
+
+ }
+
+ public void xxxtestSerializationOfIndexedWM() throws Exception {
+ final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable2.drl" ) );
+
+ final PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( reader );
+ final Package pkg = builder.getPackage();
+
+ assertEquals( builder.getErrors().toString(),
+ 0,
+ builder.getErrors().getErrors().length );
+
+ RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
+
+ ruleBase.addPackage( pkg );
+
+ Map map = new HashMap();
+ map.put( "x",
+ ruleBase );
+ final byte[] ast = serializeOut( map );
+ map = (Map) serializeIn( ast );
+ ruleBase = (RuleBase) map.get( "x" );
+ final Rule[] rules = ruleBase.getPackages()[0].getRules();
+ assertEquals( 3,
+ rules.length );
+
+ WorkingMemory workingMemory = ruleBase.newStatefulSession();
+
+ workingMemory.setGlobal( "list",
+ new ArrayList() );
+
+ final Primitives p = new Primitives();
+ p.setBytePrimitive( (byte) 1 );
+ p.setShortPrimitive( (short) 2 );
+ p.setIntPrimitive( (int) 3 );
+ workingMemory.insert( p );
+
+ final byte[] wm = serializeOut( workingMemory );
+
+ workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
+
+ assertEquals( 1,
+ IteratorToList.convert( workingMemory.iterateObjects() ).size() );
+ assertEquals( p,
+ IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
+
+ assertEquals( 3,
+ workingMemory.getAgenda().agendaSize() );
+
+ workingMemory.fireAllRules();
+
+ final List list = (List) workingMemory.getGlobal( "list" );
+
+ assertEquals( 3,
+ list.size() );
+ // because of agenda-groups
+ assertEquals( "1",
+ list.get( 0 ) );
+ assertEquals( "2",
+ list.get( 1 ) );
+ assertEquals( "3",
+ list.get( 2 ) );
+
+ }
+
+ /*
+ * Here I am inserting data points which are not used by any rule (e.g Person).
+ * Later adding rule (e.g. Rule: 'match Person') for those data points.
+ *
+ * Result: Pkg/Rule addition is failing with ClassCastException
+ */
+ public void xxxtestSerializeAdd2() throws Exception {
+
+ //Create a rulebase, a session, and test it
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_0.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ List results = new ArrayList();
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.setGlobal( "results",
+ results );
+
+ InternalFactHandle stilton1 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ session.insert( new Cheese( "brie",
+ 10 ) );
+ InternalFactHandle bob = (InternalFactHandle) session.insert( new Person( "bob",
+ 10 ) );
+
+ // fire rules
+ session.fireAllRules();
+ // check the results are correct
+ assertEquals( 1,
+ results.size() );
+ assertEquals( stilton1.getObject(),
+ results.get( 0 ) );
+
+ // serialize session and rulebase out
+ byte[] serializedSession = serializeOut( session );
+ byte[] serializedRulebase = serializeOut( ruleBase );
+ session.dispose();
+
+ // now deserialize the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+
+ // dynamically add a new package
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3_0.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 20 ) );
+ session.insert( new Cheese( "brie",
+ 20 ) );
+ InternalFactHandle mark = (InternalFactHandle) session.insert( new Person( "mark",
+ 20 ) );
+ session.fireAllRules();
+
+ results = (List) session.getGlobal( "results" );
+ assertEquals( 4,
+ results.size() );
+ assertEquals( bob.getObject(),
+ results.get( 1 ) );
+ assertEquals( stilton2.getObject(),
+ results.get( 2 ) );
+ assertEquals( mark.getObject(),
+ results.get( 3 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ // dispose session
+ session.dispose();
+
+ }
+
+ /*
+ * Here I am inserting data points(e.g. Cheese) with 'stilton' / 'brie' as type value.
+ * Initially I had only 1 rule ('like stilton') for data points(e.g. Cheese) having type as 'stilton'.
+ *
+ * Later added new rule ('like brie') for data points(e.g. Cheese) having type as 'brie'.
+ *
+ * Result: new rule is not getting fired for new data points having type as 'brie'.
+ * Only for old data points having type as 'brie' the new rule got fired.
+ */
+ public void testSerializeAdd_newRuleNotFiredForNewData() throws Exception {
+ //Create a rulebase, a session, and test it
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_0.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ List results = new ArrayList();
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.setGlobal( "results",
+ results );
+
+ InternalFactHandle stilton1 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 10 ) );
+ session.fireAllRules();
+
+ byte[] serializedSession = serializeOut( session );
+ byte[] serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ assertEquals( 1,
+ results.size() );
+ assertEquals( stilton1.getObject(),
+ results.get( 0 ) );
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_1.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ InternalFactHandle stilton2 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 20 ) );
+ InternalFactHandle brie2 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 20 ) );
+ InternalFactHandle brie3 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 30 ) );
+ session.fireAllRules();
+ assertEquals( 5,
+ results.size() );
+ assertEquals( brie1.getObject(),
+ results.get( 1 ) );
+ assertEquals( stilton2.getObject(),
+ results.get( 2 ) );
+ assertEquals( brie2.getObject(),
+ results.get( 4 ) );
+ assertEquals( brie3.getObject(),
+ results.get( 3 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+ }
+
+ /*
+ * Works Fine if both the scenarios mentioned above are skipped.
+ */
+ public void testSerializeAdd3() throws Exception {
+ //Create a rulebase, a session, and test it
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase( );
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_0.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ List results = new ArrayList();
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.setGlobal( "results",
+ results );
+
+ InternalFactHandle stilton1 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 10 ) );
+ session.fireAllRules();
+
+ byte[] serializedSession = serializeOut( session );
+ byte[] serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ assertEquals( 1,
+ results.size() );
+ assertEquals( stilton1.getObject(),
+ results.get( 0 ) );
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3_0.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+
+ 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 ) );
+ session.fireAllRules();
+
+ assertEquals( 4,
+ results.size() );
+ assertEquals( stilton2.getObject(),
+ results.get( 1 ) );
+ assertEquals( bob2.getObject(),
+ results.get( 2 ) );
+ assertEquals( bob1.getObject(),
+ results.get( 3 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_2.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ InternalFactHandle stilton3 = (InternalFactHandle) session.insert( new Cheese( "stilton", 40 ) );
+ InternalFactHandle brie3 = (InternalFactHandle) session.insert( new Cheese( "brie", 40 ) );
+ InternalFactHandle bob3 = (InternalFactHandle) session.insert( new Person( "bob", 40 ) );
+ InternalFactHandle bob4 = (InternalFactHandle) session.insert( new Person( "bob", 40 ) );
+ InternalFactHandle addr1 = (InternalFactHandle) session.insert( new Address( "bangalore" ) );
+ InternalFactHandle addr2 = (InternalFactHandle) session.insert( new Address( "India" ) );
+
+ session.fireAllRules();
+
+ assertEquals( 9,
+ results.size() );
+ assertEquals( stilton3.getObject(),
+ results.get( 4 ) );
+ assertEquals( bob4.getObject(),
+ results.get( 5 ) );
+ assertEquals( bob3.getObject(),
+ results.get( 6 ) );
+ assertEquals( addr2.getObject(),
+ results.get( 7 ) );
+ assertEquals( addr1.getObject(),
+ results.get( 8 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ InternalFactHandle stilton4 = (InternalFactHandle) session.insert( new Cheese( "stilton", 50 ) );
+ InternalFactHandle brie4 = (InternalFactHandle) session.insert( new Cheese( "brie", 50 ) );
+ InternalFactHandle bob5 = (InternalFactHandle) session.insert( new Person( "bob", 50 ) );
+ InternalFactHandle bob6 = (InternalFactHandle) session.insert( new Person( "bob", 50 ) );
+ InternalFactHandle addr3 = (InternalFactHandle) session.insert( new Address( "Tripura" ) );
+ InternalFactHandle addr4 = (InternalFactHandle) session.insert( new Address( "Agartala" ) );
+
+ session.fireAllRules();
+
+ assertEquals( 14,
+ results.size() );
+ assertEquals( stilton4.getObject(),
+ results.get( 9 ) );
+ assertEquals( bob6.getObject(),
+ results.get( 10 ) );
+ assertEquals( bob5.getObject(),
+ results.get( 11 ) );
+ assertEquals( addr4.getObject(),
+ results.get( 12 ) );
+ assertEquals( addr3.getObject(),
+ results.get( 13 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ }
+
+ /*
+ * I have tried both the scenarios
+ * 1. Remove a rule from a pkg.
+ * 2. Remove a pkg
+ *
+ * But both cases after inserting associated data points (i.e data points which are used to fire/activate the removed rule)
+ * session.fireAllRules() is throwing NoClassDefFoundError
+ *
+ */
+ public void testSerializeAddRemove_NoClassDefFoundError() throws Exception {
+
+ //Create a rulebase, a session, and test it
+ RuleBase ruleBase = RuleBaseFactory.newRuleBase( );
+ PackageBuilder builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic1_0.drl" ) ) );
+ Package pkg = serialisePackage( builder.getPackage() );
+ ruleBase.addPackage( pkg );
+
+ List results = new ArrayList();
+ StatefulSession session = ruleBase.newStatefulSession();
+ session.setGlobal( "results",
+ results );
+
+ InternalFactHandle stilton1 = (InternalFactHandle) session.insert( new Cheese( "stilton",
+ 10 ) );
+ InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
+ 10 ) );
+ session.fireAllRules();
+
+ byte[] serializedSession = serializeOut( session );
+ byte[] serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ assertEquals( 1,
+ results.size() );
+ assertEquals( stilton1.getObject(),
+ results.get( 0 ) );
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ builder = new PackageBuilder();
+ builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_Dynamic3_0.drl" ) ) );
+ pkg = serialisePackage( builder.getPackage() );
+
+ 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 ) );
+ session.fireAllRules();
+
+ assertEquals( 4,
+ results.size() );
+ assertEquals( stilton2.getObject(),
+ results.get( 1 ) );
+ assertEquals( bob2.getObject(),
+ results.get( 2 ) );
+ assertEquals( bob1.getObject(),
+ results.get( 3 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ // CASE 1: remove rule
+ 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 ) );
+ session.fireAllRules();
+
+ assertEquals( 6,
+ results.size() );
+ assertEquals( bob4.getObject(),
+ results.get( 4 ) );
+ assertEquals( bob3.getObject(),
+ results.get( 5 ) );
+
+
+ // now recreate the rulebase, deserialize the session and test it
+ ruleBase = (RuleBase) serializeIn( serializedRulebase );
+ session = ruleBase.newStatefulSession( new ByteArrayInputStream( serializedSession ) );
+ results = (List) session.getGlobal( "results" );
+
+ // CASE 2: remove pkg
+ 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 ) );
+ session.fireAllRules();
+
+ assertEquals( 6,
+ results.size() );
+ assertEquals( bob6.getObject(),
+ results.get( 4 ) );
+ assertEquals( bob5.getObject(),
+ results.get( 5 ) );
+
+ serializedSession = null;
+ serializedRulebase = null;
+
+ serializedSession = serializeOut( session );
+ serializedRulebase = serializeOut( ruleBase );
+
+ session.dispose();
+
+ }
+
+ protected RuleBase getRuleBase() throws Exception {
+
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ null );
+ }
+
+ protected RuleBase getRuleBase(final RuleBaseConfiguration config) throws Exception {
+
+ return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
+ config );
+ }
+
+ protected Package serialisePackage(Package pkg) {
+ try {
+ byte[] bytes = serializeOut( pkg );
+ return (Package) serializeIn( bytes );
+ } catch ( Exception e ) {
+ throw new RuntimeException( "trouble serialising package.",
+ e );
+ }
+ }
+
+ protected Object serializeIn(final byte[] bytes) throws IOException,
+ ClassNotFoundException {
+ final ObjectInput in = new ObjectInputStream( new ByteArrayInputStream( bytes ) );
+ final Object obj = in.readObject();
+ in.close();
+ return obj;
+ }
+
+ protected byte[] serializeOut(final Object obj) throws IOException {
+ // Serialize to a byte array
+ final ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ final ObjectOutput out = new ObjectOutputStream( bos );
+ out.writeObject( obj );
+ out.close();
+
+ // Get the bytes of the serialized object
+ final byte[] bytes = bos.toByteArray();
+ return bytes;
+ }
+}
Modified: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -1749,148 +1749,6 @@
}
- public void testSerializable() throws Exception {
-
- final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
-
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( reader );
- final Package pkg = builder.getPackage();
-
- assertEquals( 0,
- builder.getErrors().getErrors().length );
-
- RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
-
- ruleBase.addPackage( pkg );
-
- Map map = new HashMap();
- map.put( "x",
- ruleBase );
- final byte[] ast = serializeOut( map );
- map = (Map) serializeIn( ast );
- ruleBase = (RuleBase) map.get( "x" );
- final Rule[] rules = ruleBase.getPackages()[0].getRules();
- assertEquals( 4,
- rules.length );
-
- assertEquals( "match Person 1",
- rules[0].getName() );
- assertEquals( "match Person 2",
- rules[1].getName() );
- assertEquals( "match Person 3",
- rules[2].getName() );
- assertEquals( "match Integer",
- rules[3].getName() );
-
- WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- workingMemory.setGlobal( "list",
- new ArrayList() );
-
- final Person bob = new Person( "bob" );
- workingMemory.insert( bob );
-
- final byte[] wm = serializeOut( workingMemory );
-
- workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
-
- assertEquals( 1,
- IteratorToList.convert( workingMemory.iterateObjects() ).size() );
- assertEquals( bob,
- IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
-
- assertEquals( 2,
- workingMemory.getAgenda().agendaSize() );
-
- workingMemory.fireAllRules();
-
- final List list = (List) workingMemory.getGlobal( "list" );
-
- assertEquals( 3,
- list.size() );
- // because of agenda-groups
- assertEquals( new Integer( 4 ),
- list.get( 0 ) );
-
- assertEquals( 2,
- IteratorToList.convert( workingMemory.iterateObjects() ).size() );
- assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
- assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
- }
-
- public void testSerializeWorkingMemoryAndRuleBase() throws Exception {
- final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
-
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( reader );
- final Package pkg = builder.getPackage();
-
- assertEquals( 0,
- builder.getErrors().getErrors().length );
-
- RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
-
- Map map = new HashMap();
- map.put( "x",
- ruleBase );
- final byte[] ast = serializeOut( map );
- map = (Map) serializeIn( ast );
- ruleBase = (RuleBase) map.get( "x" );
-
- WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- final byte[] wm = serializeOut( workingMemory );
-
- workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
-
- ruleBase.addPackage( pkg );
-
- workingMemory.setGlobal( "list",
- new ArrayList() );
-
- final Person bob = new Person( "bob" );
- workingMemory.insert( bob );
-
- final Rule[] rules = ruleBase.getPackages()[0].getRules();
-
- assertEquals( 4,
- rules.length );
-
- assertEquals( "match Person 1",
- rules[0].getName() );
- assertEquals( "match Person 2",
- rules[1].getName() );
- assertEquals( "match Person 3",
- rules[2].getName() );
- assertEquals( "match Integer",
- rules[3].getName() );
-
- assertEquals( 1,
- IteratorToList.convert( workingMemory.iterateObjects() ).size() );
- assertEquals( bob,
- IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
-
- assertEquals( 2,
- workingMemory.getAgenda().agendaSize() );
-
- workingMemory.fireAllRules();
-
- final List list = (List) workingMemory.getGlobal( "list" );
-
- assertEquals( 3,
- list.size() );
- // because of agenda-groups
- assertEquals( new Integer( 4 ),
- list.get( 0 ) );
-
- assertEquals( 2,
- IteratorToList.convert( workingMemory.iterateObjects() ).size() );
- assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( bob ) );
- assertTrue( IteratorToList.convert( workingMemory.iterateObjects() ).contains( new Person( "help" ) ) );
-
- }
-
public void testEmptyRule() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_EmptyRule.drl" ) ) );
@@ -4778,70 +4636,6 @@
assertTrue( list.contains( b.getObject() ) );
}
- public void testSerializationOfIndexedWM() throws Exception {
- final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable2.drl" ) );
-
- final PackageBuilder builder = new PackageBuilder();
- builder.addPackageFromDrl( reader );
- final Package pkg = builder.getPackage();
-
- assertEquals( builder.getErrors().toString(),
- 0,
- builder.getErrors().getErrors().length );
-
- RuleBase ruleBase = getRuleBase();// RuleBaseFactory.newRuleBase();
-
- ruleBase.addPackage( pkg );
-
- Map map = new HashMap();
- map.put( "x",
- ruleBase );
- final byte[] ast = serializeOut( map );
- map = (Map) serializeIn( ast );
- ruleBase = (RuleBase) map.get( "x" );
- final Rule[] rules = ruleBase.getPackages()[0].getRules();
- assertEquals( 3,
- rules.length );
-
- WorkingMemory workingMemory = ruleBase.newStatefulSession();
-
- workingMemory.setGlobal( "list",
- new ArrayList() );
-
- final Primitives p = new Primitives( );
- p.setBytePrimitive( (byte) 1 );
- p.setShortPrimitive( (short) 2 );
- p.setIntPrimitive( (int) 3 );
- workingMemory.insert( p );
-
- final byte[] wm = serializeOut( workingMemory );
-
- workingMemory = ruleBase.newStatefulSession( new ByteArrayInputStream( wm ) );
-
- assertEquals( 1,
- IteratorToList.convert( workingMemory.iterateObjects() ).size() );
- assertEquals( p,
- IteratorToList.convert( workingMemory.iterateObjects() ).get( 0 ) );
-
- assertEquals( 3,
- workingMemory.getAgenda().agendaSize() );
-
- workingMemory.fireAllRules();
-
- final List list = (List) workingMemory.getGlobal( "list" );
-
- assertEquals( 3,
- list.size() );
- // because of agenda-groups
- assertEquals( "1",
- list.get( 0 ) );
- assertEquals( "2",
- list.get( 1 ) );
- assertEquals( "3",
- list.get( 2 ) );
-
- }
-
public void testNPEOnMVELAlphaPredicates() throws Exception {
final PackageBuilder builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "test_NPEOnMVELPredicate.drl" ) ) );
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_0.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_0.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_0.drl 2008-03-11 19:59:04 UTC (rev 18850)
@@ -0,0 +1,13 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List results
+
+rule "like stilton"
+ salience 50
+ when
+ $cheese :Cheese( type:type == "stilton" )
+ then
+ results.add( $cheese );
+end
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_1.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_1.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_1.drl 2008-03-11 19:59:04 UTC (rev 18850)
@@ -0,0 +1,13 @@
+package org.drools.test;
+
+import org.drools.Cheese;
+
+global java.util.List results;
+
+rule "like brie"
+ salience 20
+ when
+ $cheese : Cheese( type:type == "brie" )
+ then
+ results.add( $cheese );
+end
\ No newline at end of file
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_2.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_2.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic1_2.drl 2008-03-11 19:59:04 UTC (rev 18850)
@@ -0,0 +1,13 @@
+package org.drools.test;
+
+import org.drools.Address;
+
+global java.util.List results;
+
+rule "match SerializeAddress"
+ salience 10
+ when
+ $address : Address()
+ then
+ results.add( $address );
+end
Added: labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic3_0.drl
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic3_0.drl (rev 0)
+++ labs/jbossrules/branches/4.0.x/drools-compiler/src/test/resources/org/drools/integrationtests/test_Dynamic3_0.drl 2008-03-11 19:59:04 UTC (rev 18850)
@@ -0,0 +1,13 @@
+package org.drools.newtest;
+
+import org.drools.Person;
+
+global java.util.List results
+
+rule "match Person"
+ salience 30
+ when
+ $person : Person()
+ then
+ results.add( $person );
+end
\ No newline at end of file
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectSource.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -93,7 +93,7 @@
* <code>FactHandleImpl</code>.
*/
protected void addObjectSink(final ObjectSink objectSink) {
- if ( this.sink == EmptyObjectSinkAdapter.getInstance() ) {
+ if ( this.sink instanceof EmptyObjectSinkAdapter ) {
this.sink = new SingleObjectSinkAdapter( objectSink );
} else if ( this.sink instanceof SingleObjectSinkAdapter ) {
final CompositeObjectSinkAdapter sinkAdapter = new CompositeObjectSinkAdapter( this.alphaNodeHashingThreshold );
@@ -112,7 +112,7 @@
* The <code>ObjectSink</code> to remove
*/
protected void removeObjectSink(final ObjectSink objectSink) {
- if ( this.sink == EmptyObjectSinkAdapter.getInstance() ) {
+ if ( this.sink instanceof EmptyObjectSinkAdapter ) {
throw new IllegalArgumentException( "Cannot remove a sink, when the list of sinks is null" );
}
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/ObjectTypeNode.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -310,9 +310,9 @@
hasConstraints = this.usesDeclaration( ((BetaNode) sinks[i]).getConstraints() );
}
if ( !hasConstraints && sinks[i] instanceof ObjectSource ) {
- hasConstraints = this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
+ hasConstraints = !this.canSkipOnModify( ((ObjectSource) sinks[i]).getSinkPropagator().getSinks() );
} else if ( sinks[i] instanceof TupleSource ) {
- hasConstraints = this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
+ hasConstraints = !this.canSkipOnModify( ((TupleSource) sinks[i]).getSinkPropagator().getSinks() );
}
}
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -322,14 +322,14 @@
// }
// }
}
-
+
public boolean isObjectMemoryEnabled() {
- throw new UnsupportedOperationException("Rete has no Object memory");
+ throw new UnsupportedOperationException( "Rete has no Object memory" );
}
public void setObjectMemoryEnabled(boolean objectMemoryEnabled) {
- throw new UnsupportedOperationException("ORete has no Object memory");
- }
+ throw new UnsupportedOperationException( "ORete has no Object memory" );
+ }
public static interface ObjectTypeConf {
public ObjectTypeNode[] getObjectTypeNodes();
@@ -343,7 +343,7 @@
public void resetCache();
public boolean isAssignableFrom(Object object);
-
+
public boolean isActive();
}
@@ -351,10 +351,10 @@
implements
ObjectTypeConf,
Serializable {
- private InternalRuleBase ruleBase;
- private FactTemplate factTemplate;
- private ObjectTypeNode concreteObjectTypeNode;
- private ObjectTypeNode[] cache;
+ private InternalRuleBase ruleBase;
+ private FactTemplate factTemplate;
+ private ObjectTypeNode concreteObjectTypeNode;
+ private transient ObjectTypeNode[] cache;
public FactTemplateTypeConf(FactTemplate factTemplate,
InternalRuleBase ruleBase) {
@@ -422,7 +422,7 @@
private final Class cls;
private transient InternalRuleBase ruleBase;
- private ObjectTypeNode[] objectTypeNodes;
+ private transient ObjectTypeNode[] objectTypeNodes;
protected boolean shadowEnabled;
protected Class shadowClass;
@@ -437,7 +437,7 @@
ObjectType objectType = new ClassObjectType( clazz );
this.concreteObjectTypeNode = (ObjectTypeNode) ruleBase.getRete().getObjectTypeNodes().get( objectType );
-
+
// JBRULES-1315: do not add OTN dynamically anymore
if ( this.concreteObjectTypeNode == null ) {
BuildContext context = new BuildContext( ruleBase,
@@ -471,8 +471,8 @@
public ObjectTypeNode getConcreteObjectTypeNode() {
return this.concreteObjectTypeNode;
}
-
- public void setConcreteObjectTypeNode( ObjectTypeNode node ) {
+
+ public void setConcreteObjectTypeNode(ObjectTypeNode node) {
this.concreteObjectTypeNode = node;
}
@@ -605,7 +605,7 @@
*
*/
private void setInstantiator() {
- this.instantiator = ruleBase.getObjenesis().getInstantiatorOf(this.shadowClass);
+ this.instantiator = ruleBase.getObjenesis().getInstantiatorOf( this.shadowClass );
}
public Object getShadow(final Object fact) throws RuntimeDroolsException {
Modified: labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/TupleSource.java
===================================================================
--- labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2008-03-11 19:50:47 UTC (rev 18849)
+++ labs/jbossrules/branches/4.0.x/drools-core/src/main/java/org/drools/reteoo/TupleSource.java 2008-03-11 19:59:04 UTC (rev 18850)
@@ -72,7 +72,7 @@
* <code>Tuples</code>.
*/
protected void addTupleSink(final TupleSink tupleSink) {
- if ( this.sink == EmptyTupleSinkAdapter.getInstance() ) {
+ if ( this.sink instanceof EmptyTupleSinkAdapter ) {
this.sink = new SingleTupleSinkAdapter( tupleSink );
} else if ( this.sink instanceof SingleTupleSinkAdapter ) {
final CompositeTupleSinkAdapter sinkAdapter = new CompositeTupleSinkAdapter();
@@ -91,7 +91,7 @@
* The <code>TupleSink</code> to remove
*/
protected void removeTupleSink(final TupleSink tupleSink) {
- if ( this.sink == EmptyTupleSinkAdapter.getInstance() ) {
+ if ( this.sink instanceof EmptyTupleSinkAdapter ) {
throw new IllegalArgumentException( "Cannot remove a sink, when the list of sinks is null" );
}
More information about the jboss-svn-commits
mailing list