2012-02-07 6 views
0

Так что есть шаблонный код, который потребляет сообщения от темы:Поддержка транзакций для Спрингс OnMessage обработчика

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 

} 

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

Мой вопрос: как настроить Springs messageListenerContainer bean для транзакции и использовать только, если это произошло успешно ???

[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

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

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

+0

Я хочу поймать свое собственное исключение, но не уничтожить ничего, что вызывает какое-либо другое исключение. – Mick

+0

Попробуйте TransactionStatus.setRollbackOnly() –

 Смежные вопросы

  • Нет связанных вопросов^_^