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

时间:2015-05-23 11:45:41

标签: java-ee servlets jpa dependency-injection entitymanager

我想在Java EE中创建一个登录应用程序。我想过为用户使用html页面,servlet和实体类来实现它,但似乎EntityManager不是线程安全的(不能在servlet中注入,我需要它来检查数据库) )。

我读到了EntityManagerFactory,但是当我可以让容器执行此操作时,我不想管理生成的EntityManager的生命周期。我认为可以使用DAO模式进行一些实现,这样我就可以在servlet中拥有一个实体管理器,类似于包含管理器的DAOImpl,并将该类作为servlet中的私有变量。但我在网上找不到任何有用的教程。

有人可以为此提供实施吗?

2 个答案:

答案 0 :(得分:1)

要做的就是将LoginService创建为@Stateless。它应该包含EntityManager。这个EJB问题是管理登录。

现在将EJB注入您的servlet。

容器会关注并发性。

http://www.adam-bien.com/roller/abien/entry/is_in_an_ejb_injected

答案 1 :(得分:1)

遵循Oracle建议的文档here,任何方法都应该: 要么:

通过SerlvetContextListener在你的dao impl中注入EntityManagerFactory。

 @PersistenceUnit        
 private EntityManagerFactory emf;

或在DaoImpl中注入EntityManager。

@PersistenceContext
    private EntityManager em;