在我的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,则EntityManager em
中的UserBl
变为NULL
(在使用之前明确检查)。
在另一个应用程序(JBoss 5.1.0.GA)中,我发布了类似的代码并通过显式检查NULL
并在该情况下从上下文中查找EntitiyManager
来解决它。
我想知道是否存在基本的设计缺陷,或者我是否遗漏了某些东西。在这种情况下,@Stateless
豆也是可能的。但据我了解,这也适用于@Stateful
豆。
答案 0 :(得分:1)
据我所知,注入有状态bean一直存在问题(至少在JavaEE 5中)。这可能是钝化激活问题。
但是你真的不需要有状态bean - EntityManager
是每个事务(默认情况下;你可以将它设置为扩展,允许它跨越多个请求)和无状态bean是正确的方法去。