comparison backend/src/main/java/org/dive4elements/river/backend/SedDBSessionHolder.java @ 8566:fe7e9da6312a

(issue1797) Move close into session release and guard it. To avoid leaking open and Held sessions we centrally close the session in the SessionHolder on release. This also removes some duplicated code in SedDBSessionHolder
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 24 Feb 2015 17:16:14 +0100
parents 4c3ccf2b0304
children 0d711ecbcd49
comparison
equal deleted inserted replaced
8565:ea17665c5aad 8566:fe7e9da6312a
11 import org.apache.log4j.Logger; 11 import org.apache.log4j.Logger;
12 12
13 import org.hibernate.Session; 13 import org.hibernate.Session;
14 import org.hibernate.SessionFactory; 14 import org.hibernate.SessionFactory;
15 15
16 public class SedDBSessionHolder 16 public class SedDBSessionHolder extends SessionHolder
17 { 17 {
18 private static Logger log = 18 private static Logger log =
19 Logger.getLogger(SedDBSessionHolder.class); 19 Logger.getLogger(SedDBSessionHolder.class);
20
21 public static final ThreadLocal<Session> HOLDER =
22 new ThreadLocal<Session>() {
23 @Override
24 protected Session initialValue() {
25 return create();
26 }
27 };
28
29 private SedDBSessionHolder() {
30 }
31 20
32 public synchronized static Session create() { 21 public synchronized static Session create() {
33 log.debug("create"); 22 log.debug("create");
34 SessionFactory sessionFactory = 23 SessionFactory sessionFactory =
35 SessionFactoryProvider.getSedDBSessionFactory(); 24 SessionFactoryProvider.getSedDBSessionFactory();
36 return sessionFactory.openSession(); 25 return sessionFactory.openSession();
37 } 26 }
38
39 public static Session acquire() {
40 log.debug("acquire");
41 Session session = create();
42 HOLDER.set(session);
43 return session;
44 }
45
46 public static void release() {
47 log.debug("release");
48 HOLDER.remove();
49 }
50 } 27 }
51 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : 28 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org