comparison flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java @ 774:461b8bd696a7 2.4

merged flys-backend/2.4
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:14:15 +0200
parents 8076f6a689d0
children 1e3979e07b9e
comparison
equal deleted inserted replaced
751:8d5bd3a08dd1 774:461b8bd696a7
1 package de.intevation.flys.backend;
2
3 import de.intevation.artifacts.common.utils.Config;
4
5 import java.util.Properties;
6
7 import org.hibernate.SessionFactory;
8
9 import org.hibernate.cfg.Configuration;
10 import org.hibernate.cfg.Environment;
11
12 import de.intevation.flys.model.Annotation;
13 import de.intevation.flys.model.AnnotationType;
14 import de.intevation.flys.model.Attribute;
15 import de.intevation.flys.model.DischargeTable;
16 import de.intevation.flys.model.DischargeTableValue;
17 import de.intevation.flys.model.Edge;
18 import de.intevation.flys.model.Gauge;
19 import de.intevation.flys.model.MainValueType;
20 import de.intevation.flys.model.NamedMainValue;
21 import de.intevation.flys.model.MainValue;
22 import de.intevation.flys.model.Position;
23 import de.intevation.flys.model.Range;
24 import de.intevation.flys.model.River;
25 import de.intevation.flys.model.TimeInterval;
26 import de.intevation.flys.model.WstColumn;
27 import de.intevation.flys.model.WstColumnQRange;
28 import de.intevation.flys.model.WstColumnValue;
29 import de.intevation.flys.model.Wst;
30 import de.intevation.flys.model.WstQRange;
31
32 import org.apache.log4j.Logger;
33
34 public final class SessionFactoryProvider
35 {
36 private static Logger log = Logger.getLogger(SessionFactoryProvider.class);
37
38 public static final String XPATH_USER =
39 "/artifact-database/backend-database/user/text()";
40
41 public static final String XPATH_PASSWORD =
42 "/artifact-database/backend-database/password/text()";
43
44 public static final String XPATH_DIALECT =
45 "/artifact-database/backend-database/dialect/text()";
46
47 public static final String XPATH_DRIVER =
48 "/artifact-database/backend-database/driver/text()";
49
50 public static final String XPATH_URL =
51 "/artifact-database/backend-database/url/text()";
52
53 public static final String DEFAULT_USER =
54 System.getProperty("flys.backend.user", "flys");
55
56 public static final String DEFAULT_PASSWORD =
57 System.getProperty("flys.backend.password", "flys");
58
59 public static final String DEFAULT_DIALECT =
60 System.getProperty(
61 "flys.backend.dialect",
62 "org.hibernate.dialect.PostgreSQLDialect");
63
64 public static final String DEFAULT_DRIVER =
65 System.getProperty(
66 "flys.backend.driver",
67 "org.postgresql.Driver");
68
69 public static final String DEFAULT_URL =
70 System.getProperty(
71 "flys.backend.url",
72 "jdbc:postgresql://localhost:5432/flys");
73
74 private static SessionFactory sessionFactory;
75
76 private SessionFactoryProvider() {
77 }
78
79 public static synchronized SessionFactory getSessionFactory() {
80 if (sessionFactory == null) {
81 String user =
82 Config.getStringXPath(XPATH_USER, DEFAULT_USER);
83 String password =
84 Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD);
85 String dialect =
86 Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT);
87 String driver =
88 Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER);
89 String url =
90 Config.getStringXPath(XPATH_URL, DEFAULT_URL);
91
92 sessionFactory = createSessionFactory(
93 user, password, dialect, driver, url);
94 }
95 return sessionFactory;
96 }
97
98 public static SessionFactory createSessionFactory() {
99 return createSessionFactory(
100 DEFAULT_USER,
101 DEFAULT_PASSWORD,
102 DEFAULT_DIALECT,
103 DEFAULT_DRIVER,
104 DEFAULT_URL);
105 }
106
107 public static SessionFactory createSessionFactory(
108 String user,
109 String password,
110 String dialect,
111 String driver,
112 String url
113 ) {
114 Configuration cfg = new Configuration();
115
116 // TODO: Use package reflection here.
117 cfg.addAnnotatedClass(Annotation.class);
118 cfg.addAnnotatedClass(AnnotationType.class);
119 cfg.addAnnotatedClass(Attribute.class);
120 cfg.addAnnotatedClass(DischargeTable.class);
121 cfg.addAnnotatedClass(DischargeTableValue.class);
122 cfg.addAnnotatedClass(Edge.class);
123 cfg.addAnnotatedClass(Gauge.class);
124 cfg.addAnnotatedClass(MainValueType.class);
125 cfg.addAnnotatedClass(NamedMainValue.class);
126 cfg.addAnnotatedClass(MainValue.class);
127 cfg.addAnnotatedClass(Position.class);
128 cfg.addAnnotatedClass(Range.class);
129 cfg.addAnnotatedClass(River.class);
130 cfg.addAnnotatedClass(TimeInterval.class);
131 cfg.addAnnotatedClass(WstColumn.class);
132 cfg.addAnnotatedClass(WstColumnQRange.class);
133 cfg.addAnnotatedClass(WstColumnValue.class);
134 cfg.addAnnotatedClass(Wst.class);
135 cfg.addAnnotatedClass(WstQRange.class);
136
137 if (log.isDebugEnabled()) {
138 log.debug("user: " + user);
139 log.debug("dialect: " + dialect);
140 log.debug("driver: " + driver);
141 log.debug("url: " + url);
142 }
143
144 Properties props = new Properties();
145
146 // We rely on our own connection pool
147 props.setProperty(
148 "hibernate.connection.provider_class",
149 "org.hibernate.connection.DBCPConnectionProvider");
150
151 props.setProperty(Environment.DIALECT, dialect);
152 props.setProperty(Environment.USER, user);
153 props.setProperty(Environment.PASS, password);
154 props.setProperty(Environment.DRIVER, driver);
155 props.setProperty(Environment.URL, url);
156
157 cfg.mergeProperties(props);
158
159 return cfg.buildSessionFactory();
160 }
161 }
162 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org