Improve database release/shutdown procedures to reduce occasional Exceptions such as "IllegalStateException: Illegal access:..."


git-svn-id: https://svn.apache.org/repos/asf/roller/trunk@1708083 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java
index f2eedf2..f122d54 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAPersistenceStrategy.java
@@ -142,12 +142,17 @@
      * Release database session, rolls back any uncommitted changes.
      */
     public void release() {
-        EntityManager em = getEntityManager(false);
-        if (isTransactionActive(em)) {
-            em.getTransaction().rollback();
+        try {
+            EntityManager em = getEntityManager(false);
+            if (isTransactionActive(em)) {
+                em.getTransaction().rollback();
+            }
+            em.close();
+        } catch (Exception e) {
+            logger.debug("error during releasing database session", e);
+        } finally {
+            threadLocalEntityManager.remove();
         }
-        em.close();
-        setThreadLocalEntityManager(null);
     }
     
     /**
@@ -249,13 +254,6 @@
     }
     
     /**
-     * Set the current ThreadLocal EntityManager
-     */
-    private void setThreadLocalEntityManager(EntityManager em) {
-        threadLocalEntityManager.set(em);
-    }
-    
-    /**
      * Get named query that won't commit changes to DB first (FlushModeType.COMMIT)
      * @param queryName the name of the query
      * @throws org.apache.roller.weblogger.WebloggerException on any error
@@ -345,4 +343,9 @@
         return em.createNamedQuery(queryName);
     }
 
+    public void shutdown() {
+        if (emf != null) {
+            emf.close();
+        }
+    }
 }
diff --git a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
index c3666c9..a06c4da 100644
--- a/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
+++ b/app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAWebloggerImpl.java
@@ -119,6 +119,8 @@
 
         // then let parent do its thing
         super.shutdown();
+
+        this.strategy.shutdown();
     }
 
 }