Search in sources :

Example 11 with Domain

use of org.mule.runtime.deployment.model.api.domain.Domain in project mule by mulesoft.

the class DomainBundleArchiveDeployer method deployArtifact.

/**
 * Deploys a domain bundle
 *
 * @param uri points to the domain bundle file to be deployed
 * @throws DeploymentException when the domain bundle was not successfully deployed
 */
public void deployArtifact(URI uri) throws DeploymentException {
    LOGGER.info("deploying artifact: " + uri);
    File bundleFile = new File(uri);
    final String bundleName = removeEndIgnoreCase(bundleFile.getName(), ZIP_FILE_SUFFIX);
    deploymentListener.onDeploymentStart(bundleName);
    File tempFolder = null;
    boolean isRedeploy = false;
    String domainName = null;
    try {
        tempFolder = unzipDomainBundle(bundleFile);
        File domainFile = getDomainFile(tempFolder);
        domainName = getBaseName(domainFile.getName());
        Domain domain = findDomain(domainName);
        isRedeploy = domain != null;
        Set<String> originalAppIds = new HashSet<>();
        if (isRedeploy) {
            domainDeploymentListener.onRedeploymentStart(domainName);
            Collection<Application> originalDomainApplications = deploymentService.findDomainApplications(domainName);
            for (Application domainApplication : originalDomainApplications) {
                if (domainApplication.getStatus() == ApplicationStatus.STARTED || domainApplication.getStatus() == ApplicationStatus.STOPPED) {
                    applicationDeploymentListener.onRedeploymentStart(domainApplication.getArtifactName());
                }
            }
            originalAppIds = originalDomainApplications.stream().map(a -> a.getArtifactName()).collect(toSet());
        }
        try {
            deployDomain(domainFile);
        } catch (Exception e) {
            // Ignore, deploy applications anyway
            LOGGER.warn("Domain bundle's domain was not deployed", e);
        }
        deployApplications(tempFolder, isRedeploy);
        if (isRedeploy) {
            Collection<Application> newDomainApplications = deploymentService.findDomainApplications(domainName);
            originalAppIds.stream().forEach(appId -> {
                Optional<Application> application = newDomainApplications.stream().filter(newApp -> appId.equals(newApp.getArtifactName())).findFirst();
                if (!application.isPresent()) {
                    DeploymentException cause = new DeploymentException(createStaticMessage("Application was not included in the updated domain bundle"));
                    applicationDeploymentListener.onDeploymentFailure(appId, cause);
                    applicationDeploymentListener.onRedeploymentFailure(appId, cause);
                }
            });
            domainDeploymentListener.onRedeploymentSuccess(domainName);
        }
        deploymentListener.onDeploymentSuccess(bundleName);
    } catch (Exception e) {
        if (isRedeploy) {
            domainDeploymentListener.onRedeploymentFailure(domainName, e);
        }
        deploymentListener.onDeploymentFailure(bundleName, e);
        if (e instanceof DeploymentException) {
            throw (DeploymentException) e;
        } else {
            throw new DeploymentException(createStaticMessage("Error deploying domain bundle"), e);
        }
    } finally {
        if (tempFolder != null) {
            deleteTree(tempFolder);
        }
    }
}
Also used : DeploymentService(org.mule.runtime.module.deployment.api.DeploymentService) ObservableList(org.mule.runtime.module.deployment.internal.util.ObservableList) Optional.empty(java.util.Optional.empty) ARTIFACT_NAME_PROPERTY(org.mule.runtime.module.deployment.internal.DefaultArchiveDeployer.ARTIFACT_NAME_PROPERTY) LoggerFactory(org.slf4j.LoggerFactory) ZIP_FILE_SUFFIX(org.mule.runtime.module.deployment.internal.DefaultArchiveDeployer.ZIP_FILE_SUFFIX) FileUtils.deleteTree(org.mule.runtime.core.api.util.FileUtils.deleteTree) HashSet(java.util.HashSet) FilenameUtils.getBaseName(org.apache.commons.io.FilenameUtils.getBaseName) FileUtils.unzip(org.mule.runtime.core.api.util.FileUtils.unzip) DeploymentListener(org.mule.runtime.module.deployment.api.DeploymentListener) CollectionUtils.find(org.apache.commons.collections.CollectionUtils.find) Application(org.mule.runtime.deployment.model.api.application.Application) URI(java.net.URI) Collectors.toSet(java.util.stream.Collectors.toSet) Logger(org.slf4j.Logger) I18nMessageFactory.createStaticMessage(org.mule.runtime.api.i18n.I18nMessageFactory.createStaticMessage) Collection(java.util.Collection) Set(java.util.Set) DeploymentException(org.mule.runtime.deployment.model.api.DeploymentException) IOException(java.io.IOException) JAR_FILE_SUFFIX(org.mule.runtime.module.deployment.internal.DefaultArchiveDeployer.JAR_FILE_SUFFIX) StringUtils.removeEndIgnoreCase(org.apache.commons.lang3.StringUtils.removeEndIgnoreCase) File(java.io.File) Domain(org.mule.runtime.deployment.model.api.domain.Domain) SuffixFileFilter(org.apache.commons.io.filefilter.SuffixFileFilter) BeanPropertyValueEqualsPredicate(org.apache.commons.beanutils.BeanPropertyValueEqualsPredicate) FileUtils(org.mule.runtime.core.api.util.FileUtils) Optional(java.util.Optional) ApplicationStatus(org.mule.runtime.deployment.model.api.application.ApplicationStatus) DeploymentException(org.mule.runtime.deployment.model.api.DeploymentException) Domain(org.mule.runtime.deployment.model.api.domain.Domain) File(java.io.File) Application(org.mule.runtime.deployment.model.api.application.Application) DeploymentException(org.mule.runtime.deployment.model.api.DeploymentException) IOException(java.io.IOException) HashSet(java.util.HashSet)

