OpenJPA
  1. OpenJPA
  2. OPENJPA-794

issues with closing/opening entity manager (slices) (can't seem to be able to create multiple entityManagers )

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0.0-M1
    • Fix Version/s: 2.0.0-M1
    • Component/s: slice
    • Labels:
      None

      Description

      So, for each of my web requests I open an entitymanager at the begining, and close it at the end, something like this:

      EntityManager pm = pmf.createEntityManager();
      try

      { chain.filter(...); }

      finally

      { pm.close(); }

      And this works perfectly without slices. But when I turn on slices, this fails. The first request works fine, but the second requests complains that the EntityManager has already been closed. So it seems to be caching the EntityManager from the previous request... can someone please help me figure out how to fix this??

      I'll attach the log.

      1. log.txt
        413 kB
        Fernando Padilla

        Activity

        Hide
        Fernando Padilla added a comment -

        A log of the failing run. The first web request works fine ( you can see copious amounts of logs as it gets objects, etc etc ). The second request fails from the go and every db access after, complaining that the EntityManager has already been closed, even though this was a fresh request.

        that request ends around: 2008-11-26 16:18:17,570

        the second request starts right after at: 2008-11-26 16:18:34,334

        Show
        Fernando Padilla added a comment - A log of the failing run. The first web request works fine ( you can see copious amounts of logs as it gets objects, etc etc ). The second request fails from the go and every db access after, complaining that the EntityManager has already been closed, even though this was a fresh request. that request ends around: 2008-11-26 16:18:17,570 the second request starts right after at: 2008-11-26 16:18:34,334
        Hide
        Fernando Padilla added a comment -

        And I am using this code to do the binding/unbinding of the entity manager. It is a very small chance that this interacts with the slices code, but I'm putting it up just in case. It should be very close to what Spring does in it's OpenView filter code...

        public static void bindThread( EntityManagerFactory pmf ) {
        // logger.debug( "bindThread( " + pmf + " )" );
        if ( TransactionSynchronizationManager.hasResource( pmf ) )

        { logger.error( "FOUND Entity MANAGER IN THREAD" ); unbindThread( pmf ); }

        EntityManager pm = pmf.createEntityManager();
        TransactionSynchronizationManager.bindResource( pmf, new EntityManagerHolder( pm ) );
        }

        public static void unbindThread( EntityManagerFactory pmf ) {
        // logger.debug( "unbindThread( " + pmf + " )" );
        if ( TransactionSynchronizationManager.hasResource( pmf ) )

        { EntityManagerHolder holder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource( pmf ); EntityManager pm = holder.getEntityManager(); pm.close(); }

        }

        Show
        Fernando Padilla added a comment - And I am using this code to do the binding/unbinding of the entity manager. It is a very small chance that this interacts with the slices code, but I'm putting it up just in case. It should be very close to what Spring does in it's OpenView filter code... public static void bindThread( EntityManagerFactory pmf ) { // logger.debug( "bindThread( " + pmf + " )" ); if ( TransactionSynchronizationManager.hasResource( pmf ) ) { logger.error( "FOUND Entity MANAGER IN THREAD" ); unbindThread( pmf ); } EntityManager pm = pmf.createEntityManager(); TransactionSynchronizationManager.bindResource( pmf, new EntityManagerHolder( pm ) ); } public static void unbindThread( EntityManagerFactory pmf ) { // logger.debug( "unbindThread( " + pmf + " )" ); if ( TransactionSynchronizationManager.hasResource( pmf ) ) { EntityManagerHolder holder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource( pmf ); EntityManager pm = holder.getEntityManager(); pm.close(); } }
        Hide
        Fernando Padilla added a comment -

        the root cause of this bug is that slices does not work with QueryCompilationCache..

        Issue OPENJPA-797, is asking for this restriction to be posted in the Documentation.

        This bug can either be closed (accepting the restriction), or be kept open to see if we can change the code to lift this restriction..

        I would say close this one for now (duplicate of 797).

        Show
        Fernando Padilla added a comment - the root cause of this bug is that slices does not work with QueryCompilationCache.. Issue OPENJPA-797 , is asking for this restriction to be posted in the Documentation. This bug can either be closed (accepting the restriction), or be kept open to see if we can change the code to lift this restriction.. I would say close this one for now (duplicate of 797).

          People

          • Assignee:
            Pinaki Poddar
            Reporter:
            Fernando Padilla
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development