无法将Tom文件从Tomcat移植到Glassfish。 RESOURCE_LOCAL与JTA相关的错误

时间:2011-03-22 17:26:33

标签: glassfish jta

1 个答案:

答案 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将假设您将在集群中处理事务隔离。