Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有JPA组件、循环和wiretap的Apache Camel引发entitymanger cloesd异常_Java_Jpa_Apache Camel - Fatal编程技术网

Java 带有JPA组件、循环和wiretap的Apache Camel引发entitymanger cloesd异常

Java 带有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

我有一个关于窃听和jpa骆驼组件的问题。 我有一条通过无线监听进行异步拆分的路由。 在每个路由中,我都使用jpa生产者来持久化一个实体。 问题是,entitymanager在异步路由到达终点之前关闭。 原因是,在异步路由中使用了相同的entitymanager。主路线到达终点并关闭entitymanager

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. 看