[jboss-cvs] JBossAS SVN: r110928 - in projects/jboss-jca/trunk: adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading and 6 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Mar 16 10:48:30 EDT 2011
Author: maeste
Date: 2011-03-16 10:48:29 -0400 (Wed, 16 Mar 2011)
New Revision: 110928
Added:
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/TCClassLoaderPlugin.java
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/package.html
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/spi/ClassLoaderPlugin.java
Modified:
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/local/LocalManagedConnectionFactory.java
projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java
projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
Log:
JBJCA-524 create a classloader spi for jdbc adapters
Modified: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/BaseWrapperManagedConnectionFactory.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -22,9 +22,11 @@
package org.jboss.jca.adapters.jdbc;
+import org.jboss.jca.adapters.jdbc.classloading.TCClassLoaderPlugin;
import org.jboss.jca.adapters.jdbc.extensions.novendor.NullExceptionSorter;
import org.jboss.jca.adapters.jdbc.extensions.novendor.NullStaleConnectionChecker;
import org.jboss.jca.adapters.jdbc.extensions.novendor.NullValidConnectionChecker;
+import org.jboss.jca.adapters.jdbc.spi.ClassLoaderPlugin;
import org.jboss.jca.adapters.jdbc.spi.ExceptionSorter;
import org.jboss.jca.adapters.jdbc.spi.StaleConnectionChecker;
import org.jboss.jca.adapters.jdbc.spi.URLSelectorStrategy;
@@ -45,7 +47,6 @@
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.Locale;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
@@ -224,6 +225,8 @@
/** Reauth plugin */
private ReauthPlugin reauthPlugin;
+ private ClassLoaderPlugin classLoaderPlugin;
+
/**
* Constructor
*/
@@ -1087,7 +1090,7 @@
Set<PasswordCredential> creds = subject.getPrivateCredentials(PasswordCredential.class);
if (creds != null && creds.size() > 0)
{
- for (PasswordCredential cred: creds)
+ for (PasswordCredential cred : creds)
{
if (cred.getManagedConnectionFactory().equals(mcf))
{
@@ -1261,4 +1264,28 @@
}
}
}
+
+ /**
+ * Get the clPlugin.
+ *
+ * @return the clPlugin.
+ */
+ public final ClassLoaderPlugin getClassLoaderPlugin()
+ {
+ if (classLoaderPlugin == null)
+ {
+ classLoaderPlugin = new TCClassLoaderPlugin();
+ }
+ return classLoaderPlugin;
+ }
+
+ /**
+ * Set the clPlugin.
+ *
+ * @param clPlugin The clPlugin to set.
+ */
+ public final void setClassLoaderPlugin(ClassLoaderPlugin clPlugin)
+ {
+ this.classLoaderPlugin = clPlugin;
+ }
}
Added: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/TCClassLoaderPlugin.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/TCClassLoaderPlugin.java (rev 0)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/TCClassLoaderPlugin.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -0,0 +1,53 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.adapters.jdbc.classloading;
+
+import org.jboss.jca.adapters.jdbc.spi.ClassLoaderPlugin;
+
+/**
+ *
+ * A TCClassLoaderPlugin.
+ *
+ * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
+ *
+ */
+public class TCClassLoaderPlugin implements ClassLoaderPlugin
+{
+
+ /**
+ *
+ * Create a new TCClassLoaderPlugin.
+ *
+ */
+ public TCClassLoaderPlugin()
+ {
+
+ }
+
+ @Override
+ public ClassLoader getClassLoader()
+ {
+ return Thread.currentThread().getContextClassLoader();
+ }
+
+}
+
Added: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/package.html
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/package.html (rev 0)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/classloading/package.html 2011-03-16 14:48:29 UTC (rev 110928)
@@ -0,0 +1,3 @@
+<body>
+Default classloader plugin
+</body>
Modified: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/local/LocalManagedConnectionFactory.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/local/LocalManagedConnectionFactory.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/local/LocalManagedConnectionFactory.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -541,7 +541,7 @@
try
{
//try to load the class... this should register with DriverManager.
- Class<?> clazz = Class.forName(driverClass, true, Thread.currentThread().getContextClassLoader());
+ Class<?> clazz = Class.forName(driverClass, true, getClassLoaderPlugin().getClassLoader());
if (isDriverLoadedForURL(url))
//return immediately, some drivers (Cloudscape) do not let you create an instance.
return driver;
Added: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/spi/ClassLoaderPlugin.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/spi/ClassLoaderPlugin.java (rev 0)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/spi/ClassLoaderPlugin.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -0,0 +1,44 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.jca.adapters.jdbc.spi;
+
+/**
+ *
+ * A ClassLoaderPlugin spi
+ *
+ * @author <a href="stefano.maestri at jboss.com">Stefano Maestri</a>
+ *
+ */
+public interface ClassLoaderPlugin
+{
+
+ /**
+ *
+ * get the correct classLoader to use according to installed plugin
+ *
+ * @return the correct class loader
+ *
+ */
+ public ClassLoader getClassLoader();
+
+}
+
Modified: projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java
===================================================================
--- projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/adapters/src/main/java/org/jboss/jca/adapters/jdbc/xa/XAManagedConnectionFactory.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -56,22 +56,22 @@
public class XAManagedConnectionFactory extends BaseWrapperManagedConnectionFactory
{
private static final long serialVersionUID = 1647927657609573729L;
-
+
private String xaDataSourceClass;
-
+
private String xaDataSourceProperties;
/** THe XA properties */
protected final Properties xaProps = new Properties();
-
+
private Boolean isSameRMOverrideValue;
-
+
private XADataSource xads;
-
+
private String urlProperty;
-
+
private URLSelectorStrategy xadsSelector;
-
+
/**
* Constructor
*/
@@ -87,7 +87,7 @@
{
return urlProperty;
}
-
+
/**
* Set the URL property
* @param urlProperty The value
@@ -104,12 +104,13 @@
* @param urlDelimiter The value
* @exception ResourceException Thrown in case of an error
*/
+ @Override
public void setURLDelimiter(String urlDelimiter) throws ResourceException
{
this.urlDelimiter = urlDelimiter;
initSelector();
}
-
+
/**
* Get the XaDataSourceClass value.
* @return the XaDataSourceClass value.
@@ -151,7 +152,7 @@
{
// Map any \ to \\
xaDataSourceProperties = xaDataSourceProperties.replaceAll("\\\\", "\\\\\\\\");
-
+
InputStream is = new ByteArrayInputStream(xaDataSourceProperties.getBytes());
try
{
@@ -190,7 +191,7 @@
if (urlProperty != null && urlProperty.length() > 0)
{
String urlsStr = xaProps.getProperty(urlProperty);
- if (urlsStr != null && urlsStr.trim().length() > 0 &&
+ if (urlsStr != null && urlsStr.trim().length() > 0 &&
urlDelimiter != null && urlDelimiter.trim().length() > 0)
{
List<XAData> xaDataList = new ArrayList<XAData>(2);
@@ -240,7 +241,7 @@
}
}
}
-
+
@SuppressWarnings("unchecked")
private XADataSource createXaDataSource(Properties xaProps) throws ResourceException
{
@@ -248,11 +249,11 @@
{
throw new ResourceException("No XADataSourceClass supplied!");
}
-
+
XADataSource xads = null;
try
{
- Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(getXADataSourceClass());
+ Class<?> clazz = getClassLoaderPlugin().getClassLoader().loadClass(getXADataSourceClass());
xads = (XADataSource)clazz.newInstance();
final Class<?>[] noClasses = new Class<?>[]{};
for (Iterator<?> i = xaProps.keySet().iterator(); i.hasNext();)
@@ -302,7 +303,7 @@
editor.setAsText(value);
setter.invoke(xads, new Object[]{editor.getValue()});
-
+
}
}
catch (ClassNotFoundException cnfe)
@@ -329,7 +330,7 @@
{
throw new ResourceException("Could not find accessor on XADataSource: ", nsme);
}
-
+
return xads;
}
@@ -343,15 +344,15 @@
{
return getXAManagedConnection(subject, cri);
}
-
+
// try to get a connection as many times as many urls we have in the list
for (int i = 0; i < xadsSelector.getCustomSortedUrls().size(); ++i)
{
XAData xaData = (XAData)xadsSelector.getUrlObject();
-
+
if (log.isTraceEnabled())
log.trace("Trying to create an XA connection to " + xaData.url);
-
+
try
{
return getXAManagedConnection(subject, cri);
@@ -364,7 +365,7 @@
}
// we have supposedly tried all the urls
- throw new ResourceException("Could not create connection using any of the URLs: " +
+ throw new ResourceException("Could not create connection using any of the URLs: " +
xadsSelector.getAllUrlObjects());
}
@@ -385,11 +386,11 @@
{
final String user = props.getProperty("user");
final String password = props.getProperty("password");
-
+
xaConnection = (user != null)
? getXADataSource().getXAConnection(user, password)
: getXADataSource().getXAConnection();
-
+
return newXAManagedConnection(props, xaConnection);
}
catch (Throwable e)
@@ -434,7 +435,7 @@
if (o instanceof XAManagedConnection)
{
XAManagedConnection mc = (XAManagedConnection) o;
-
+
if (Boolean.TRUE.equals(getReauthEnabled()))
{
return mc;
@@ -455,6 +456,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public int hashCode()
{
int result = 17;
@@ -469,6 +471,7 @@
/**
* {@inheritDoc}
*/
+ @Override
public boolean equals(Object other)
{
if (this == other)
@@ -512,7 +515,7 @@
for (Iterator<?> i = xaProps.keySet().iterator(); i.hasNext();)
{
String name = (String)i.next();
- String value = xaProps.getProperty(name);
+ String value = xaProps.getProperty(name);
char firstCharName = Character.toUpperCase(name.charAt(0));
if (name.length() > 1)
@@ -687,7 +690,7 @@
return getXAData();
}
}
-
+
private static class XAData
{
private final XADataSource xads;
@@ -709,13 +712,14 @@
return url;
}
+ @Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
-
+
if (!(o instanceof XAData))
{
return false;
@@ -731,11 +735,13 @@
return true;
}
+ @Override
public int hashCode()
{
return url.hashCode();
}
+ @Override
public String toString()
{
return "[XA URL=" + url + "]";
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/CommonDataSource.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -105,4 +105,10 @@
*/
public boolean isSpy();
+
+ /**
+ * Get the module
+ * @return The value
+ */
+ public String getModule();
}
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/DataSource.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -52,12 +52,6 @@
public String getDriverClass();
/**
- * Get the module
- * @return The value
- */
- public String getModule();
-
- /**
* Get the connectionProperties.
*
* @return the connectionProperties.
Modified: projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java
===================================================================
--- projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/common/src/main/java/org/jboss/jca/common/api/metadata/ds/XaDataSource.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -45,12 +45,6 @@
public String getXaDataSourceClass();
/**
- * Get the module
- * @return The value
- */
- public String getModule();
-
- /**
* Get the statement.
*
* @return the statement.
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/common/AbstractDsDeployer.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -26,6 +26,7 @@
import org.jboss.jca.common.api.metadata.common.CommonValidation;
import org.jboss.jca.common.api.metadata.common.Credential;
import org.jboss.jca.common.api.metadata.common.Recovery;
+import org.jboss.jca.common.api.metadata.ds.CommonDataSource;
import org.jboss.jca.common.api.metadata.ds.DataSource;
import org.jboss.jca.common.api.metadata.ds.DataSources;
import org.jboss.jca.common.api.metadata.ds.XaDataSource;
@@ -218,8 +219,8 @@
}
XAResourceRecovery recovery = null;
- Object cf = deployXADataSource(xaDataSource,
- jndiName, uniqueJdbcXAId,
+ Object cf = deployXADataSource(xaDataSource,
+ jndiName, uniqueJdbcXAId,
recovery,
jdbcXADeploymentCl);
@@ -244,8 +245,8 @@
}
return new CommonDeployment(url, deploymentName, true, null, null, cfs.toArray(new Object[cfs.size()]),
- jndis.toArray(new String[jndis.size()]),
- null, null,
+ jndis.toArray(new String[jndis.size()]),
+ null, null,
recoveryModules.toArray(new XAResourceRecovery[recoveryModules.size()]),
null, parentClassLoader,
log);
@@ -282,6 +283,8 @@
// ManagedConnectionFactory
ManagedConnectionFactory mcf = (ManagedConnectionFactory) initAndInject(cd.getManagedConnectionFactoryClass()
.getValue(), cd.getConfigProperties(), cl);
+
+ initAndInjectClassLoaderPlugin(mcf, ds);
// Create the pool
PoolConfiguration pc = createPoolConfiguration(ds.getPool(), ds.getTimeOut(), ds.getValidation());
@@ -405,6 +408,7 @@
// ManagedConnectionFactory
ManagedConnectionFactory mcf = (ManagedConnectionFactory) initAndInject(cd.getManagedConnectionFactoryClass()
.getValue(), cd.getConfigProperties(), cl);
+ initAndInjectClassLoaderPlugin(mcf, ds);
// Create the pool
PoolConfiguration pc = createPoolConfiguration(ds.getXaPool(), ds.getTimeOut(), ds.getValidation());
@@ -606,7 +610,7 @@
{
recoveryImpl.setJndiName(cm.getJndiName());
getXAResourceRecoveryRegistry().addXAResourceRecovery(recoveryImpl);
-
+
recovery = recoveryImpl;
}
@@ -614,6 +618,8 @@
return mcf.createConnectionFactory(cm);
}
+
+
/**
* Create an instance of the pool configuration based on the input
* @param pp The pool parameters
@@ -720,6 +726,21 @@
throws DeployException;
/**
+ *
+ * Initialize and inject class loader plugin
+ *
+ * @param mcf The managed connection factory
+ * @param dsMetadata The dataSource metadata
+ * @throws DeployException Thrown if the object cant be initialized or injected
+ */
+ protected void initAndInjectClassLoaderPlugin(ManagedConnectionFactory mcf, CommonDataSource dsMetadata)
+ throws DeployException
+ {
+ //Default impl is doing nothing, delagating to MCF the default plugin instance creation
+ }
+
+
+ /**
* Get a subject factory
* @param securityDomain The security domain
* @return The subject factory; must return <code>null</code> if security domain isn't defined
Modified: projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java
===================================================================
--- projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java 2011-03-16 13:23:44 UTC (rev 110927)
+++ projects/jboss-jca/trunk/deployers/src/main/java/org/jboss/jca/deployers/fungal/DsXmlDeployer.java 2011-03-16 14:48:29 UTC (rev 110928)
@@ -181,7 +181,7 @@
uniqueJdbcLocalId, uniqueJdbcXAId,
dataSources, parent);
- return new DsXmlDeployment(c.getURL(), c.getDeploymentName(),
+ return new DsXmlDeployment(c.getURL(), c.getDeploymentName(),
c.getCfs(), c.getCfJndiNames(),
c.getRecovery(), getXAResourceRecoveryRegistry(),
c.getCl());
@@ -263,7 +263,7 @@
JndiStrategy js = new ExplicitJndiStrategy();
String[] result = js.bindConnectionFactories(deployment, new Object[]{cf}, new String[]{jndi});
-
+
log.infof("Bound data source at: %s", jndi);
return result;
@@ -305,7 +305,7 @@
}
@Override
- protected SubjectFactory getSubjectFactory(String securityDomain)
+ protected SubjectFactory getSubjectFactory(String securityDomain)
throws org.jboss.jca.deployers.common.DeployException
{
log.tracef("getSubjectFactory(%s)", securityDomain);
@@ -319,9 +319,8 @@
}
catch (Throwable t)
{
- throw new
- org.jboss.jca.deployers.common.DeployException("Error during loookup of security domain: " +
- securityDomain, t);
+ throw new org.jboss.jca.deployers.common.DeployException("Error during loookup of security domain: " +
+ securityDomain, t);
}
}
}
More information about the jboss-cvs-commits
mailing list