package com.netflix.governator.guice.jetty.resources1; import java.util.concurrent.atomic.AtomicInteger; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.inject.Inject; import javax.inject.Singleton; import javax.ws.rs.GET; import javax.ws.rs.Path; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.netflix.governator.LifecycleShutdownSignal; @Path("/") @Singleton public class SampleResource { private static final Logger LOG = LoggerFactory.getLogger(SampleResource.class); private AtomicInteger counter = new AtomicInteger(); private final LifecycleShutdownSignal event; private final AtomicInteger postConstruct = new AtomicInteger(); private final AtomicInteger preDestroy = new AtomicInteger(); @Inject public SampleResource(LifecycleShutdownSignal event) { this.event = event; } @GET public String getHello() { LOG.info("Saying hello"); return "hello " + counter.incrementAndGet(); } @PostConstruct public void init() { postConstruct.incrementAndGet(); LOG.info("Post construct " + postConstruct.get()); } @PreDestroy public void shutdown() { preDestroy.incrementAndGet(); LOG.info("Pre destroy " + preDestroy.get()); } @Path("kill") public String kill() { Thread t = new Thread(new Runnable() { @Override public void run() { event.signal(); } }); t.setDaemon(true); t.start(); return "killing"; } public int getPreDestroyCount() { return preDestroy.get(); } public int getPostConstructCount() { return postConstruct.get(); } }