package dgm.modules.elasticsearch; import com.google.inject.Inject; import com.google.inject.Provides; import com.google.inject.Singleton; import dgm.Service; import dgm.modules.ServiceModule; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.client.Client; import org.elasticsearch.node.Node; import org.nnsoft.guice.sli4j.core.InjectLogger; import org.slf4j.Logger; class ElasticSearchService implements Service { final Node node; final Client client; @InjectLogger Logger log; @Inject ElasticSearchService(Node node, Client client) { this.node = node; this.client = client; } @Override public void start() { node.start(); // get some information on the cluster (and thus check if we can talk to it) final ClusterStateResponse cr = node.client().admin().cluster().prepareState().execute().actionGet(); log.info("Connected to cluster with {} nodes", cr.state().nodes().getSize()); } @Override public void stop() { client.close(); node.close(); } } public class CommonElasticSearchModule extends ServiceModule { @Override protected void configure() { bindService(ElasticSearchService.class); } // if we have a node, we can always just get a client from it @Provides @Singleton final Client provideClient(Node node) { return node.client(); } }