Author: alessio.soldano(a)jboss.com
Date: 2011-04-07 09:25:56 -0400 (Thu, 07 Apr 2011)
New Revision: 14029
Modified:
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/DefaultSPIProvider.java
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/management/DefaultEndpointRegistryFactory.java
Log:
Use server integration classloader for endpoint registry lookup and add option for
providing classloader to be used for SPI resolution
Modified:
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/DefaultSPIProvider.java
===================================================================
---
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/DefaultSPIProvider.java 2011-04-07
13:22:17 UTC (rev 14028)
+++
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/DefaultSPIProvider.java 2011-04-07
13:25:56 UTC (rev 14029)
@@ -49,55 +49,55 @@
*/
class DefaultSPIProvider extends SPIProvider
{
-
/**
- * Gets the specified SPI.
+ * Gets the specified SPI, using the provided classloader
*/
- public <T> T getSPI(Class<T> spiType)
+ @Override
+ public <T> T getSPI(Class<T> spiType, ClassLoader loader)
{
T returnType = null;
// SPIs provided by framework, defaults can be overridden
if (DeploymentModelFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultDeploymentModelFactory.class);
+ returnType = loadService(spiType, DefaultDeploymentModelFactory.class, loader);
}
else if (EndpointMetricsFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultEndpointMetricsFactory.class);
+ returnType = loadService(spiType, DefaultEndpointMetricsFactory.class, loader);
}
else if (LifecycleHandlerFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultLifecycleHandlerFactory.class);
+ returnType = loadService(spiType, DefaultLifecycleHandlerFactory.class,
loader);
}
else if (ResourceInjectorFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultResourceInjectorFactory.class);
+ returnType = loadService(spiType, DefaultResourceInjectorFactory.class,
loader);
}
else if (ServiceRefHandlerFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultServiceRefHandlerFactory.class);
+ returnType = loadService(spiType, DefaultServiceRefHandlerFactory.class,
loader);
}
else if (SecurityAdaptorFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultSecurityAdapterFactory.class);
+ returnType = loadService(spiType, DefaultSecurityAdapterFactory.class, loader);
}
else if (EndpointRegistryFactory.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultEndpointRegistryFactory.class);
+ returnType = loadService(spiType, DefaultEndpointRegistryFactory.class,
loader);
}
else if (Deployer.class.equals(spiType))
{
- returnType = loadService(spiType, DeployerJBoss6.class);
+ returnType = loadService(spiType, DeployerJBoss6.class, loader);
}
else if (JMSEndpointResolver.class.equals(spiType))
{
- returnType = loadService(spiType, DefaultJMSEndpointResolver.class);
+ returnType = loadService(spiType, DefaultJMSEndpointResolver.class, loader);
}
else
{
// SPI provided by either container or stack integration that has no default
implementation
- returnType = (T)loadService(spiType, null);
+ returnType = (T)loadService(spiType, null, loader);
}
if (returnType == null)
@@ -108,10 +108,10 @@
// Load SPI implementation through ServiceLoader
@SuppressWarnings("unchecked")
- private <T> T loadService(Class<T> spiType, Class<?> defaultImpl)
+ private <T> T loadService(Class<T> spiType, Class<?> defaultImpl,
ClassLoader loader)
{
final String defaultImplName = defaultImpl != null ? defaultImpl.getName() : null;
- return (T)ServiceLoader.loadService(spiType.getName(), defaultImplName);
+ return (T)ServiceLoader.loadService(spiType.getName(), defaultImplName, loader);
}
}
Modified:
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/management/DefaultEndpointRegistryFactory.java
===================================================================
---
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/management/DefaultEndpointRegistryFactory.java 2011-04-07
13:22:17 UTC (rev 14028)
+++
common/branches/asoldano/src/main/java/org/jboss/wsf/framework/management/DefaultEndpointRegistryFactory.java 2011-04-07
13:25:56 UTC (rev 14029)
@@ -25,6 +25,7 @@
import org.jboss.wsf.spi.SPIProvider;
import org.jboss.wsf.spi.SPIProviderResolver;
import org.jboss.wsf.spi.WSFException;
+import org.jboss.wsf.spi.classloading.ClassLoaderProvider;
import org.jboss.wsf.spi.ioc.IoCContainerProxy;
import org.jboss.wsf.spi.ioc.IoCContainerProxyFactory;
import org.jboss.wsf.spi.management.EndpointRegistry;
@@ -62,8 +63,9 @@
{
try
{
- final SPIProvider spiProvider =
SPIProviderResolver.getInstance().getProvider();
- final IoCContainerProxyFactory iocContainerFactory =
spiProvider.getSPI(IoCContainerProxyFactory.class);
+ final ClassLoader cl =
ClassLoaderProvider.getDefaultProvider().getServerIntegrationClassLoader();
+ final SPIProvider spiProvider =
SPIProviderResolver.getInstance(cl).getProvider();
+ final IoCContainerProxyFactory iocContainerFactory =
spiProvider.getSPI(IoCContainerProxyFactory.class, cl);
final IoCContainerProxy iocContainer = iocContainerFactory.getContainer();
EndpointRegistry registry = null;