ServiceMix(v4.4.2)内で実行されるラクダトランザクションを調査しています。以下は私のルートです:
from(WEBSERVICE_CAMEL_ENDPOINT).to("jms:queue:a");
from("jms:queue:a")
.transacted("PROPAGATION_REQUIRED")
.process(new Processor() {
@Override
public void process(Exchange arg0) throws Exception {
System.exit(1); // A
}
})
;
関連するBeanは次のとおりです。
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="transacted" value="true" />
<property name="transactionManager" ref="txManager" />
<property name="useMessageIDAsCorrelationID" value="true" />
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="txManager" />
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
</bean>
これを実行してWebサービスを呼び出すと、ServiceMixがシャットダウンされます。ServiceMixを再起動すると、メッセージはデッドレターキュー(ActiveMQ.DLQ)に移動されました。ポイントAにブレークポイントを設定し、手動でタスクマネージャーを使用してServiceMixをシャットダウンした場合も、同じ動作が見られます。
これはいつ、どのように行われますか?