当前位置: 首页 > 知识库问答 >
问题:

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

慕宏儒
2023-03-14

我有一个关于窃听和jpa-camel组件的问题。我有一个通过窃听拆分的异步路由。在每个路由中,我使用一个jpa生产者来持久化一个实体。问题是,在异步路由到达终点之前,entityManager已关闭。原因是异步路由中使用了相同的entityManager。主路由到达终点并关闭entityManager。

例如,如以下路线:

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

我认为一个可能的解决方案是检查entitymanager是否为null或已关闭。如果为null或已关闭,请创建新的entitymanager。

public final class JpaHelper {
    ...
    public static EntityManager getTargetEntityManager(Exchange exchange, ...
        ...
        if (em == null || !em.isOpen()) {
            // create a new entity manager
            em = entityManagerFactory.createEntityManager();
        ...
        }
    }
    ...
}

另一个解决方案是窃听。在复制交换的地方,可以删除“CamelEntityManager”属性。

我的快速修复:在异步路由的开始,我从交换中删除了entityManager。

我使用Camel 2.15.2和Spring Boot 1.2.3。释放

有人知道更好的解决方案吗?

共有1个答案

周高畅
2023-03-14

这个问题在Camel v.2.16中得到了解决。见文件

 类似资料:
  • 问题内容: 我有一个对象,该对象具有对另一个对象的循环引用。考虑到这些对象之间的关系,这是正确的设计。 为了显示 不出所料,当我尝试使用Json序列化计算机或客户对象时遇到了一个问题。我不确定是如何解决此问题的,因为我不想破坏计算机和客户对象之间的关系。解决此问题有哪些选择? 编辑 目前,我正在使用Controller基类提供的Json方法。因此,我正在做的序列化基本如下: 问题答案: 更新: 不

  • 对于range(),我有一个非常奇怪的问题;根据文件: 但当我这样做时: 甚至 输出奇怪地以一系列的方式重复 这意味着它将返回到每个循环后的第一个ID。 当我只是放置一个手动数组时,它的工作非常有序,没有重复: 我做错了什么(又一次??) 编辑I 下面是整个脚本: http://pastebin.com/zhm3ub6n 它实际上是simplehtmldom脚本中包含的slashdot刮取示例的稍

  • 我做了一些测试,看看如何将combobox绑定到一些bean属性,但我得到了一个异常:“ConversionException:无法将值转换为字符串在..........”我的示例在使用组合框的indexedContainer时工作正常,但是在使用BeanItem容器时遇到了一些问题。我所拥有的:1。TestCountry,BeanItemContainer的简单java bean(为了简单起见,

  • 问题内容: 我正在尝试使用jQuery的循环来遍历此JSON并将其添加到named中。JSON如下: 我通过使用以下代码获取此JSON: 有什么办法吗? 问题答案: 尝试(未试用): 我想了三个独立的循环,因为您可能希望对每个数据集进行不同的处理(justIn,recent,old)。如果没有,您可以执行以下操作:

  • 问题内容: 有人可以解释吗? 什么是 […]? 问题答案: 只是Python告诉您您有一个循环引用。它足够聪明,不会进入尝试打印出来的无限循环。

  • 问题内容: 我需要创建一个包含100个数字(1-100)的数组,然后计算所有数字将是多少(1 + 2 + 3 + 4 + .. + 100 =总和)。 我不想手动将这些数字输入到数组中,因为要花100个点才能花费一些时间,并且花费更多的代码。 我在想像使用变量++直到100,然后计算所有这些的总和。不知道将如何写。但是,它在数组中很重要,因此我以后也可以说“数组55多少钱”,我可以很容易地看到它。