public TestRegionClassLoader(ClassLoader parent, ClassLoaderLookupPolicy lookupPolicy) { super("Region", new ArtifactDescriptor("Region"), parent, lookupPolicy); }
public TestArtifactClassLoader(ClassLoader parentCl) { super("testId", new ArtifactDescriptor("test"), new URL[0], parentCl, new ClassLoaderLookupPolicy() { @Override public LookupStrategy getClassLookupStrategy(String className) { return PARENT_FIRST; } @Override public LookupStrategy getPackageLookupStrategy(String packageName) { return null; } @Override public ClassLoaderLookupPolicy extend(Map<String, LookupStrategy> lookupStrategies) { return null; } }); }
/** * Creates the launcher application class loader to delegate from container class loader. * * @return an {@link ArtifactClassLoader} for the launcher, parent of container */ protected MuleArtifactClassLoader createLauncherArtifactClassLoader() { ClassLoader launcherClassLoader = IsolatedClassLoaderFactory.class.getClassLoader(); return new MuleArtifactClassLoader("mule", new ArtifactDescriptor("mule"), new URL[0], launcherClassLoader, new MuleClassLoaderLookupPolicy(emptyMap(), emptySet())) { @Override public URL findResource(String name) { URL url = super.findResource(name); if (url == null && getParent() != null) { url = getParent().getResource(name); // Filter if it is not a resource from the jre if (url.getFile().matches(".*?\\/jre\\/lib\\/\\w+\\.jar\\!.*")) { return url; } else { return null; } } return url; } }; }
/** * Creates an {@link ArtifactClassLoader} for the application. * * @param parent the parent class loader to be assigned to the new one created here * @param childClassLoaderLookupPolicy look policy to be used * @param artifactsUrlClassification the url classifications to get plugins urls * @param pluginsArtifactClassLoaders the classloaders of the plugins used by the application * @return the {@link ArtifactClassLoader} to be used for running the test */ protected ArtifactClassLoader createApplicationArtifactClassLoader(ClassLoader parent, ClassLoaderLookupPolicy childClassLoaderLookupPolicy, ArtifactsUrlClassification artifactsUrlClassification, List<ArtifactClassLoader> pluginsArtifactClassLoaders) { List<URL> applicationUrls = new ArrayList<>(); applicationUrls.addAll(artifactsUrlClassification.getApplicationLibUrls()); applicationUrls.addAll(artifactsUrlClassification.getApplicationSharedLibUrls()); logClassLoaderUrls("APP", applicationUrls); return new MuleApplicationClassLoader(APP_NAME, new ArtifactDescriptor(APP_NAME), parent, new DefaultNativeLibraryFinderFactory() .create(APP_NAME, applicationUrls.toArray(new URL[applicationUrls.size()])), applicationUrls, childClassLoaderLookupPolicy, pluginsArtifactClassLoaders); }
public RegionClassLoaderTestCase() throws MalformedURLException { PARENT_LOADED_RESOURCE = new URL("file:///parent.txt"); APP_LOADED_RESOURCE = new URL("file:///app.txt"); PLUGIN_LOADED_RESOURCE = new URL("file:///plugin.txt"); API_LOCATION = ClassUtils.getResource("com/organization/test-artifact/1.0.0/test-artifact-1.0.0-raml.zip", this.getClass()); API_LOADED_RESOURCE = new URL("jar:" + API_LOCATION.toString() + "!/" + API_RESOURCE_NAME); artifactDescriptor = new ArtifactDescriptor(APP_NAME); }
/** * Creates the classLoader to represent the Mule container. * * @param parentClassLoader parent classLoader. Can be null. * @return a non null {@link ArtifactClassLoader} containing container code that can be used as parent classloader for other * mule artifacts. */ public ArtifactClassLoader createContainerClassLoader(final ClassLoader parentClassLoader) { final List<MuleModule> muleModules = moduleRepository.getModules(); final ClassLoaderLookupPolicy containerLookupPolicy = getContainerClassLoaderLookupPolicy(parentClassLoader, muleModules); return createArtifactClassLoader(parentClassLoader, muleModules, containerLookupPolicy, new ArtifactDescriptor("mule")); }
@Override public ToolingArtifactClassLoader build() throws IOException { setArtifactDescriptor(new ArtifactDescriptor(TOOLING_EXTENSION_MODEL)); List<ArtifactPluginDescriptor> resolvedArtifactPluginDescriptors = pluginDependenciesResolver .resolve(emptySet(), ImmutableList.<ArtifactPluginDescriptor>builder().add(artifactPluginDescriptor).build(), true); this.addArtifactPluginDescriptors(resolvedArtifactPluginDescriptors .toArray(new ArtifactPluginDescriptor[resolvedArtifactPluginDescriptors.size()])); ArtifactClassLoader ownerArtifactClassLoader = super.build(); ClassLoader parent = ownerArtifactClassLoader.getClassLoader().getParent(); if (!(parent instanceof RegionClassLoader)) { throw new DeploymentException(createStaticMessage(format("The parent of the current owner must be of type '%s' but found '%s'", RegionClassLoader.class.getName(), parent.getClass().getName()))); } final RegionClassLoader regionClassLoader = (RegionClassLoader) parent; return new ToolingArtifactClassLoader(regionClassLoader, getPluginArtifactClassLoader(artifactPluginDescriptor, regionClassLoader.getArtifactPluginClassLoaders())); }
/** * Overrides method due to it has to use the {@link ClassLoader} set to this factory in order to discover modules. * * @param parentClassLoader parent classLoader. Can be null. * @return a non null {@link ArtifactClassLoader} containing container code that can be used as parent classloader for other * mule artifacts. */ @Override public ArtifactClassLoader createContainerClassLoader(final ClassLoader parentClassLoader) { final List<MuleModule> muleModules = withContextClassLoader(classLoader, () -> testContainerModuleRepository.getModules()); MuleClassLoaderLookupPolicy lookupPolicy = new MuleClassLoaderLookupPolicy(Collections.emptyMap(), getBootPackages()); return createArtifactClassLoader(parentClassLoader, muleModules, lookupPolicy, new ArtifactDescriptor("mule")); }
/** * For each service defined in the classification it creates an {@link ArtifactClassLoader} wit the name defined in * classification. * * @param parent the parent class loader to be assigned to the new one created here * @param childClassLoaderLookupPolicy look policy to be used * @param artifactsUrlClassification the url classifications to get service {@link URL}s * @return a list of {@link ArtifactClassLoader} for service class loaders */ protected List<ArtifactClassLoader> createServiceClassLoaders(ClassLoader parent, ClassLoaderLookupPolicy childClassLoaderLookupPolicy, ArtifactsUrlClassification artifactsUrlClassification) { List<ArtifactClassLoader> servicesArtifactClassLoaders = newArrayList(); for (ArtifactUrlClassification serviceUrlClassification : artifactsUrlClassification.getServiceUrlClassifications()) { logClassLoaderUrls("SERVICE (" + serviceUrlClassification.getArtifactId() + ")", serviceUrlClassification.getUrls()); MuleArtifactClassLoader artifactClassLoader = new MuleArtifactClassLoader(serviceUrlClassification.getName(), new ArtifactDescriptor(serviceUrlClassification.getName()), serviceUrlClassification.getUrls().toArray(new URL[0]), parent, childClassLoaderLookupPolicy); servicesArtifactClassLoaders.add(artifactClassLoader); } return servicesArtifactClassLoaders; }
@Before public void setUp() throws Exception { artifactClassLoaderManager = mock(ArtifactClassLoaderManager.class); delegateFactory = mock(ArtifactClassLoaderFactory.class); factory = new TrackingArtifactClassLoaderFactory<>(artifactClassLoaderManager, delegateFactory); parent = mock(ArtifactClassLoader.class); descriptor = new ArtifactDescriptor(ARTIFACT_NAME); lookupPolicy = mock(ClassLoaderLookupPolicy.class); classLoader = new MuleArtifactClassLoader(ARTIFACT_NAME, descriptor, new URL[0], getClass().getClassLoader(), lookupPolicy); when(lookupPolicy.getClassLookupStrategy(any())).thenReturn(PARENT_FIRST); when(delegateFactory.create(ARTIFACT_ID, descriptor, getClass().getClassLoader(), lookupPolicy)).thenReturn(classLoader); }
@Before public void setUp() throws Exception { artifactClassLoaderManager = mock(ArtifactClassLoaderManager.class); delegateFactory = mock(DeployableArtifactClassLoaderFactory.class); factory = new TrackingDeployableArtifactClassLoaderFactory<>(artifactClassLoaderManager, delegateFactory); parent = mock(ArtifactClassLoader.class); descriptor = new ArtifactDescriptor(ARTIFACT_NAME); artifactPluginClassLoaders = emptyList(); ClassLoaderLookupPolicy lookupPolicy = mock(ClassLoaderLookupPolicy.class); classLoader = new MuleArtifactClassLoader(ARTIFACT_NAME, descriptor, new URL[0], getClass().getClassLoader(), lookupPolicy); when(lookupPolicy.getClassLookupStrategy(any())).thenReturn(PARENT_FIRST); when(delegateFactory.create(ARTIFACT_ID, parent, descriptor, artifactPluginClassLoaders)).thenReturn(classLoader); }
@Before public void createAppClassLoader() { final ClassLoaderLookupPolicy classLoaderLookupPolicy = mock(ClassLoaderLookupPolicy.class); // Mandatory to find a resource releaser instance when doing the dispose of a RegionClassLoader when(classLoaderLookupPolicy.getClassLookupStrategy(anyString())).thenReturn(PARENT_FIRST); regionClassLoader = new RegionClassLoader(TEST_REGION, new ArtifactDescriptor(REGION_NAME), getClass().getClassLoader(), classLoaderLookupPolicy); // Loading the additional classloader as the ToolingPluginClassLoaderBuilder does regionClassLoader.addClassLoader(mock(ArtifactClassLoader.class), mock(ArtifactClassLoaderFilter.class)); artifactPluginDescriptor = new ArtifactPluginDescriptor(PLUGIN_NAME); pluginArtifactClassLoader = spy(new TestToolingPluginClassLoader(artifactPluginDescriptor)); }
@Test public void findResourcesInProvidedUrls() throws Exception { createDomainFolder(DEFAULT_DOMAIN_NAME); final File resourceFile = createDomainResource(DEFAULT_DOMAIN_NAME, RESOURCE_FILE_NAME); final List<URL> urls = Collections.singletonList(resourceFile.toURI().toURL()); MuleSharedDomainClassLoader classLoader = new MuleSharedDomainClassLoader(new ArtifactDescriptor(DEFAULT_DOMAIN_NAME), getClass().getClassLoader(), lookupPolicy, urls, emptyList()); assertThat(classLoader.findResource(RESOURCE_FILE_NAME), notNullValue()); }
new ArtifactDescriptor(testRunnerPluginClassification.getName()), testRunnerPluginClassification.getUrls().toArray(new URL[0]), regionClassLoader,
@Test public final void serializeWithoutDefaultConstructorFromArtifactClassLoader() throws Exception { final File compiledClasses = new File(temporaryFolder.getRoot(), "compiledClasses"); compiledClasses.mkdirs(); final File sourceFile = new File(getClass().getResource("/org/foo/SerializableClass.java").toURI()); CompilerUtils.SingleClassCompiler compiler = new CompilerUtils.SingleClassCompiler(); compiler.compile(sourceFile); final URL[] urls = new URL[] {compiler.getTargetFolder().toURL()}; final ClassLoaderLookupPolicy lookupPolicy = mock(ClassLoaderLookupPolicy.class); when(lookupPolicy.getClassLookupStrategy(any())).thenReturn(PARENT_FIRST); final MuleArtifactClassLoader artifactClassLoader = new MuleArtifactClassLoader(ARTIFACT_ID, new ArtifactDescriptor(ARTIFACT_NAME), urls, getClass().getClassLoader(), lookupPolicy); when(classLoaderRepository.getId(artifactClassLoader)).thenReturn(Optional.of(ARTIFACT_ID)); when(classLoaderRepository.find(ARTIFACT_ID)).thenReturn(Optional.of(artifactClassLoader)); final Class<?> echoTestClass = artifactClassLoader.loadClass(SERIALIZABLE_CLASS); final Object payload = echoTestClass.newInstance(); setObjectName(payload); CoreEvent event = eventBuilder(muleContext).message(of(payload)).build(); byte[] bytes = serializationProtocol.serialize(event.getMessage()); InternalMessage message = serializationProtocol.deserialize(bytes); Object deserialized = message.getPayload().getValue(); assertThat(deserialized.getClass().getName(), equalTo(SERIALIZABLE_CLASS)); assertThat(deserialized.getClass().getClassLoader(), equalTo(artifactClassLoader)); assertThat(deserialized, equalTo(payload)); assertThat(getObjectName(deserialized), equalTo(INSTANCE_NAME)); }
final ClassLoaderLookupPolicy containerLookupPolicy, ArtifactDescriptor artifactDescriptor) { final ArtifactDescriptor containerDescriptor = new ArtifactDescriptor("mule");
new ArtifactDescriptor(pluginUrlClassification.getName()), pluginUrlClassification.getUrls().toArray(new URL[0]), regionClassLoader,
/** * Overrides method due to it has to use the {@link ClassLoader} set to this factory in order to discover modules. * * @param parentClassLoader parent classLoader. Can be null. * @return a non null {@link ArtifactClassLoader} containing container code that can be used as parent classloader for other * mule artifacts. */ @Override public ArtifactClassLoader createContainerClassLoader(final ClassLoader parentClassLoader) { final List<MuleModule> muleModules = withContextClassLoader(classLoader, () -> testContainerModuleRepository.getModules()); MuleClassLoaderLookupPolicy lookupPolicy = new MuleClassLoaderLookupPolicy(Collections.emptyMap(), getBootPackages()); return createArtifactClassLoader(parentClassLoader, muleModules, lookupPolicy, new ArtifactDescriptor("mule")); }
@Before public void createAppClassLoader() { final ClassLoaderLookupPolicy classLoaderLookupPolicy = mock(ClassLoaderLookupPolicy.class); // Mandatory to find a resource releaser instance when doing the dispose of a RegionClassLoader when(classLoaderLookupPolicy.getClassLookupStrategy(anyString())).thenReturn(PARENT_FIRST); regionClassLoader = new RegionClassLoader(TEST_REGION, new ArtifactDescriptor(REGION_NAME), getClass().getClassLoader(), classLoaderLookupPolicy); // Loading the additional classloader as the ToolingPluginClassLoaderBuilder does regionClassLoader.addClassLoader(mock(ArtifactClassLoader.class), mock(ArtifactClassLoaderFilter.class)); artifactPluginDescriptor = new ArtifactPluginDescriptor(PLUGIN_NAME); pluginArtifactClassLoader = spy(new TestToolingPluginClassLoader(artifactPluginDescriptor)); }
@Test public void findResourcesInProvidedUrls() throws Exception { createDomainFolder(DEFAULT_DOMAIN_NAME); final File resourceFile = createDomainResource(DEFAULT_DOMAIN_NAME, RESOURCE_FILE_NAME); final List<URL> urls = Collections.singletonList(resourceFile.toURI().toURL()); MuleSharedDomainClassLoader classLoader = new MuleSharedDomainClassLoader(new ArtifactDescriptor(DEFAULT_DOMAIN_NAME), getClass().getClassLoader(), lookupPolicy, urls, emptyList()); assertThat(classLoader.findResource(RESOURCE_FILE_NAME), notNullValue()); }