sascha@979: package de.intevation.flys.artifacts.datacage; sascha@979: sascha@979: import de.intevation.artifacts.common.utils.Config; sascha@979: sascha@979: import java.sql.SQLException; sascha@979: sascha@979: import javax.sql.DataSource; sascha@979: sascha@979: import org.apache.commons.dbcp.BasicDataSource; sascha@979: sascha@979: import org.apache.log4j.Logger; sascha@979: sascha@979: public class DBConnection sascha@979: { sascha@979: private static Logger logger = Logger.getLogger(DBConnection.class); sascha@979: sascha@979: /** sascha@979: * XPath to access the database driver within the global configuration. sascha@979: */ sascha@979: public static final String DB_DRIVER = sascha@979: "/artifact-database/datacage/driver/text()"; sascha@979: /** sascha@979: * XPath to access the database URL within the global configuration. sascha@979: */ sascha@979: public static final String DB_URL = sascha@979: "/artifact-database/datacage/url/text()"; sascha@979: /** sascha@979: * XPath to access the database use within the global configuration. sascha@979: */ sascha@979: public static final String DB_USER = sascha@979: "/artifact-database/datacage/user/text()"; sascha@979: /** sascha@979: * XPath to access the database password within the global configuration. sascha@979: */ sascha@979: public static final String DB_PASSWORD = sascha@979: "/artifact-database/datacage/password/text()"; sascha@979: sascha@979: /** sascha@979: * The default database driver: H2 sascha@979: */ sascha@979: public static final String DEFAULT_DRIVER = sascha@979: "org.h2.Driver"; sascha@979: sascha@979: /** sascha@979: * The default database user: "" sascha@979: */ sascha@979: public static final String DEFAULT_USER = ""; sascha@979: sascha@979: /** sascha@979: * The default database password: "" sascha@979: */ sascha@979: public static final String DEFAULT_PASSWORD = ""; sascha@979: sascha@979: sascha@979: public static final String DEFAULT_URL = sascha@979: "jdbc:h2:mem;INIT=RUNSCRIPT FROM '${artifacts.config.dir}/datacage.sql'"; sascha@979: sascha@979: private static BasicDataSource dataSource; sascha@979: sascha@979: private DBConnection() { sascha@979: } sascha@979: sascha@979: private static final void addShutdownHook() { sascha@979: Runtime.getRuntime().addShutdownHook(new Thread() { sascha@979: @Override sascha@979: public void run() { sascha@979: if (dataSource != null) { sascha@979: try { sascha@979: dataSource.close(); sascha@979: } sascha@979: catch (SQLException sqle) { sascha@979: } sascha@979: dataSource = null; sascha@979: } sascha@979: } sascha@979: }); sascha@979: sascha@979: } sascha@979: sascha@979: public static synchronized DataSource getDataSource() { sascha@979: if (dataSource == null) { sascha@979: dataSource = new BasicDataSource(); sascha@979: sascha@979: String driver = Config.getStringXPath( sascha@979: DB_DRIVER, DEFAULT_DRIVER); sascha@979: sascha@979: String url = Config.getStringXPath( sascha@979: DB_URL, DEFAULT_URL); sascha@979: sascha@979: url = Config.replaceConfigDir(url); sascha@979: sascha@979: String user = Config.getStringXPath( sascha@979: DB_USER, DEFAULT_USER); sascha@979: sascha@979: String password = Config.getStringXPath( sascha@979: DB_PASSWORD, DEFAULT_PASSWORD); sascha@979: sascha@979: logger.info("database driver: " + driver); sascha@979: logger.info("database url: " + url); sascha@979: sascha@979: dataSource.setDriverClassName(driver); sascha@979: dataSource.setUsername(user); sascha@979: dataSource.setPassword(password); sascha@979: dataSource.setUrl(url); sascha@979: addShutdownHook(); sascha@979: } sascha@979: sascha@979: return dataSource; sascha@979: } sascha@979: } sascha@979: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :