diff options
Diffstat (limited to 'id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java')
-rw-r--r-- | id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java index 4bb0a08ea..d3ee1442e 100644 --- a/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java +++ b/id/server/moa-id-commons/src/main/java/at/gv/egovernment/moa/id/commons/db/ConfigurationDBUtils.java @@ -8,6 +8,7 @@ import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import org.hibernate.HibernateException; +import org.hibernate.Session; import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; @@ -44,10 +45,8 @@ public final class ConfigurationDBUtils { entitymanagerfactory = Persistence.createEntityManagerFactory("at.gv.egovernment.moa.id.commons.db.dao.config", props); - - - - Logger.debug("Initial session factory successfully created."); + + Logger.debug("Initial ConfigDB session factory successfully created."); } catch (Throwable ex) { @@ -72,10 +71,21 @@ public final class ConfigurationDBUtils { } EntityManager session = (EntityManager) THREAD_LOCAL_CONFIG.get(); - // Open a new Session, if this Thread has none yet - if (session == null || !session.isOpen()) { - session = getNewSession(); - } + + if (session != null && session.isOpen()) { + + //maybe a hack, but sometimes we do not know if the session is closed (session already closed but isOpen()=true) + try { + javax.persistence.Query query = session.createQuery("select userdatabase from UserDatabase userdatabase"); + query.getResultList(); + + } catch (Throwable e) { + session = getNewSession(); + } + + } else + session = getNewSession(); + return session; } @@ -88,10 +98,10 @@ public final class ConfigurationDBUtils { } EntityManager session = (EntityManager) THREAD_LOCAL_CONFIG.get(); if (session != null ) { - Logger.warn("Previous session has not been closed; closing session now."); + Logger.warn("Previous session has not been closed; closing ConfigDB session now."); closeSession(); } - Logger.debug("Opening new hibernate session..."); + Logger.debug("Opening new ConfigDB hibernate session..."); try { session = entitymanagerfactory.createEntityManager(); THREAD_LOCAL_CONFIG.set(session); @@ -114,7 +124,7 @@ public final class ConfigurationDBUtils { Logger.warn("Session is being automatically handled by hibernate. Therefore the current session cannot be closed on demand."); return; } - Logger.debug("Closing current hibernate session..."); + Logger.debug("Closing current ConfigDB hibernate session..."); EntityManager session = (EntityManager) THREAD_LOCAL_CONFIG.get(); THREAD_LOCAL_CONFIG.set(null); if (session != null) { @@ -144,7 +154,7 @@ public final class ConfigurationDBUtils { return true; } catch(HibernateException e) { - Logger.warn("Error during database saveOrUpdate. Rollback.", e); + Logger.warn("Error during Config database saveOrUpdate. Rollback.", e); tx.rollback(); throw new MOADatabaseException(e); } @@ -171,7 +181,7 @@ public final class ConfigurationDBUtils { return true; } catch(HibernateException e) { - Logger.warn("Error during database saveOrUpdate. Rollback.", e); + Logger.warn("Error during Config database saveOrUpdate. Rollback.", e); tx.rollback(); throw new MOADatabaseException(e); } @@ -194,7 +204,7 @@ public final class ConfigurationDBUtils { return true; } catch(HibernateException e) { - Logger.warn("Error during database delete. Rollback.", e); + Logger.warn("Error during Config database delete. Rollback.", e); tx.rollback(); return false; } |