[rules-users] Drools and serialize

Abhay B. Chaware Abhay.Chaware at kpitcummins.com
Tue Jul 12 05:30:35 EDT 2011


All the facts in working memory ( e.g. Message ) also need to be serializable. 

Regards,
 


-----Original Message-----
From: rules-users-bounces at lists.jboss.org [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of clement.pernot
Sent: Tuesday, July 12, 2011 2:42 PM
To: rules-users at lists.jboss.org
Subject: [rules-users] Drools and serialize

Hi,

I want to serialize a StatefulKnowledgeSession in drools (which have rule
and fact)
Actually i know how to serialize a KnowledgeBase.

Here is my code for serialize a KnowledgeBase:

	        KnowledgeBuilder kBuilder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
	        kBuilder.add( ResourceFactory.newFileResource( "Sample.drl" ),
ResourceType.DRL );
	        if( kBuilder.hasErrors() ){
	            for( KnowledgeBuilderError err: kBuilder.getErrors() ){
	                System.err.println( err.toString() );
	            }
	            throw new IllegalStateException( "DRL errors" );
	        }
	        KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(); 
	        kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );
	        OutputStream os = new FileOutputStream( "droolsCompiledFile" );
	        ObjectOutputStream oos = new ObjectOutputStream( os );
	        oos.writeObject( kBase );
	        oos.close();

This work fine, no problem here.


Here is my code for serialize a StatefulKnowledgeSession:

KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
	        kBuilder.add( ResourceFactory.newFileResource(  "Sample.drl" ),
ResourceType.DRL );
	        if( kBuilder.hasErrors() ){
	            for( KnowledgeBuilderError err: kBuilder.getErrors() ){
	                System.err.println( err.toString() );
	            }
	            throw new IllegalStateException( "DRL errors" );
	        }
	        KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(); 
	        kBase.addKnowledgePackages( kBuilder.getKnowledgePackages() );
	        
	        try {
			KnowledgeBase kbase = readKnowledgeBase();
			StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
			
			Message message = new Message();
			message.setMessage("Hello World");
			message.setStatus(Message.HELLO);
			ksession.insert(message);
			
			Marshaller marshaller = MarshallerFactory.newMarshaller(
ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{
MarshallerFactory.newSerializeMarshallingStrategy() } ); 
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			ObjectMarshallingStrategy oms =
MarshallerFactory.newIdentityMarshallingStrategy();
			marshaller.marshall( baos, ksession );
		       ObjectOutputStream out = new ObjectOutputStream( baos );
		        out.writeObject( marshaller );
		        out.close();
			baos.close();

			ksession.fireAllRules();

		} catch (Throwable t) {
			t.printStackTrace();
		}
	    }

But this didn't work.
I get always the same error:
"java.io.NotSerializableException"
I have try to not implement the "marshall" but this didn't work.
I don't know what I must do. Can someone help me?
Thank.

Best regards,
Clement Pernot

--
View this message in context: http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3161882.html
Sent from the Drools: User forum mailing list archive at Nabble.com.
_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users






More information about the rules-users mailing list