[ 
https://issues.apache.org/jira/browse/CAMEL-9177?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen reassigned CAMEL-9177:
----------------------------------

    Assignee: Claus Ibsen

> combination of JPA-Component, loop and wiretap throws entitymanger cloesd 
> exception
> -----------------------------------------------------------------------------------
>
>                 Key: CAMEL-9177
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9177
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core, camel-jpa
>    Affects Versions: 2.15.2, 2.15.3
>         Environment: Camel 2.15.2 with Spring-Boot 1.2.3.RELEASE (with camel 
> xml dsl)
>            Reporter: Pascal S.
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.16.0
>
>
> Hi,
> I have found a problem regarding a wiretap and the camel-jpa component. I 
> have a route with an async split through a wiretap. In each route, I use a 
> jpa producer to persist an entity. The problem is, that the entitymanager was 
> closed before the async routes can reach the end. The cause is, that the same 
> entitymanager is used in the async routes. The main route reaches the end and 
> closes the entitymanager.
> E.g. like the following route:
> {code}
> <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>
> {code}
> I think a possible fix can be to check that the entitymanager is null or 
> closed. If null or closed, create a new entitymanager.
> {code}
> public final class JpaHelper {
>     ...
>     public static EntityManager getTargetEntityManager(Exchange exchange, ...
>         ...
>         if (em == null || !em.isOpen()) {
>             // create a new entity manager
>             em = entityManagerFactory.createEntityManager();
>         ...
>         }
>     }
>     ...
> }
> {code}
> Another solution can be in the wiretap. There where the exchange is copied, 
> the "CamelEntityManager" property could be removed.
> Currently, my quickfix is: At the beginning of the async route I remove the 
> entitymanager from the exchange.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to