2015-11-02 95 views
1

我們有兩個通過EJB進行通信的JBoss服務器。其中之一是擔任客戶。SQLException導致一個階段提交失敗

JBoss A充當客戶端。 對於任何數據庫連接都沒有任何線索。

JBoss B充當主機。 它使用休眠連接到數據庫。

問題的解釋: A正在構造一個對象,並通過EJB-Call將其發送給B. B現在需要將該對象寫入我們的數據庫。 B得到一個異常,因爲一個字段對於數據庫字段來說太長了(我們得到一個SQLException)。 B想要做回滾(事務管理)。

B有以下日誌:

16:05:02,533 WARN [com.arjuna.ats.arjuna] (EJB default - 5) ARJUNA012125: TwoPhaseCoordinator.beforeCompletion - failed for SynchronizationImple< 0:ffff0a380429:-1a12c8ea:56377a11:dd, org.hibernate.engine[email protected]370cc679 >: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute statement 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) 
    at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1316) 
    at org.hibernate.ejb.AbstractEntityManagerImpl$CallbackExceptionMapperImpl.mapManagedFlushFailure(AbstractEntityManagerImpl.java:1510) 
    at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:118) 
    at org.hibernate.engine.transaction.synchronization.internal.RegisteredSynchronization.beforeCompletion(RegisteredSynchronization.java:53) 
    at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:76) 
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:273) 
    at com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.SubordinateAtomicAction.doBeforeCompletion(SubordinateAtomicAction.java:265) 
    at com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.SubordinateAtomicAction.doOnePhaseCommit(SubordinateAtomicAction.java:235) 
    at com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.TransactionImple.doOnePhaseCommit(TransactionImple.java:280) 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionCommitTask.manageTransaction(XidTransactionCommitTask.java:85) 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionManagementTask.run(XidTransactionManagementTask.java:68) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_40] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_40] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_40] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_40] 
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1] 
Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:136) 
    at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:58) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3081) 
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3523) 
    at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:88) 
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:393) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:385) 
    at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:301) 
    at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:339) 
    at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52) 
    at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1240) 
    at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:404) 
    at org.hibernate.engine.transaction.synchronization.internal.SynchronizationCallbackCoordinatorImpl.beforeCompletion(SynchronizationCallbackCoordinatorImpl.java:113) 
    ... 14 more 
Caused by: java.sql.SQLException: ORA-12899: Wert zu groß für Spalte "DB"."TAB012_ACCOUNTDATA_DA_TB"."USERDESCRIPTION" (aktuell: 103, maximal: 100) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439) 
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:395) 
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:802) 
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436) 
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186) 
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521) 
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:205) 
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1008) 
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1307) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3449) 
    at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3530) 
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1350) 
    at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) 
    ... 26 more 

16:05:02,549 INFO [org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl] (EJB default - 5) HHH000010: On release of batch it still contained JDBC statements 
16:05:02,549 ERROR [org.jboss.as.ejb3] (EJB default - 5) JBAS014255: Fehler beim Transaktionsmanagement von Transaktion id [email protected]: javax.transaction.xa.XAException 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionCommitTask.manageTransaction(XidTransactionCommitTask.java:98) 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionManagementTask.run(XidTransactionManagementTask.java:68) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_40] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_40] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_40] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_40] 
    at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40] 
    at org.jboss.threads.JBossThread.run(JBossThread.java:122) [jboss-threads-2.1.1.Final-redhat-1.jar:2.1.1.Final-redhat-1] 
Caused by: javax.transaction.RollbackException 
    at com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.TransactionImple.doOnePhaseCommit(TransactionImple.java:295) 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionCommitTask.manageTransaction(XidTransactionCommitTask.java:85) 
    ... 7 more 

A具有以下日誌:

16:05:02,564 WARN [com.arjuna.ats.jta] (EJB default - 2) ARJUNA016039: onePhaseCommit on < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a380429:-66a054d:56377a0f:26, node_name=1, branch_uid=0:ffff0a380429:-66a054d:56377a0f:27, subordinatenodename=null, eis_name=unknown eis name > (ResourceImpl{transactionKey=0:ffff0a380429:-66a054d:56377a0f:26, [email protected], nodeName='hyundai149', state=null}) failed with exception XAException.XA_RBROLLBACK: javax.transaction.xa.XAException 
at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionCommitTask.manageTransaction(XidTransactionCommitTask.java:98) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionManagementTask.run(XidTransactionManagementTask.java:68) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_40] 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_40] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_40] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_40] 
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40] 
at org.jboss.threads.JBossThread.run(JBossThread.java:122) 
at ...asynchronous invocation...(Unknown Source) 
at org.jboss.ejb.client.remoting.InvocationExceptionResponseHandler$MethodInvocationExceptionResultProducer.getResult(InvocationExceptionResponseHandler.java:99) [jboss-ejb-client-1.0.24.Final-redhat-1.jar:1.0.24.Final-redhat-1] 
at org.jboss.ejb.client.remoting.RemotingConnectionEJBReceiver.sendCommit(RemotingConnectionEJBReceiver.java:324) [jboss-ejb-client-1.0.24.Final-redhat-1.jar:1.0.24.Final-redhat-1] 
at org.jboss.ejb.client.EJBClientManagedTransactionContext$ResourceImpl.commit(EJBClientManagedTransactionContext.java:239) [jboss-ejb-client-1.0.24.Final-redhat-1.jar:1.0.24.Final-redhat-1] 
at com.arjuna.ats.internal.jta.resources.arjunacore.XAResourceRecord.topLevelOnePhaseCommit(XAResourceRecord.java:682) 
at com.arjuna.ats.arjuna.coordinator.BasicAction.onePhaseCommit(BasicAction.java:2270) 
at com.arjuna.ats.arjuna.coordinator.BasicAction.End(BasicAction.java:1475) 
at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:98) 
at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162) 
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1165) 
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126) 
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:75) 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:92) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:276) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:339) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:238) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ejb3.remote.EJBRemoteTransactionPropagatingInterceptor.processInvocation(EJBRemoteTransactionPropagatingInterceptor.java:79) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) [jboss-as-ee-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:55) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) [jboss-as-ee-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) [jboss-invocation-1.1.2.Final-redhat-1.jar:1.1.2.Final-redhat-1] 
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) [jboss-as-ee-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.remote.protocol.versionone.MethodInvocationMessageHandler.invokeMethod(MethodInvocationMessageHandler.java:329) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.remote.protocol.versionone.MethodInvocationMessageHandler.access$100(MethodInvocationMessageHandler.java:70) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at org.jboss.as.ejb3.remote.protocol.versionone.MethodInvocationMessageHandler$1.run(MethodInvocationMessageHandler.java:203) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [rt.jar:1.7.0_40] 
at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_40] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_40] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_40] 
at java.lang.Thread.run(Thread.java:724) [rt.jar:1.7.0_40] 
at org.jboss.threads.JBossThread.run(JBossThread.java:122) 

