FileDocCategorySizeDatePackage
ApplicationStopPhase.javaAPI DocGlassfish v2 API7285Fri May 04 22:34:36 BST 2007com.sun.enterprise.deployment.phasing

ApplicationStopPhase

public class ApplicationStopPhase extends DeploymentPhase
Phase that is responsible to send stop events when an application is undeployed or disassociated
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 ApplicationStopPhase(DeploymentContext deploymentCtx)
Creates a new instance of Class

param
deploymentCtx DeploymentContext object

    
                    
      
    
        this.deploymentCtx = deploymentCtx;
        this.name = APP_STOP;
    
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_APP_STOP,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_APP_STOP, new DeploymentEventInfo(req));
    
public voidrunPhase(DeploymentPhaseContext phaseCtx)
Sends stop events to the required target

param
req DeploymentRequest object
param
phaseCtx the DeploymentPhaseContext object

        String type = null;
        
        DeploymentRequest req = phaseCtx.getDeploymentRequest();

        DeploymentTarget target = (DeploymentTarget)req.getTarget(); 
        DeploymentStatus status = phaseCtx.getDeploymentStatus();

        int loadUnloadAction = Constants.UNLOAD_ALL;

        Application app = DeploymentServiceUtils.getInstanceManager(
               req.getType()).getRegisteredDescriptor(req.getName());

        // store the application object in DeploymentContext before it's 
        // removed from instance manager cache
        deploymentCtx.addApplication(req.getName(), app);
        
        if(!req.isApplication())
        {         
            type = DeploymentServiceUtils.getModuleTypeString(req.getType());
        } else {
            if ( (app != null) && (app.getRarComponentCount() != 0) ) {
                loadUnloadAction = Constants.UNLOAD_REST;
            }
        }
        
        prePhaseNotify(getPrePhaseEvent(req));
  
        boolean success;
        try {
            // send this event to unload non-rar standalone module
            // or to unload the non-rar submodules of embedded rar
            if (! req.isConnectorModule()) {
                success = target.sendStopEvent(req.getActionCode(), req.getName(), type, req.getCascade(), req.isForced(), loadUnloadAction);
            } else {
                status.setStageStatus(DeploymentStatus.SUCCESS);
                return;
            }
        } catch(DeploymentTargetException dte) {
            status.setStageStatus(DeploymentStatus.FAILURE);
            if (dte.getCause()!=null) {
                status.setStageException(dte.getCause());
                status.setStageStatusMessage(dte.getMessage());
            }
            return;
        }
        if (success) {
            status.setStageStatus(DeploymentStatus.SUCCESS);
        } else {
            status.setStageStatus(DeploymentStatus.WARNING);
            status.setStageStatusMessage("Application failed to stop");
        }            
        
        postPhaseNotify(getPostPhaseEvent(req));
        
        // if any exception is thrown. we let the stack unroll, it 
        // will be processed in the DeploymentService.