【问题标题】:Wildfly Transactions野蝇交易
【发布时间】: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


【解决方案1】:

尝试将“自动重新连接”添加到您在 WildFly 中配置的 JNDI 数据源。这样做后不要忘记重新加载服务器。

jdbc:mysql://localhost:3306/database?autoReconnect=true

【讨论】:

    【解决方案2】:

    您在数据源池中的连接数有限。使用此注释,您将为每个方法调用创建一个新事务。如果您在同一事务中不需要 JMS 和数据库等多个资源,请检查您的数据源是否未配置为 XA 数据源。如果您确实需要使用 XA 事务,则可能需要重用每个事务的连接。在几个 jboss 的快速入门中,在 JMS 队列和 XA 数据源之间使用共享事务管理器是很常见的事情。

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 2015-02-26
      • 2018-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多