use of org.apache.ode.bpel.compiler.api.CompilationException in project carbon-business-process by wso2.
the class TenantProcessStoreImpl method deployBPELPackageInODE.
/**
* Deploy BPEL package in ODE and add process configuration objects to necessary maps in process
* store.
*
* @param deploymentContext information about current deployment
* @throws Exception in case of duplicate deployment unit or if error occurred during deploying package in ODE
*/
private void deployBPELPackageInODE(BPELDeploymentContext deploymentContext) throws Exception {
File bpelPackage = deploymentContext.getBPELPackageContent();
log.info("Starting deployment of processes from directory " + bpelPackage.getAbsolutePath());
final Date deployDate = new Date();
// Create the DU and compile/scan it before doing any other work.
final DeploymentUnitDir deploymentUnitDir = new DeploymentUnitDir(bpelPackage);
// Before coming to this stage, we create the bpel package directory with the static version
// so we don't need to get the version from database. We can directly use static version
// calculated from bpel package directory name.
deploymentUnitDir.setVersion(deploymentUnitDir.getStaticVersion());
try {
deploymentUnitDir.compile();
} catch (CompilationException ce) {
String logMessage = "Deployment failed due to compilation issues. " + ce.getMessage();
log.error(logMessage, ce);
deploymentContext.setFailed(true);
deploymentContext.setDeploymentFailureCause(logMessage);
deploymentContext.setStackTrace(ce);
handleDeploymentError(deploymentContext);
throw new BPELDeploymentException(logMessage, ce);
}
deploymentUnitDir.scan();
DeployDocument deployDocument = deploymentUnitDir.getDeploymentDescriptor();
List<ProcessConfigurationImpl> processConfs = new ArrayList<ProcessConfigurationImpl>();
List<QName> processIds = new ArrayList<QName>();
if (deploymentUnits.containsKey(deploymentUnitDir.getName())) {
String logMessage = "Aborting deployment. Duplicate Deployment unit " + deploymentUnitDir.getName() + ".";
log.error(logMessage);
deploymentContext.setFailed(true);
deploymentContext.setDeploymentFailureCause(logMessage);
handleDeploymentError(deploymentContext);
throw new BPELDeploymentException(logMessage);
}
// Validate BPEL package partially before retiring old versions.
validateBPELPackage(deploymentUnitDir);
if (deploymentContext.isExistingPackage()) {
reloadExistingVersionsOfBPELPackage(deploymentContext);
}
// Before updating a BPEL package we need to retire processes in old version
retirePreviousPackageVersions(deploymentUnitDir);
for (TDeployment.Process processDD : deployDocument.getDeploy().getProcessList()) {
QName processId = Utils.toPid(processDD.getName(), deploymentUnitDir.getVersion());
ProcessConfigurationImpl processConf = new ProcessConfigurationImpl(tenantId, processDD, deploymentUnitDir, deployDate, parentProcessStore.getEndpointReferenceContext(), tenantConfigContext);
processConf.setAbsolutePathForBpelArchive(deploymentContext.getBpelArchive().getAbsolutePath());
processIds.add(processId);
processConfs.add(processConf);
readAnalyticsServerProfiles(processDD, deploymentUnitDir);
}
deploymentUnits.put(deploymentUnitDir.getName(), deploymentUnitDir);
processesInDeploymentUnit.put(deploymentUnitDir.getName(), processIds);
for (ProcessConfigurationImpl processConf : processConfs) {
processConfigMap.put(processConf.getProcessId(), processConf);
deploymentContext.addProcessId(processConf.getProcessId());
}
try {
parentProcessStore.onBPELPackageDeployment(tenantId, deploymentUnitDir.getName(), BPELPackageRepositoryUtils.getResourcePathForBPELPackageContent(deploymentContext), processConfs);
} catch (ContextException ce) {
deploymentContext.setDeploymentFailureCause("BPEL Package deployment failed at " + "ODE layer. Possible cause: " + ce.getMessage());
deploymentContext.setStackTrace(ce);
deploymentContext.setFailed(true);
handleDeploymentError(deploymentContext);
throw ce;
}
}
Aggregations