Arc*_*ano 7 serialization transient java-ee
我应该像transientJava EE 一样声明注入的变量吗?
我收到一个FindBugs警告:
类com.playaround.HelloServlet定义非瞬态非可序列化实例字段accelerationUnit
此Serializable类定义非原始实例字段,该字段既不是瞬态的,可序列化的,也不是java.lang.Object,并且似乎不实现Externalizable接口或readObject()和writeObject()方法.
如果在此字段中存储非Serializable对象,则不会正确反序列化此类的对象.
游戏中的代码是:
/**
* Sample of a web service reference.
*/
@WebServiceRef
private AccelerationUnit accelerationUnit;
Run Code Online (Sandbox Code Playgroud)
同样的问题适用于@Resource,@Inject,@PersistenceUnit等.
这取决于;)使用@Inject和其他CDI注释,您应该检查JSR-299规范的第6.6章.你已经掌握了哪些豆类具有"钝化能力"的信息.
关于无状态和单例会话bean,根据EJB规范,它们不能被序列化(因为不会发生ejb钝化)
最后的想法和最有问题的是有状态会话bean.激活后将恢复所有JavaEE资源(EJB,InitialContext,SessionContext等),但您必须处理其他非可序列化字段并打开连接.因此,在您的情况下,您应该将accelerationUnit标记为瞬态并在ejbActivate事件中恢复,或者让CDI和生产者方法自动注入字段.