[ 
https://issues.apache.org/jira/browse/ARIES-1346?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14616353#comment-14616353
 ] 

Christian Schneider commented on ARIES-1346:
--------------------------------------------

EmSupplier already takes care of the caching. It just closes the EntityManager 
too early at the moment. If you use several persistence units then several 
EmSupplier instances will be involved. The only thing we do not yet support is 
having several EntityManager injects into the same blueprint bean but Giuseppe 
is working on this in another issue.

> EntityManager injection issue
> -----------------------------
>
>                 Key: ARIES-1346
>                 URL: https://issues.apache.org/jira/browse/ARIES-1346
>             Project: Aries
>          Issue Type: Improvement
>          Components: JPA
>    Affects Versions: jpa-2.0.0
>         Environment: karaf-4.0.0, java 8
>            Reporter: Michał Woś
>            Priority: Critical
>
> Consider scenario:
> - blueprint service A with JPA 
> {code}
>    A {
>       C find() {
>          return em.find();
>       }
>       void delete(C c) {
>          em.remove(c)
>       }
>   }
> {code}
> - blueprint  bean B with A injected. B call methods of A within transaction
> {code}
> B {
>    @Transaction
>    B1() {
>       C = A.find(); // Entity returned by find (em.find())
>       A.delete(C); // Entity is not attached!!!!!!
>    }
> }
> {code}
> Reason:
> Method of bean A are proxied in following way:
> {code}
> emsupplier.precall()
> emsupplier.get()
> find(); //or delete()
> emsupplier.postcall()
> {code}
> Each method call gets its own EM so find has one EM, delete has another one. 
> Entity C is managed within first EM but not the second.
> EM should be shared in transaction within single Thread, not by single method 
> call.
> Please also note that:
> - transaction could be JTA and use different units in single transaction
> My scenario:
> - bundle A1,A2,A3 with persistence JPA exposing entities through services 
> (domain module), Each bundle (A1, A2, A3) uses different schema in database 
> (different unit name)
> - bundle B1,B2,B3 with rest  services using entity services in a transaction
> (Separation of domain logic from business logic). Each of B1,B2,B3 can use 
> any method of A1,A2,A3



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

Reply via email to