Index: lams_common/src/java/org/lamsfoundation/lams/util/hibernate/HibernateSessionManager.java =================================================================== diff -u -r7475d08afc280b5e2e5ddf04e8bf35e3166aaf80 -radcbeeb5329b4ec39e5655084d3eaf480d00bb59 --- lams_common/src/java/org/lamsfoundation/lams/util/hibernate/HibernateSessionManager.java (.../HibernateSessionManager.java) (revision 7475d08afc280b5e2e5ddf04e8bf35e3166aaf80) +++ lams_common/src/java/org/lamsfoundation/lams/util/hibernate/HibernateSessionManager.java (.../HibernateSessionManager.java) (revision adcbeeb5329b4ec39e5655084d3eaf480d00bb59) @@ -1,6 +1,5 @@ package org.lamsfoundation.lams.util.hibernate; -import org.apache.log4j.Logger; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.context.internal.ManagedSessionContext; @@ -18,7 +17,7 @@ public class HibernateSessionManager { private static SessionFactory sessionFactory; - // private static Logger log = Logger.getLogger(HibernateSessionManager.class); + // private static Logger log = Logger.getLogger(HibernateSessionManager.class); /** * Makes sure that an open Hibernate session is bound to current thread. */ @@ -33,26 +32,22 @@ TransactionSynchronizationManager.unbindResourceIfPossible(sessionFactory); session = sessionFactory.getCurrentSession(); } -// log.debug("Opened new session "+session.toString()); -// } else { -// log.debug("Bound to open session "+session.toString()); -// } - - // binding to Context is not enough - // an open session needs to be also manually bound to current thread SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.getResource(sessionFactory); if (sessionHolder == null) { sessionHolder = new SessionHolder(session); TransactionSynchronizationManager.bindResource(sessionFactory, sessionHolder); -// log.debug("Linked to transaction "+session.getTransaction()); } } public static void closeSession() { - Session session = HibernateSessionManager.getSessionFactory().getCurrentSession(); - if (session.isOpen()) { -// log.debug("Closing session transaction "+session.getTransaction()); - session.close(); + try { + Session session = HibernateSessionManager.getSessionFactory().getCurrentSession(); + if (session.isOpen()) { + session.close(); + } + } catch (IllegalStateException e) { + // ignore this as session is already in closed state, that's why we got the exception + // it usually happens on server shutdown - see LDEV-4802 } }