From 5f795e85d02e863deb836aad176ae27e31a542c8 Mon Sep 17 00:00:00 2001 From: Loredana Liccardo Date: Fri, 25 Jul 2014 08:13:25 +0000 Subject: [PATCH] added a timeout about 25-20 seconds.To add the timeout the following classes are been modified: - class DatabaseFactory modified adding the initDBConnection method that overrides the properties contained in the hibernate.cfg.xml file. - method initDBSession in class ConnectionManager modified in order to use the DatabaseFactory (in package utils) git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-access/DatabasesResourcesManager@98967 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../databases/utils/ConnectionManager.java | 42 ++++-- .../databases/utils/DatabaseFactory.java | 133 +++++++++++++++++- 2 files changed, 162 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/gcube/dataaccess/databases/utils/ConnectionManager.java b/src/main/java/org/gcube/dataaccess/databases/utils/ConnectionManager.java index c5dd7c0..aaac1e8 100644 --- a/src/main/java/org/gcube/dataaccess/databases/utils/ConnectionManager.java +++ b/src/main/java/org/gcube/dataaccess/databases/utils/ConnectionManager.java @@ -1,23 +1,20 @@ package org.gcube.dataaccess.databases.utils; -import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; -import org.gcube.contentmanagement.lexicalmatcher.utils.FileTools; -import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration; -import org.gcube.dataanalysis.ecoengine.utils.DatabaseUtils; -import org.hibernate.Query; -import org.hibernate.Session; -import org.hibernate.SessionFactory; -import org.hibernate.cfg.Configuration; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.util.List; -import java.util.ArrayList; -import java.util.LinkedHashMap; import javax.xml.parsers.DocumentBuilderFactory; +import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; +import org.gcube.contentmanagement.lexicalmatcher.utils.FileTools; +import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.SessionFactory; +import org.hibernate.cfg.Configuration; + /** * Class that allows to manage a database selected from a user. It performs to * set the database configuration, to connect to the database and finally to @@ -36,11 +33,32 @@ public class ConnectionManager { } + public static SessionFactory initDBSession(AlgorithmConfiguration config) { + SessionFactory dbHibConnection = null; + try { + if ((config != null) && (config.getConfigPath() != null)) { + String defaultDatabaseFile = config.getConfigPath() + AlgorithmConfiguration.defaultConnectionFile; + + config.setDatabaseDriver(config.getParam("DatabaseDriver")); + config.setDatabaseUserName(config.getParam("DatabaseUserName")); + config.setDatabasePassword(config.getParam("DatabasePassword")); + config.setDatabaseURL(config.getParam("DatabaseURL")); + + dbHibConnection = org.gcube.dataaccess.databases.utils.DatabaseFactory.initDBConnection(defaultDatabaseFile, config); + } + } catch (Exception e) { + System.out.println("ERROR IN DB INITIALIZATION : " + e.getLocalizedMessage()); + e.printStackTrace(); + // AnalysisLogger.getLogger().trace(e); + } + return dbHibConnection; + } + // create the database's connection without using the configuration file but // using the data input public SessionFactory initDBConnection(AlgorithmConfiguration config) { - SessionFactory dbconnection = DatabaseUtils.initDBSession(config); + SessionFactory dbconnection = initDBSession(config); return dbconnection; diff --git a/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseFactory.java b/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseFactory.java index a2ab2f8..14b422a 100644 --- a/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseFactory.java +++ b/src/main/java/org/gcube/dataaccess/databases/utils/DatabaseFactory.java @@ -1,10 +1,17 @@ package org.gcube.dataaccess.databases.utils; import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.util.Iterator; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; +import org.dom4j.Document; +import org.dom4j.Node; +import org.dom4j.io.SAXReader; +import org.gcube.contentmanagement.lexicalmatcher.analysis.core.LexicalEngineConfiguration; import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; import org.gcube.contentmanagement.lexicalmatcher.utils.FileTools; import org.hibernate.MappingException; @@ -29,6 +36,131 @@ public class DatabaseFactory { return DBSessionFactory; } + @SuppressWarnings({ "unchecked" }) + public static SessionFactory initDBConnection(String configurationFile, + LexicalEngineConfiguration config) + throws Exception { + + if (config == null) + return initDBConnection(configurationFile); + + // take the configuration file + File fl = new File(configurationFile); + FileInputStream stream = new FileInputStream(fl); + + SAXReader saxReader = new SAXReader(); + Document document = saxReader.read(stream); + List nodes = document + .selectNodes("//hibernate-configuration/session-factory/property"); + Iterator nodesIterator = nodes.iterator(); + + while (nodesIterator.hasNext()) { + Node currentnode = nodesIterator.next(); + String element = currentnode.valueOf("@name"); + if (element.equals("connection.driver_class")) { + if ((config.getDatabaseDriver() != null) + && (config.getDatabaseDriver().length() > 0)) + currentnode.setText(config.getDatabaseDriver()); + else + config.setDatabaseDriver(currentnode.getText()); + } + if (element.equals("connection.url")) { + if ((config.getDatabaseURL() != null) + && (config.getDatabaseURL().length() > 0)) + currentnode.setText(config.getDatabaseURL()); + else + config.setDatabaseURL(currentnode.getText()); + } + if (element.equals("connection.username")) { + if ((config.getDatabaseUserName() != null) + && (config.getDatabaseUserName().length() > 0)) + currentnode.setText(config.getDatabaseUserName()); + else + config.setDatabaseUserName(currentnode.getText()); + } + if (element.equals("connection.password")) { + if ((config.getDatabasePassword() != null) + && (config.getDatabasePassword().length() > 0)) + currentnode.setText(config.getDatabasePassword()); + else + config.setDatabasePassword(currentnode.getText()); + } + if (element.equals("dialect")) { + if ((config.getDatabaseDialect() != null) + && (config.getDatabaseDialect().length() > 0)) + currentnode.setText(config.getDatabaseDialect()); + else + config.setDatabaseDialect(currentnode.getText()); + } + if (element.equals("c3p0.idleConnectionTestPeriod")) { + if (config.getDatabaseIdleConnectionTestPeriod() != null) + currentnode.setText(config + .getDatabaseIdleConnectionTestPeriod()); + else + config.setDatabaseIdleConnectionTestPeriod(currentnode + .getText()); + } + if (element.equals("c3p0.automaticTestTable")) { + if (config.getDatabaseAutomaticTestTable() != null) + currentnode.setText(config.getDatabaseAutomaticTestTable()); + else + config.setDatabaseAutomaticTestTable(currentnode.getText()); + } + +// if (element.equals("c3p0.timeout")) { +// currentnode.setText("" + 30); +// } + /* + if (element.equals("hibernate.c3p0.testConnectionOnCheckout")) { + + currentnode.setText("" + true); + } + + if (element.equals("hibernate.c3p0.idle_test_period")) { + + currentnode.setText("" + 1); + } + + if (element.equals("hibernate.c3p0.timeout")) { + + currentnode.setText("" + 1); + } + + if (element.equals("connection.pool_size")) { + + currentnode.setText("" + 1); + } + if (element.equals("c3p0.idleConnectionTestPeriod")) { + + currentnode.setText("" + 1); + } + */ + if (element.equals("c3p0.checkoutTimeout")) { + + currentnode.setText("" + (20000/4)); //added a timeout about 25-30 seconds + } + +// if (element.equals("c3p0.acquireRetryAttempts")) { +// +// currentnode.setText("" + 10); +// } + + } + + Configuration cfg = new Configuration(); + cfg = cfg.configure(DocumentBuilderFactory.newInstance() + .newDocumentBuilder() + .parse(new ByteArrayInputStream(document.asXML().getBytes()))); + cfg.setProperty("hibernate.hbm2ddl.auto", "create"); + + SessionFactory DBSessionFactory = null; + DBSessionFactory = cfg.buildSessionFactory(); + + // close stream + stream.close(); + return DBSessionFactory; + } + // Method that execute the query public static List executeSQLQuery(String query, SessionFactory DBSessionFactory) throws Exception { @@ -86,7 +218,6 @@ public class DatabaseFactory { return obj; } catch (Exception e) { - if (e.getClass() .toString()