Распределенная транзакция Java EE 6 - получение исключения JTS5031 с помощью Glassfish v3.0.1 - PullRequest
1 голос
/ 07 декабря 2010

Я пытаюсь сделать распределенную транзакцию между двумя базами данных PostgreSQL. Я использую Glassfish v3.0.1.

В моем домене GlassFish у меня настроены два пула соединений, чтобы иметь тип ресурса javax.sql.XADataSource с именем класса org.postgresql.xa.PGXADataSource.

Я пытаюсь создать интеграционный тест для метода EJB без сохранения состояния, который затрагивает обе базы данных. Для выполнения интеграционного теста я создаю встроенную версию Glassfish и ищу EJB через JNDI.

Когда я запускаю интеграционные тесты, в которых участвует только один персистентный модуль, они работают нормально.

Это первая распределенная транзакция, которую я пытаюсь выполнить, поэтому я не уверен, что все настроено правильно.

Я действительно не уверен в том, как найти информацию о том, как решить эту проблему, так как я не совсем уверен, к чему стремится стек. Я просмотрел журналы в моем домене / журналы и не смог ничего найти - есть ли другие журналы? Трассировка стека ниже:

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 (неизвестный источник) at cheetah.services.impl. EJB31_Generated_ AccountService _Intf_ Bean _. createAccount (Неизвестный источник) в cheetah.services.tests.integration.AccountServiceTest.createAccount_ValidParameters_AccountCreated (AccountServiceTest.java:60) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at 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) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:15) в org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:41) в 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.java:193) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:52) в org.junit.runners.ParentRunner.runChildren (ParentRunner.java:191) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:42) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:184) в org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:28) в org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31) в org.junit.runners.ParentRunner.run (ParentRunner.java:236) в org.junit.runners.Suite.runChild (Suite.java:128) в org.junit.runners.Suite.runChild (Suite.java:24)в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:193) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:52) в org.junit.runners.ParentRunner.runChildren (ParentRunner: 191) в org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:42) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:184) в org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:28) в org.junit.internal.runners.statements.RunAfters.evaluate (RunAfters.java:31) в org.junit.runners.ParentRunner.run (ParentRunner.java:236) в junit.framework.JUnit4TestAdapter.run (JUnit4TestAdapter.java:39) в org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run (JUnitTestRunner.java:518) в файле org.ap..junit.JUnitTestRunner.launch (JUnitTestRunner.java:1052) в org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main (JUnitTestRunner.java:906) Вызывается: javg..CORBA.INTERNAL: JTS5031: Исключение [org.omg.CORBA.INTERNAL: vmcid: 0x0 второстепенный код: 0 завершено: возможно] в операции Resource [rollback].vmcid: 0x0 второстепенный код: 0 завершено: нет в com.sun.jts.jta.TransactionManagerImpl.commit (TransactionManagerImpl.java:330) в com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransactionJ_Jej.jpgна com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit (JavaEETransactionManagerSimplified.java:843) на com.sun.ejb.containers.BaseContainer.completeNewTx (BaseContainer.java:4991) ... еще 43

1 Ответ

1 голос
/ 17 января 2011

У меня была похожая проблема (ошибка CORBA JTS5031), которая возникла из-за того, что glassfish хотел подготовленную транзакцию (чего не было в течение 2 лет, в течение которых я ее использовал), а мои dbms (postgres) не были настроены использовать их.

попробуйте поискать в ваших журналах postgres

...