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

Regards,
 


-----Original Message-----
From: rules-users-boun...@lists.jboss.org 
[mailto:rules-users-boun...@lists.jboss.org] On Behalf Of clement.pernot
Sent: Tuesday, July 12, 2011 2:42 PM
To: rules-users@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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to