HornetQ Queue имеет время ожидания транзакции

1

Я использовал EJB для реализации шаблона Command. 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-ee
jms
jboss
hornetq

1 ответ

1

В качестве первого шага попытайтесь разделить рабочую нагрузку на более мелкие куски - каждый из которых зависит от управляемых транзакциями транзакций.

Если это просто невозможно; то вы можете рассмотреть возможность использования Bean Managed Transactions.

  • 0
    К сожалению, моя система работает должным образом в Jboss4 без использования jpa. Сейчас я обновляю код для перехода на Jboss7 с помощью JPA & EJB3. Но я не хочу менять исходный код, потому что исходный код стабилен и хорошо работает на Jboss4, бизнес-логика выглядит очень сложной. Таким образом, эта проблема может быть связана с тем, что у нашей системы был плохой дизайн, ее сейчас очень сложно обновить. Рекомендация для всех, кто хочет перейти на jboss4 -> 7 или что-то в этом роде. Пожалуйста, убедитесь, что у вас есть хороший дизайн, и не бойтесь менять. Потому что изменения или приемы могут сделать все лучше.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню