/* * Copyright (C) 2018-2019 Lightbend Inc. */ package jdocs.pattern; import akka.actor.ActorRef; import akka.actor.ActorRefFactory; import akka.actor.Props; import akka.actor.AbstractActor; import akka.util.Timeout; import scala.concurrent.duration.FiniteDuration; import java.time.Duration; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; public class SupervisedAskSpec { public Object execute( Class someActor, Object message, Duration timeout, ActorRefFactory actorSystem) throws Exception { // example usage try { ActorRef supervisorCreator = SupervisedAsk.createSupervisorCreator(actorSystem); CompletionStage finished = SupervisedAsk.askOf(supervisorCreator, Props.create(someActor), message, timeout); return finished.toCompletableFuture().get(timeout.toMillis(), TimeUnit.MILLISECONDS); } catch (Exception e) { // exception propagated by supervision throw e; } } }