diff --git a/akka-docs/java/code/akka/docs/actor/FSMDocTestBase.java b/akka-docs/java/code/akka/docs/actor/FSMDocTestBase.java index 981cac15b1..aeaca63f92 100644 --- a/akka-docs/java/code/akka/docs/actor/FSMDocTestBase.java +++ b/akka-docs/java/code/akka/docs/actor/FSMDocTestBase.java @@ -18,45 +18,53 @@ import akka.actor.UntypedActor; import akka.actor.ActorSystem; import akka.actor.Props; import akka.testkit.TestProbe; +import akka.testkit.AkkaSpec; public class FSMDocTestBase { //#data public static final class SetTarget { final ActorRef ref; + public SetTarget(ActorRef ref) { this.ref = ref; } } - + public static final class Queue { final Object o; + public Queue(Object o) { this.o = o; } } - + public static final Object flush = new Object(); - + public static final class Batch { final List objects; + public Batch(List objects) { this.objects = objects; } } + //#data //#base static abstract class MyFSMBase extends UntypedActor { - + /* * This is the mutable state of this state machine. */ - protected enum State { IDLE, ACTIVE; } + protected enum State { + IDLE, ACTIVE; + } + private State state = State.IDLE; private ActorRef target; private List queue; - + /* * Then come all the mutator methods: */ @@ -64,21 +72,23 @@ public class FSMDocTestBase { this.target = target; queue = new ArrayList(); } - + protected void setState(State s) { if (state != s) { transition(state, s); state = s; } } - + protected void enqueue(Object o) { - if (queue != null) queue.add(o); + if (queue != null) + queue.add(o); } - + protected List drainQueue() { final List q = queue; - if (q == null) throw new IllegalStateException("drainQueue(): not yet initialized"); + if (q == null) + throw new IllegalStateException("drainQueue(): not yet initialized"); queue = new ArrayList(); return q; } @@ -89,13 +99,14 @@ public class FSMDocTestBase { protected boolean isInitialized() { return target != null; } - + protected State getState() { return state; } - + protected ActorRef getTarget() { - if (target == null) throw new IllegalStateException("getTarget(): not yet initialized"); + if (target == null) + throw new IllegalStateException("getTarget(): not yet initialized"); return target; } @@ -104,53 +115,62 @@ public class FSMDocTestBase { */ abstract protected void transition(State old, State next); } + //#base //#actor static public class MyFSM extends MyFSMBase { - + private final LoggingAdapter log = Logging.getLogger(getContext().system(), this); - + @Override public void onReceive(Object o) { - + if (getState() == State.IDLE) { - - if (o instanceof SetTarget) + + if (o instanceof SetTarget) init(((SetTarget) o).ref); - - else whenUnhandled(o); + + else + whenUnhandled(o); } else if (getState() == State.ACTIVE) { - if (o == flush) + if (o == flush) setState(State.IDLE); - else whenUnhandled(o); + else + whenUnhandled(o); } } - + @Override public void transition(State old, State next) { if (old == State.ACTIVE) { getTarget().tell(new Batch(drainQueue())); } } - + private void whenUnhandled(Object o) { if (o instanceof Queue && isInitialized()) { enqueue(((Queue) o).o); setState(State.ACTIVE); - + } else { log.warning("received unknown message {} in state {}", o, getState()); } } } + //#actor - - ActorSystem system = ActorSystem.create(); - + + ActorSystem system; + + @org.junit.Before + public void setUp() { + system = ActorSystem.create("FSMSystem", AkkaSpec.testConf()); + } + @org.junit.Test public void mustBunch() { final ActorRef buncher = system.actorOf(new Props(MyFSM.class)); @@ -165,10 +185,10 @@ public class FSMDocTestBase { assert b.objects.contains(1); assert b.objects.contains(2); } - + @org.junit.After public void cleanup() { system.shutdown(); } - + } diff --git a/akka-docs/java/code/akka/docs/actor/UntypedActorDocTestBase.java b/akka-docs/java/code/akka/docs/actor/UntypedActorDocTestBase.java index a72c828862..ff14c4e09b 100644 --- a/akka-docs/java/code/akka/docs/actor/UntypedActorDocTestBase.java +++ b/akka-docs/java/code/akka/docs/actor/UntypedActorDocTestBase.java @@ -211,16 +211,17 @@ public class UntypedActorDocTestBase { //#gracefulStop system.shutdown(); } - + class Result { final int x; final String s; + public Result(int x, String s) { this.x = x; this.s = s; } } - + @Test public void usePatternsAskPipeTo() { ActorSystem system = ActorSystem.create("MySystem"); @@ -229,13 +230,13 @@ public class UntypedActorDocTestBase { ActorRef actorC = system.actorOf(new Props(MyUntypedActor.class)); //#ask-pipeTo final Timeout t = new Timeout(Duration.create(5, TimeUnit.SECONDS)); - + final ArrayList> futures = new ArrayList>(); futures.add(ask(actorA, "request", 1000)); // using 1000ms timeout futures.add(ask(actorB, "reqeest", t)); // using timeout from above - + final Future> aggregate = Futures.sequence(futures, system.dispatcher()); - + final Future transformed = aggregate.map(new akka.japi.Function, Result>() { public Result apply(Iterable coll) { final Iterator it = coll.iterator(); @@ -244,9 +245,10 @@ public class UntypedActorDocTestBase { return new Result(x, s); } }); - + pipeTo(transformed, actorC); //#ask-pipeTo + system.shutdown(); } public static class MyActor extends UntypedActor {