builder.addPackageFromDrl( new InputStreamReader( getClass().getResourceAsStream( "../test_Dynamic1_0.drl" ) ) );
Package pkg = SerializationHelper.serializeObject( 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
ByteArrayOutputStream baos = new ByteArrayOutputStream();
StatefulKnowledgeSessionImpl ksession = new StatefulKnowledgeSessionImpl( (AbstractWorkingMemory) session );
Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKieBase() );
marshaller.marshall( baos,
ksession );
baos.close();
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 );
marshaller = MarshallerFactory.newMarshaller( new KnowledgeBaseImpl( ruleBase ) );
ksession = (StatefulKnowledgeSessionImpl) marshaller.unmarshall( new ByteArrayInputStream( baos.toByteArray() ),
KnowledgeBaseFactory.newKnowledgeSessionConfiguration(),
EnvironmentFactory.newEnvironment() );
session = (AbstractWorkingMemory) ksession.session;
session.setGlobalResolver( resolver );
// dynamically add a new package
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 ) );
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( 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
session.dispose();
}