Re: [rules-users] Drools and serialize

2011-07-13 Thread clement.pernot
Sorry, I am new to java/drools. I have less than 1year practice.
I know that my code it's bad, but my goal is to understand how it's work,
then I can make some good stuff.

I realise some improvement in this moment. (I have suppress the line that
you are talking ;)  )

Thank you for all tip.
Serialize and de-serialize work fine.

Have a nice day,
Clement Pernot

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3165175.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


Re: [rules-users] Drools and serialize

2011-07-12 Thread Swindells, Thomas
You don't need the object output stream below - and it's very bad code to give 
access to the same output stream to two parents (the marshaller and the OOS in 
this case) as you can end up just writing garbage if they interleave their 
writes - you don't know the buffering policy that each parent is using.

Thomas

> -Original Message-
> From: rules-users-boun...@lists.jboss.org [mailto:rules-users-
> boun...@lists.jboss.org] On Behalf Of clement.pernot
> Sent: 12 July 2011 13:53
> To: rules-users@lists.jboss.org
> Subject: Re: [rules-users] Drools and serialize
>
> Thank you for all your tips.
>
> I think I have found the solution. (the project run) Now for test that, I try 
> to
> make a project who can un-serialize this.
>
> There it is:
>
> package com.sample;
>
> import java.io.FileOutputStream;
> import java.io.ObjectOutputStream;
> import java.io.OutputStream;
> 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;
>
>
> /**
>  * This is a sample class to launch a rule.
>  */
> 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 {
>   // load up the knowledge base
>   KnowledgeBase kbase = readKnowledgeBase();
>   StatefulKnowledgeSession ksession =
> kbase.newStatefulKnowledgeSession();
>
>   // go !
>   Message message = new Message();
>   message.setMessage("Hello World");
>   message.setStatus(Message.HELLO);
>
>   ksession.insert(message);
>
>   ObjectMarshallingStrategy oms =
> MarshallerFactory.newIdentityMarshallingStrategy();
>   Marshaller marshaller = MarshallerFactory.newMarshaller(
> ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ oms } );
>
>   OutputStream os = new FileOutputStream( rbPath );
>   ObjectOutputStream oos = new ObjectOutputStream( os );
>   marshaller.marshall( os, ksession );
>
>   oos.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();
>
>   

Re: [rules-users] Drools and serialize

2011-07-12 Thread clement.pernot
Thank you for all your tips.

I think I have found the solution. (the project run)
Now for test that, I try to make a project who can un-serialize this.

There it is:

package com.sample;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
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;


/**
 * This is a sample class to launch a rule.
 */
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 {
// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = 
kbase.newStatefulKnowledgeSession();

// go !
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);

ksession.insert(message);

ObjectMarshallingStrategy oms =
MarshallerFactory.newIdentityMarshallingStrategy();
Marshaller marshaller = MarshallerFactory.newMarshaller(
ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ oms } );

OutputStream os = new FileOutputStream( rbPath );
ObjectOutputStream oos = new ObjectOutputStream( os );
marshaller.marshall( os, ksession );
  
oos.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;
}

}

}

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3162316.html
Sent from the Drool

Re: [rules-users] Drools and serialize

2011-07-12 Thread Wolfgang Laun
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  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;
>}
> 

Re: [rules-users] Drools and serialize

2011-07-12 Thread Swindells, Thomas
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();
>   }
>

Re: [rules-users] Drools and serialize

2011-07-12 Thread Abhay B. Chaware
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 t

Re: [rules-users] Drools and serialize

2011-07-12 Thread clement.pernot
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 fo

Re: [rules-users] Drools and serialize

2011-07-12 Thread Abhay B. Chaware
You just need to modify the definition of Message class to add "implements 
Serializable" .



-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 3:32 PM
To: rules-users@lists.jboss.org
Subject: Re: [rules-users] Drools and serialize

Thank you for the hint, I will try that.
I don't know how to do this for the moment, but I will found.

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3161977.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


Re: [rules-users] Drools and serialize

2011-07-12 Thread clement.pernot
Thank you for the hint, I will try that.
I don't know how to do this for the moment, but I will found.

--
View this message in context: 
http://drools.46999.n3.nabble.com/Drools-and-serialize-tp3161882p3161977.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


Re: [rules-users] Drools and serialize

2011-07-12 Thread Abhay B. Chaware
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


[rules-users] Drools and serialize

2011-07-12 Thread clement.pernot
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