app/services/AppStartup.scala (45 lines of code) (raw):

package services import akka.actor.{ActorRef, ActorSystem, PoisonPill, Props} import akka.cluster.singleton.{ClusterSingletonManager, ClusterSingletonManagerSettings, ClusterSingletonProxy, ClusterSingletonProxySettings} import akka.management.scaladsl.AkkaManagement import akka.management.cluster.bootstrap.ClusterBootstrap import javax.inject.{Inject, Named} import play.api.inject.{ApplicationLifecycle, Injector} import play.api.{Configuration, Logger} import scala.concurrent.ExecutionContext import scala.concurrent.duration._ import scala.util.{Failure, Success} class AppStartup @Inject()(injector:Injector)(implicit system:ActorSystem){ private val logger = Logger(getClass) implicit val ec:ExecutionContext = system.dispatcher logger.info("Starting up management and cluster bootstrap") AkkaManagement(system).start() ClusterBootstrap(system).start() logger.info("Starting up master timer") system.actorOf(ClusterSingletonManager.props( singletonProps = Props(injector.instanceOf(classOf[ClockSingleton])), terminationMessage = PoisonPill, settings = ClusterSingletonManagerSettings(system) ), name="ClockSingleton" ) logger.info("Starting up per-instance timer") system.actorOf(Props(injector.instanceOf(classOf[ClockPerInstance]))) def doTestCreateIndex():Unit = { val indexMgt = injector.instanceOf(classOf[IndexManagement]) indexMgt.doIndexCreate().onComplete({ case Success(response)=> if(response.isError) { if(response.error.`type`=="resource_already_exists_exception") { logger.info("Index already exists") } else { logger.error(s"Index create request failed: ${response.status} ${response.error.reason}") } } else { logger.info(s"Index create successful: $response") } case Failure(err)=> logger.error(s"Index create request failed: $err") }) } doTestCreateIndex() }