关于Stateful Session Bean一个异常

最近又碰到关于Stateful Session Bean一个异常:
15:39:30,731 INFO  [STDOUT] 29.04.2007 15:39:30 *WARN * [Thread-6] AbstractInsta
nceCache: failed to passivate, id=f136guhj-6 (AbstractInstanceCache.java, line 2
14)
javax.ejb.EJBException: Could not passivate; failed to save state
        at org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager.passivate
Session(StatefulSessionFilePersistenceManager.java:423)
        at org.jboss.ejb.plugins.StatefulSessionInstanceCache.passivate(Stateful
SessionInstanceCache.java:107)
        at org.jboss.ejb.plugins.AbstractInstanceCache.tryToPassivate(AbstractIn
stanceCache.java:209)
        at org.jboss.ejb.plugins.AbstractInstanceCache.tryToPassivate(AbstractIn
stanceCache.java:162)
        at org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy$OveragerTask.ru
n(LRUEnterpriseContextCachePolicy.java:450)
        at java.util.TimerThread.mainLoop(Timer.java:432)
        at java.util.TimerThread.run(Timer.java:382)
Caused by: java.io.NotSerializableException: com.ucap.contents.resource.XAResour
ceClientImpl
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)

        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1332)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
04)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1247)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)

        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
        at org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager.passivate
Session(StatefulSessionFilePersistenceManager.java:414)
        ... 6 more
15:39:30,731 WARN  [AbstractInstanceCache] failed to passivate, id=f136guhj-6
javax.ejb.EJBException: Could not passivate; failed to save state
        at org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager.passivate
Session(StatefulSessionFilePersistenceManager.java:423)
        at org.jboss.ejb.plugins.StatefulSessionInstanceCache.passivate(Stateful
SessionInstanceCache.java:107)
        at org.jboss.ejb.plugins.AbstractInstanceCache.tryToPassivate(AbstractIn
stanceCache.java:209)
        at org.jboss.ejb.plugins.AbstractInstanceCache.tryToPassivate(AbstractIn
stanceCache.java:162)
        at org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy$OveragerTask.ru
n(LRUEnterpriseContextCachePolicy.java:450)
        at java.util.TimerThread.mainLoop(Timer.java:432)
        at java.util.TimerThread.run(Timer.java:382)
Caused by: java.io.NotSerializableException: com.ucap.contents.resource.XAResour
ceClientImpl
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)

        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1332)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
04)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1247)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)

        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
        at org.jboss.ejb.plugins.StatefulSessionFilePersistenceManager.passivate
Session(StatefulSessionFilePersistenceManager.java:414)
        ... 6 more
分析及解决:
经过查阅《Enterprise JavaBeans,3rd》p,有如下描述:
When a bean is about to be passivated, its ejbPassivate() method is invoked, alerting the bean instance that it is about to enter the Passivated state. At this time, the bean instance should close any open resources and set all nontransient, nonserializable fields to null. This will prevent problems from occurring when the bean is serialized. Transient fields will simply be ignored.
即对于非transient、非serializable 的属性需要在ejbPassivate() 中设置为null,从而避免序列化时出错。当然,如果在一定时间内,该会话bean再次被调用,容器将激活此会话bean,读取该文件中的状态,重新创建此bean实例,如果需要恢复该变量则需要在ejbActivate()中重新初始化。
参考: http://hi.baidu.com/nine/blog/item/4ec9d539538d32f33a87cecc.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值