2016-01-13 113 views
0

回滾事務不起作用。Apache Camel和Apache ActiveMQ中的XA事務

我試圖設置在豆ActiveMQComponent參數:

  • cacheLevelName =>CACHE_CONSUMER
  • transacted =>true

如何解決這個錯誤?

登錄:

[ad #8 - JmsConsumer[Caosqueue]] TransactionErrorHandler  WARN Transaction rollback (0x67756120) redelivered(false) for (MessageId: ID:stws2327-61437-1452674698638-1:3:1:1:1 on ExchangeId: ID-stws2327-61436-1452674698403-0-3) due exchange was marked for rollbackOnly 
[ad #8 - JmsConsumer[Caosqueue]] EndpointMessageListener  WARN Execution of JMS message listener failed. Caused by:  [org.apache.camel.RuntimeCamelException - org.apache.camel.RollbackExchangeException: Intended rollback. Exchange[Message: two]] 

路線:

<!-- Next route--> 
<route autoStartup="true" errorHandlerRef="myErrorHandler" id="OperDayRoute"> 
    <from uri="jms:Caosqueue?transacted=true" /> 
    <transacted ref="PROPAGATION_REQUIRED" /> 
    <setHeader headerName="body"> 
    <simple>${body}</simple> 
    </setHeader> 
    <to uri="sql:{{sql.insertBody}}"/> 
    <convertBodyTo type="java.lang.String" /> 
    <choice> 
    <when> 
     <simple>${headers.CamelSqlUpdateCount} != 1</simple> 
     <log message="PROCESSING RESULT IS ${body} - OK" /> 
    </when> 
    <otherwise> 
     <log message="PROCESSING RESULT IS ${body} - NO OK!" /> 
     <camel:rollback markRollbackOnly="true" /> 
     <throwException ref="IllegalRez" /> 
    </otherwise> 
    </choice> 
</route> 

回答

0

這是沒有問題的。 Camel默認報告日誌級別爲WARN的日誌中的回滾。如果您願意,您可以將其更改爲DEBUG

在Spring XML:

<bean id="transactionErrorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder"> 
    <property name="rollbackLoggingLevel" value="DEBUG"/> 
    <property name="transactionTemplate" ref="PROPAGATION_REQUIRED"/> 
</bean> 

<!-- the standard spring transaction template for required --> 
<bean id="PROPAGATION_REQUIRED" class="org.springframework.transaction.support.TransactionTemplate"> 
    <property name="transactionManager" ref="jmsTransactionManager"/> 
</bean> 

應自動駱駝回升。如果沒有,您可以通過route元素的errorHandlerRef屬性在您的路線中明確設置它。

+0

https://github.com/Dugayoyo/camel/blob/master/context - 完整的上下文。並記錄當我運行這個 - https://github.com/Dugayoyo/camel/blob/master/log –

+0

如果你正在使用XA事務,那麼你應該禁用本地JMS事務在駱駝端點(即transacted = false),因爲它將是啓動XA事務的XA連接工廠本身。此外,您在配置中缺少XA資源管理器:https://access.redhat.com/documentation/en-US/Red_Hat_JBoss_Fuse/6.0/html/EIP_Transaction_Guide/files/XaJms-Sample.html。 – raulk