1

我正在尝试在两个 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) 没有。

4

1 回答 1

1

我有一个类似的问题(CORBA 错误 JTS5031),原来是因为 glassfish 想要一个准备好的事务(在我使用它的 2 年中它从未想要过)并且我的 dbms(postgres)没有配置为使用它们.

尝试查看您的 postgres 日志

于 2011-01-17T04:34:45.930 回答