答案 0 :(得分:2)
在您的代码中的某个地方,您可能正在使用看起来像这样的代码注入EntityManager
:
@PersistanceContext // Requires JTA
EntityManager em;
在这种情况下,你要问容器(Glassfish本身,为你创建和管理EntityManager
。Glassfish是可集群的,试图保护你不会意外地在不是真正的多个服务器上进行交易ACID,但要求您使用JTA事务(可在多个群集服务器之间共享)。
如果您确定无法为此应用程序群集glassfish容器,则可以安全地继续使用RESOURCE_LOCAL事务,但是,您不能让Glassfish为您管理EntityManager
。您可以让Glassfish管理EntityManagerFactory
。
@PersistanceUnit // Does NOT require JTA
EntityManagerFactory factory;
对于RESOURCE_LOCAL的持久性单元,这是安全的。您只需要使用EntityManager
从工厂请求factory.createEntityManager()
。
现在您的EntityManager是应用程序管理的,而不是容器管理的。因此,Glassfish将假设您将在集群中处理事务隔离。