簡體   English   中英

在駱駝路線中使用多個JPA端點的最佳實踐是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM