use of org.mule.runtime.module.deployment.internal.DefaultArchiveDeployer.ZIP_FILE_SUFFIX 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);
}
}
}
Aggregations