[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