所以问题很简单:
我们正在使用带有 Primefaces 和 EJB 的 JSF 2.0 来处理我们的应用程序,但遇到了一个问题。我们有一个@SessionScoped
bean 来存储我们所有的 bean @Stateful Session Beans
。
在一种情况下,(当我们没有处理来自 JPA 的一些异常时)并且有一个异常:
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.2.0.v20110202-r8913): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "webuser_idwebuser_pk"
Detail: Key (idwebuser)=(6) already exists.
它导致我们的一个@Stateful Session Bean
. 因此,在刷新网站后,当 JSF 仍然正常工作时,在填写表单并尝试提交后,通过调用该 Bean 中的方法会出现异常:
javax.ejb.NoSuchObjectLocalException: The EJB does not exist. session-key: 22900a4d007e1f-6dcc714a-0
最有问题的是,我们必须重新启动并重新部署应用程序以使其在同一台计算机(或 Web 浏览器)上工作,因为 JSF 的@SessionScoped
Bean 以某种方式通过 cookie 或其他方式保存。
所以我猜的解决方案是强制销毁@SessionScoped
该会话或以某种方式刷新会话,但实际上我不知道该怎么做。或者有什么更好的方法。
谢谢!