Michał Woś created ARIES-1346:
---------------------------------

             Summary: 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ś


Consider scenario:
- blueprint service A with JPA 

   A {

      C find() {
         return em.find();
      }

      void delete(C c) {
         em.remove(c)
      }
  }
- blueprint  bean B with A injected. B call methods of A within transaction

B {
   @Transaction
   B1() {
      C = A.find(); // Entity returned by find (em.find())
      A.delete(C); // Entity is not attached!!!!!!
   }
}

Reason:
Method of bean A are proxied in following way:

emsupplier.precall()
emsupplier.get()
find(); //or delete()
emsupplier.postcall()

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 
service of A1,A2,A3




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

Reply via email to