Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java @ 3333:76c75c8b9ee0
SedDB: Make access to SedDB configurable over conf.xml and provide access to sessions.
flys-backend/trunk@4666 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 14 Jun 2012 15:39:42 +0000 |
parents | a2a33eff93aa |
children | 69f06b83b3ec |
comparison
equal
deleted
inserted
replaced
3332:aa8ed778c8cc | 3333:76c75c8b9ee0 |
---|---|
1 package de.intevation.flys.backend; | 1 package de.intevation.flys.backend; |
2 | 2 |
3 import de.intevation.artifacts.common.utils.Config; | 3 import java.lang.management.ManagementFactory; |
4 | 4 |
5 import java.lang.management.ManagementFactory; | |
6 import java.util.Properties; | 5 import java.util.Properties; |
7 | 6 |
8 import javax.management.InstanceAlreadyExistsException; | 7 import javax.management.InstanceAlreadyExistsException; |
9 import javax.management.MalformedObjectNameException; | |
10 import javax.management.MBeanRegistrationException; | 8 import javax.management.MBeanRegistrationException; |
11 import javax.management.MBeanServer; | 9 import javax.management.MBeanServer; |
10 import javax.management.MalformedObjectNameException; | |
12 import javax.management.NotCompliantMBeanException; | 11 import javax.management.NotCompliantMBeanException; |
13 import javax.management.ObjectName; | 12 import javax.management.ObjectName; |
14 | 13 |
14 import org.apache.log4j.Logger; | |
15 | |
15 import org.hibernate.SessionFactory; | 16 import org.hibernate.SessionFactory; |
17 | |
18 import org.hibernate.cfg.Configuration; | |
19 import org.hibernate.cfg.Environment; | |
16 | 20 |
17 import org.hibernate.impl.SessionFactoryImpl; | 21 import org.hibernate.impl.SessionFactoryImpl; |
18 | 22 |
19 import org.hibernate.jmx.StatisticsService; | 23 import org.hibernate.jmx.StatisticsService; |
20 | 24 |
21 import org.hibernate.cfg.Configuration; | |
22 import org.hibernate.cfg.Environment; | |
23 | |
24 import de.intevation.flys.model.Annotation; | |
25 import de.intevation.flys.model.AnnotationType; | |
26 import de.intevation.flys.model.Attribute; | |
27 import de.intevation.flys.model.BedHeightEpoch; | |
28 import de.intevation.flys.model.BedHeightEpochValue; | |
29 import de.intevation.flys.model.BedHeightSingle; | |
30 import de.intevation.flys.model.BedHeightSingleValue; | |
31 import de.intevation.flys.model.BedHeightType; | |
32 import de.intevation.flys.model.Building; | |
33 import de.intevation.flys.model.Catchment; | |
34 import de.intevation.flys.model.CrossSection; | |
35 import de.intevation.flys.model.CrossSectionLine; | |
36 import de.intevation.flys.model.CrossSectionPoint; | |
37 import de.intevation.flys.model.CrossSectionTrack; | |
38 import de.intevation.flys.model.Depth; | |
39 import de.intevation.flys.model.DGM; | |
40 import de.intevation.flys.model.DischargeTable; | |
41 import de.intevation.flys.model.DischargeTableValue; | |
42 import de.intevation.flys.model.DischargeZone; | |
43 import de.intevation.flys.model.Edge; | |
44 import de.intevation.flys.model.ElevationModel; | |
45 import de.intevation.flys.model.Fixpoint; | |
46 import de.intevation.flys.model.Floodmaps; | |
47 import de.intevation.flys.model.Floodplain; | |
48 import de.intevation.flys.model.FlowVelocityMeasurement; | |
49 import de.intevation.flys.model.FlowVelocityMeasurementValue; | |
50 import de.intevation.flys.model.FlowVelocityModel; | |
51 import de.intevation.flys.model.FlowVelocityModelValue; | |
52 import de.intevation.flys.model.Gauge; | |
53 import de.intevation.flys.model.GaugeLocation; | |
54 import de.intevation.flys.model.GrainFraction; | |
55 import de.intevation.flys.model.Hws; | |
56 import de.intevation.flys.model.HydrBoundary; | |
57 import de.intevation.flys.model.HydrBoundaryPoly; | |
58 import de.intevation.flys.model.HYK; | |
59 import de.intevation.flys.model.HYKEntry; | |
60 import de.intevation.flys.model.HYKFormation; | |
61 import de.intevation.flys.model.HYKFlowZoneType; | |
62 import de.intevation.flys.model.HYKFlowZone; | |
63 import de.intevation.flys.model.Line; | |
64 import de.intevation.flys.model.LocationSystem; | |
65 import de.intevation.flys.model.MainValueType; | |
66 import de.intevation.flys.model.MorphologicalWidth; | |
67 import de.intevation.flys.model.MorphologicalWidthValue; | |
68 import de.intevation.flys.model.NamedMainValue; | |
69 import de.intevation.flys.model.MainValue; | |
70 import de.intevation.flys.model.Position; | |
71 import de.intevation.flys.model.Range; | |
72 import de.intevation.flys.model.River; | |
73 import de.intevation.flys.model.RiverAxis; | |
74 import de.intevation.flys.model.RiverAxisKm; | |
75 import de.intevation.flys.model.SedimentDensity; | |
76 import de.intevation.flys.model.SedimentDensityValue; | |
77 import de.intevation.flys.model.SedimentYield; | |
78 import de.intevation.flys.model.SedimentYieldValue; | |
79 import de.intevation.flys.model.SQRelation; | |
80 import de.intevation.flys.model.SQRelationValue; | |
81 import de.intevation.flys.model.TimeInterval; | |
82 import de.intevation.flys.model.Unit; | |
83 import de.intevation.flys.model.Waterlevel; | |
84 import de.intevation.flys.model.WaterlevelDifference; | |
85 import de.intevation.flys.model.WaterlevelDifferenceColumn; | |
86 import de.intevation.flys.model.WaterlevelDifferenceValue; | |
87 import de.intevation.flys.model.WaterlevelQRange; | |
88 import de.intevation.flys.model.WaterlevelValue; | |
89 import de.intevation.flys.model.WstColumn; | |
90 import de.intevation.flys.model.WstColumnQRange; | |
91 import de.intevation.flys.model.WstColumnValue; | |
92 import de.intevation.flys.model.Wst; | |
93 import de.intevation.flys.model.WstQRange; | |
94 | |
95 import org.apache.log4j.Logger; | |
96 | |
97 public final class SessionFactoryProvider | 25 public final class SessionFactoryProvider |
98 { | 26 { |
99 private static Logger log = Logger.getLogger(SessionFactoryProvider.class); | 27 private static Logger log = Logger.getLogger(SessionFactoryProvider.class); |
100 | 28 |
101 public static final String XPATH_USER = | |
102 "/artifact-database/backend-database/user/text()"; | |
103 | |
104 public static final String XPATH_PASSWORD = | |
105 "/artifact-database/backend-database/password/text()"; | |
106 | |
107 public static final String XPATH_DIALECT = | |
108 "/artifact-database/backend-database/dialect/text()"; | |
109 | |
110 public static final String XPATH_DRIVER = | |
111 "/artifact-database/backend-database/driver/text()"; | |
112 | |
113 public static final String XPATH_URL = | |
114 "/artifact-database/backend-database/url/text()"; | |
115 | |
116 public static final String DEFAULT_USER = | |
117 System.getProperty("flys.backend.user", "flys"); | |
118 | |
119 public static final String DEFAULT_PASSWORD = | |
120 System.getProperty("flys.backend.password", "flys"); | |
121 | |
122 public static final String DEFAULT_DIALECT = | |
123 System.getProperty( | |
124 "flys.backend.dialect", | |
125 "org.hibernate.dialect.PostgreSQLDialect"); | |
126 | |
127 public static final String DEFAULT_DRIVER = | |
128 System.getProperty( | |
129 "flys.backend.driver", | |
130 "org.postgresql.Driver"); | |
131 | |
132 public static final String DEFAULT_URL = | |
133 System.getProperty( | |
134 "flys.backend.url", | |
135 "jdbc:postgresql://localhost:5432/flys"); | |
136 | |
137 public static final boolean ENABLE_JMX = | 29 public static final boolean ENABLE_JMX = |
138 Boolean.getBoolean("flys.backend.enablejmx"); | 30 Boolean.getBoolean("flys.backend.enablejmx"); |
139 | 31 |
140 private static SessionFactory sessionFactory; | 32 private static SessionFactory flysSessionFactory; |
33 private static SessionFactory sedDBSessionFactory; | |
141 | 34 |
142 private SessionFactoryProvider() { | 35 private SessionFactoryProvider() { |
143 } | 36 } |
144 | 37 |
145 public static synchronized SessionFactory getSessionFactory() { | 38 public static synchronized SessionFactory getSessionFactory() { |
146 if (sessionFactory == null) { | 39 if (flysSessionFactory == null) { |
147 String user = | 40 flysSessionFactory = |
148 Config.getStringXPath(XPATH_USER, DEFAULT_USER); | 41 createSessionFactory(FLYSCredentials.getInstance()); |
149 String password = | |
150 Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD); | |
151 String dialect = | |
152 Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT); | |
153 String driver = | |
154 Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER); | |
155 String url = | |
156 Config.getStringXPath(XPATH_URL, DEFAULT_URL); | |
157 | |
158 sessionFactory = createSessionFactory( | |
159 user, password, dialect, driver, url); | |
160 } | 42 } |
161 return sessionFactory; | 43 return flysSessionFactory; |
162 } | 44 } |
163 | 45 |
164 public static SessionFactory createSessionFactory() { | 46 public static SessionFactory createSessionFactory() { |
165 return createSessionFactory( | 47 return createSessionFactory(FLYSCredentials.getDefault()); |
166 DEFAULT_USER, | 48 } |
167 DEFAULT_PASSWORD, | 49 |
168 DEFAULT_DIALECT, | 50 public static synchronized SessionFactory getSedDBSessionFactory() { |
169 DEFAULT_DRIVER, | 51 if (sedDBSessionFactory == null) { |
170 DEFAULT_URL); | 52 sedDBSessionFactory = |
53 createSessionFactory(SedDBCredentials.getInstance()); | |
54 } | |
55 return sedDBSessionFactory; | |
56 } | |
57 | |
58 public static SessionFactory createSedDBSessionFactory() { | |
59 return createSessionFactory(SedDBCredentials.getDefault()); | |
171 } | 60 } |
172 | 61 |
173 public static SessionFactory createSessionFactory( | 62 public static SessionFactory createSessionFactory( |
174 String user, | 63 Credentials credentials |
175 String password, | |
176 String dialect, | |
177 String driver, | |
178 String url | |
179 ) { | 64 ) { |
180 Configuration cfg = createConfiguration( | 65 Configuration cfg = createConfiguration(credentials); |
181 user, password, dialect, driver, url); | |
182 | 66 |
183 SessionFactory factory = cfg.buildSessionFactory(); | 67 SessionFactory factory = cfg.buildSessionFactory(); |
184 | 68 |
185 if (ENABLE_JMX) { | 69 if (ENABLE_JMX) { |
186 registerAsMBean(factory); | 70 registerAsMBean(factory); |
189 log.info("No JMX support for hibernate."); | 73 log.info("No JMX support for hibernate."); |
190 } | 74 } |
191 | 75 |
192 return factory; | 76 return factory; |
193 } | 77 } |
194 | |
195 | 78 |
196 public static void registerAsMBean(SessionFactory factory) { | 79 public static void registerAsMBean(SessionFactory factory) { |
197 | 80 |
198 StatisticsService statsMBean = new StatisticsService(); | 81 StatisticsService statsMBean = new StatisticsService(); |
199 statsMBean.setSessionFactory(factory); | 82 statsMBean.setSessionFactory(factory); |
219 catch (NotCompliantMBeanException ncmbe) { | 102 catch (NotCompliantMBeanException ncmbe) { |
220 log.warn(ncmbe, ncmbe); | 103 log.warn(ncmbe, ncmbe); |
221 } | 104 } |
222 } | 105 } |
223 | 106 |
224 | |
225 public static Configuration createConfiguration() { | 107 public static Configuration createConfiguration() { |
226 return createConfiguration( | 108 return createConfiguration(FLYSCredentials.getInstance()); |
227 DEFAULT_USER, | |
228 DEFAULT_PASSWORD, | |
229 DEFAULT_DIALECT, | |
230 DEFAULT_DRIVER, | |
231 DEFAULT_URL); | |
232 } | 109 } |
233 | 110 |
234 public static Configuration createConfiguration( | 111 public static Configuration createConfiguration( |
235 String user, | 112 Credentials credentials |
236 String password, | |
237 String dialect, | |
238 String driver, | |
239 String url | |
240 ) { | 113 ) { |
241 Configuration cfg = new Configuration(); | 114 Configuration cfg = new Configuration(); |
242 | 115 |
243 // TODO: Use package reflection here. | 116 for (Class clazz: credentials.getClasses()) { |
244 cfg.addAnnotatedClass(Annotation.class); | 117 cfg.addAnnotatedClass(clazz); |
245 cfg.addAnnotatedClass(AnnotationType.class); | 118 } |
246 cfg.addAnnotatedClass(Attribute.class); | |
247 cfg.addAnnotatedClass(BedHeightEpoch.class); | |
248 cfg.addAnnotatedClass(BedHeightEpochValue.class); | |
249 cfg.addAnnotatedClass(BedHeightSingle.class); | |
250 cfg.addAnnotatedClass(BedHeightSingleValue.class); | |
251 cfg.addAnnotatedClass(BedHeightType.class); | |
252 cfg.addAnnotatedClass(Building.class); | |
253 cfg.addAnnotatedClass(Catchment.class); | |
254 cfg.addAnnotatedClass(CrossSection.class); | |
255 cfg.addAnnotatedClass(CrossSectionLine.class); | |
256 cfg.addAnnotatedClass(CrossSectionPoint.class); | |
257 cfg.addAnnotatedClass(CrossSectionTrack.class); | |
258 cfg.addAnnotatedClass(Depth.class); | |
259 cfg.addAnnotatedClass(DGM.class); | |
260 cfg.addAnnotatedClass(DischargeTable.class); | |
261 cfg.addAnnotatedClass(DischargeTableValue.class); | |
262 cfg.addAnnotatedClass(DischargeZone.class); | |
263 cfg.addAnnotatedClass(Edge.class); | |
264 cfg.addAnnotatedClass(ElevationModel.class); | |
265 cfg.addAnnotatedClass(Fixpoint.class); | |
266 cfg.addAnnotatedClass(Floodplain.class); | |
267 cfg.addAnnotatedClass(Floodmaps.class); | |
268 cfg.addAnnotatedClass(FlowVelocityMeasurement.class); | |
269 cfg.addAnnotatedClass(FlowVelocityMeasurementValue.class); | |
270 cfg.addAnnotatedClass(FlowVelocityModel.class); | |
271 cfg.addAnnotatedClass(FlowVelocityModelValue.class); | |
272 cfg.addAnnotatedClass(Gauge.class); | |
273 cfg.addAnnotatedClass(GaugeLocation.class); | |
274 cfg.addAnnotatedClass(GrainFraction.class); | |
275 cfg.addAnnotatedClass(Hws.class); | |
276 cfg.addAnnotatedClass(HydrBoundary.class); | |
277 cfg.addAnnotatedClass(HydrBoundaryPoly.class); | |
278 cfg.addAnnotatedClass(HYK.class); | |
279 cfg.addAnnotatedClass(HYKEntry.class); | |
280 cfg.addAnnotatedClass(HYKFormation.class); | |
281 cfg.addAnnotatedClass(HYKFlowZoneType.class); | |
282 cfg.addAnnotatedClass(HYKFlowZone.class); | |
283 cfg.addAnnotatedClass(Line.class); | |
284 cfg.addAnnotatedClass(LocationSystem.class); | |
285 cfg.addAnnotatedClass(MainValueType.class); | |
286 cfg.addAnnotatedClass(MorphologicalWidth.class); | |
287 cfg.addAnnotatedClass(MorphologicalWidthValue.class); | |
288 cfg.addAnnotatedClass(NamedMainValue.class); | |
289 cfg.addAnnotatedClass(MainValue.class); | |
290 cfg.addAnnotatedClass(Position.class); | |
291 cfg.addAnnotatedClass(Range.class); | |
292 cfg.addAnnotatedClass(River.class); | |
293 cfg.addAnnotatedClass(RiverAxis.class); | |
294 cfg.addAnnotatedClass(RiverAxisKm.class); | |
295 cfg.addAnnotatedClass(SedimentDensity.class); | |
296 cfg.addAnnotatedClass(SedimentDensityValue.class); | |
297 cfg.addAnnotatedClass(SedimentYield.class); | |
298 cfg.addAnnotatedClass(SedimentYieldValue.class); | |
299 cfg.addAnnotatedClass(SQRelation.class); | |
300 cfg.addAnnotatedClass(SQRelationValue.class); | |
301 cfg.addAnnotatedClass(TimeInterval.class); | |
302 cfg.addAnnotatedClass(Unit.class); | |
303 cfg.addAnnotatedClass(Waterlevel.class); | |
304 cfg.addAnnotatedClass(WaterlevelDifference.class); | |
305 cfg.addAnnotatedClass(WaterlevelDifferenceColumn.class); | |
306 cfg.addAnnotatedClass(WaterlevelDifferenceValue.class); | |
307 cfg.addAnnotatedClass(WaterlevelQRange.class); | |
308 cfg.addAnnotatedClass(WaterlevelValue.class); | |
309 cfg.addAnnotatedClass(WstColumn.class); | |
310 cfg.addAnnotatedClass(WstColumnQRange.class); | |
311 cfg.addAnnotatedClass(WstColumnValue.class); | |
312 cfg.addAnnotatedClass(Wst.class); | |
313 cfg.addAnnotatedClass(WstQRange.class); | |
314 | 119 |
315 if (log.isDebugEnabled()) { | 120 if (log.isDebugEnabled()) { |
316 log.debug("user: " + user); | 121 log.debug("user: " + credentials.getUser()); |
317 log.debug("dialect: " + dialect); | 122 log.debug("dialect: " + credentials.getDialect()); |
318 log.debug("driver: " + driver); | 123 log.debug("driver: " + credentials.getDriver()); |
319 log.debug("url: " + url); | 124 log.debug("url: " + credentials.getUrl()); |
320 } | 125 } |
321 | 126 |
322 Properties props = new Properties(); | 127 Properties props = new Properties(); |
323 | 128 |
324 // We rely on our own connection pool | 129 // We rely on our own connection pool |
325 props.setProperty( | 130 props.setProperty( |
326 "hibernate.connection.provider_class", | 131 "hibernate.connection.provider_class", |
327 "org.hibernate.connection.DBCPConnectionProvider"); | 132 "org.hibernate.connection.DBCPConnectionProvider"); |
328 | 133 |
329 props.setProperty(Environment.DIALECT, dialect); | 134 props.setProperty(Environment.DIALECT, credentials.getDialect()); |
330 props.setProperty(Environment.USER, user); | 135 props.setProperty(Environment.USER, credentials.getUser()); |
331 props.setProperty(Environment.PASS, password); | 136 props.setProperty(Environment.PASS, credentials.getPassword()); |
332 props.setProperty(Environment.DRIVER, driver); | 137 props.setProperty(Environment.DRIVER, credentials.getDriver()); |
333 props.setProperty(Environment.URL, url); | 138 props.setProperty(Environment.URL, credentials.getUrl()); |
334 | 139 |
335 cfg.mergeProperties(props); | 140 cfg.mergeProperties(props); |
336 | 141 |
337 return cfg; | 142 return cfg; |
338 } | 143 } |