/** * Creates a new instance that discover services from Mule Runtime services folder. * * @param containerClassLoader container artifact classLoader. Non null. * @param serviceClassLoaderFactory factory used to create service's classloaders. Non null. * @param descriptorLoaderRepository contains all the {@link ClassLoaderModelLoader} registered on the container. Non null * @param artifactDescriptorValidatorBuilder {@link ArtifactDescriptorValidatorBuilder} to create the {@link org.mule.runtime.module.artifact.api.descriptor.ArtifactDescriptorValidator} in order to check the state of the descriptor once loaded. */ public FileSystemServiceProviderDiscoverer(ArtifactClassLoader containerClassLoader, ArtifactClassLoaderFactory<ServiceDescriptor> serviceClassLoaderFactory, DescriptorLoaderRepository descriptorLoaderRepository, ArtifactDescriptorValidatorBuilder artifactDescriptorValidatorBuilder) { this(containerClassLoader, serviceClassLoaderFactory, descriptorLoaderRepository, artifactDescriptorValidatorBuilder, () -> MuleFoldersUtil.getServicesFolder()); }
private void listServicesIfPresent() { File servicesDirectory = getServicesFolder(); if (servicesDirectory != null && servicesDirectory.exists()) { listItems(asList(servicesDirectory.list()), "Mule services:"); } }
/** * Returns the file for a given service name. * * @param name name of the service. Non empty. * @return a {@link File} pointing to the folder that corresponds to the provided service name when installed. */ public static File getServiceFolder(String name) { checkArgument(!StringUtils.isEmpty(name), "name cannot be empty"); return new File(getServicesFolder(), name); }
@Override public void start() throws MuleException { File servicesFolder = getServicesFolder(); if (!servicesFolder.exists()) { servicesFolder.mkdir(); } try { services = serviceDiscoverer.discoverServices(); startServices(); } catch (Exception e) { throw new StartException(e, this); } }
private void installService(String serviceName, Class<? extends ServiceProvider> providerClass, boolean corrupted) throws Exception { final ServiceFileBuilder fooService = new ServiceFileBuilder(serviceName) .forContract(FooService.class.getName()) .withServiceProviderClass(providerClass.getName()).unpack(true); if (corrupted) { fooService.corrupted(); } final File artifactFile = fooService.getArtifactFile(); File installedService = new File(getServicesFolder(), artifactFile.getName()); moveDirectory(artifactFile, installedService); }
@Before public void setUp() throws Exception { FooServiceProvider.INVOKED = false; BarServiceProvider.INVOKED = false; final File servicesFolder = getServicesFolder(); assertThat(servicesFolder.mkdir(), is(true)); when(containerClassLoader.getClassLoader()).thenReturn(getClass().getClassLoader()); when(containerClassLoader.getClassLoaderLookupPolicy()).thenReturn(mock(ClassLoaderLookupPolicy.class)); BundleDescriptorLoader bundleDescriptorLoaderMock = mock(BundleDescriptorLoader.class); when(bundleDescriptorLoaderMock.supportsArtifactType(ArtifactType.SERVICE)).thenReturn(true); when(bundleDescriptorLoaderMock.load(Mockito.any(File.class), Mockito.any(Map.class), eq(ArtifactType.SERVICE))) .thenReturn(new BundleDescriptor.Builder() .setGroupId("mockGroupId") .setArtifactId("mockArtifactId") .setVersion("1.0.0") .setClassifier("mule-service") .setType("jar") .build()); when(descriptorLoaderRepository.get(anyString(), anyObject(), argThat(equalTo(BundleDescriptorLoader.class)))) .thenReturn(bundleDescriptorLoaderMock); when(descriptorLoaderRepository.get(anyString(), anyObject(), argThat(equalTo(ClassLoaderModelLoader.class)))) .thenReturn(mock(ClassLoaderModelLoader.class)); doNothing().when(artifactDescriptorValidator).validate(anyObject()); }
@Test public void createServiceDescriptor() throws Exception { File servicesFolder = getServicesFolder(); assertThat(servicesFolder.mkdirs(), is(true)); final ServiceFileBuilder fooService = new ServiceFileBuilder(SERVICE_NAME) .withServiceProviderClass(PROVIDER_CLASS_NAME) .forContract(SERVICE_API_CLASS_NAME); unzip(fooService.getArtifactFile(), getServiceFolder(SERVICE_NAME)); ServiceDescriptor descriptor = serviceDescriptorFactory.create(getServiceFolder(SERVICE_NAME), empty()); assertThat(descriptor.getName(), equalTo(SERVICE_NAME)); assertThat(descriptor.getRootFolder(), equalTo(getServiceFolder(SERVICE_NAME))); assertThat(descriptor.getContractModels(), hasSize(1)); MuleServiceContractModel contractModel = descriptor.getContractModels().get(0); assertThat(contractModel.getServiceProviderClassName(), equalTo(PROVIDER_CLASS_NAME)); assertThat(contractModel.getContractClassName(), equalTo(SERVICE_API_CLASS_NAME)); } }
assertThat(domainFolder.mkdirs(), is(true)); services = getServicesFolder(); services.mkdirs(); copyDirectory(buildSchedulerServiceFile(compilerWorkFolder.newFolder(SCHEDULER_SERVICE_NAME)),
private void listServicesIfPresent() { File servicesDirectory = getServicesFolder(); if (servicesDirectory != null && servicesDirectory.exists()) { listItems(asList(servicesDirectory.list()), "Mule services:"); } }
private List<ServiceDescriptor> getServiceDescriptors(ServiceDescriptorFactory serviceDescriptorFactory) throws ServiceResolutionError { List<ServiceDescriptor> foundServices = new LinkedList<>(); for (String serviceFile : getServicesFolder().list(new SuffixFileFilter(".jar"))) { final File tempFolder = new File(getServicesTempFolder(), getBaseName(serviceFile)); try { unzip(new File(getServicesFolder(), serviceFile), tempFolder); } catch (IOException e) { throw new ServiceResolutionError("Error processing service JAR file", e); } final ServiceDescriptor serviceDescriptor = serviceDescriptorFactory.create(tempFolder, empty()); foundServices.add(serviceDescriptor); } return foundServices; }
@Override public List<ServiceProvider> discover() throws ServiceResolutionError { final ServiceDescriptorFactory serviceDescriptorFactory = new ServiceDescriptorFactory(); final List<ServiceDescriptor> serviceDescriptors = new LinkedList<>(); for (String serviceFile : getServicesFolder().list(new SuffixFileFilter(".zip"))) { final File tempFolder = new File(getServicesTempFolder(), getBaseName(serviceFile)); try { unzip(new File(getServicesFolder(), serviceFile), tempFolder); } catch (IOException e) { throw new ServiceResolutionError("Error processing service ZIP file", e); } final ServiceDescriptor serviceDescriptor = serviceDescriptorFactory.create(tempFolder); serviceDescriptors.add(serviceDescriptor); } return createServiceProviders(serviceDescriptors, serviceClassLoaderFactory); }
@Override public void start() throws MuleException { File servicesFolder = getServicesFolder(); if (!servicesFolder.exists()) { servicesFolder.mkdir(); } try { registeredServices = serviceDiscoverer.discoverServices(); wrappedServices = wrapServices(registeredServices); startServices(); } catch (Exception e) { throw new StartException(e, this); } }
@Override public void start() throws MuleException { File servicesFolder = getServicesFolder(); if (!servicesFolder.exists()) { servicesFolder.mkdir(); } try { registeredServices = serviceDiscoverer.discoverServices(); wrappedServices = wrapServices(registeredServices); startServices(); } catch (Exception e) { throw new StartException(e, this); } }
getDomainsFolder().mkdirs(); getDomainFolder("default").mkdirs(); getServicesFolder().mkdirs(); getServerPluginsFolder().mkdirs(); getConfFolder().mkdirs(); File destinationFile = new File(getServicesFolder(), getName(originalFile.getPath())); copyFile(originalFile, destinationFile);
assertThat(domainFolder.mkdirs(), is(true)); services = getServicesFolder(); services.mkdirs(); copyFileToDirectory(buildSchedulerServiceFile(compilerWorkFolder.newFolder("schedulerService")), services);