2010-12-07 29 views
1

我想兩個PostgreSQL數據庫之間做一個分佈式事務。我正在使用Glassfish v3.0.1。Java EE 6的分佈式事務處理 - 獲取JTS5031異常有關GlassFish V3.0.1

在我的GlassFish域中,我將兩個連接池設置爲具有類名爲org.postgresql.xa.PGXADataSource的javax.sql.XADataSource的資源類型。

我正試圖創建一個無狀態的EJB方法,是擊中兩個數據庫的集成測試。爲了執行集成測試,我創建了glassfish的嵌入式版本,並通過JNDI查找EJB。

當我運行集成測試只涉及一個持久性單元,它們都工作正常。

這是我想要做的第一個分佈式事務,所以我不確定是否所有設置都正確。

我真的不確定如何找到關於如何解決這個問題的信息,因爲我不太確定堆棧的功能。我查看了myDomain/logs中的日誌並找不到任何內容 - 是否還有其他日誌?堆棧跟蹤如下:

javax.ejb.EJBException:無法完成容器管理的事務。 at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5002) at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4756) at 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) at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:84) at $ Proxy101.createAccount(Unknown Source) at cheetah.services.impl。 EJB31_Generated_ 帳戶服務 _Intf_ _.createAccount(來源不明) 在cheetah.services.tests.integration.AccountServiceTest.createAccount_ValidParameters_AccountCreated(AccountServiceTest.java:60) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在java.lang.reflect.Method.invoke(Method.java:597) 在org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall(FrameworkMethod.java:44) 在或g.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners。 statements.InvokeMethod.evaluate(InvokeMethod.java:20) 在org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 在org.junit.internal.runners.statements.RunAfters.evaluate( RunAfters.java:31) 在org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 在org.junit.runners。 BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 在org.junit.runners.ParentRunner $ 3.run(ParentRunner.ja va:193) at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner。java:191) at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42) at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) at org.junit.internal。 runner.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31) at org.junit.runners.ParentRunner.run(ParentRunner。 java:236) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:24) at org.junit.runners.ParentRunner $ 3 .run(ParentRunner.java:193) at org.junit.runners.ParentRunner $ 1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.ja va:191) at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:42) at org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:184) at org.junit.internal。 runner.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.internal.runners.statements.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) at org。 apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(J UnitTestRunner.java:906) 原因:javax.transaction.SystemException:org.omg.CORBA.INTERNAL:JTS5031:異常[org.omg.CORBA.INTERNAL:vmcid:0x0次代碼:0已完成:可能]在資源[回滾]操作。 vmcid:0x0次要代碼:0已完成:否 at com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:330) at com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransaction(JavaEETransactionManagerJTSDelegate.java: 158) 在com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:843) 在com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:4991) ... 43更

回答

1

我有一個類似的問題(CORBA錯誤JTS5031),結果是因爲glassfish想要一個準備好的交易(這是我從來沒有想過的兩年,我一直在使用它),我的dbms(postgres)沒有配置爲使用它們。

試試看你的postgres日誌