Поддержка транзакций для обработчика Springs onMessage - PullRequest
0 голосов
/ 07 февраля 2012

Итак, у меня есть некоторый шаблонный код, который потребляет сообщения из темы:

    public void onMessage(Message message )
{
    try
    {
        // try my conversion
    }
    catch(MyConversionException e)
    {
        //catch conversion error but still consume off topic
    }

    //Any other error i.e. runtime errors will not cause the message to be consumed from topic. So it can be retried

}

Я хочу попытаться преобразовать сообщение в другой объект.Если это приводит к ошибке, я поймаю ее с собственной обработкой исключений и запишу в очередь ошибок.

Мой вопрос: как мне настроить bean-компонент Springs messageListenerContainer на Transactional и использовать только в том случае, если это произошло?место успешно ???

[EDIT] Вот боб:

    <!-- MESSAGE LISTENER CONTAINER -->
<bean id="ListenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="messageListener" ref="MessageListener" />
    <property name="connectionFactory" ref="Tcf" />
    <property name="destinationResolver" ref="JmsDestinationResolver" />
    <property name="receiveTimeout" value="${jms-timeout}" />
    <property name="destinationName" value="${jms-topic}" />
    <property name="concurrency" value="1" />
    <property name="pubSubDomain" value="true" />
    <property name="subscriptionDurable" value="${jms-durable-flag}"/>
    <property name="durableSubscriptionName" value="${jms-durable-name}" />
    <property name="clientId" value="${jms-client-id}"/>
</bean> 

1 Ответ

0 голосов
/ 07 февраля 2012

Не рекомендуется делать это, но вы можете вызвать TransactionStatus.setRollbackOnly ().

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

...