package netflix.karyon; import com.google.inject.Injector; import com.netflix.governator.guice.BootstrapModule; import com.netflix.governator.guice.LifecycleInjector; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.concurrent.CountDownLatch; /** * @author Nitesh Kant * @deprecated 2016-07-20 Karyon2 no longer supported. See https://github.com/Netflix/karyon/issues/347 for more info */ @Deprecated class MainClassBasedServer extends AbstractKaryonServer { private static final Logger logger = LoggerFactory.getLogger(MainClassBasedServer.class); private final Class<?> mainClass; protected MainClassBasedServer(Class<?> mainClass, BootstrapModule... bootstrapModules) { super(bootstrapModules); this.mainClass = mainClass; } @Override public void waitTillShutdown() { final CountDownLatch shutdownFinished = new CountDownLatch(1); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { try { shutdown(); logger.info("Leaving main loop - shutdown finished."); } finally { shutdownFinished.countDown(); } } }); try { shutdownFinished.await(); } catch (InterruptedException e) { logger.error("Interrupted while waiting for shutdown.", e); Thread.interrupted(); throw new RuntimeException(e); } } @Override protected void _start() { // No Op. } @Override protected Injector newInjector(BootstrapModule... applicableBootstrapModules) { return LifecycleInjector.bootstrap(mainClass, applicableBootstrapModules); } }