Mercurial > dive4elements > river
diff 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 |
line wrap: on
line diff
--- a/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java Thu Jun 14 10:06:34 2012 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/backend/SessionFactoryProvider.java Thu Jun 14 15:39:42 2012 +0000 @@ -1,184 +1,68 @@ package de.intevation.flys.backend; -import de.intevation.artifacts.common.utils.Config; +import java.lang.management.ManagementFactory; -import java.lang.management.ManagementFactory; import java.util.Properties; import javax.management.InstanceAlreadyExistsException; -import javax.management.MalformedObjectNameException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; +import org.apache.log4j.Logger; + import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; +import org.hibernate.cfg.Environment; + import org.hibernate.impl.SessionFactoryImpl; import org.hibernate.jmx.StatisticsService; -import org.hibernate.cfg.Configuration; -import org.hibernate.cfg.Environment; - -import de.intevation.flys.model.Annotation; -import de.intevation.flys.model.AnnotationType; -import de.intevation.flys.model.Attribute; -import de.intevation.flys.model.BedHeightEpoch; -import de.intevation.flys.model.BedHeightEpochValue; -import de.intevation.flys.model.BedHeightSingle; -import de.intevation.flys.model.BedHeightSingleValue; -import de.intevation.flys.model.BedHeightType; -import de.intevation.flys.model.Building; -import de.intevation.flys.model.Catchment; -import de.intevation.flys.model.CrossSection; -import de.intevation.flys.model.CrossSectionLine; -import de.intevation.flys.model.CrossSectionPoint; -import de.intevation.flys.model.CrossSectionTrack; -import de.intevation.flys.model.Depth; -import de.intevation.flys.model.DGM; -import de.intevation.flys.model.DischargeTable; -import de.intevation.flys.model.DischargeTableValue; -import de.intevation.flys.model.DischargeZone; -import de.intevation.flys.model.Edge; -import de.intevation.flys.model.ElevationModel; -import de.intevation.flys.model.Fixpoint; -import de.intevation.flys.model.Floodmaps; -import de.intevation.flys.model.Floodplain; -import de.intevation.flys.model.FlowVelocityMeasurement; -import de.intevation.flys.model.FlowVelocityMeasurementValue; -import de.intevation.flys.model.FlowVelocityModel; -import de.intevation.flys.model.FlowVelocityModelValue; -import de.intevation.flys.model.Gauge; -import de.intevation.flys.model.GaugeLocation; -import de.intevation.flys.model.GrainFraction; -import de.intevation.flys.model.Hws; -import de.intevation.flys.model.HydrBoundary; -import de.intevation.flys.model.HydrBoundaryPoly; -import de.intevation.flys.model.HYK; -import de.intevation.flys.model.HYKEntry; -import de.intevation.flys.model.HYKFormation; -import de.intevation.flys.model.HYKFlowZoneType; -import de.intevation.flys.model.HYKFlowZone; -import de.intevation.flys.model.Line; -import de.intevation.flys.model.LocationSystem; -import de.intevation.flys.model.MainValueType; -import de.intevation.flys.model.MorphologicalWidth; -import de.intevation.flys.model.MorphologicalWidthValue; -import de.intevation.flys.model.NamedMainValue; -import de.intevation.flys.model.MainValue; -import de.intevation.flys.model.Position; -import de.intevation.flys.model.Range; -import de.intevation.flys.model.River; -import de.intevation.flys.model.RiverAxis; -import de.intevation.flys.model.RiverAxisKm; -import de.intevation.flys.model.SedimentDensity; -import de.intevation.flys.model.SedimentDensityValue; -import de.intevation.flys.model.SedimentYield; -import de.intevation.flys.model.SedimentYieldValue; -import de.intevation.flys.model.SQRelation; -import de.intevation.flys.model.SQRelationValue; -import de.intevation.flys.model.TimeInterval; -import de.intevation.flys.model.Unit; -import de.intevation.flys.model.Waterlevel; -import de.intevation.flys.model.WaterlevelDifference; -import de.intevation.flys.model.WaterlevelDifferenceColumn; -import de.intevation.flys.model.WaterlevelDifferenceValue; -import de.intevation.flys.model.WaterlevelQRange; -import de.intevation.flys.model.WaterlevelValue; -import de.intevation.flys.model.WstColumn; -import de.intevation.flys.model.WstColumnQRange; -import de.intevation.flys.model.WstColumnValue; -import de.intevation.flys.model.Wst; -import de.intevation.flys.model.WstQRange; - -import org.apache.log4j.Logger; - public final class SessionFactoryProvider { private static Logger log = Logger.getLogger(SessionFactoryProvider.class); - public static final String XPATH_USER = - "/artifact-database/backend-database/user/text()"; - - public static final String XPATH_PASSWORD = - "/artifact-database/backend-database/password/text()"; - - public static final String XPATH_DIALECT = - "/artifact-database/backend-database/dialect/text()"; - - public static final String XPATH_DRIVER = - "/artifact-database/backend-database/driver/text()"; - - public static final String XPATH_URL = - "/artifact-database/backend-database/url/text()"; - - public static final String DEFAULT_USER = - System.getProperty("flys.backend.user", "flys"); - - public static final String DEFAULT_PASSWORD = - System.getProperty("flys.backend.password", "flys"); - - public static final String DEFAULT_DIALECT = - System.getProperty( - "flys.backend.dialect", - "org.hibernate.dialect.PostgreSQLDialect"); - - public static final String DEFAULT_DRIVER = - System.getProperty( - "flys.backend.driver", - "org.postgresql.Driver"); - - public static final String DEFAULT_URL = - System.getProperty( - "flys.backend.url", - "jdbc:postgresql://localhost:5432/flys"); - public static final boolean ENABLE_JMX = Boolean.getBoolean("flys.backend.enablejmx"); - private static SessionFactory sessionFactory; + private static SessionFactory flysSessionFactory; + private static SessionFactory sedDBSessionFactory; private SessionFactoryProvider() { } public static synchronized SessionFactory getSessionFactory() { - if (sessionFactory == null) { - String user = - Config.getStringXPath(XPATH_USER, DEFAULT_USER); - String password = - Config.getStringXPath(XPATH_PASSWORD, DEFAULT_PASSWORD); - String dialect = - Config.getStringXPath(XPATH_DIALECT, DEFAULT_DIALECT); - String driver = - Config.getStringXPath(XPATH_DRIVER, DEFAULT_DRIVER); - String url = - Config.getStringXPath(XPATH_URL, DEFAULT_URL); - - sessionFactory = createSessionFactory( - user, password, dialect, driver, url); + if (flysSessionFactory == null) { + flysSessionFactory = + createSessionFactory(FLYSCredentials.getInstance()); } - return sessionFactory; + return flysSessionFactory; } public static SessionFactory createSessionFactory() { - return createSessionFactory( - DEFAULT_USER, - DEFAULT_PASSWORD, - DEFAULT_DIALECT, - DEFAULT_DRIVER, - DEFAULT_URL); + return createSessionFactory(FLYSCredentials.getDefault()); + } + + public static synchronized SessionFactory getSedDBSessionFactory() { + if (sedDBSessionFactory == null) { + sedDBSessionFactory = + createSessionFactory(SedDBCredentials.getInstance()); + } + return sedDBSessionFactory; + } + + public static SessionFactory createSedDBSessionFactory() { + return createSessionFactory(SedDBCredentials.getDefault()); } public static SessionFactory createSessionFactory( - String user, - String password, - String dialect, - String driver, - String url + Credentials credentials ) { - Configuration cfg = createConfiguration( - user, password, dialect, driver, url); + Configuration cfg = createConfiguration(credentials); SessionFactory factory = cfg.buildSessionFactory(); @@ -192,7 +76,6 @@ return factory; } - public static void registerAsMBean(SessionFactory factory) { StatisticsService statsMBean = new StatisticsService(); @@ -221,102 +104,24 @@ } } - public static Configuration createConfiguration() { - return createConfiguration( - DEFAULT_USER, - DEFAULT_PASSWORD, - DEFAULT_DIALECT, - DEFAULT_DRIVER, - DEFAULT_URL); + return createConfiguration(FLYSCredentials.getInstance()); } public static Configuration createConfiguration( - String user, - String password, - String dialect, - String driver, - String url + Credentials credentials ) { Configuration cfg = new Configuration(); - // TODO: Use package reflection here. - cfg.addAnnotatedClass(Annotation.class); - cfg.addAnnotatedClass(AnnotationType.class); - cfg.addAnnotatedClass(Attribute.class); - cfg.addAnnotatedClass(BedHeightEpoch.class); - cfg.addAnnotatedClass(BedHeightEpochValue.class); - cfg.addAnnotatedClass(BedHeightSingle.class); - cfg.addAnnotatedClass(BedHeightSingleValue.class); - cfg.addAnnotatedClass(BedHeightType.class); - cfg.addAnnotatedClass(Building.class); - cfg.addAnnotatedClass(Catchment.class); - cfg.addAnnotatedClass(CrossSection.class); - cfg.addAnnotatedClass(CrossSectionLine.class); - cfg.addAnnotatedClass(CrossSectionPoint.class); - cfg.addAnnotatedClass(CrossSectionTrack.class); - cfg.addAnnotatedClass(Depth.class); - cfg.addAnnotatedClass(DGM.class); - cfg.addAnnotatedClass(DischargeTable.class); - cfg.addAnnotatedClass(DischargeTableValue.class); - cfg.addAnnotatedClass(DischargeZone.class); - cfg.addAnnotatedClass(Edge.class); - cfg.addAnnotatedClass(ElevationModel.class); - cfg.addAnnotatedClass(Fixpoint.class); - cfg.addAnnotatedClass(Floodplain.class); - cfg.addAnnotatedClass(Floodmaps.class); - cfg.addAnnotatedClass(FlowVelocityMeasurement.class); - cfg.addAnnotatedClass(FlowVelocityMeasurementValue.class); - cfg.addAnnotatedClass(FlowVelocityModel.class); - cfg.addAnnotatedClass(FlowVelocityModelValue.class); - cfg.addAnnotatedClass(Gauge.class); - cfg.addAnnotatedClass(GaugeLocation.class); - cfg.addAnnotatedClass(GrainFraction.class); - cfg.addAnnotatedClass(Hws.class); - cfg.addAnnotatedClass(HydrBoundary.class); - cfg.addAnnotatedClass(HydrBoundaryPoly.class); - cfg.addAnnotatedClass(HYK.class); - cfg.addAnnotatedClass(HYKEntry.class); - cfg.addAnnotatedClass(HYKFormation.class); - cfg.addAnnotatedClass(HYKFlowZoneType.class); - cfg.addAnnotatedClass(HYKFlowZone.class); - cfg.addAnnotatedClass(Line.class); - cfg.addAnnotatedClass(LocationSystem.class); - cfg.addAnnotatedClass(MainValueType.class); - cfg.addAnnotatedClass(MorphologicalWidth.class); - cfg.addAnnotatedClass(MorphologicalWidthValue.class); - cfg.addAnnotatedClass(NamedMainValue.class); - cfg.addAnnotatedClass(MainValue.class); - cfg.addAnnotatedClass(Position.class); - cfg.addAnnotatedClass(Range.class); - cfg.addAnnotatedClass(River.class); - cfg.addAnnotatedClass(RiverAxis.class); - cfg.addAnnotatedClass(RiverAxisKm.class); - cfg.addAnnotatedClass(SedimentDensity.class); - cfg.addAnnotatedClass(SedimentDensityValue.class); - cfg.addAnnotatedClass(SedimentYield.class); - cfg.addAnnotatedClass(SedimentYieldValue.class); - cfg.addAnnotatedClass(SQRelation.class); - cfg.addAnnotatedClass(SQRelationValue.class); - cfg.addAnnotatedClass(TimeInterval.class); - cfg.addAnnotatedClass(Unit.class); - cfg.addAnnotatedClass(Waterlevel.class); - cfg.addAnnotatedClass(WaterlevelDifference.class); - cfg.addAnnotatedClass(WaterlevelDifferenceColumn.class); - cfg.addAnnotatedClass(WaterlevelDifferenceValue.class); - cfg.addAnnotatedClass(WaterlevelQRange.class); - cfg.addAnnotatedClass(WaterlevelValue.class); - cfg.addAnnotatedClass(WstColumn.class); - cfg.addAnnotatedClass(WstColumnQRange.class); - cfg.addAnnotatedClass(WstColumnValue.class); - cfg.addAnnotatedClass(Wst.class); - cfg.addAnnotatedClass(WstQRange.class); + for (Class clazz: credentials.getClasses()) { + cfg.addAnnotatedClass(clazz); + } if (log.isDebugEnabled()) { - log.debug("user: " + user); - log.debug("dialect: " + dialect); - log.debug("driver: " + driver); - log.debug("url: " + url); + log.debug("user: " + credentials.getUser()); + log.debug("dialect: " + credentials.getDialect()); + log.debug("driver: " + credentials.getDriver()); + log.debug("url: " + credentials.getUrl()); } Properties props = new Properties(); @@ -326,11 +131,11 @@ "hibernate.connection.provider_class", "org.hibernate.connection.DBCPConnectionProvider"); - props.setProperty(Environment.DIALECT, dialect); - props.setProperty(Environment.USER, user); - props.setProperty(Environment.PASS, password); - props.setProperty(Environment.DRIVER, driver); - props.setProperty(Environment.URL, url); + props.setProperty(Environment.DIALECT, credentials.getDialect()); + props.setProperty(Environment.USER, credentials.getUser()); + props.setProperty(Environment.PASS, credentials.getPassword()); + props.setProperty(Environment.DRIVER, credentials.getDriver()); + props.setProperty(Environment.URL, credentials.getUrl()); cfg.mergeProperties(props);