/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
package Sirius.server;
/**
* DOCUMENT ME!
*
* @author martin.scholl@cismet.de
* @version $Revision$, $Date$
*/
public abstract class AbstractShutdownable implements Shutdownable {
//~ Instance fields --------------------------------------------------------
private transient boolean down = false;
//~ Methods ----------------------------------------------------------------
@Override
public final synchronized void shutdown() throws ServerExitError {
if (down) {
return;
}
// this not only indicates that it has been shut down but also that a shutdown is currently in progess
down = true;
internalShutdown();
}
/**
* DOCUMENT ME!
*
* @throws ServerExitError DOCUMENT ME!
*/
protected abstract void internalShutdown() throws ServerExitError;
@Override
public final synchronized boolean isDown() {
return down;
}
}