use of org.mule.runtime.module.artifact.api.classloader.LookupStrategy in project mule by mulesoft.
the class ApplicationClassLoaderBuilder method getParentLookupPolicy.
@Override
protected ClassLoaderLookupPolicy getParentLookupPolicy(ArtifactClassLoader parentClassLoader) {
Map<String, LookupStrategy> lookupStrategies = new HashMap<>();
DomainDescriptor descriptor = parentClassLoader.getArtifactDescriptor();
descriptor.getClassLoaderModel().getExportedPackages().forEach(p -> lookupStrategies.put(p, PARENT_FIRST));
for (ArtifactPluginDescriptor artifactPluginDescriptor : descriptor.getPlugins()) {
artifactPluginDescriptor.getClassLoaderModel().getExportedPackages().forEach(p -> lookupStrategies.put(p, PARENT_FIRST));
}
return parentClassLoader.getClassLoaderLookupPolicy().extend(lookupStrategies);
}
use of org.mule.runtime.module.artifact.api.classloader.LookupStrategy 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