This looks wrong to me
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
Marshaller marshaller = MarshallerFactory.newMarshaller( 
ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ oms } );

                        marshaller.marshall( baos, ksession );

                        ObjectOutputStream out = new ObjectOutputStream( baos );
                    out.writeObject( marshaller );
                    out.close();

Presumably the marshaller is writing out the knowledge session to the output 
stream, then you are trying to use an object output stream to output the 
marshaller you just used.
I think in this case you need to use one or the other - either just write out 
the knowledgebase through the objectOutputStream, or write out the knowledge 
base with a custom marshaling strategy with the Marshaller, not both!

Thomas
> -----Original Message-----
> From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
> boun...@lists.jboss.org] On Behalf Of Abhay B. Chaware
> Sent: 12 July 2011 11:46
> To: Rules Users List
> Subject: Re: [rules-users] Drools and serialize
>
> Haven't used this before, but looks like DefaultMarshaller is not 
> serializable.
>
> What I've done in past is directly serializing and deserializing knowledgebase
> without using Marshaller. That worked.
>
> -abhay
>
> -----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 4:07 PM
> To: rules-users@lists.jboss.org
> Subject: Re: [rules-users] Drools and serialize
>
> I have try what you say. This didn't work.
> here is my full code:
>
> package com.sample;
>
> import java.io.ByteArrayOutputStream;
> import java.io.ObjectOutputStream;
> import java.io.Serializable;
>
> import org.drools.KnowledgeBase;
> import org.drools.KnowledgeBaseFactory;
> import org.drools.builder.KnowledgeBuilder;
> import org.drools.builder.KnowledgeBuilderError;
> import org.drools.builder.KnowledgeBuilderErrors;
> import org.drools.builder.KnowledgeBuilderFactory;
> import org.drools.builder.ResourceType;
> import org.drools.io.ResourceFactory;
> import org.drools.marshalling.Marshaller;
> import org.drools.marshalling.MarshallerFactory;
> import org.drools.marshalling.ObjectMarshallingStrategy;
> import org.drools.runtime.StatefulKnowledgeSession;
>
> public class test{
>
>       private static void compileRuleBase2( String drlPath, String rbPath )
> throws Exception {
>               KnowledgeBuilder kBuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder();
>               kBuilder.add( ResourceFactory.newFileResource( drlPath ),
> 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);
>
>                       ObjectMarshallingStrategy oms =
> MarshallerFactory.newIdentityMarshallingStrategy();
>               ByteArrayOutputStream baos = new ByteArrayOutputStream();
>                       Marshaller marshaller =
> MarshallerFactory.newMarshaller( ksession.getKnowledgeBase(), new
> ObjectMarshallingStrategy[]{ oms } );
>
>                       marshaller.marshall( baos, ksession );
>
>                       ObjectOutputStream out = new
> ObjectOutputStream( baos );
>                   out.writeObject( marshaller );
>                   out.close();
>
>                       baos.close();
>                       ksession.fireAllRules();
>
>               } catch (Throwable t) {
>                       t.printStackTrace();
>               }
>           }
>
>       public static final void main(String[] args) {
>               try {
>                       compileRuleBase2("Sample.drl",
> "drools_compiled_file_with_fact" );
>               } catch (Exception e) {
>                       e.printStackTrace();
>               }
>       }
>
>       private static KnowledgeBase readKnowledgeBase() throws
> Exception {
>               KnowledgeBuilder kbuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder();
>
>       kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
> ResourceType.DRL);
>               KnowledgeBuilderErrors errors = kbuilder.getErrors();
>               if (errors.size() > 0) {
>                       for (KnowledgeBuilderError error: errors) {
>                               System.err.println(error);
>                       }
>                       throw new IllegalArgumentException("Could not
> parse knowledge.");
>               }
>               KnowledgeBase kbase =
> KnowledgeBaseFactory.newKnowledgeBase();
>
>       kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
>               return kbase;
>       }
>
>       public static class Message implements Serializable{
>
>               public static final int HELLO = 0;
>               public static final int GOODBYE = 1;
>               private String message;
>               private int status;
>
>               public String getMessage() {
>                       return this.message;
>               }
>               public void setMessage(String message) {
>                       this.message = message;
>               }
>               public int getStatus() {
>                       return this.status;
>               }
>               public void setStatus(int status) {
>                       this.status = status;
>               }
>       }
> }
>
>
>
> here is my error:
>
> java.io.NotSerializableException:
> org.drools.marshalling.impl.DefaultMarshaller
>       at
> java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
>       at
> java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
>       at com.sample.test.compileRuleBase2(test.java:59)
>       at com.sample.test.main(test.java:73)
>
>
> Thank you for your reply, I think I am near the solution
>
> --
> View this message in context: http://drools.46999.n3.nabble.com/Drools-
> and-serialize-tp3161882p3162038.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


**************************************************************************************
This message is confidential and intended only for the addressee. If you have 
received this message in error, please immediately notify the 
postmas...@nds.com and delete it from your system as well as any copies. The 
content of e-mails as well as traffic data may be monitored by NDS for 
employment and security purposes. To protect the environment please do not 
print this e-mail unless necessary.

NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18 4EX, 
United Kingdom. A company registered in England and Wales. Registered no. 
3080780. VAT no. GB 603 8808 40-00
**************************************************************************************

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

Reply via email to