Database EJB代码中未捕获事务提交错误

Database EJB代码中未捕获事务提交错误,database,jpa,jakarta-ee,transactions,wildfly,Database,Jpa,Jakarta Ee,Transactions,Wildfly,当我在flush()之后和commit()之前关闭DB时,会记录一个异常,但代码不会捕获该异常: @Stateless @TransactionAttribute(TransactionAttributeType.NEVER) public class OuterService { @EJB InnerService innerService; public String outerMethod() { try { innerServi

当我在flush()之后和commit()之前关闭DB时,会记录一个异常,但代码不会捕获该异常:

@Stateless
@TransactionAttribute(TransactionAttributeType.NEVER)
public class OuterService {

    @EJB InnerService innerService;

    public String outerMethod() {
        try {
            innerService.innerMethod();
            return "success";
        } catch (Exception e) {
            return "failure";
        }
    }
}

@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class InnerService {

    @PersistenceContext EntityManager em;

    public void innerMethod() {
        em.persist(new Entity());
        em.flush();
    } //put the breakpoint here
}
我在调试模式下运行代码,并在刷新之后但在退出事务方法之前设置断点。当执行暂停时,我停止db服务,然后恢复代码

记录的异常具有以下根本原因:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 提交()期间通信链路失败。事务解析 不知道

但是外部try..catch块没有捕获它,并且该方法成功完成。JTA实现似乎扼杀了异常。如何通知我错误

我已经尝试过BMT和CDI活动,但都没有成功。不过,JavaSE环境中的普通JDBC和JPA(Hibernate,带有内置池和C3p0池)可以工作

我的设置:Ubuntu 17.10、Wildfly 10、MySQL 5.7.20、Connector/J 5.1.44

以下是日志(由于字符限制,删除了一些行):

2018-01-07 12:38:44980信息[stdout](默认任务1)休眠:插入实体值()
2018-01-07 12:39:06027警告[org.jboss.jca.core.connectionmanager.listener.TxConnectionListener](默认任务1)IJ000305:发生连接错误:org.jboss.jca.core.connectionmanager.listener。TxConnectionListener@f0b0aed[state=NORMAL-managed-connection=org.jboss.jca.adapters.jdbc.local。LocalManagedConnection@327b7fd0连接句柄=0 lastReturned=1515316110106 lastValidated=1515316098805 lastCheckedOut=1515316124981 trackByTx=true pool=org.jboss.jca.core.connectionmanager.pool.strategy。OnePool@a4e7bad微通道板=SemaphoreConcurrentLinkedQueueManagedConnectionPool@42037075[pool=TestDS]xaResource=LocalXAResourceImpl@306327f6[connectionListener=f0b0aed connectionManager=6110d60 Warning=false currentXid=null productName=MySQL productVersion=5.7.20-0ubuntu0.17.10.1 jndiName=java:/datasources/TestDS]txSync=TransactionSynchronization@360457732{tx=TransactionImplewasTrackByTx=true Enrolted=true cancel=false}]:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:提交期间通信链路失败()。事务解析未知。
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:425)
位于com.mysql.jdbc.Util.getInstance(Util.java:408)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
位于com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1552)
位于org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:96)
位于org.jboss.jca.core.tx.jbossts.localxaresourceinpl.commit(localxaresourceinpl.java:172)
位于com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:96)
位于com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
位于com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:89)
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
位于org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:636)
位于InnerService$$$view26.innerMethod(未知源)
在OuterService.outerMethod(OuterService.java:23)
位于org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
在OuterService$$$view33.outerMethod(未知源)
test(RestManager.java:112)
2018-01-07 12:39:06032警告[com.arjuna.ats.jta](默认任务-1)ARJUNA016039:onePhaseCommit on(LocalXAResourceImpl@306327f6[connectionListener=f0b0aed connectionManager=6110d60 Warning=false currentXid=null productName=MySQL productVersion=5.7.20-0ubuntu0.17.10.1 jndiName=java:/datasources/TestDS])失败,出现异常XAException.XAER\u RMFAIL:org.jboss.jca.core.spi.transaction.local.LocalXAException:IJ001156:无法提交本地事务
位于org.jboss.jca.core.tx.jbossts.localxaresourceinpl.commit(localxaresourceinpl.java:177)
在com.arjuna.ats.internal.jta.resources.arjunacore.XAOnePhaseResource.commit(XAOnePhaseResource.java:120)上
位于org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:91)
位于InnerService$$$view26.innerMethod(未知源)
在OuterService.outerMethod(OuterService.java:23)
在OuterService$$$view33.outerMethod(未知源)
test(RestManager.java:112)
在RestManager$Proxy$\u$\ uWeld$EnterpriseProxy$.test(未知源)
运行(Thread.java:748)
原因:org.jboss.jca.core.spi.transaction.local.LocalResourceException:提交()期间通信链路失败。事务解析未知。
位于org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:103)
位于org.jboss.jca.core.tx.jbossts.localxaresourceinpl.commit(localxaresourceinpl.java:172)
…248更多
原因:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:提交()期间通信链路失败。事务解析未知。
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:425)
位于com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
位于com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1552)
位于org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:96)
…还有249个

