使用EntityManager
时,最好是使用PersistenceContext
获取一个实例并在我的程序中传递它,还是应该多次使用依赖注入?
在我的应用程序中,每个客户端都将与有状态会话bean进行通信,并且每个bean在某些时候都需要使用EntityManager
。
我想同时调用bean方法(但我甚至不确定)。
我如何保证以线程安全的方式使用EntityManager
?有交易吗?每个bean中都有一个单独的实例吗?
很抱歉,如果这令人困惑,我是EJB / JPA的新手,我找不到任何解决我问题的材料。
答案 0 :(得分:3)
使用@PersistenceContext
将EntityManager
注入您的DAO课程。这些是将处理数据库操作的类。然后在所有其他(服务)类中注入您的DAO类。您的DAO应该是无状态bean(不需要远程接口,只需本地)
答案 1 :(得分:2)
是的,您应该将EntityManager
个实例(每个线程/客户端请求都不同)注入有状态会话bean(不会同时调用,至少不会从不同的客户端调用)。
创建DAO类没有意义。 JPA已经是一个高级持久性API,它为您提供不同JPA实现之间的RDBMS独立性和可移植性。因此,DAO只会增加代码库的混乱。
对于交易,您实际上不需要做任何事情。会话bean中的业务方法默认具有“必需”事务属性,因此它们将始终在特定于客户端的事务中运行。