[jboss-cvs] JBossAS SVN: r111815 - in projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc: extensions/mysql and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jul 22 10:25:06 EDT 2011
Author: jesper.pedersen
Date: 2011-07-22 10:25:06 -0400 (Fri, 22 Jul 2011)
New Revision: 111815
Modified:
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReauthPlugin.java
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReplicationValidConnectionChecker.java
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLValidConnectionChecker.java
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/oracle/OracleValidConnectionChecker.java
projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java
Log:
[JBJCA-635] Wrong classloader used for plugins
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -741,10 +741,45 @@
if (reauthPluginClassName == null || reauthPluginClassName.trim().equals(""))
throw new IllegalStateException("ReauthPlugin class name not defined");
+
+ Class<?> clz = null;
try
{
- Class<?> clz = Class.forName(reauthPluginClassName, true, Thread.currentThread().getContextClassLoader());
+ clz = Class.forName(reauthPluginClassName, true, getClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Not found
+ }
+
+ if (clz == null)
+ {
+ try
+ {
+ clz = Class.forName(reauthPluginClassName, true, new TCClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Not found
+ }
+ }
+
+ if (clz == null)
+ {
+ try
+ {
+ clz = Class.forName(reauthPluginClassName, true,
+ BaseWrapperManagedConnectionFactory.class.getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ throw new ResourceException("Error during loading reauth plugin", cnfe);
+ }
+ }
+
+ try
+ {
reauthPlugin = (ReauthPlugin)clz.newInstance();
if (reauthPluginProperties != null)
@@ -771,7 +806,7 @@
}
}
- reauthPlugin.initialize(Thread.currentThread().getContextClassLoader());
+ reauthPlugin.initialize(BaseWrapperManagedConnectionFactory.class.getClassLoader());
}
catch (Throwable t)
{
@@ -834,33 +869,57 @@
public Object loadClass(String className, Object constructorParameter)
{
Object result = null;
+
+ if (className == null || className.trim().equals(""))
+ {
+ log.error("Unable to load undefined URLSelectStrategy");
+ return null;
+ }
+
+ Class<?> clz = null;
try
{
- Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
- Class<?> param[] = {java.util.List.class};
- Constructor<?> cnstructor = clazz.getDeclaredConstructor(param);
- Object consParameter[] = {constructorParameter};
- result = cnstructor.newInstance(consParameter);
+ clz = Class.forName(className, true, getClassLoaderPlugin().getClassLoader());
}
catch (ClassNotFoundException cnfe)
{
- log.error("Class not found for URLSelectStrategy :" + className);
+ // Not found
}
- catch (InstantiationException ie)
+
+ if (clz == null)
{
- log.error("Could not instantiate URLSelectorStrategy type :" + className);
+ try
+ {
+ clz = Class.forName(className, true, new TCClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Not found
+ }
}
- catch (IllegalAccessException iae)
+
+ if (clz == null)
{
- log.error("Check for the constructor with List parameter for URLSelectStrategy class as " + className);
+ try
+ {
+ clz = Class.forName(className, true, BaseWrapperManagedConnectionFactory.class.getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ log.error("Unable to load: " + className);
+ }
}
- catch (InvocationTargetException ite)
+
+ try
{
- log.error("Constructor Invocation failing for URLSelectorStrategy " + className);
+ Class<?> param[] = {java.util.List.class};
+ Constructor<?> constructor = clz.getDeclaredConstructor(param);
+ Object consParameter[] = {constructorParameter};
+ result = constructor.newInstance(consParameter);
}
- catch (NoSuchMethodException nsme)
+ catch (Throwable t)
{
- log.error("Constructor or Method mismatch in URLSelectorStrategy :" + className);
+ log.error("URLSelectStrategy:" + t.getMessage(), t);
}
return result;
@@ -975,6 +1034,69 @@
}
/**
+ * Load plugin class
+ * @param plugin The plugin class name
+ * @param props Optional properties that should be injected
+ * @return The configured object
+ * @exception Exception Thrown if the plugin couldn't be loaded
+ */
+ Object loadPlugin(String plugin, Properties props) throws Exception
+ {
+ if (plugin == null)
+ throw new Exception("Plugin is null");
+
+ if (plugin.trim().equals(""))
+ throw new Exception("Plugin isn't defined");
+
+ Class<?> clz = null;
+ try
+ {
+ clz = Class.forName(plugin, true, getClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Not found
+ }
+
+ if (clz == null)
+ {
+ try
+ {
+ clz = Class.forName(plugin, true, new TCClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Not found
+ }
+ }
+
+ if (clz == null)
+ {
+ try
+ {
+ clz = Class.forName(plugin, true, BaseWrapperManagedConnectionFactory.class.getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ throw new Exception("Unable to load: " + plugin);
+ }
+ }
+
+ Object result = clz.newInstance();
+
+ if (props != null)
+ {
+ Injection injection = new Injection();
+ for (Entry<Object, Object> prop : props.entrySet())
+ {
+ injection.inject(result, (String)prop.getKey(), (String)prop.getValue());
+ }
+ }
+
+ return result;
+ }
+
+ /**
* Is the exception fatal
* @param e The exception
* @return True if fatal; otherwise false
@@ -990,15 +1112,18 @@
{
try
{
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- Class<?> clazz = cl.loadClass(exceptionSorterClassName);
- exceptionSorter = (ExceptionSorter)clazz.newInstance();
- Injection injection = new Injection();
- for (Entry<Object, Object> prop : exceptionSorterProps.entrySet())
+ Object o = loadPlugin(exceptionSorterClassName, exceptionSorterProps);
+
+ if (o != null && o instanceof ExceptionSorter)
{
- injection.inject(exceptionSorter, (String)prop.getKey(), (String)prop.getValue());
+ exceptionSorter = (ExceptionSorter)o;
+ return exceptionSorter.isExceptionFatal(e);
}
- return exceptionSorter.isExceptionFatal(e);
+ else
+ {
+ log.warn("Disabling exception sorter");
+ exceptionSorter = new NullExceptionSorter();
+ }
}
catch (Exception e2)
{
@@ -1030,19 +1155,22 @@
{
try
{
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- Class<?> clazz = cl.loadClass(validConnectionCheckerClassName);
- connectionChecker = (ValidConnectionChecker) clazz.newInstance();
- Injection injection = new Injection();
- for (Entry<Object, Object> prop : validConnectionCheckerProps.entrySet())
+ Object o = loadPlugin(validConnectionCheckerClassName, validConnectionCheckerProps);
+
+ if (o != null && o instanceof ValidConnectionChecker)
{
- injection.inject(connectionChecker, (String)prop.getKey(), (String)prop.getValue());
+ connectionChecker = (ValidConnectionChecker)o;
+ return connectionChecker.isValidConnection(c);
}
- return connectionChecker.isValidConnection(c);
+ else
+ {
+ log.warn("Disabling valid connection checker");
+ connectionChecker = new NullValidConnectionChecker();
+ }
}
catch (Exception e)
{
- log.warn("Exception trying to create connection checker (disabling):", e);
+ log.warn("Exception trying to create valid connection checker (disabling):", e);
connectionChecker = new NullValidConnectionChecker();
}
}
@@ -1073,19 +1201,22 @@
{
try
{
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- Class<?> clazz = cl.loadClass(staleConnectionCheckerClassName);
- staleConnectionChecker = (StaleConnectionChecker)clazz.newInstance();
- Injection injection = new Injection();
- for (Entry<Object, Object> prop : staleConnectionCheckerProps.entrySet())
+ Object o = loadPlugin(staleConnectionCheckerClassName, staleConnectionCheckerProps);
+
+ if (o != null && o instanceof StaleConnectionChecker)
{
- injection.inject(staleConnectionChecker, (String)prop.getKey(), (String)prop.getValue());
+ staleConnectionChecker = (StaleConnectionChecker)o;
+ return staleConnectionChecker.isStaleConnection(e);
}
- return staleConnectionChecker.isStaleConnection(e);
+ else
+ {
+ log.warn("Disabling stale connection checker");
+ staleConnectionChecker = new NullStaleConnectionChecker();
+ }
}
catch (Exception ex2)
{
- log.warn("exception trying to create stale connection checker (disabling) " +
+ log.warn("Exception trying to create stale connection checker (disabling) " +
staleConnectionCheckerClassName, ex2);
staleConnectionChecker = new NullStaleConnectionChecker();
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReauthPlugin.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReauthPlugin.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReauthPlugin.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -51,12 +51,35 @@
*/
public synchronized void initialize(ClassLoader cl) throws SQLException
{
+ Class<?> mysqlConnection = null;
+
try
{
- Class<?> mysqlConnection = cl.loadClass("com.mysql.jdbc.Connection");
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ mysqlConnection = Class.forName("com.mysql.jdbc.Connection", true, tccl);
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Ignore
+ }
+
+ if (mysqlConnection == null)
+ {
+ try
+ {
+ mysqlConnection = Class.forName("com.mysql.jdbc.Connection", true, cl);
+ }
+ catch (Throwable t)
+ {
+ throw new SQLException("Cannot resolve com.mysq.jdbc.Connection changeUser method", t);
+ }
+ }
+
+ try
+ {
changeUser = mysqlConnection.getMethod("changeUser", new Class[] {String.class, String.class});
- }
- catch (Throwable t)
+ }
+ catch (Throwable t)
{
throw new SQLException("Cannot resolve com.mysq.jdbc.Connection changeUser method", t);
}
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReplicationValidConnectionChecker.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReplicationValidConnectionChecker.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLReplicationValidConnectionChecker.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -205,7 +205,7 @@
log = Logger.getLogger(MySQLReplicationValidConnectionChecker.class);
// Load connection class
- Class<?> mysqlConnection = Thread.currentThread().getContextClassLoader().loadClass(CONNECTION_CLASS);
+ Class<?> mysqlConnection = Class.forName(CONNECTION_CLASS, true, getClass().getClassLoader());
// Check for Java 6 compatibility and use isValid on the connection
try
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLValidConnectionChecker.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLValidConnectionChecker.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/mysql/MySQLValidConnectionChecker.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -155,8 +155,7 @@
log = Logger.getLogger(MySQLValidConnectionChecker.class);
driverHasPingMethod = false;
- Class<?> mysqlConnection =
- Thread.currentThread().getContextClassLoader().loadClass("com.mysql.jdbc.Connection");
+ Class<?> mysqlConnection = Class.forName("com.mysql.jdbc.Connection", true, getClass().getClassLoader());
ping = mysqlConnection.getMethod("ping", new Class<?>[] {});
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/oracle/OracleValidConnectionChecker.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/oracle/OracleValidConnectionChecker.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/extensions/oracle/OracleValidConnectionChecker.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -98,7 +98,7 @@
log = Logger.getLogger(OracleValidConnectionChecker.class);
Class<?> oracleConnection =
- Thread.currentThread().getContextClassLoader().loadClass("oracle.jdbc.driver.OracleConnection");
+ Class.forName("oracle.jdbc.driver.OracleConnection", true, getClass().getClassLoader());
ping = oracleConnection.getMethod("pingDatabase", new Class<?>[] {Integer.TYPE});
}
Modified: projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java
===================================================================
--- projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java 2011-07-22 14:22:30 UTC (rev 111814)
+++ projects/jboss-jca/branches/Branch_1_0/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java 2011-07-22 14:25:06 UTC (rev 111815)
@@ -23,6 +23,7 @@
package org.jboss.jca.adapters.jdbc.xa;
import org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnectionFactory;
+import org.jboss.jca.adapters.jdbc.classloading.TCClassLoaderPlugin;
import org.jboss.jca.adapters.jdbc.spi.URLSelectorStrategy;
import java.beans.PropertyEditor;
@@ -251,9 +252,44 @@
}
XADataSource xads = null;
+ Class<?> clazz = null;
+
try
{
- Class<?> clazz = getClassLoaderPlugin().getClassLoader().loadClass(getXADataSourceClass());
+ clazz = Class.forName(getXADataSourceClass(), true, getClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Ignore
+ }
+
+ if (clazz == null)
+ {
+ try
+ {
+ clazz = Class.forName(getXADataSourceClass(), true, new TCClassLoaderPlugin().getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ // Ignore
+ }
+ }
+
+ if (clazz == null)
+ {
+ try
+ {
+ clazz = Class.forName(getXADataSourceClass(), true, XAManagedConnectionFactory.class.getClassLoader());
+ }
+ catch (ClassNotFoundException cnfe)
+ {
+ throw new ResourceException("Class not found for XADataSource " + getXADataSourceClass(), cnfe);
+ }
+ }
+
+
+ try
+ {
xads = (XADataSource)clazz.newInstance();
final Class<?>[] noClasses = new Class<?>[]{};
for (Iterator<?> i = xaProps.keySet().iterator(); i.hasNext();)
@@ -306,10 +342,6 @@
}
}
- catch (ClassNotFoundException cnfe)
- {
- throw new ResourceException("Class not found for XADataSource " + getXADataSourceClass(), cnfe);
- }
catch (InstantiationException ie)
{
throw new ResourceException("Could not create an XADataSource: ", ie);
More information about the jboss-cvs-commits
mailing list