我不确定。可能有几个原因

首先,我尝试增加中的
net\u write\u timeout
属性
2018-01-07 12:38:44,980 INFO  [stdout] (default task-1) Hibernate: insert into Entity values ( )
2018-01-07 12:39:06,027 WARN  [org.jboss.jca.core.connectionmanager.listener.TxConnectionListener] (default task-1) IJ000305: Connection error occured: org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@f0b0aed[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@327b7fd0 connection handles=0 lastReturned=1515316110106 lastValidated=1515316098805 lastCheckedOut=1515316124981 trackByTx=true pool=org.jboss.jca.core.connectionmanager.pool.strategy.OnePool@a4e7bad mcp=SemaphoreConcurrentLinkedQueueManagedConnectionPool@42037075[pool=TestDS] xaResource=LocalXAResourceImpl@306327f6[connectionListener=f0b0aed connectionManager=6110d60 warned=false currentXid=null productName=MySQL productVersion=5.7.20-0ubuntu0.17.10.1 jndiName=java:/datasources/TestDS] txSync=TransactionSynchronization@360457732{tx=TransactionImple < ac, BasicAction: 0:ffff7f000101:-7fd727eb:5a51e37d:1d status: ActionStatus.COMMITTING > wasTrackByTx=true enlisted=true cancel=false}]: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown.
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.Util.getInstance(Util.java:408)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1552)
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:96)
    at org.jboss.jca.core.tx.jbossts.LocalXAResourceImpl.commit(LocalXAResourceImpl.java:172)
    at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:96)
    at com.arjuna.ats.arjuna.AtomicAction.commit(AtomicAction.java:162)
    at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:126)
    at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:89)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:636)
    at InnerService$$$view26.innerMethod(Unknown Source)
    at OuterService.outerMethod(OuterService.java:23)
    at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
    at OuterService$$$view33.outerMethod(Unknown Source)
    at RestManager.test(RestManager.java:112)

2018-01-07 12:39:06,032 WARN  [com.arjuna.ats.jta] (default task-1) ARJUNA016039: onePhaseCommit on < formatId=131077, gtrid_length=47, bqual_length=36, tx_uid=0:ffff7f000101:-7fd727eb:5a51e37d:1d, node_name=mypc, branch_uid=0:ffff7f000101:-7fd727eb:5a51e37d:20, subordinatenodename=null, eis_name=java:/datasources/TestDS > (LocalXAResourceImpl@306327f6[connectionListener=f0b0aed connectionManager=6110d60 warned=false currentXid=null productName=MySQL productVersion=5.7.20-0ubuntu0.17.10.1 jndiName=java:/datasources/TestDS]) failed with exception XAException.XAER_RMFAIL: org.jboss.jca.core.spi.transaction.local.LocalXAException: IJ001156: Could not commit local transaction
    at org.jboss.jca.core.tx.jbossts.LocalXAResourceImpl.commit(LocalXAResourceImpl.java:177)
    at com.arjuna.ats.internal.jta.resources.arjunacore.XAOnePhaseResource.commit(XAOnePhaseResource.java:120)
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.endTransaction(CMTTxInterceptor.java:91)
    at InnerService$$$view26.innerMethod(Unknown Source)
    at OuterService.outerMethod(OuterService.java:23)
    at OuterService$$$view33.outerMethod(Unknown Source)
    at RestManager.test(RestManager.java:112)
    at RestManager$Proxy$_$$_Weld$EnterpriseProxy$.test(Unknown Source)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.jboss.jca.core.spi.transaction.local.LocalResourceException: Communications link failure during commit(). Transaction resolution unknown.
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:103)
    at org.jboss.jca.core.tx.jbossts.LocalXAResourceImpl.commit(LocalXAResourceImpl.java:172)
    ... 248 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown.
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
    at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1552)
    at org.jboss.jca.adapters.jdbc.local.LocalManagedConnection.commit(LocalManagedConnection.java:96)
    ... 249 more