我正在尝试在两个 PostgreSQL 数据库之间进行分布式事务。我正在使用 Glassfish v3.0.1。
在我的 GlassFish 域中,我将两个连接池设置为资源类型为 javax.sql.XADataSource,类名为 org.postgresql.xa.PGXADataSource。
我正在尝试对影响两个数据库的无状态 EJB 方法创建集成测试。为了执行集成测试,我正在创建 glassfish 的嵌入式版本,并通过 JNDI 查找 EJB。
当我运行只涉及一个持久性单元的集成测试时,它们运行良好。
这是我尝试做的第一个分布式事务,所以我不确定一切是否设置正确。
我真的不确定如何找到有关如何解决此问题的信息,因为我不确定堆栈的用途。我查看了 myDomain/logs 中的日志,但找不到任何东西 - 还有其他日志吗?堆栈跟踪如下:
javax.ejb.EJBException:无法完成容器管理的事务。在 com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5002) 在 com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4756) 在 com.sun.ejb.containers.BaseContainer.postInvoke (BaseContainer.java:1955) com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1906) com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:198) com.sun。 ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84) 在 $Proxy101.createAccount(Unknown Source) 在 cheetah.services.impl。EJB31_Generated_ AccountService _Intf_ Beanstatements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:39) at org.apache.tools .ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518) 在 org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052) 在 org.apache.tools .ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906) 引起:javax.transaction.SystemException:org.omg.CORBA.INTERNAL:JTS5031:异常[org.omg.CORBA.INTERNAL:vmcid: 0x0 次要代码:0 已完成:可能] 对资源 [回滚] 操作。vmcid:0x0 次要代码:0 已完成:com.sun 的 com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:330) 没有。