[英]What is the best practice for using multiple JPA endpoints in Camel route
我有一條駱駝路線(Camel 2.19.2),它從一個JPA(休眠)端點提取數據,將其轉換並將其存儲到另一個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");
它按我的預期工作。
我做錯了嗎?
最佳做法是什么?
這就是camel-jpa組件的設計方式。 在同一路線中,通過不同的jpa組件在不同的實體管理器之間進行混合並非意料之中的。
因此,刪除該屬性是正確的。
已經有一個名為usePassedInEntityManager
的選項,但僅用於消息頭,這是由於SwitchYard的特殊要求而引起的,SwitchYard希望提供其自己的EntityManager
,Camel必須使用它。 但是,該選項不適用於交換屬性。
必須再次引入另一種選擇,這也可能使用戶感到困惑,盡管像您這樣的用戶使用兩個不同的jpa組件可能會遇到與您相似的問題,並且可能無法發現他們應該刪除該交換屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.