【发布时间】:2016-06-30 13:23:31
【问题描述】:
我的 Wildfly 服务器正在运行需要 30 分钟才能完成的复制方法。对于每个复制的项目,我都会收到一条日志消息。 10 分钟后,服务器打印以下消息大约 20 秒:
javax.persistence.PersistenceException:org.hibernate.exception.GenericJDBCException: 无法打开连接
在此之后,服务器将继续进行复制操作。但是,当服务器完成时,所有事务都会回滚。 所以我尝试为我的复制方法添加这个注释:
@TransactionAttribute(REQUIRES_NEW)
现在服务器正在运行复制操作,没有任何异常,但最后日志显示:
2016-06-30 14:41:06,262 警告 [com.arjuna.ats.jta](线程 1195 (HornetQ-client-global-threads-252748997))ARJUNA016041:准备 (委托会话 [session=ClientSessionImpl [名称=c2eb2924-3eb6-11e6-8fd4-954338fa95f0,用户名=空, 关闭=假,工厂= ClientSessionFactoryImpl [serverLocator=ServerLocatorImpl [initialConnectors=[TransportConfiguration(名称=bdde9687-3eb6-11e6-8fd4-954338fa95f0, 工厂=org-hornetq-core-remoting-impl-invm-InVMConnectorFactory) ?server-id=0], discoveryGroupConfiguration=null], connectorConfig=TransportConfiguration(name=bdde9687-3eb6-11e6-8fd4-954338fa95f0, 工厂=org-hornetq-core-remoting-impl-invm-InVMConnectorFactory) ?server-id=0, backupConfig=null], metaData=(jms-session=,resource-adapter=inbound,)]@62eae143]) 失败 异常 XAException.XA_RBOTHER: javax.transaction.xa.XAException
所有事务再次回滚。 Wildfly 管理控制台统计信息似乎正常。当我尝试复制较少的项目时,操作运行成功,没有任何问题。 我还尝试增加 transaction-default-timeout 值,但结果相同。
更新: 我有一个 MySQL 数据库,我想将一个 bean 复制到具有其他一些值的同一个表中。代码大约 1000 行。
Hibernate 异常发生在以下部分
try {
Query query = em.createQuery("SELECT g FROM PCTree g WHERE.parentKey = :parentKey ORDER BY g.orderNumber");
query.setParameter("parentKey", parentKey);
List res = query.getResultList();
return res;
} catch (Exception e) {
throw new FinderException("find PCTree.findByParentKey: " + parentKey + " => " + e);
}
但我认为有一些连接/交易/等。游泳池溢出。然而,Wildfly 关于连接和事务的统计数据似乎很正常。
【问题讨论】:
-
复制到哪里?可以给我们看看代码吗?
-
该异常意味着所涉及的事务出现问题。打开所有休眠日志并显示_sql=true 并检查。
-
您是否有意进行 XA 会话?如果是这样,还有哪些其他数据源参与了交易?
标签: java hibernate transactions javabeans wildfly