在我的 JavaEE 6 应用程序 (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 UserBl blUser;
}
该 servlet 在登录过程中使用,并且工作正常。但是,如果在大约 10 分钟的不活动时间后从同一个浏览器调用 Servlet,则 UserBl
中的 EntityManager em
变为 NULL
(在使用之前明确检查这一点)。
在其他应用程序(JBoss 5.1.0.GA)中,我遇到了类似的问题,并通过显式检查 NULL
并在这种情况下从上下文中查找 EntitiyManager
来解决它。
我想知道是否存在基本的设计缺陷或者我是否遗漏了某些内容。在这种情况下,@Stateless Bean 也是可能的。但根据我的理解,这也应该适用于 @Stateful
Beans。
最佳答案
据我所知,有状态 bean 的注入(inject)一直存在问题(至少在 JavaEE 5 中)。这可能是钝化激活问题。
但这里您实际上并不需要有状态 bean - EntityManager
是针对每个事务的(默认情况下;您可以将其设置为扩展,以允许它跨越多个请求),而无状态 bean 是正确的方法。
关于java - 一段时间后EntityManager变成NULL(大约10m),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6577037/