package services; import models.services.ElasticsearchService; import play.Logger; import play.api.inject.ApplicationLifecycle; import javax.inject.Inject; import javax.inject.Singleton; import java.util.concurrent.CompletableFuture; /** * Created by Iven on 02.12.2015. */ @Singleton public class ElasticsearchInit implements DatabaseService { final Logger.ALogger LOG = Logger.of(ElasticsearchInit.class); final ElasticsearchService elasticsearchService; @Inject public ElasticsearchInit(ElasticsearchService elasticsearchService, ApplicationLifecycle lifecycle) { this.elasticsearchService = elasticsearchService; // create Elasticsearch connection and do some initialization stuff initialization(); // close Elasticsearch connection before Play shutdown lifecycle.addStopHook(() -> { elasticsearchService.closeClient(); return CompletableFuture.completedFuture(null); }); } @Override public void initialization() { LOG.info("trying to connect to Elasticsearch"); if (elasticsearchService.isClientAvailable()) { LOG.info("... success"); LOG.info("trying to create HTWPlus index and mapping"); if (!elasticsearchService.isIndexExists()) { elasticsearchService.createAnalyzer(); elasticsearchService.createMapping(); LOG.info("... success"); } else { LOG.info("... failed (it already exists?)"); } } else { LOG.info("... failed"); } } }