package org.huihoo.jfox.system;
public abstract class ServiceSupport extends ComponentSupport implements Service {
public ServiceSupport() {
super();
}
public ServiceSupport(String name) {
super(name);
}
public boolean isRunning() {
return state == State.STARTED || state == State.STARTING;
}
public void start() throws Exception {
if(!State.canStart(state)) {
logger.warn(name + " can not start, state = " + state);
return;
}
logger.info("starting...");
state = State.STARTING;
try {
doStart();
}
catch (Exception e) {
state = State.INTERRUPTED;
logger.error("starting failed", e);
throw e;
}
state = State.STARTED;
logger.info("started.");
}
public void stop() throws Exception {
if(!State.canStop(state)) {
logger.warn(name + " can not stop, state = " + state);
return;
}
logger.info("stopping...");
state = State.STOPPING;
try {
doStop();
}
catch (Exception e) {
state = State.INTERRUPTED;
logger.error("stopping failed", e);
throw e;
}
state = State.STOPPED;
logger.info("stopped");
}
protected abstract void doStart() throws Exception;
protected abstract void doStop() throws Exception;
}