Java EntityManager在一段时间后变为空(约10m)
在我的JavaEE6应用程序(JBoss 6.0.0.Final)中,我有这样一个类层次结构Java EntityManager在一段时间后变为空(约10m),java,jpa,jakarta-ee,ejb-3.0,jpa-2.0,Java,Jpa,Jakarta Ee,Ejb 3.0,Jpa 2.0,在我的JavaEE6应用程序(JBoss 6.0.0.Final)中,我有这样一个类层次结构 @Stateful public class UserFacade { @Inject @MyRepository private EntityManager em; } @Stateful public class UserBl { @EJB private UserFacade fUser; } public class MyServlet { @EJB private User
@Stateful public class UserFacade
{
@Inject @MyRepository
private EntityManager em;
}
@Stateful public class UserBl
{
@EJB private UserFacade fUser;
}
public class MyServlet
{
@EJB private UserBl blUser;
}
servlet在登录过程中使用,工作正常。但是,如果在大约10分钟的非活动期后从同一浏览器调用servlet,则UserBl
中的EntityManager em
将变为NULL
(在使用它之前明确检查)
在另一个应用程序(JBoss 5.1.0.GA)中,我发布了一个类似的问题,并通过显式检查NULL
并从上下文中查找EntityManager
解决了这个问题
我想知道是否有一个基本的设计缺陷,或如果我错过了什么。在这个场景中,也可以使用无状态的bean。但据我所知,这也适用于
@Stateful
bean。据我回忆,有状态bean的注入是有问题的(至少在JavaEE 5中是这样)。这可能是钝化激活问题
但是您在这里并不真正需要有状态bean,
EntityManager
是每个事务(默认情况下,您可以将其设置为extended,从而允许它跨越多个请求),无状态bean是正确的方法。据我回忆,有状态bean的注入是有问题的(至少在JavaEE 5中是这样)。这可能是钝化激活问题
但是这里并不真正需要有状态bean,EntityManager
是每个事务(默认情况下,您可以将其设置为extended,从而允许它跨越多个请求),而无状态bean是正确的方法