2017-10-06 8 views
0

私は1つのJPA(Hibernate)エンドポイントからデータを抽出し、それを変換して別のJPAエンドポイントに保存するラクダルート(Camel 2.19.2)を持っています。このようにCamelルートで複数のJPAエンドポイントを使用するベストプラクティス

from("direct:start") 
    .to("sourcjpa:com.somepackage.SomeEntity?persistenceUnit=mySource&namedQuery=myQuery") 
    .bean("transformBean") 
    .to("targetjpa:com.anotherpackage.AnotherEntity"); 

これは、エンティティマネージャがターゲットエンティティクラスを認識できないというエラーで失敗します。私がそれをデバッグすると、私はCamelがsourcejpaからエンティティマネージャを再利用していることを知っています。これは交換プロパティに格納されています。

私はこのようなルートを変更する場合:私は予想通り

from("direct:start") 
    .to("sourcjpa:com.somepackage.SomeEntity?persistenceUnit=mySource&namedQuery=myQuery") 
    .bean("transformBean") 
    .removeProperty(JpaConstants.ENTITY_MANAGER) 
    .to("targetjpa:com.anotherpackage.AnotherEntity"); 

それは動作します。

私は間違っていますか?

このためのベストプラクティスは何ですか?

答えて

1

これは、ラクダjpaコンポーネントの設計方法です。同じルートの異なるjpコンポーネントを介して、異なるエンティティマネージャ間で混在させることは意図されていませんでした。

したがって、このプロパティを削除しても問題はありません。

すでにusePassedInEntityManagerという名前のオプションがありますが、これはCamelが使用する必要がある独自のEntityManagerを提供したいSwitchYardからの特別な要求によるものです。ただし、そのオプションは交換プロパティには適用されません。

2つの異なるjpaコンポーネントを使用しているユーザーが同じような問題に遭遇する可能性がありますが、その交換プロパティを削除する必要があることがわからない場合もあります。

関連する問題