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) {