Caused by: javax.transaction.RollbackException 
    at com.arjuna.ats.internal.jta.transaction.arjunacore.subordinate.TransactionImple.doOnePhaseCommit(TransactionImple.java:295) 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionCommitTask.manageTransaction(XidTransactionCommitTask.java:85) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    at org.jboss.as.ejb3.remote.protocol.versionone.XidTransactionManagementTask.run(XidTransactionManagementTask.java:68) [jboss-as-ejb3-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14] 
    ... 6 more 

看來,那B委託事務管理A.但A沒有任何庫或數據庫連接的信息,我們不希望它們擁有它們。

有什麼辦法可以完全禁用A事務管理嗎?

第B導致的任何進一步的SQL語句在這樣一個異常:

16:05:58,866 WARN [com.arjuna.ats.jta] (EJB default - 6) ARJUNA016061: TransactionImple.enlistResource - XAResource.start returned: XAException.XAER_PROTO for < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a380429:-1a12c8ea:56377a11:e1, node_name=1, branch_uid=0:ffff0a380429:-1a12c8ea:56377a11:e5, subordinatenodename=null, eis_name=java:jboss/DBOracleDS >: org.jboss.jca.core.spi.transaction.local.LocalXAException: IJ001151: Trying to start a new transaction when old is not complete: Old: < formatId=131077, gtrid_length=29, bqual_length=37, tx_uid=0:ffff0a380429:-66a054d:56377a0f:26, node_name=1, branch_uid=0:ffff0a380429:-1a12c8ea:56377a11:e0, subordinatenodename=1, eis_name=java:jboss/DBOracleDS >, New < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a380429:-1a12c8ea:56377a11:e1, node_name=1, branch_uid=0:ffff0a380429:-1a12c8ea:56377a11:e5, subordinatenodename=null, eis_name=java:jboss/DBOracleDS >, Flags 0 
at org.jboss.jca.core.tx.jbossts.LocalXAResourceImpl.start(LocalXAResourceImpl.java:123) 
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:636) 
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:397) 
at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener$TransactionSynchronization.enlist(TxConnectionListener.java:647) 
at org.jboss.jca.core.connectionmanager.listener.TxConnectionListener.enlist(TxConnectionListener.java:305) 
at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.managedConnectionReconnected(TxConnectionManagerImpl.java:467) 
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.reconnectManagedConnection(AbstractConnectionManager.java:599) 
at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:467) 
at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:139) 
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70) [hibernate-entitymanager-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:292) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:214) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:157) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.connection(StatementPreparerImpl.java:56) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1859) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.doQuery(Loader.java:900) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.doList(Loader.java:2526) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.doList(Loader.java:2512) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.Loader.list(Loader.java:2337) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1668) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374) [hibernate-core-4.2.7.SP1-redhat-3.jar:4.2.7.SP1-redhat-3] 
at org.hibernate.internal.CriteriaImpl.uniqueResult(CriteriaImpl.java:396) 

...

16:05:58,900 ERROR [stderr] (EJB default - 6) org.jboss.jca.core.spi.transaction.local.LocalXAException: IJ001151: Trying to start a new transaction when old is not complete: Old: < formatId=131077, gtrid_length=29, bqual_length=37, tx_uid=0:ffff0a380429:-66a054d:56377a0f:26, node_name=1, branch_uid=0:ffff0a380429:-1a12c8ea:56377a11:e0, subordinatenodename=1, eis_name=java:jboss/DBOracleDS >, New < formatId=131077, gtrid_length=29, bqual_length=36, tx_uid=0:ffff0a380429:-1a12c8ea:56377a11:e1, node_name=1, branch_uid=0:ffff0a380429:-1a12c8ea:56377a11:e5, subordinatenodename=null, eis_name=java:jboss/DBOracleDS >, Flags 0 

回答

2

A不需要知道您的數據庫B到什麼在事務上下文中運行。

如果您使用的是EJB,則默認情況下它們將在事務中運行,除非您另行指定。

對於您的情況下,一個解決辦法是,以紀念在B中的EJB作爲

@Transactional(TransactionMode.RequiresNew) 

所以B中的方法將在自己的事務開始,因此A.不影響交易

而且,這將會是可以設置TransactionManagement中給BEAN爲A,這樣您就可以自行管理的事務(永不啓動一個)

@TransactionManagement(TransactionManagementType.BEAN) 

作爲替代你可以到A中的以下內容:

@Transactional(TransactionMode.Never) 
+0

設置TransactionManagement-Annotation解決了問題。謝謝! – Lucas93