package com.ge.snowizard.discovery.core; import static com.google.common.base.Preconditions.checkNotNull; import java.net.InetSocketAddress; import java.nio.channels.ServerSocketChannel; import io.dropwizard.lifecycle.ServerLifecycleListener; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CuratorAdvertisementListener implements ServerLifecycleListener { private static final Logger LOGGER = LoggerFactory .getLogger(CuratorAdvertisementListener.class); private static final String APPLICATION_CONNECTOR = "application"; private final CuratorAdvertiser advertiser; /** * Constructor * * @param advertiser * {@link CuratorAdvertiser} */ public CuratorAdvertisementListener(final CuratorAdvertiser advertiser) { this.advertiser = checkNotNull(advertiser); } @Override public void serverStarted(final Server server) { // Detect the port Jetty is listening on - works with configured and // random port for (final Connector connector : server.getConnectors()) { if (APPLICATION_CONNECTOR.equals(connector.getName())) { final ServerSocketChannel channel = (ServerSocketChannel) connector .getTransport(); try { final InetSocketAddress socket = (InetSocketAddress) channel .getLocalAddress(); advertiser.initListenInfo(socket.getPort()); advertiser.registerAvailability(); return; } catch (final Exception e) { LOGGER.error("Unable to register service in ZK", e); } } } } }