Mercurial > dive4elements > river
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 : |