我的应用服务器是 WebSphere Application Server V8。我有一个会话范围的托管 bean,我在其中使用 @EJB 注释注入了 EJB(EJB 3.0)。EJB 是无状态的。
@ManagedBean
@SessionScoped
public class MyBean extends BaseBackingBean implements
Serializable {
@EJB
private IDetails custInfo;
我正在分析会话数据并注意到 NotSerializableException
java.io.NotSerializableException: com.ejb.EJSLocal0SLDetailsImpl_081f812d at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1537) at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1502) at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1420) at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at
现在我尝试将 EJB 标记为瞬态,并且它可以正常工作而不会引发 NotSerializableException 异常。
@EJB
private transient IDetails custInfo;
这是正确的实现还是可以替代的解决方案?
我已经提到EJB 应该是实例变量并在 JSF Managed Beans 中标记为瞬态吗?其中提到不需要将 EJB 标记为瞬态;那么有什么问题呢?