/** * Copyright (C) 2009-2012 Typesafe Inc. */ package docs.jrouting; import akka.routing.ScatterGatherFirstCompletedRouter; import akka.routing.BroadcastRouter; import akka.routing.RandomRouter; import akka.routing.RoundRobinRouter; import akka.routing.SmallestMailboxRouter; import akka.actor.UntypedActor; import akka.actor.ActorRef; import akka.actor.Props; import scala.concurrent.util.Duration; import akka.util.Timeout; import scala.concurrent.Future; import scala.concurrent.Await; //#parentActor public class ParentActor extends UntypedActor { public void onReceive(Object msg) throws Exception { if (msg.equals("rrr")) { //#roundRobinRouter ActorRef roundRobinRouter = getContext().actorOf( new Props(PrintlnActor.class).withRouter(new RoundRobinRouter(5)), "router"); for (int i = 1; i <= 10; i++) { roundRobinRouter.tell(i, getSelf()); } //#roundRobinRouter } else if (msg.equals("rr")) { //#randomRouter ActorRef randomRouter = getContext().actorOf( new Props(PrintlnActor.class).withRouter(new RandomRouter(5)), "router"); for (int i = 1; i <= 10; i++) { randomRouter.tell(i, getSelf()); } //#randomRouter } else if (msg.equals("smr")) { //#smallestMailboxRouter ActorRef smallestMailboxRouter = getContext().actorOf( new Props(PrintlnActor.class).withRouter(new SmallestMailboxRouter(5)), "router"); for (int i = 1; i <= 10; i++) { smallestMailboxRouter.tell(i, getSelf()); } //#smallestMailboxRouter } else if (msg.equals("br")) { //#broadcastRouter ActorRef broadcastRouter = getContext().actorOf( new Props(PrintlnActor.class).withRouter(new BroadcastRouter(5)), "router"); broadcastRouter.tell("this is a broadcast message", getSelf()); //#broadcastRouter } else if (msg.equals("sgfcr")) { //#scatterGatherFirstCompletedRouter ActorRef scatterGatherFirstCompletedRouter = getContext().actorOf( new Props(FibonacciActor.class).withRouter( new ScatterGatherFirstCompletedRouter(5, Duration.create(2, "seconds"))), "router"); Timeout timeout = new Timeout(Duration.create(5, "seconds")); Future futureResult = akka.pattern.Patterns.ask( scatterGatherFirstCompletedRouter, new FibonacciActor.FibonacciNumber(10), timeout); int result = (Integer) Await.result(futureResult, timeout.duration()); //#scatterGatherFirstCompletedRouter System.out.println( String.format("The result of calculating Fibonacci for 10 is %d", result)); } else { unhandled(msg); } } } //#parentActor