use of org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy in project mule by mulesoft.
the class PluginLookPolicyFactory method createLookupPolicy.
/**
* Creates a {@link ClassLoaderLookupPolicy} for plugins considering their dependencies.
*
* @param pluginClassification the {@link PluginUrlClassification} to creates its {@link ClassLoaderLookupPolicy}
* @param pluginClassifications whole list of {@link PluginUrlClassification} for the current context
* @param parentLookupPolicies the {@link ClassLoaderLookupPolicy} for the parent {@link ClassLoader}
* @param classLoaders
* @return {@link ClassLoaderLookupPolicy} for the plugin
*/
public ClassLoaderLookupPolicy createLookupPolicy(PluginUrlClassification pluginClassification, List<PluginUrlClassification> pluginClassifications, ClassLoaderLookupPolicy parentLookupPolicies, List<ArtifactClassLoader> classLoaders) {
Map<String, LookupStrategy> pluginsLookupPolicies = new HashMap<>();
for (PluginUrlClassification dependencyPluginClassification : pluginClassifications) {
if (dependencyPluginClassification.getArtifactId().equals(pluginClassification.getArtifactId())) {
continue;
}
if (pluginClassification.getPluginDependencies().contains(dependencyPluginClassification.getName())) {
LookupStrategy lookUpPolicyStrategy = PARENT_FIRST;
for (String exportedPackage : dependencyPluginClassification.getExportedPackages()) {
pluginsLookupPolicies.put(exportedPackage, lookUpPolicyStrategy);
}
if (isPrivilegedPluginDependency(pluginClassification, dependencyPluginClassification)) {
Optional<ArtifactClassLoader> pluginClassLoader = classLoaders.stream().filter(c -> c.getArtifactId().contains(dependencyPluginClassification.getName())).findFirst();
if (!pluginClassLoader.isPresent()) {
throw new IllegalStateException("Cannot find classloader for plugin: " + dependencyPluginClassification.getArtifactId());
}
lookUpPolicyStrategy = new DelegateOnlyLookupStrategy(pluginClassLoader.get().getClassLoader());
for (String exportedPackage : dependencyPluginClassification.getPrivilegedExportedPackages()) {
pluginsLookupPolicies.put(exportedPackage, lookUpPolicyStrategy);
}
}
}
}
return parentLookupPolicies.extend(pluginsLookupPolicies);
}
use of org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy in project mule by mulesoft.
the class PluginLookPolicyFactoryTestCase method lookupPoliciesForPluginThatDoesNotDeclareDependency.
@Test
public void lookupPoliciesForPluginThatDoesNotDeclareDependency() {
PluginUrlClassification barPluginClassification = new PluginUrlClassification(BAR_PLUGIN_ID, emptyList(), emptyList(), emptyList());
List<PluginUrlClassification> pluginClassifications = newArrayList(barPluginClassification, fooPluginClassification);
ClassLoaderLookupPolicy parentLookupPolicies = getParentClassLoaderLookupPolicy();
ClassLoaderLookupPolicy pluginPolicy = factory.createLookupPolicy(barPluginClassification, pluginClassifications, parentLookupPolicies, null);
assertThat(pluginPolicy.getClassLookupStrategy(FOO_PACKAGE), is(nullValue()));
}
Aggregations