【问题标题】:HornetQ Queue has transaction timeoutHornetQ 队列有事务超时
【发布时间】:2015-05-31 10:44:31
【问题描述】:

我使用 EJB 来实现命令模式。 EJB 是执行业务逻辑的命令服务。我在 J2EE 中知道 EJB 管理事务以及事务超时。

<subsystem xmlns="urn:jboss:domain:transactions:1.1">
    <core-environment>
        <process-id>
            <uuid/>
        </process-id>
    </core-environment>
    <recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
    <coordinator-environment default-timeout="600"/>
</subsystem>

如我所示的配置,事务是受管理的,最多只允许处理 600 秒。有时,我的应用程序需要超过 600 秒才能处理到数据库,然后我尝试将消息发送到队列并收到此错误。

21:34:50,085 ERROR [org.hornetq.ra.HornetQRASessionFactoryImpl] (Thread-102) Could not create session: javax.resource.ResourceException: IJ000460: Error checking for a transaction
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:362)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:464)
    at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:837)
    at org.hornetq.ra.HornetQRASessionFactoryImpl.createQueueSession(HornetQRASessionFactoryImpl.java:237)
    at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_24]
Caused by: javax.resource.ResourceException: IJ000459: Transaction is not active: tx=TransactionImple < ac, BasicAction: 0:ffff0a01071e:2dde2ba2:5514d7c5:d1 status: ActionStatus.ABORTED >
    at org.jboss.jca.core.connectionmanager.tx.TxConnectionManagerImpl.getManagedConnection(TxConnectionManagerImpl.java:352)
    ... 63 more

21:34:50,117 ERROR [stderr] (Thread-102) javax.jms.JMSException: Could not create a session: IJ000460: Error checking for a transaction

21:34:50,118 ERROR [stderr] (Thread-102)    at org.hornetq.ra.HornetQRASessionFactoryImpl.allocateConnection(HornetQRASessionFactoryImpl.java:881)

21:34:50,119 ERROR [stderr] (Thread-102)    at org.hornetq.ra.HornetQRASessionFactoryImpl.createQueueSession(HornetQRASessionFactoryImpl.java:237)

我可以通过增加事务超时值来解决它。但这不是一个好的解决方案。任何人都可以告诉我另一种方法。

【问题讨论】:

    标签: java jakarta-ee jboss jms hornetq


    【解决方案1】:

    作为第一步,尝试将工作负载分成更小的块 - 每个块都依赖于容器管理的事务。

    如果根本不可行;那么你可以考虑使用 Bean Managed Transactions。

    【讨论】:

    • 不幸的是,我的系统在没有使用 jpa 的情况下在 Jboss4 中正常工作。现在我正在升级代码以使用 JPA 和 EJB3 迁移到 Jboss7。但是我不想更改源代码,因为源代码稳定并且在Jboss4上运行良好,业务逻辑看起来很复杂。所以,这个问题可能是我们的系统设计不好,现在很难升级。推荐给所有想要升级到 jboss4 -> 7 或类似的东西的人。请确保你有一个好的设计,不要害怕改变。因为改变或挑战可能会让一切变得更好。
    猜你喜欢
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2016-11-13
    相关资源
    最近更新 更多