From 86460bc7a4cb70ffc9148269f1531eb8999eb235 Mon Sep 17 00:00:00 2001 From: Lucio Lelii Date: Thu, 6 Jul 2017 16:16:42 +0000 Subject: [PATCH] git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/data-analysis/EcologicalEngine@150851 82a268e6-3cf1-43bd-a215-b396298e98cf --- .../ecoengine/utils/DatabaseFactory.java | 78 ++++++++++++++++--- .../ecoengine/utils/DatabaseUtils.java | 37 +++++---- 2 files changed, 86 insertions(+), 29 deletions(-) diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseFactory.java b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseFactory.java index 49aad5a..1643597 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseFactory.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseFactory.java @@ -4,11 +4,15 @@ package org.gcube.dataanalysis.ecoengine.utils; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.PrintWriter; +import java.io.StringWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.util.ArrayList; import java.util.List; +import java.util.Map.Entry; +import java.util.Properties; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; @@ -23,14 +27,19 @@ import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class DatabaseFactory{ + private static final Logger LOGGER = LoggerFactory.getLogger(DatabaseFactory.class); + public static SessionFactory initDBConnection(String configurationFile) throws Exception { String xml = FileTools.readXMLDoc(configurationFile); + LOGGER.debug("initialising DB Connection with conf: {} ",xml); SessionFactory DBSessionFactory = null; Configuration cfg = new Configuration(); cfg = cfg.configure(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()))); @@ -43,6 +52,8 @@ public class DatabaseFactory{ final List defaultconfig = new ArrayList(); + LOGGER.debug("reading default DB configuration from {}",configurationFile); + // take the configuration file File fl = new File(configurationFile); FileInputStream stream = new FileInputStream(fl); @@ -99,27 +110,70 @@ public class DatabaseFactory{ return defaultconfig; } - @SuppressWarnings({"unchecked"}) public static SessionFactory initDBConnection(String configurationFile, LexicalEngineConfiguration config) throws Exception { + LOGGER.debug("init DB configuration from {}",configurationFile); if (config==null) return initDBConnection(configurationFile); - - - // take the configuration file - File fl = new File(configurationFile); - FileInputStream stream = new FileInputStream(fl); - + Configuration cfg = new Configuration(); - cfg = cfg.configure(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stream)); - cfg.setProperty("hibernate.hbm2ddl.auto", "create"); + + try(FileInputStream stream = new FileInputStream(new File(configurationFile))){ + cfg = cfg.configure(DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stream)); + } + + if ((config.getDatabaseDriver() != null)&&(config.getDatabaseDriver().length()>0)) + cfg.setProperty("hibernate.connection.driver_class",config.getDatabaseDriver()); + else + config.setDatabaseDriver(cfg.getProperty("connection.driver_class")); + + if ((config.getDatabaseURL() != null)&&(config.getDatabaseURL().length()>0)) + cfg.setProperty("hibernate.connection.url",config.getDatabaseURL()); + else + config.setDatabaseURL(cfg.getProperty("connection.url")); + + if ((config.getDatabaseUserName() != null)&&(config.getDatabaseUserName().length()>0)) + cfg.setProperty("hibernate.connection.username", config.getDatabaseUserName()); + else + config.setDatabaseUserName(cfg.getProperty("connection.username")); + + if ((config.getDatabasePassword() != null)&&(config.getDatabasePassword().length()>0)) + cfg.setProperty("hibernate.connection.password", config.getDatabasePassword()); + else + config.setDatabasePassword(cfg.getProperty("connection.password")); + + if ((config.getDatabaseDialect() != null)&&(config.getDatabaseDialect().length()>0)) + cfg.setProperty("hibernate.dialect", config.getDatabaseDialect()); + else + config.setDatabaseDialect(cfg.getProperty("dialect")); + + if (config.getDatabaseIdleConnectionTestPeriod() != null) + cfg.setProperty("hibernate.c3p0.idleConnectionTestPeriod",config.getDatabaseIdleConnectionTestPeriod()); + else + config.setDatabaseIdleConnectionTestPeriod(cfg.getProperty("c3p0.idleConnectionTestPeriod")); + + if (config.getDatabaseAutomaticTestTable() != null) + cfg.setProperty("hibernate.c3p0.automaticTestTable",config.getDatabaseAutomaticTestTable()); + else + config.setDatabaseAutomaticTestTable(cfg.getProperty("c3p0.automaticTestTable")); + + + cfg.setProperty("hibernate.hbm2ddl.auto", "create"); + + Properties props = cfg.getProperties(); + + /* LOGGER.debug("retrieving property for connection:"); + + for (Entry propEntry : props.entrySet()){ + LOGGER.debug("----- property {} -> {} ",propEntry.getKey(), propEntry.getValue()); + }*/ + SessionFactory DBSessionFactory = null; DBSessionFactory = cfg.buildSessionFactory(); - // close stream - stream.close(); + return DBSessionFactory; } @@ -228,7 +282,7 @@ public class DatabaseFactory{ try { - ss = DBSessionFactory.getCurrentSession(); + ss = DBSessionFactory.getCurrentSession(); // System.out.println("executing query"); ss.beginTransaction(); Query qr = null; diff --git a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java index 3066558..a8d91f1 100644 --- a/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java +++ b/src/main/java/org/gcube/dataanalysis/ecoengine/utils/DatabaseUtils.java @@ -5,14 +5,17 @@ import java.io.FileWriter; import java.sql.Connection; import java.util.List; -import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger; import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration; import org.hibernate.SessionFactory; import org.postgresql.copy.CopyManager; import org.postgresql.core.BaseConnection; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DatabaseUtils { + private static Logger LOGGER = LoggerFactory.getLogger(DatabaseUtils.class); + static String queryDesc = "SELECT column_name,data_type, character_maximum_length, is_nullable FROM information_schema.COLUMNS WHERE table_name ='%1$s'"; static String queryColumns = "SELECT column_name FROM information_schema.COLUMNS WHERE table_name ='%1$s'"; static String queryForKeys = "SELECT b.column_name as name, a.constraint_type as type FROM information_schema.table_constraints as a join information_schema.key_column_usage as b on a.table_name ='%1$s' and a.constraint_name = b.constraint_name"; @@ -35,7 +38,7 @@ public class DatabaseUtils { private String primaryK; private String primaryKColName; - + public static long estimateNumberofRows(String table, SessionFactory dbconnection) throws Exception{ List explain = DatabaseFactory.executeSQLQuery("EXPLAIN SELECT * FROM "+table, dbconnection); String explained = "" + explain.get(0); @@ -43,7 +46,7 @@ public class DatabaseUtils { explained = explained.substring(explained.indexOf('=') + 1, explained.indexOf(' ')); return Long.parseLong(explained); } - + private void getPrimaryKeys(List keys, String table) { int keynum = 0; if (keys != null) @@ -177,9 +180,9 @@ public class DatabaseUtils { public static void insertChunksIntoTable(String table, String columnsNames, List values, int chunkSize,SessionFactory dbconnection) throws Exception{ insertChunksIntoTable(table, columnsNames, values, chunkSize,dbconnection, true) ; } - + public static void insertChunksIntoTable(String table, String columnsNames, List values, int chunkSize,SessionFactory dbconnection, boolean correctApos) throws Exception{ - + int valuesize = values.size(); StringBuffer sb = new StringBuffer(); int stopIndex =0; @@ -206,23 +209,23 @@ public class DatabaseUtils { else if (i0){ -// System.out.println(sb); + // System.out.println(sb); try{ DatabaseFactory.executeSQLUpdate(insertFromBuffer(table, columnsNames, sb), dbconnection); }catch(Exception e){ System.out.println("Query:"+sb); throw e; } - + } } - + } - + public static String insertFromString(String table, String columnsNames, String values) { return "insert into " + table + " (" + columnsNames + ") values " + values; @@ -287,12 +290,12 @@ public class DatabaseUtils { public static void createBigTable(boolean createTable, String table, String dbdriver, String dbuser, String dbpassword, String dburl, String creationStatement, SessionFactory dbHibConnection) throws Exception { if (createTable) { try { - AnalysisLogger.getLogger().debug("Dropping previous table if exists"); + LOGGER.debug("Dropping previous table if exists"); DatabaseFactory.executeSQLUpdate("drop table " + table, dbHibConnection); } catch (Exception e) { - // e.printStackTrace(); + } - AnalysisLogger.getLogger().debug("Creating Big Table"); + LOGGER.debug("Creating Big Table"); DatabaseFactory.executeUpdateNoTransaction(creationStatement, dbdriver, dbuser, dbpassword, dburl, true); } } @@ -327,13 +330,13 @@ public class DatabaseUtils { config.setDatabaseUserName(config.getParam("DatabaseUserName")); config.setDatabasePassword(config.getParam("DatabasePassword")); config.setDatabaseURL(config.getParam("DatabaseURL")); - + + LOGGER.trace("initializing DB session {} {} ",config.getParam("DatabaseUserName"), config.getParam("DatabaseURL")); + dbHibConnection = DatabaseFactory.initDBConnection(defaultDatabaseFile, config); } } catch (Exception e) { - System.out.println("ERROR IN DB INITIALIZATION : " + e.getLocalizedMessage()); - e.printStackTrace(); - // AnalysisLogger.getLogger().trace(e); + LOGGER.error("ERROR IN DB INITIALIZATION",e); } return dbHibConnection; }