allowing to load jdbc driver with creationg loader in tomcat-jdbc
Conflicts:
tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4a9948bb
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4a9948bb
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4a9948bb
Branch: refs/heads/tomee-1.7.x
Commit: 4a9948bbdffad60f0ecc3620e16006c098ec3e18
Parents: f7ae5ce
Author: Romain Manni-Bucau <[email protected]>
Authored: Thu Jul 16 21:21:53 2015 +0200
Committer: Jonathan Gallimore <[email protected]>
Committed: Thu Jul 30 14:06:40 2015 +0100
----------------------------------------------------------------------
examples/datasource-versioning/pom.xml | 12 ++++++++++
.../tomee/jdbc/TomEEDataSourceCreator.java | 23 ++++++++++++++++----
2 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/4a9948bb/examples/datasource-versioning/pom.xml
----------------------------------------------------------------------
diff --git a/examples/datasource-versioning/pom.xml
b/examples/datasource-versioning/pom.xml
index 48251af..4d3428f 100644
--- a/examples/datasource-versioning/pom.xml
+++ b/examples/datasource-versioning/pom.xml
@@ -159,6 +159,18 @@
<version>4.7.3-SNAPSHOT</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-jdbc</artifactId>
+ <version>8.0.24</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomee</groupId>
+ <artifactId>tomee-jdbc</artifactId>
+ <version>7.0.0-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<!--
This section allows you to configure where to publish libraries for sharing.
http://git-wip-us.apache.org/repos/asf/tomee/blob/4a9948bb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
----------------------------------------------------------------------
diff --git
a/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
b/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
index 59da925..f9f96f1 100644
---
a/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
+++
b/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
@@ -41,6 +41,8 @@ import javax.management.ObjectName;
import javax.sql.CommonDataSource;
import javax.sql.DataSource;
import javax.sql.XADataSource;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
@@ -48,6 +50,10 @@ import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
+import javax.management.ObjectName;
+import javax.sql.CommonDataSource;
+import javax.sql.DataSource;
+import javax.sql.XADataSource;
public class TomEEDataSourceCreator extends PoolDataSourceCreator {
private static final Logger LOGGER =
Logger.getInstance(LogCategory.OPENEJB, TomEEDataSourceCreator.class);
@@ -239,7 +245,7 @@ public class TomEEDataSourceCreator extends
PoolDataSourceCreator {
if (pool != null) {
return pool;
} else {
- pool = new TomEEConnectionPool(poolProperties); // to force to
init the driver with TCCL
+ pool = new TomEEConnectionPool(poolProperties,
Thread.currentThread().getContextClassLoader()); // to force to init the driver
with TCCL
return pool;
}
}
@@ -303,7 +309,7 @@ public class TomEEDataSourceCreator extends
PoolDataSourceCreator {
private final PoolConfiguration delegate;
public ReadOnlyConnectionpool(final PoolConfiguration pool) {
- delegate = pool;
+ this.delegate = pool;
}
@Override
@@ -320,8 +326,11 @@ public class TomEEDataSourceCreator extends
PoolDataSourceCreator {
}
private static class TomEEConnectionPool extends ConnectionPool {
- public TomEEConnectionPool(final PoolConfiguration poolProperties)
throws SQLException {
+ private final ClassLoader creationLoader;
+
+ public TomEEConnectionPool(final PoolConfiguration poolProperties,
final ClassLoader creationLoader) throws SQLException {
super(poolProperties);
+ this.creationLoader = creationLoader;
}
@Override
@@ -335,7 +344,13 @@ public class TomEEDataSourceCreator extends
PoolDataSourceCreator {
}
try {
Reflections.set(con, "driver",
Class.forName(getPoolProperties().getDriverClassName(), true,
cl).newInstance());
- } catch (final java.lang.Exception cn) {
+ } catch (final ClassNotFoundException cnfe) {
+ try { // custom resource classloader
+ Reflections.set(con, "driver",
Class.forName(getPoolProperties().getDriverClassName(), true,
creationLoader).newInstance());
+ } catch (final Exception e) {
+ // will fail later, no worry
+ }
+ } catch (final Exception cn) {
// will fail later, no worry
}
}