序列化带有EJB引用的命名类,EJB包含实体管理器



我使用Java EE 6与Glassfish 3.1.2.2。我在那里有一个EJB项目,其中包含无状态会话bean,还有一个WEB项目,其中包含已命名的会话作用域类。

例如:

命名类

@Named
@SessionScoped
public class MyWebController implements Serializable {
@EJB
private MyBean myBean;
}
EJB类
@Stateless
public class MyBean {
@PersistenceContext
private EntityManager em;
}

项目正在运行,但是当我进行代码分析时,我得到以下消息:

可序列化类中的非瞬态非序列化实例字段

这个Serializable类定义了一个非原语的实例字段,它既不是transient的,也不是Serializable的,也不是java.lang的。对象,并且似乎没有实现Externalizable接口或readObject()和writeObject()方法。如果在此字段中存储了不可序列化的对象,则该类的对象将无法正确反序列化。

有人知道,我可以重构我的代码来避免这个吗?

我不是这些话题的专家,但是试试这个:

1)确保你使用的是正确的 @SessionScoped注释:
@Named
@javax.enterprise.context.SessionScoped
public class MyWebController implements Serializable {
  @EJB
  private MyBean myBean;
}

2)尝试使用EJB serializable:

@Stateless
public class MyBean implements Serializable {
    ...
}

3)如果这个溶液一直破裂。尝试用@Inject代替@EJB

最新更新