Java 带有JPA组件、循环和wiretap的Apache Camel引发entitymanger cloesd异常
我有一个关于窃听和jpa骆驼组件的问题。 我有一条通过无线监听进行异步拆分的路由。 在每个路由中,我都使用jpa生产者来持久化一个实体。 问题是,entitymanager在异步路由到达终点之前关闭。 原因是,在异步路由中使用了相同的entitymanager。主路线到达终点并关闭entitymanagerJava 带有JPA组件、循环和wiretap的Apache Camel引发entitymanger cloesd异常,java,jpa,apache-camel,Java,Jpa,Apache Camel,我有一个关于窃听和jpa骆驼组件的问题。 我有一条通过无线监听进行异步拆分的路由。 在每个路由中,我都使用jpa生产者来持久化一个实体。 问题是,entitymanager在异步路由到达终点之前关闭。 原因是,在异步路由中使用了相同的entitymanager。主路线到达终点并关闭entitymanager public final class JpaHelper { ... public static EntityManager getTargetEntityManager(E
public final class JpaHelper {
...
public static EntityManager getTargetEntityManager(Exchange exchange, ...
...
if (em == null || !em.isOpen()) {
// create a new entity manager
em = entityManagerFactory.createEntityManager();
...
}
}
...
}
例如,如以下路线:
<route id="mainRoute>
<from uri="direct:restendpoint"/>
...
<to uri="jpa:MyEntity"/>
...
<loop copy="true">
...
<wireTap uri="direct:asyncroute"/>
</loop>
</route>
<route id="asyncRoute">
<from uri="direct:asyncroute"/>
...
<to uri="jpa:MyEntity"/>
...
</route>
另一种解决方案可以是窃听。在复制exchange的位置,可以删除CamelEntityManager属性
我的快速修复:在异步路由开始时,我从exchange中删除entitymanager
我使用Camel 2.15.2和Spring Boot 1.2.3.0版本
有人知道更好的解决方案吗?这个问题在Camel v中得到了解决。2.16. 看