[rules-users] Drools and serialize

Wolfgang Laun wolfgang.laun at gmail.com
Tue Jul 12 07:23:33 EDT 2011


You call
   ObjectOutputStream out = new ObjectOutputStream( baos );
   out.writeObject( marshaller );
which would (if it succeeded) just serialize the MarshallerImpl, which is
useless as it is nothing but the ballpen with which you write. You need to
serialize the "text" via a call to
   marshaller.marshall(...)
as you do. But, to really get it on paper, you must write to a file. Using
FileOutputStream might be an option.

-W


On 12 July 2011 12:37, clement.pernot <clement.pernot at newel.net> wrote:

> 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110712/63044237/attachment.html 


More information about the rules-users mailing list