comparison backend/src/main/java/org/dive4elements/river/backend/SessionHolder.java @ 8573:5c53b7de04d9

The bug that motivated this extremely defensive error-handling was fixed in Rev fe7e9da6312a by nomore calling close() on a private variable.
author Tom Gottfried <tom@intevation.de>
date Fri, 06 Mar 2015 11:21:36 +0100
parents 9bbce0edd36b
children 0a5239a1e46e
comparison
equal deleted inserted replaced
8572:321d6e50aebe 8573:5c53b7de04d9
48 48
49 public static void release() { 49 public static void release() {
50 Session session = HOLDER.get(); 50 Session session = HOLDER.get();
51 if (session != null) { 51 if (session != null) {
52 log.debug("releasing session: " + session.hashCode()); 52 log.debug("releasing session: " + session.hashCode());
53 try { 53 session.close();
54 if (!session.isOpen()) {
55 /* If this check really works in all cases why does hibernate
56 * does not use it when you call close anyway. */
57 log.debug("Session is not open. Calling close anyway.");
58 }
59 session.close();
60 } catch (Exception e) {
61 /* Do not try this at home. But hibernate may fail with an NPE
62 * or any other exception depending on the state of the session.
63 * According to doc this should only throw a HibernateException but
64 * we definetely get NPE's here.
65 */
66 log.error("Exception caught on session close! Session already closed?" + e.getMessage());
67 }
68 } else { 54 } else {
69 log.debug("release called on NULL session."); 55 log.error("release() called on NULL session.");
70 } 56 }
71 HOLDER.remove(); 57 HOLDER.remove();
72 } 58 }
73 } 59 }
74 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 60 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org