Verify that you can do
FileOutputStream fos = new FileOutputStream(...);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeInt(1);
oos.close();
in the same application using the same File and FileOutputStream.
-W
On 09/07/2012, chrisLi <shengtao0077(a)163.com> wrote:
Hi, all
I am trying to serialize a StatefulKnowledgeSession into a file as a
snapshot. But I got the following error:
java.io.IOException: Write error
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:282)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at
java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1793)
at java.io.ObjectOutputStream.flush(ObjectOutputStream.java:699)
at java.io.ObjectOutputStream.close(ObjectOutputStream.java:720)
at com.sample.test.EventDataConsumer.run(EventDataConsumer.java:44)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
However, when I serialized it to a ByteArrayOutputStream, it works
well.
I wrapped the stateful session in a class as a field. And I wrote
writeObject and readObject methods in this class to provide custom
serializing behaviour. The code is as follows:
private void writeObject(ObjectOutputStream out) throws IOException {
System.out.println("writing");
out.defaultWriteObject();
DroolsObjectOutputStream droolsOut = new DroolsObjectOutputStream(
(OutputStream) out);
droolsOut.writeObject(knowledgeBase);
Marshaller marshaller = createSerializableMarshaller(knowledgeBase);
marshaller.marshall(droolsOut, session);
System.out.println("written");
}
private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
System.out.println("read");
in.defaultReadObject();
DroolsObjectInputStream droolsIn = new DroolsObjectInputStream(
(InputStream) in);
this.knowledgeBase = (KnowledgeBase) droolsIn.readObject();
Marshaller marshaller = createSerializableMarshaller(knowledgeBase);
session = marshaller.unmarshall(droolsIn);
}
private Marshaller createSerializableMarshaller(KnowledgeBase
knowledgeBase) {
ObjectMarshallingStrategyAcceptor acceptor = MarshallerFactory
.newClassFilterAcceptor(new String[] { "*.*" });
ObjectMarshallingStrategy strategy = MarshallerFactory
.newSerializeMarshallingStrategy(acceptor);
Marshaller marshaller = MarshallerFactory.newMarshaller(knowledgeBase,
new ObjectMarshallingStrategy[] { strategy });
return marshaller;
}
Out of this class, I utilized the ordinary ObjectoutputStream to serialize
an instance of this class to a file.
Unfortunately, I got the Exception.
Any idea or response will be appreciated, Thank you very much.
--
View this message in context:
http://drools.46999.n3.nabble.com/Write-Error-when-Serializing-a-stateful...
Sent from the Drools: User forum mailing list archive at
Nabble.com.
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users