Example 12 with Domain

use of org.mule.runtime.deployment.model.api.domain.Domain in project mule by mulesoft.

the class DomainBundleArchiveDeployer method deployDomain.

private void deployDomain(File domainFile) throws IOException {
    String domainName = getBaseName(domainFile.getName());
    Domain domain = findDomain(domainName);
    if (domain != null) {
        domainDeployer.undeployArtifact(domainName);
        unzip(domainFile, domain.getLocation());
    }
    domainDeployer.deployPackagedArtifact(domainFile.toURI(), empty());
}
Also used : Domain(org.mule.runtime.deployment.model.api.domain.Domain)

Example 13 with Domain

use of org.mule.runtime.deployment.model.api.domain.Domain in project mule by mulesoft.

the class DomainDeploymentTemplate method preRedeploy.

/**
 * Undeploys all applications that use this domain.
 */
@Override
public void preRedeploy(Artifact domain) {
    if (domain instanceof Domain) {
        domainApplications = deploymentservice.findDomainApplications(domain.getArtifactName());
        for (Application domainApplication : domainApplications) {
            applicationDeploymentListener.onRedeploymentStart(domainApplication.getArtifactName());
            applicationDeployer.undeployArtifactWithoutUninstall(domainApplication);
        }
    }
}
Also used : Domain(org.mule.runtime.deployment.model.api.domain.Domain) Application(org.mule.runtime.deployment.model.api.application.Application)

Example 14 with Domain

use of org.mule.runtime.deployment.model.api.domain.Domain in project mule by mulesoft.

the class DefaultDomainFactoryTestCase method createDefaultDomain.

