Uploaded image for project: 'Aries'
  1. Aries
  2. ARIES-1346

EntityManager should be reused for series of coordinated calls

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • jpa-2.0.0
    • jpa-2.1.0
    • JPA
    • None
    • karaf-4.0.0, java 8

    Description

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

      Attachments

        Issue Links

          Activity

            People

              cschneider Christian Schneider
              michalw Michał Woś
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: