*/
public void runPhase(DeploymentPhaseContext phaseCtx)
{
DeploymentStatus status = phaseCtx.getDeploymentStatus();
DeploymentRequest req = phaseCtx.getDeploymentRequest();
DeploymentTarget target = (DeploymentTarget)req.getTarget();
// set the descriptor on request so we can get it in Deployers code
ExtensionModuleDeployer extDeployer = null;
Application app = deploymentCtx.getApplication(req.getName());
req.setDescriptor(app);
// Clear out the reference to the class loader
if (app != null) {
app.setClassLoader(null);
}
Deployer deployer = null;
try{
if (!req.isExtensionModule()) {
deployer = DeployerFactory.getDeployer(req);
deployer.doRequest();
}
// create a DeploymentStatus for cleanup stage, it is a
// substatus of current (UndeployFromDomainPhase) deployment status
DeploymentStatus cleanupStatus =
new DeploymentStatus(status);
req.setCurrentDeploymentStatus(cleanupStatus);
if (req.isExtensionModule()) {
ModuleType moduleType = req.getType().getModuleType();
extDeployer =
PluggableDeploymentInfo.getExtensionModuleDeployer(
moduleType);
extDeployer.undeployFromDomain(req);
} else {
deployer.cleanup();
}
DeploymentServiceUtils.removeFromConfig(req.getName(),
req.getType());
// remove the application from deployment context
deploymentCtx.removeApplication(req.getName());
status.setStageStatus(DeploymentStatus.SUCCESS);
postPhaseNotify(getPostPhaseEvent(req));
}catch(Throwable t){
status.setStageStatus(DeploymentStatus.FAILURE);
status.setStageException(t);
status.setStageStatusMessage(t.getMessage());
// Clean up domain.xml so that the system config is clean after the undeploy
try {
if (deployer != null) {
deployer.removePolicy();
}
DeploymentServiceUtils.removeFromConfig(req.getName(), req.getType());
} catch (Exception eee){}
}
}