【发布时间】:2012-07-18 04:40:16
【问题描述】:
我正在使用 EclipseLink (JPA 2.0) 在 netbeans 中运行 JSF + Primefaces + tomcat 6.0.32 的环境。
我的应用程序运行良好,但每次运行它时,我都会收到很多警告说不能序列化我的会话 bean,并为每个会话 bean 显示这样的块:
18-jul-2012 23:05:46 org.apache.catalina.session.StandardSession writeObject
ADVERTENCIA: No puedo serializar atributo de sesión facturacionController para sesión 62A53325838E1E7C6EB6607B1E7965E6
java.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1164)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1518)
... and so on...
问题是我的会话 bean 已经实现了 Serializable。 那么我能做些什么来解决这个问题呢?
谢谢!
---- 添加信息 07/20/2012 ----
我从会话 bean 中引用 EntityManager 的唯一一点是当我在 getter 属性中创建 jpaController 时,如下所示:
private JpaController getJpaController() {
if (jpaController == null) {
jpaController = new JpaController(Persistence.createEntityManagerFactory("myPersistenceUnit"));
}
return jpaControllerPedido;
}
那是因为我这样定义了 jpaController 构造函数:
public JpaController(EntityManagerFactory emf) {
this.emf = emf;
}
【问题讨论】:
-
请发布完整的 StackTrace。此外,也许this post 可以帮助您解决问题:ava.io.NotSerializableException: org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl (JPA with JSF)。
-
您在会话范围的 JSF 托管 bean 中保留对
EntityManager的引用的确切原因是什么?您是在尝试模拟有状态的 EJB 吗? -
感谢您的回复!,我不是想总结一个有状态的 EJB,当我在 getter 属性中创建 JPA 控制器时,我有一个参考。我在问题中添加了代码。
标签: jsf jpa session-bean