2016-09-14 14 views
2

ルート内に複数のトランザクションスコープを作成する必要があります。以下のようなもの。Apache Camel:ルート内の複数のトランザクション

<route> 
    <from uri="activemq:queue:foo"/> 
    <transacted ref="required"/> 
    <to uri="activemq:queue:bar"/> 
    <to uri="bean:database1?method=insert(*,*)"/> 
    <transacted ref="requiresNew"/> 
    <to uri="bean:database2?method=insert(*,*)"/> 
</route> 

上記のルートを作成すると、以下のエラーが発生します。 java.lang.IllegalArgumentExceptionが: -

エラー2016年9月13日14時32分32秒servlet.FrameworkServletコンテキストの初期化 org.apache.camel.RuntimeCamelExceptionに失敗した出力の最上位として追加する必要がありますルート。 Transacted [ref:requiresNew]をルートの先頭に移動してみてください。 org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642)で

は、ドキュメントやフォーラムを見て、唯一のトランザクションスコープは、ルート内で許可されているように見えます。 Routeからトランザクションを制御し、複数のトランザクションスコープを作成できるソリューションを探しています。

これは現在許可されていますか?

答えて

2

経路ごとに1つのトランザクションポリシーしか持つことはできませんが、異なるポリシーを必要とするルートの部分を別のルートに分けることもできます(詳しくはthe official documentationをご覧ください)。

<route> 
    <from uri="activemq:queue:foo"/> 
    <transacted ref="required"/> 
    <to uri="activemq:queue:bar"/> 
    <to uri="bean:database1?method=insert(*,*)"/> 
    <to uri="direct:requiresNew"/> 
</route> 

<route> 
    <from uri="direct:requiresNew"/> 
    <transacted ref="requiresNew"/> 
    <to uri="bean:database2?method=insert(*,*)"/> 
</route> 
関連する問題