Jpa 在单例EJB中指定EntityManager;从无状态EJB进行访问。好啊令人不快的

Jpa 在单例EJB中指定EntityManager;从无状态EJB进行访问。好啊令人不快的,jpa,transactions,jndi,entitymanager,Jpa,Transactions,Jndi,Entitymanager,我想从大多数实现中抽象出指定EntityManager的细节,因此我将@PersistenceContext。。。实体管理器;@singletonbean中的声明。该bean有一个getEm方法,应用程序的其余部分使用该方法来获取EntityManager。实际上,有几个EntityManager,都是以相同的方式完成的。执行JPA相关操作的每个@Stateless bean注入@Singleton bean,然后调用getEm方法来获取EntityManager 这种方法有三个主要原因:1将@

我想从大多数实现中抽象出指定EntityManager的细节,因此我将@PersistenceContext。。。实体管理器;@singletonbean中的声明。该bean有一个getEm方法,应用程序的其余部分使用该方法来获取EntityManager。实际上,有几个EntityManager,都是以相同的方式完成的。执行JPA相关操作的每个@Stateless bean注入@Singleton bean,然后调用getEm方法来获取EntityManager

这种方法有三个主要原因:1将@PersistenceContext声明中的unitName规范保留在一个地方,即避免重复注入@PersistenceContext以重复unitName;2保持选项打开,以更改EntityManager的获取,使其不再被注入JNDI查找;3在活动/备用场景中使用多个实体管理器时,允许一些逻辑动态确定适当的实体管理器

几个问题:

这种方法是否存在固有缺陷?如果是这样,是否有更好的方法来实现列出的3个目标? 当以这种方式在注入@Singleton时获取EntityManager时,每个@Stateless bean都会为每个事务容器管理的事务获取一个新的EntityManager。或者我需要做一些特定的事情来防止@Stateless bean正在[重新]使用的EntityManager变得过时吗? 与@Singleton中JNDI查找的2相同。 如果每个事务都没有得到一个新的EntityManager,可能是由于一些JPA/JTA交互,那么我怀疑这种方法不是线程安全的,因为多个@Stateless从@Singleton获取单个EntityManager。有什么办法解决这个问题吗?