public void cleanUp(AbstractSession session) {
   Set<Object> keys = new HashSet<Object>();
   synchronized (injectionTargets) {
     keys.addAll(injectionTargets.keySet());
     for (Object listener : keys) {
       try {
         InjectionTarget<Object> target = injectionTargets.get(listener);
         target.preDestroy(listener);
         target.dispose(listener);
         injectionTargets.remove(listener);
       } catch (Exception e) {
         session.logThrowable(SessionLog.FINEST, SessionLog.JPA, e);
       }
     }
   }
   if (creationalContext != null) {
     creationalContext.release();
   }
 }