我想从大部分实现中抽象出指定EntityManager的细节,所以我将@PersistenceContext(...) EntityManager em;
声明放在@Singleton
bean中。该bean有一个getEm()
方法,应用程序的其余部分用于获取EntityManager(实际上有几个EntityManagers,都以相同的方式完成)。执行JPA相关操作的每个@Stateless
bean都会注入@Singleton
bean,然后调用getEm()
方法来获取EntityManager。
这种方法有三个主要原因:(1)在unitName
声明中保持@PersistenceContext
的规范在一个地方(即避免重复注入@PersistenceContext
重复{ {1}}); (2)保持选项打开以更改EntityManager的获取,以便稍后注入JNDI查找; (3)在实时/备用场景中使用多个实体管理器时,允许一些逻辑动态地确定合适的实体管理器。
几个问题:
unitName
时),每个@Singleton
bean都会为每个事务(容器管理的事务)获得一个“新的”EntityManager。或者我是否需要做一些特定的事情来防止@Stateless
bean被重新使用的EntityManager变得陈旧?@Stateless
中的JNDI查找#2相同。@Singleton
。有哪些方法可以解决这个问题?