stateful session bean can not be passivated

I used java.io.BufferedInputStream in a class which will be used in a stateful session bean.Because the java.io.BufferedInputStream class does not implement the java.io.Serializable them the EJB Container ,I use JBOSS said "stateful session bean can not be passivated".The Exception as follow

[Container factory] java.rmi.ServerException: Could not passivate; nested exception is:

[Container factory] java.io.NotSerializableException: java.io.BufferedInputStream

[Container factory] java.io.NotSerializableException: java.io.BufferedInputStream

[Container factory] at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1148)

[Container factory] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)

[Container factory] at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1827)

[Container factory] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:480)

[Container factory] at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1214)

[Container factory] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)

[Container factory] at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1827)

[Container factory] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:480)

[Container factory] at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1214)

[Container factory] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)

[Container factory] at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1827)

[Container factory] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:480)

[Container factory] at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1214)

[Container factory] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)

[Container factory] at java.io.ObjectOutputStream.outputClassFields(ObjectOutputStream.java:1827)

[Container factory] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:480)

[Container factory] at java.io.ObjectOutputStream.outputObject(ObjectOutputStream.java:1214)

[Container factory] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:366)

[Container factory] at org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager.passivateSession(StatefulSessionFilePersistenceManager.java:278)

[Container factory] at org.jboss.ejb.plugins.StatefulSessionInstanceCache.passivate(StatefulSessionInstanceCache.java:54)

[Container factory] at org.jboss.ejb.plugins.AbstractInstanceCache$1.execute(AbstractInstanceCache.java:668)

[Container factory] at org.jboss.util.WorkerQueue$QueueLoop.run(WorkerQueue.java:199)

[Container factory] at java.lang.Thread.run(Thread.java:484)

my question is that if I use some classes which is NotSerializable in session beans ,how to make it to be passivated by EJB Container like JBOSS

thanks in advance

[3120 byte] By [mymymymycn] at [2007-9-26 4:01:10]
# 1

Hi,

I cannot tell you how to handle all the nonserializable objects while passivating , but in your case their is a way.

1. define the bufferedinputstream as transient

2. in ejbpassivate store the no of bytes read

3. in ejbactivate see how many bytes you have read and move to that position

hope that helps.

mohan

mohanN at 2007-6-29 12:56:44 > top of Java-index,Other Topics,Patterns & OO Design...
# 2
please define a class which extend java.io.BufferInputStream class and implements java.io.Serializable interface,instead of using java.io.BufferInputStream directly. my email is szlzhm@163.com
szlzhm at 2007-6-29 12:56:44 > top of Java-index,Other Topics,Patterns & OO Design...