From 8c999003d44b00aab28372d8a82793e26e8dd962 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 27 Jun 2019 23:00:12 +0200 Subject: [PATCH] Remove HikariCP and added new Initializable OracleDataSource --- pom.xml | 6 ---- .../org/utplsql/cli/LoggerConfiguration.java | 6 ---- src/main/java/org/utplsql/cli/RunAction.java | 9 ++---- .../InitializableOracleDataSource.java | 32 +++++++++++++++++++ .../datasource/TestedDataSourceProvider.java | 17 +++++----- 5 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 src/main/java/org/utplsql/cli/datasource/InitializableOracleDataSource.java diff --git a/pom.xml b/pom.xml index 0bd0853..16df048 100644 --- a/pom.xml +++ b/pom.xml @@ -39,12 +39,6 @@ - - com.zaxxer - HikariCP - 3.3.1 - compile - javax.xml.bind jaxb-api diff --git a/src/main/java/org/utplsql/cli/LoggerConfiguration.java b/src/main/java/org/utplsql/cli/LoggerConfiguration.java index 3dcd09b..2a83085 100644 --- a/src/main/java/org/utplsql/cli/LoggerConfiguration.java +++ b/src/main/java/org/utplsql/cli/LoggerConfiguration.java @@ -6,7 +6,6 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.core.ConsoleAppender; -import com.zaxxer.hikari.HikariDataSource; import org.slf4j.LoggerFactory; public class LoggerConfiguration { @@ -39,7 +38,6 @@ private static void configureSilent() { private static void configureInfo() { setRootLoggerLevel(Level.INFO); - muteHikariLogger(); setSingleConsoleAppenderWithLayout("%msg%n"); } @@ -53,10 +51,6 @@ private static void setRootLoggerLevel(Level level) { root.setLevel(level); } - private static void muteHikariLogger() { - ((Logger) LoggerFactory.getLogger(HikariDataSource.class)).setLevel(Level.OFF); - } - private static void setSingleConsoleAppenderWithLayout(String patternLayout) { Logger logger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); diff --git a/src/main/java/org/utplsql/cli/RunAction.java b/src/main/java/org/utplsql/cli/RunAction.java index de960ed..b9fcef9 100644 --- a/src/main/java/org/utplsql/cli/RunAction.java +++ b/src/main/java/org/utplsql/cli/RunAction.java @@ -1,6 +1,5 @@ package org.utplsql.cli; -import com.zaxxer.hikari.HikariDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.utplsql.api.*; @@ -59,13 +58,13 @@ public int doRun() throws OracleCreateStatmenetStuckException { init(); outputMainInformation(); - HikariDataSource dataSource = null; + DataSource dataSource = null; int returnCode = 0; try { final List reporterList; - dataSource = (HikariDataSource) DataSourceProvider.getDataSource(config.getConnectString(), getReporterManager().getNumberOfReporters() + 2); + dataSource = DataSourceProvider.getDataSource(config.getConnectString(), getReporterManager().getNumberOfReporters() + 2); initDatabase(dataSource); reporterList = initReporters(dataSource); @@ -112,10 +111,6 @@ public int doRun() throws OracleCreateStatmenetStuckException { } catch (Throwable e) { e.printStackTrace(); returnCode = Cli.DEFAULT_ERROR_CODE; - } finally { - if (dataSource != null) { - dataSource.close(); - } } return returnCode; } diff --git a/src/main/java/org/utplsql/cli/datasource/InitializableOracleDataSource.java b/src/main/java/org/utplsql/cli/datasource/InitializableOracleDataSource.java new file mode 100644 index 0000000..db32b1a --- /dev/null +++ b/src/main/java/org/utplsql/cli/datasource/InitializableOracleDataSource.java @@ -0,0 +1,32 @@ +package org.utplsql.cli.datasource; + +import oracle.jdbc.pool.OracleDataSource; + +import java.sql.CallableStatement; +import java.sql.Connection; +import java.sql.SQLException; + +public class InitializableOracleDataSource extends OracleDataSource { + + private String initSql; + + public InitializableOracleDataSource() throws SQLException { + } + + @Override + public Connection getConnection() throws SQLException { + Connection con = super.getConnection(); + + if ( initSql != null && !initSql.isEmpty() ) { + try (CallableStatement stmt = con.prepareCall(initSql)) { + stmt.execute(); + } + } + + return con; + } + + public void setConnectionInitSql( String sql ) { + this.initSql = sql; + } +} diff --git a/src/main/java/org/utplsql/cli/datasource/TestedDataSourceProvider.java b/src/main/java/org/utplsql/cli/datasource/TestedDataSourceProvider.java index 8c72c87..8ecfeca 100644 --- a/src/main/java/org/utplsql/cli/datasource/TestedDataSourceProvider.java +++ b/src/main/java/org/utplsql/cli/datasource/TestedDataSourceProvider.java @@ -1,12 +1,13 @@ package org.utplsql.cli.datasource; -import com.zaxxer.hikari.HikariDataSource; +import oracle.jdbc.pool.OracleDataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.utplsql.api.EnvironmentVariableUtil; import org.utplsql.cli.ConnectionConfig; import org.utplsql.cli.exception.DatabaseConnectionFailed; +import javax.sql.DataSource; import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; @@ -35,11 +36,9 @@ public TestedDataSourceProvider(ConnectionConfig config, int maxConnections) { possibilities.add(new ThinConnectStringPossibility()); } - public HikariDataSource getDataSource() throws SQLException { + public DataSource getDataSource() throws SQLException { - HikariDataSource ds = new HikariDataSource(); - ds.setAutoCommit(false); - ds.setMaximumPoolSize(maxConnections); + InitializableOracleDataSource ds = new InitializableOracleDataSource(); setInitSqlFrom_NLS_LANG(ds); setThickOrThinJdbcUrl(ds); @@ -47,15 +46,15 @@ public HikariDataSource getDataSource() throws SQLException { return ds; } - private void setThickOrThinJdbcUrl(HikariDataSource ds) throws SQLException { + private void setThickOrThinJdbcUrl(OracleDataSource ds) throws SQLException { List errors = new ArrayList<>(); Throwable lastException = null; - ds.setUsername(config.getUser()); + ds.setUser(config.getUser()); ds.setPassword(config.getPassword()); for (ConnectStringPossibility possibility : possibilities) { - ds.setJdbcUrl(possibility.getConnectString(config)); + ds.setURL(possibility.getConnectString(config)); try (Connection ignored = ds.getConnection()) { logger.info("Use connection string {}", possibility.getMaskedConnectString(config)); return; @@ -69,7 +68,7 @@ private void setThickOrThinJdbcUrl(HikariDataSource ds) throws SQLException { throw new DatabaseConnectionFailed(lastException); } - private void setInitSqlFrom_NLS_LANG(HikariDataSource ds) { + private void setInitSqlFrom_NLS_LANG(InitializableOracleDataSource ds) { String nls_lang = EnvironmentVariableUtil.getEnvValue("NLS_LANG"); if (nls_lang != null) {