use of org.mule.runtime.module.artifact.api.classloader.DelegateOnlyLookupStrategy in project mule by mulesoft.
the class DefaultRegionPluginClassLoadersFactory method createPluginLookupPolicy.
private ClassLoaderLookupPolicy createPluginLookupPolicy(List<ArtifactClassLoader> classLoaders, ArtifactPluginDescriptor descriptor, ClassLoaderLookupPolicy baseLookupPolicy, List<ArtifactPluginDescriptor> artifactPluginDescriptors) {
Map<String, LookupStrategy> pluginsLookupPolicies = new HashMap<>();
List<ArtifactPluginDescriptor> pluginDescriptors = getPluginDescriptors(descriptor, artifactPluginDescriptors);
for (ArtifactPluginDescriptor dependencyPluginDescriptor : pluginDescriptors) {
if (dependencyPluginDescriptor.getName().equals(descriptor.getName())) {
continue;
}
LookupStrategy lookupStrategy = getClassLoaderLookupStrategy(descriptor, dependencyPluginDescriptor);
for (String exportedPackage : dependencyPluginDescriptor.getClassLoaderModel().getExportedPackages()) {
pluginsLookupPolicies.put(exportedPackage, lookupStrategy);
}
if (isPrivilegedPluginDependency(descriptor, dependencyPluginDescriptor)) {
Optional<ArtifactClassLoader> pluginClassLoader = classLoaders.stream().filter(c -> c.getArtifactDescriptor().getBundleDescriptor().getArtifactId().equals(dependencyPluginDescriptor.getBundleDescriptor().getArtifactId())).findFirst();
if (!pluginClassLoader.isPresent()) {
throw new IllegalStateException("Cannot find classloader for plugin: " + dependencyPluginDescriptor.getBundleDescriptor().getArtifactId());
}
lookupStrategy = new DelegateOnlyLookupStrategy(pluginClassLoader.get().getClassLoader());
for (String exportedPackage : dependencyPluginDescriptor.getClassLoaderModel().getPrivilegedExportedPackages()) {
pluginsLookupPolicies.put(exportedPackage, lookupStrategy);
}
}
}
ContainerOnlyLookupStrategy containerOnlyLookupStrategy = new ContainerOnlyLookupStrategy(this.getClass().getClassLoader());
for (MuleModule module : moduleRepository.getModules()) {
if (module.getPrivilegedArtifacts().contains(descriptor.getBundleDescriptor().getGroupId() + ":" + descriptor.getBundleDescriptor().getArtifactId())) {
for (String packageName : module.getPrivilegedExportedPackages()) {
pluginsLookupPolicies.put(packageName, containerOnlyLookupStrategy);
}
}
}
return baseLookupPolicy.extend(pluginsLookupPolicies);
}
use of org.mule.runtime.module.artifact.api.classloader.DelegateOnlyLookupStrategy 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);
}
Aggregations