[jboss-svn-commits] JBL Code SVN: r26517 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 13 18:26:14 EDT 2009
Author: mark.proctor at jboss.com
Date: 2009-05-13 18:26:14 -0400 (Wed, 13 May 2009)
New Revision: 26517
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/MiscTest.java
Log:
JBRULES-2048 object references are not shared when deserialized
-unable to fix this, but added failing test for now.
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 2009-05-13 21:18:49 UTC (rev 26516)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MarshallingTest.java 2009-05-13 22:26:14 UTC (rev 26517)
@@ -7,8 +7,10 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
+import java.io.OutputStream;
import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
@@ -41,6 +43,8 @@
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.common.BaseNode;
+import org.drools.common.DroolsObjectInputStream;
+import org.drools.common.DroolsObjectOutputStream;
import org.drools.common.InternalFactHandle;
import org.drools.common.InternalRuleBase;
import org.drools.compiler.PackageBuilder;
@@ -51,6 +55,8 @@
import org.drools.io.ResourceFactory;
import org.drools.marshalling.Marshaller;
import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.marshalling.ObjectMarshallingStrategyAcceptor;
import org.drools.marshalling.impl.DefaultMarshaller;
import org.drools.marshalling.impl.RuleBaseNodes;
import org.drools.reteoo.ObjectTypeNode;
@@ -64,7 +70,7 @@
import org.drools.util.DroolsStreamUtils;
public class MarshallingTest extends TestCase {
-
+
public void testSerializable() throws Exception {
final Reader reader = new InputStreamReader( getClass().getResourceAsStream( "test_Serializable.drl" ) );
@@ -509,9 +515,10 @@
// serialize session and rulebase out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
GlobalResolver resolver = session.getGlobalResolver();
@@ -520,10 +527,12 @@
// now deserialize the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
-
+
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
session.setGlobalResolver( resolver );
// dynamically add a new package
@@ -543,23 +552,21 @@
results = (List) session.getGlobal( "results" );
assertEquals( 4,
results.size() );
-
+
assertEquals( stilton2.getObject(),
results.get( 1 ) );
-
assertEquals( mark.getObject(),
results.get( 2 ) );
-
+
assertEquals( bob.getObject(),
results.get( 3 ) );
-
serializedRulebase = null;
session = SerializationHelper.getSerialisedStatefulSession( session,
ruleBase );
-
+
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
// dispose session
@@ -596,14 +603,15 @@
session.fireAllRules();
GlobalResolver resolver = session.getGlobalResolver();
-
+
// serialize session and rulebase out
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
-
+
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -616,8 +624,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -636,15 +646,15 @@
session.fireAllRules();
assertEquals( 5,
results.size() );
-
+
assertEquals( stilton2.getObject(),
results.get( 1 ) );
-
+
assertEquals( brie3.getObject(),
results.get( 2 ) );
assertEquals( brie2.getObject(),
results.get( 3 ) );
-
+
assertEquals( brie1.getObject(),
results.get( 4 ) );
@@ -678,13 +688,14 @@
InternalFactHandle brie1 = (InternalFactHandle) session.insert( new Cheese( "brie",
10 ) );
session.fireAllRules();
-
+
GlobalResolver resolver = session.getGlobalResolver();
-
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
@@ -698,8 +709,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -732,9 +745,10 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
- ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
@@ -743,8 +757,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -783,9 +799,10 @@
resolver = session.getGlobalResolver();
baos = new ByteArrayOutputStream();
- ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -793,8 +810,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
session.setGlobalResolver( resolver );
results = (List) session.getGlobal( "results" );
@@ -864,11 +883,12 @@
session.fireAllRules();
GlobalResolver resolver = session.getGlobalResolver();
-
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
@@ -882,8 +902,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -916,9 +938,10 @@
serializedRulebase = null;
baos = new ByteArrayOutputStream();
- ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
@@ -927,8 +950,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -957,8 +982,10 @@
// now recreate the rulebase, deserialize the session and test it
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -986,9 +1013,10 @@
byte[] serializedSession = null;
serializedRulebase = null;
baos = new ByteArrayOutputStream();
- ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession ) session );
+ ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
- marshaller.marshall( baos, ksession );
+ marshaller.marshall( baos,
+ ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
@@ -996,8 +1024,10 @@
// Deserialize the rulebase and the session
ruleBase = (RuleBase) DroolsStreamUtils.streamIn( serializedRulebase );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
- ksession = ( StatefulKnowledgeSessionImpl ) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ), KnowledgeBaseFactory.newKnowledgeSessionConfiguration(), EnvironmentFactory.newEnvironment() );
- session = (ReteooStatefulSession ) ksession.session;
+ ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
+ KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ session = (ReteooStatefulSession) ksession.session;
results.clear();
session.setGlobal( "results",
results );
@@ -1024,7 +1054,7 @@
session = SerializationHelper.getSerialisedStatefulSession( session,
ruleBase );
-
+
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
@@ -1472,63 +1502,83 @@
rule1 += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1).getBytes() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
ksession.setGlobal( "list",
- list );
+ list );
// add a person, no cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Person bobba = new Person( "bobba fet",
50 );
ksession.insert( bobba );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 1,
list.size() );
// add another person, no cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Person darth = new Person( "darth vadar",
200 );
ksession.insert( darth );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 2,
list.size() );
// add cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Cheese stilton = new Cheese( "stilton",
5 );
ksession.insert( stilton );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 2,
list.size() );
// remove cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.retract( ksession.getFactHandle( stilton ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
// put 2 cheeses back in
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.insert( stilton );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Cheese brie = new Cheese( "brie",
18 );
ksession.insert( brie );
@@ -1538,21 +1588,27 @@
// now remove a cheese, should be no change
ksession.retract( ksession.getFactHandle( stilton ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a person, should be no change
ksession.retract( ksession.getFactHandle( bobba ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
//removal remaining cheese, should increase by one, as one person left
ksession.retract( ksession.getFactHandle( brie ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 5,
list.size() );
@@ -1575,63 +1631,83 @@
rule1 += "end\n";
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
- kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1 ).getBytes() ), ResourceType.DRL ) ;
-
+ kbuilder.add( ResourceFactory.newByteArrayResource( (header + rule1).getBytes() ),
+ ResourceType.DRL );
+
if ( kbuilder.hasErrors() ) {
fail( kbuilder.getErrors().toString() );
}
-
+
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );
-
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
List list = new ArrayList();
ksession.setGlobal( "list",
- list );
+ list );
// add a person, no cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Person bobba = new Person( "bobba fet",
50 );
ksession.insert( bobba );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 0,
list.size() );
// add another person, no cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Person darth = new Person( "darth vadar",
200 );
ksession.insert( darth );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 0,
list.size() );
// add cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Cheese stilton = new Cheese( "stilton",
5 );
ksession.insert( stilton );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 2,
list.size() );
// remove cheese
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.retract( ksession.getFactHandle( stilton ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 2,
list.size() );
// put 2 cheeses back in
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.insert( stilton );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
Cheese brie = new Cheese( "brie",
18 );
ksession.insert( brie );
@@ -1641,27 +1717,35 @@
// now remove a cheese, should be no change
ksession.retract( ksession.getFactHandle( stilton ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
// now remove a person, should be no change
ksession.retract( ksession.getFactHandle( bobba ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
//removal remaining cheese, no
ksession.retract( ksession.getFactHandle( brie ) );
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.fireAllRules();
assertEquals( 4,
list.size() );
// put one cheese back in, with one person should increase by one
- ksession = getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newIdentityMarshallingStrategy(), true );
+ ksession = getSerialisedStatefulKnowledgeSession( ksession,
+ MarshallerFactory.newIdentityMarshallingStrategy(),
+ true );
ksession.insert( stilton );
ksession.fireAllRules();
assertEquals( 5,
@@ -2074,6 +2158,69 @@
session.getAgenda().getActivations().length );
}
+ /**
+ * test that creates a new knowledge base, new stateful session, inserts new
+ * fact, serializes the knowledge base and session and fact using one output
+ * stream then deserializes and verifies that fact in the session is the
+ * same as fact that was deserialized,
+ *
+ * from the ObjectOutputStream API: "Multiple references to a single object
+ * are encoded using a reference sharing mechanism so that graphs of objects
+ * can be restored to the same shape as when the original was written."
+ *
+ * @see JBRULES-2048
+ *
+ * @throws Exception
+ */
+ public void FIXME_testDroolsObjectOutputInputStream() throws Exception {
+ Person bob = new Person();
+
+ KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+ knowledgeBuilder.add( ResourceFactory.newClassPathResource( "org/drools/integrationtests/test_Serializable.drl" ),
+ ResourceType.DRL );
+
+ KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
+ knowledgeBase.addKnowledgePackages( knowledgeBuilder.getKnowledgePackages() );
+
+ StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession();
+ session.insert( bob );
+
+ assertSame( "these two object references should be same",
+ bob,
+ session.getObjects().iterator().next() );
+
+ Marshaller marshaller = createSerializableMarshaller( knowledgeBase );
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream out = new DroolsObjectOutputStream( baos );
+ out.writeObject( bob );
+ out.writeObject( knowledgeBase );
+ marshaller.marshall( out,
+ session );
+ out.flush();
+ out.close();
+
+ ObjectInputStream in = new DroolsObjectInputStream( new ByteArrayInputStream( baos.toByteArray() ) );
+ Person deserializedBob = (Person) in.readObject();
+ knowledgeBase = (KnowledgeBase) in.readObject();
+ marshaller = createSerializableMarshaller( knowledgeBase );
+ session = marshaller.unmarshall( in );
+ assertSame( "these two object references should be same",
+ deserializedBob,
+ session.getObjects().iterator().next() );
+ in.close();
+ }
+
+
+
+ private Marshaller createSerializableMarshaller(KnowledgeBase knowledgeBase) {
+ ObjectMarshallingStrategyAcceptor acceptor = MarshallerFactory.newClassFilterAcceptor( new String[]{"*.*"} );
+ ObjectMarshallingStrategy strategy = MarshallerFactory.newSerializeMarshallingStrategy( acceptor );
+ Marshaller marshaller = MarshallerFactory.newMarshaller( knowledgeBase,
+ new ObjectMarshallingStrategy[]{strategy} );
+ return marshaller;
+ }
+
protected RuleBase getRuleBase() throws Exception {
return RuleBaseFactory.newRuleBase( RuleBase.RETEOO,
Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-05-13 21:18:49 UTC (rev 26516)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java 2009-05-13 22:26:14 UTC (rev 26517)
@@ -1944,17 +1944,23 @@
RuleBase ruleBase = getRuleBase();
ruleBase.addPackage( pkg );
- ruleBase = SerializationHelper.serializeObject( ruleBase );
+
+ //ruleBase = SerializationHelper.serializeObject( ruleBase );
StatefulSession session = ruleBase.newStatefulSession();
final Cheese stilton = new Cheese( "stinky",
5 );
session.insert( stilton );
- session = SerializationHelper.getSerialisedStatefulSession( session,
- ruleBase );
- final QueryResults results = session.getQueryResults( "simple query" );
- assertEquals( 1,
- results.size() );
+// session = SerializationHelper.getSerialisedStatefulSession( session,
+// ruleBase );
+ for ( int i = 0; i < 10000; i++) {
+ final QueryResults results = session.getQueryResults( "simple query" );
+ assertEquals( 1,
+ results.size() );
+ System.gc();
+ Thread.sleep( 200 );
+ }
+
}
public void testEval() throws Exception {
More information about the jboss-svn-commits
mailing list