Package com.webobjects.monitor.application.starter

Source Code of com.webobjects.monitor.application.starter.ShutdownBouncer

package com.webobjects.monitor.application.starter;

import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableSet;
import com.webobjects.monitor._private.MApplication;
import com.webobjects.monitor._private.MHost;
import com.webobjects.monitor._private.MInstance;

/**
* Bounces an application by refusing new sessions, waiting a while, shutting down all instances, then starting the same instances again.
*
* @author ak
*/
public class ShutdownBouncer extends ApplicationStarter {

    private long _time;
   
    public ShutdownBouncer(MApplication app, int seconds) {
        super(app);
        _time = seconds * 1000;
    }

    @Override
    protected void bounce() throws InterruptedException {

        NSArray<MInstance> instances = application().instanceArray().immutableClone();
        NSMutableArray<MInstance> runningInstances = new NSMutableArray<MInstance>();
        NSMutableSet<MHost> activeHosts = new NSMutableSet<MHost>();
        for (MInstance instance : instances) {
            MHost host = instance.host();
            if (instance.isRunning_M()) {
                runningInstances.addObject(instance);
                activeHosts.addObject(host);
            }
        }
        handler().sendRefuseSessionToWotaskds(runningInstances, activeHosts.allObjects(), true);
        boolean waiting = true;

        long startTime = System.currentTimeMillis();
        // wait until apps have started
        while (waiting && (_time + startTime > System.currentTimeMillis())) {
            handler().startReading();
            try {
                log("Checking for started instances");
                handler().getInstanceStatusForHosts(activeHosts.allObjects());
                boolean allStopped = false;
                for (MInstance instance : runningInstances) {
                    allStopped &= !instance.isRunning_M();
                }
                if (allStopped) {
                    waiting = false;
                } else {
                    sleep(10 * 1000);
                }
            } finally {
                handler().endReading();
            }
        }
        handler().sendStopInstancesToWotaskds(runningInstances, activeHosts.allObjects());
        log("Stopped instances sucessfully");

        handler().sendRefuseSessionToWotaskds(runningInstances, activeHosts.allObjects(), false);
        handler().sendStartInstancesToWotaskds(runningInstances, activeHosts.allObjects());

        handler().startReading();
        try {
            handler().getInstanceStatusForHosts(activeHosts.allObjects());
            log("Finished");
        } finally {
            handler().endReading();
        }
    }

}
TOP

Related Classes of com.webobjects.monitor.application.starter.ShutdownBouncer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.