3

使用时EntityManager,最好在我的程序中获取一个实例PersistenceContext并将其传递,还是应该多次使用依赖注入?

在我的应用程序中,每个客户端都将与一个有状态会话 bean 进行通信,并且每个 bean 都需要EntityManager在某个时候使用。我猜想同时调用 bean 方法(但我什至不确定)。如何保证EntityManager以线程安全的方式使用?有交易吗?每个 bean 中都有一个单独的实例?

抱歉,如果这令人困惑,我是 EJB/JPA 的新手,我找不到任何可以解决我的问题的材料。

4

2 回答 2

3

用于@PersistenceContext注入您EntityManager的 DAO 类。这些是处理数据库操作的类。然后在所有其他(服务)类中注入您的 DAO 类。你的 DAO 应该是一个无状态的 bean(不需要远程接口,只有本地接口)

于 2009-12-27T21:16:40.470 回答
3

是的,您应该将EntityManager实例(对于每个线程/客户端请求将不同)注入到您的有状态会话 bean(它们不会同时调用,至少不会从不同的客户端调用)。

但是,创建 DAO 类没有意义。JPA 已经是一个高级持久性 API,它为您提供 RDBMS 独立性和不同 JPA 实现之间的可移植性。因此,DAO 只会给代码库增加混乱。

对于交易,您实际上不需要做任何事情。默认情况下,会话 bean 中的业务方法具有“必需”事务属性,因此它们将始终在特定于客户端的事务中运行。

于 2009-12-28T12:09:01.323 回答