modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/ClassLoaderManager.java | 15 ++++++++++ modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/PluginComponentFactory.java | 7 +++- 2 files changed, 20 insertions(+), 2 deletions(-)
New commits: commit 0a244b73f60b25b78ebc9378407e35867cf9e10c Author: Ian Springer ian.springer@redhat.com Date: Mon Sep 20 14:58:44 2010 -0400
only ask discovery components for additional classpath URLs (i.e. client jars) if per-resource classloaders are enabled in the plugin container config
diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/ClassLoaderManager.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/ClassLoaderManager.java index aec2353..ffaae5e 100644 --- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/ClassLoaderManager.java +++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/ClassLoaderManager.java @@ -463,6 +463,21 @@ public class ClassLoaderManager { return new HashMap<CanonicalResourceKey, ClassLoader>(this.resourceClassLoaders); }
+ /** + * Returns <code>true</code> if this manager will create instances of classloaders for those + * individual Resources that require it, or <code>false</code> if this manager will never create + * individual classloaders for Resources (i.e. {@link #obtainResourceClassLoader(Resource, ResourceContainer, List)} + * will always just return plugin classloaders). + * + * @return <code>true</code> if this manager will create instances of classloaders for those + * individual Resources that require it, or <code>false</code> if this manager will never create + * individual classloaders for Resources (i.e. {@link #obtainResourceClassLoader(Resource, ResourceContainer, List)} + * will always just return plugin classloaders) + */ + public boolean isCreateResourceClassLoaders() { + return this.createResourceClassLoaders; + } + private Set<ClassLoader> getUniquePluginClassLoaders() { HashSet<ClassLoader> uniqueClassLoaders = new HashSet<ClassLoader>(this.pluginClassLoaders.values()); return uniqueClassLoaders; diff --git a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/PluginComponentFactory.java b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/PluginComponentFactory.java index 4176353..ca8eef6 100644 --- a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/PluginComponentFactory.java +++ b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/plugin/PluginComponentFactory.java @@ -23,6 +23,7 @@ package org.rhq.core.pc.plugin;
import java.net.URL; +import java.util.Collections; import java.util.List;
import org.apache.commons.logging.Log; @@ -174,14 +175,16 @@ public class PluginComponentFactory implements ContainerService { + parentResource); } } else if (resource.equals(inventoryMgr.getPlatform())) { - // the given resource is our top platform resource, just use its plugin classloader + // the given resource is our top platform resource - just use its plugin classloader return classLoaderMgr.obtainPluginClassLoader(resourceType.getPlugin()); } else { throw new PluginContainerException("Missing parent resource for resource=" + resource); }
// get the classloader the resource should use - List<URL> additionalJars = askDiscoveryComponentForAdditionalClasspathUrls(resource, parentContainer); + List<URL> additionalJars = (classLoaderMgr.isCreateResourceClassLoaders()) ? + askDiscoveryComponentForAdditionalClasspathUrls(resource, parentContainer) : + Collections.<URL>emptyList(); ClassLoader cl = classLoaderMgr.obtainResourceClassLoader(resource, parentContainer, additionalJars); return cl; } catch (Throwable t) {