在servlet中注入EntityManager,好像不是线程安全的

Injecting EntityManager in servlet, it seems not thread safe

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

我阅读了有关 EntityManagerFactory 的内容,但我不想管理所生产的 EntityManager 的生命周期,因为我可以让容器来管理它。我认为可以使用 DAO 模式进行一些实现,这样我就可以在 servlet 中拥有一个实体管理器,比如包含一个管理器的 DAOImpl,并将 class 作为 servlet 中的私有变量。但是我在网上找不到任何有用的教程。

有人可以为此提供一个实现吗?

方法是将 LoginService 创建为 @Stateless。它应该包含 EntityManager。此 EJB 问题是管理登录。

现在将 EJB 注入您的 servlet。

容器会处理并发。

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

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

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

 @PersistenceUnit        
 private EntityManagerFactory emf;

或者在你的 DaoImpl 中注入 EntityManager。

@PersistenceContext
    private EntityManager em;