在servlet中注入EntityManager,似乎不是线程安全的。

6
我想在Java EE中创建一个登录应用程序。我考虑使用html页面、servlet和用户实体类来实现,但似乎EntityManager不是线程安全的(无法注入到servlet中,而我需要它来检查数据库)。
我了解了EntityManagerFactory,但我不想手动管理产生的EntityManager的生命周期,当我可以让容器自动处理时。我认为可以使用DAO模式来实现某些操作,以便在servlet中拥有一个实体管理器,例如包含管理器的DAOImpl,将其作为私有变量放置在servlet中。但我在网上找不到任何有用的教程。
能否提供此实现的具体方法?

一个对象只有在具有可变状态时才可能不是线程安全的。因此,为什么不使用无状态对象来执行身份验证呢?这难道不是 @Stateless 会话 Bean(EJB 3.0 的一部分)的用途吗? - scottb
你是如何注入它的?是什么让你认为它不是线程安全的? - BalusC
2个回答

2

也可以在这里查看:http://tamanmohamed.blogspot.cz/2012/03/jpa-thread-safety-when-injecting.html - dmatej

1

请遵循Oracle建议的文档这里,任何方法都可以: 要么:

通过SerlvetContextListener在dao实现中注入EntityManagerFactory。

 @PersistenceUnit        
 private EntityManagerFactory emf;

在DaoImpl中注入EntityManager。
@PersistenceContext
    private EntityManager em;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接