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
                 }
             }

Reply via email to