diff --git a/hapi-fhir-jpaserver-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/DriverTypeEnum.java b/hapi-fhir-jpaserver-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/DriverTypeEnum.java index fba5349e686..83a614ce603 100644 --- a/hapi-fhir-jpaserver-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/DriverTypeEnum.java +++ b/hapi-fhir-jpaserver-migrate/src/main/java/ca/uhn/fhir/jpa/migrate/DriverTypeEnum.java @@ -1,13 +1,17 @@ package ca.uhn.fhir.jpa.migrate; +import ca.uhn.fhir.context.ConfigurationException; import org.apache.commons.lang3.Validate; +import org.springframework.beans.factory.DisposableBean; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.DataSourceTransactionManager; -import org.springframework.jdbc.datasource.SingleConnectionDataSource; +import org.springframework.jdbc.datasource.SimpleDriverDataSource; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.support.TransactionTemplate; import javax.annotation.Nonnull; +import javax.sql.DataSource; +import java.sql.Driver; /*- * #%L @@ -41,7 +45,7 @@ public enum DriverTypeEnum { ORACLE_12C("oracle.jdbc.OracleDriver", false), - MSSQL_2012("com.microsoft.sqlserver.jdbc.SQLServerDataSource", false), + MSSQL_2012("com.microsoft.sqlserver.jdbc.SQLServerDriver", false), ; @@ -58,13 +62,19 @@ public enum DriverTypeEnum { public ConnectionProperties newConnectionProperties(String theUrl, String theUsername, String thePassword) { - SingleConnectionDataSource dataSource = new SingleConnectionDataSource(); - dataSource.setAutoCommit(false); - dataSource.setDriverClassName(myDriverClassName); + + Driver driver = null; + try { + driver = (Driver) Class.forName(myDriverClassName).newInstance(); + } catch (Exception e) { + throw new ConfigurationException("Failed to initialize driver: " + myDriverClassName + ": " + e.toString()); + } + + SimpleDriverDataSource dataSource = new SimpleDriverDataSource(); + dataSource.setDriver(driver); dataSource.setUrl(theUrl); dataSource.setUsername(theUsername); dataSource.setPassword(thePassword); - dataSource.setSuppressClose(true); DataSourceTransactionManager transactionManager = new DataSourceTransactionManager(); transactionManager.setDataSource(dataSource); @@ -81,12 +91,12 @@ public enum DriverTypeEnum { public static class ConnectionProperties { private final DriverTypeEnum myDriverType; - private final SingleConnectionDataSource myDataSource; + private final DataSource myDataSource; private final TransactionTemplate myTxTemplate; /** * Constructor */ - public ConnectionProperties(SingleConnectionDataSource theDataSource, TransactionTemplate theTxTemplate, DriverTypeEnum theDriverType) { + public ConnectionProperties(DataSource theDataSource, TransactionTemplate theTxTemplate, DriverTypeEnum theDriverType) { Validate.notNull(theDataSource); Validate.notNull(theTxTemplate); Validate.notNull(theDriverType); @@ -101,7 +111,7 @@ public enum DriverTypeEnum { } @Nonnull - public SingleConnectionDataSource getDataSource() { + public DataSource getDataSource() { return myDataSource; } @@ -118,7 +128,13 @@ public enum DriverTypeEnum { } public void close() { - myDataSource.destroy(); + if (myDataSource instanceof DisposableBean) { + try { + ((DisposableBean) myDataSource).destroy(); + } catch (Exception theE) { + // ignore + } + } } } }