package net.varkhan.serv; import net.varkhan.base.management.monitor.Monitor; import net.varkhan.base.management.report.JMXMonitorReport; import net.varkhan.base.management.report.MonitorReport; import net.varkhan.base.management.state.ConcurrentStateReport; import net.varkhan.base.management.state.JMXStateReport; import net.varkhan.base.management.state.StateReport; import net.varkhan.base.management.state.health.HealthLevel; import net.varkhan.base.management.state.health.HealthState; import net.varkhan.base.management.state.lifecycle.LifeLevel; import net.varkhan.base.management.state.lifecycle.LifeState; /** * <b></b>. * <p/> * * @author varkhan * @date 3/24/12 * @time 8:07 PM */ public abstract class BaseServer implements Monitored { protected volatile boolean configured = false; protected final ConcurrentStateReport<HealthLevel,HealthState> health = new ConcurrentStateReport<HealthLevel,HealthState>(HealthState.HEALTHY, 100); protected final ConcurrentStateReport<LifeLevel,LifeState> status = new ConcurrentStateReport<LifeLevel,LifeState>(LifeState.RUNNING, 100); protected final MonitorReport<Monitor<?>> monitors = new JMXMonitorReport<Monitor<?>>(); @Override public StateReport<HealthLevel,HealthState> health() { return health; } @Override public StateReport<LifeLevel,LifeState> status() { return status; } @Override public MonitorReport<Monitor<?>> monitors() { return monitors; } public void configure() throws Exception { if(configured) return; JMXStateReport<HealthLevel,HealthState> jmxh = new JMXStateReport<HealthLevel,HealthState>(health, "health"); jmxh.register(); JMXStateReport<LifeLevel,LifeState> jmxs = new JMXStateReport<LifeLevel,LifeState>(status, "status"); jmxs.register(); configured = true; } public abstract void start() throws Exception; public abstract void stop() throws Exception; public abstract void join() throws Exception; }