@Test
public void createDefaultDomain() throws IOException {
    final MuleApplicationClassLoader domainArtifactClassLoader = mock(MuleApplicationClassLoader.class);
    when(domainArtifactClassLoader.getArtifactId()).thenReturn(DEFAULT_DOMAIN_NAME);
    DomainClassLoaderBuilder domainClassLoaderBuilderMock = mock(DomainClassLoaderBuilder.class);
    when(domainClassLoaderBuilderMock.setArtifactDescriptor(any())).thenReturn(domainClassLoaderBuilderMock);
    when(domainClassLoaderBuilderMock.setArtifactId(any())).thenReturn(domainClassLoaderBuilderMock);
    when(domainClassLoaderBuilderMock.addArtifactPluginDescriptors(new ArtifactPluginDescriptor[0])).thenReturn(domainClassLoaderBuilderMock);
    when(domainClassLoaderBuilderMock.build()).thenReturn(domainArtifactClassLoader);
    when(domainClassLoaderBuilderFactory.createArtifactClassLoaderBuilder()).thenReturn(domainClassLoaderBuilderMock);
    Domain domain = domainFactory.createArtifact(new File(DEFAULT_DOMAIN_NAME), empty());
    assertThat(domain.getArtifactName(), is(DEFAULT_DOMAIN_NAME));
    assertThat(domain.getDescriptor(), instanceOf(EmptyDomainDescriptor.class));
    assertThat(domain.getArtifactClassLoader(), is(domainArtifactClassLoader));
}
Also used : DomainClassLoaderBuilder(org.mule.runtime.deployment.model.internal.domain.DomainClassLoaderBuilder) MuleApplicationClassLoader(org.mule.runtime.deployment.model.internal.application.MuleApplicationClassLoader) Domain(org.mule.runtime.deployment.model.api.domain.Domain) File(java.io.File) Test(org.junit.Test)

Example 15 with Domain

use of org.mule.runtime.deployment.model.api.domain.Domain in project mule by mulesoft.

the class DefaultApplicationFactoryTestCase method createDomain.

private Domain createDomain(String name) {
    final Domain domain = mock(Domain.class);
    final ArtifactClassLoader domainArtifactClassLoader = mock(ArtifactClassLoader.class);
    when(domainArtifactClassLoader.getClassLoader()).thenReturn(mock(ClassLoader.class));
    final ClassLoaderLookupPolicy domainLookupPolicy = mock(ClassLoaderLookupPolicy.class);
    when(domainArtifactClassLoader.getClassLoaderLookupPolicy()).thenReturn(domainLookupPolicy);
    when(domainRepository.getDomain(DOMAIN_ARTIFACT_FILE_NAME)).thenReturn(domain);
    when(domain.getArtifactClassLoader()).thenReturn(domainArtifactClassLoader);
    when(domain.getDescriptor()).thenReturn(new DomainDescriptor(name));
    return domain;
}
Also used : ArtifactClassLoader(org.mule.runtime.module.artifact.api.classloader.ArtifactClassLoader) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) ArtifactClassLoader(org.mule.runtime.module.artifact.api.classloader.ArtifactClassLoader) MuleApplicationClassLoader(org.mule.runtime.deployment.model.internal.application.MuleApplicationClassLoader) Domain(org.mule.runtime.deployment.model.api.domain.Domain) DomainDescriptor(org.mule.runtime.deployment.model.api.domain.DomainDescriptor)

Aggregations

Domain (org.mule.runtime.deployment.model.api.domain.Domain)26 Test (org.junit.Test)13 File (java.io.File)10 Application (org.mule.runtime.deployment.model.api.application.Application)9 ArtifactClassLoader (org.mule.runtime.module.artifact.api.classloader.ArtifactClassLoader)7 FileUtils.copyFile (org.apache.commons.io.FileUtils.copyFile)6 FileUtils.copyInputStreamToFile (org.apache.commons.io.FileUtils.copyInputStreamToFile)6 IOException (java.io.IOException)5 URI (java.net.URI)5 Collection (java.util.Collection)5 Properties (java.util.Properties)5 ByteArrayInputStream (java.io.ByteArrayInputStream)4 FileInputStream (java.io.FileInputStream)4 URISyntaxException (java.net.URISyntaxException)4 URL (java.net.URL)4 Paths (java.nio.file.Paths)4 Collections.emptyList (java.util.Collections.emptyList)4 Collections.emptyMap (java.util.Collections.emptyMap)4 SECONDS (java.util.concurrent.TimeUnit.SECONDS)4 FileUtils.forceDelete (org.apache.commons.io.FileUtils.forceDelete)4