FileDocCategorySizeDatePackage
UndeployFromDomainPhase.javaAPI DocGlassfish v2 API7250Fri May 04 22:34:38 BST 2007com.sun.enterprise.deployment.phasing

UndeployFromDomainPhase

public class UndeployFromDomainPhase extends DeploymentPhase
This phase is responsible for undeploying a application/module from domain. It uses AppUndeployer, ModuleUnDeplyer[EjbModuleDeployer..etc] to undeploy and also unregisters the mbeans
author
Sandhya E

Fields Summary
public static final Logger
sLogger
Deployment Logger object for this class
private static com.sun.enterprise.util.i18n.StringManager
localStrings
string manager
Constructors Summary
public UndeployFromDomainPhase(DeploymentContext deploymentCtx)
Creates a new instance of Class

param
deploymentCtx DeploymentContext object

    
                     
       
    
        this.deploymentCtx = deploymentCtx;
        this.name=UNDEPLOY;
    
Methods Summary
protected com.sun.enterprise.deployment.backend.DeploymentEventgetPostPhaseEvent(com.sun.enterprise.deployment.backend.DeploymentRequest req)
Event that will be broadcasted at the end of the phase

param
req Deployment request object
return
DeploymentEvent

        return new DeploymentEvent(DeploymentEventType.POST_UNDEPLOY, new DeploymentEventInfo(req));
   
protected com.sun.enterprise.deployment.backend.DeploymentEventgetPrePhaseEvent(com.sun.enterprise.deployment.backend.DeploymentRequest req)
Event that will be broadcasted at the start of the phase

param
req Deployment request object
return
DeploymentEvent

        return new DeploymentEvent(DeploymentEventType.PRE_UNDEPLOY, new DeploymentEventInfo(req));
    
public voidrunPhase(DeploymentPhaseContext phaseCtx)
Undeploys the application using App/ModuleUnDeployers unregisters the application for domain.xml

param
phaseCtx the DeploymentPhaseCtx object
throws
DeploymentPhaseException

        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
        Application app = deploymentCtx.getApplication(req.getName());
        req.setDescriptor(app);
        
        // Clear out the reference to the class loader
        if (app != null) {
            app.setClassLoader(null);
        }

        String type = null;
        Deployer deployer = null;
        try{            
            if(!req.isApplication())
            {         
                type = DeploymentServiceUtils.getModuleTypeString(req.getType());
            }
            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);

            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){}
        }