You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/08/19 20:51:15 UTC
svn commit: r1374817 -
/openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
Author: rmannibucau
Date: Sun Aug 19 18:51:15 2012
New Revision: 1374817
URL: http://svn.apache.org/viewvc?rev=1374817&view=rev
Log:
TOMEE-384 using tccl to get the jdbc driver with tomcat jdbc
Modified:
openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
Modified: openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java?rev=1374817&r1=1374816&r2=1374817&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java (original)
+++ openejb/trunk/openejb/tomee/tomee-jdbc/src/main/java/org/apache/tomee/jdbc/TomEEDataSourceCreator.java Sun Aug 19 18:51:15 2012
@@ -23,9 +23,11 @@ import org.apache.openejb.monitoring.Obj
import org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.reflection.Reflections;
import org.apache.tomcat.jdbc.pool.ConnectionPool;
import org.apache.tomcat.jdbc.pool.PoolConfiguration;
import org.apache.tomcat.jdbc.pool.PoolProperties;
+import org.apache.tomcat.jdbc.pool.PooledConnection;
import javax.management.ObjectName;
import javax.sql.DataSource;
@@ -33,6 +35,7 @@ import java.lang.reflect.InvocationHandl
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.sql.Connection;
+import java.sql.Driver;
import java.sql.SQLException;
import java.util.Map;
import java.util.Properties;
@@ -122,6 +125,16 @@ public class TomEEDataSourceCreator exte
initJmx(name);
}
+ @Override
+ public ConnectionPool createPool() throws SQLException {
+ if (pool != null) {
+ return pool;
+ } else {
+ pool = new TomEEConnectionPool(poolProperties); // to force to init the driver with TCCL
+ return pool;
+ }
+ }
+
public TomEEDataSource(final PoolConfiguration poolConfiguration, final String name) {
super(poolConfiguration);
try { // just to force the pool to be created and be able to register the mbean
@@ -172,6 +185,30 @@ public class TomEEDataSourceCreator exte
}
}
+ private static class TomEEConnectionPool extends ConnectionPool {
+ public TomEEConnectionPool(final PoolConfiguration poolProperties) throws SQLException {
+ super(poolProperties);
+ }
+
+ @Override
+ protected PooledConnection create(boolean incrementCounter) {
+ final PooledConnection con = super.create(incrementCounter);
+ if (getPoolProperties().getDataSource() == null) { // using driver
+ // init driver with TCCL
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (cl == null) {
+ cl = TomEEConnectionPool.class.getClassLoader();
+ }
+ try {
+ Reflections.set(con, "driver", Class.forName(getPoolProperties().getDriverClassName(), true, cl).newInstance());
+ } catch (java.lang.Exception cn) {
+ // will fail later, no worry
+ }
+ }
+ return con;
+ }
+ }
+
private static class ContantHashCodeHandler implements InvocationHandler { // will be fixed in tomcat-jdbc in next version
private final Object delegate;
private final int hashCode;