session.fireAllRules();
GlobalResolver resolver = session.getGlobalResolver();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
marshaller.marshall( baos,
ksession );
baos.close();
byte[] serializedRulebase = DroolsStreamUtils.streamOut( 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) 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;
results.clear();
session.setGlobal( "results",
results );
builder = new PackageBuilder();
builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "../test_Dynamic3_0.drl" ) ) );
pkg = SerializationHelper.serializeObject( 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( 3,
results.size() );
assertEquals( stilton2.getObject(),
results.get( 0 ) );
assertEquals( bob2.getObject(),
results.get( 1 ) );
assertEquals( bob1.getObject(),
results.get( 2 ) );
serializedRulebase = null;
baos = new ByteArrayOutputStream();
ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
marshaller.marshall( baos,
ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );
session.dispose();
// 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;
results.clear();
session.setGlobal( "results",
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( 2,
results.size() );
assertEquals( bob4.getObject(),
results.get( 0 ) );
assertEquals( bob3.getObject(),
results.get( 1 ) );
// 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;
results.clear();
session.setGlobal( "results",
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( 2,
results.size() );
assertEquals( bob6.getObject(),
results.get( 0 ) );
assertEquals( bob5.getObject(),
results.get( 1 ) );
byte[] serializedSession = null;
serializedRulebase = null;
baos = new ByteArrayOutputStream();
ksession = new StatefulKnowledgeSessionImpl( (ReteooStatefulSession) session );
marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase() );
marshaller.marshall( baos,
ksession );
baos.close();
serializedRulebase = DroolsStreamUtils.streamOut( ruleBase );