diff --git a/akka-stm/src/main/scala/transactor/Transactor.scala b/akka-stm/src/main/scala/transactor/Transactor.scala
index c67ff62387..72ba139d85 100644
--- a/akka-stm/src/main/scala/transactor/Transactor.scala
+++ b/akka-stm/src/main/scala/transactor/Transactor.scala
@@ -22,7 +22,7 @@ case class SendTo(actor: ActorRef, message: Option[Any] = None)
* Transactors can also accept explicitly sent `Coordinated` messages.
*
*
- * Simple transactors will just implement the `atomically` method which similar to
+ * Simple transactors will just implement the `atomically` method which is similar to
* the actor `receive` method but runs within a coordinated transaction.
*
* Example of a simple transactor that will join a coordinated transaction:
@@ -45,7 +45,7 @@ case class SendTo(actor: ActorRef, message: Option[Any] = None)
* The `include` method will send on the same message that was received to other transactors.
* The `sendTo` method allows you to specify both the actor to send to, and message to send.
*
- * Example of using coordinating an increment:
+ * Example of coordinating an increment:
*
* {{{
* class FriendlyCounter(friend: ActorRef) extends Transactor {
diff --git a/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedCounter.java b/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedCounter.java
new file mode 100644
index 0000000000..ff647fc200
--- /dev/null
+++ b/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedCounter.java
@@ -0,0 +1,39 @@
+package akka.transactor.example;
+
+import akka.transactor.Coordinated;
+import akka.actor.ActorRef;
+import akka.actor.UntypedActor;
+import akka.stm.*;
+
+public class UntypedCoordinatedCounter extends UntypedActor {
+ private Ref count = new Ref(0);
+
+ private void increment() {
+ System.out.println("incrementing");
+ count.set(count.get() + 1);
+ }
+
+ public void onReceive(Object incoming) throws Exception {
+ if (incoming instanceof Coordinated) {
+ Coordinated coordinated = (Coordinated) incoming;
+ Object message = coordinated.getMessage();
+ if (message instanceof Increment) {
+ Increment increment = (Increment) message;
+ if (increment.hasFriend()) {
+ increment.getFriend().sendOneWay(coordinated.coordinate(new Increment()));
+ }
+ coordinated.atomic(new Atomic() {
+ public Object atomically() {
+ increment();
+ return null;
+ }
+ });
+ }
+ } else if (incoming instanceof String) {
+ String message = (String) incoming;
+ if (message.equals("GetCount")) {
+ getContext().replyUnsafe(count.get());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedExample.java b/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedExample.java
new file mode 100644
index 0000000000..d3a2a14107
--- /dev/null
+++ b/akka-stm/src/test/java/akka/transactor/example/UntypedCoordinatedExample.java
@@ -0,0 +1,44 @@
+package akka.transactor.example;
+
+import akka.transactor.Coordinated;
+import akka.actor.ActorRef;
+import akka.actor.UntypedActor;
+import akka.dispatch.Future;
+import akka.dispatch.Futures;
+
+public class UntypedCoordinatedExample {
+ public static void main(String[] args) throws InterruptedException {
+ System.out.println();
+ System.out.println("Untyped transactor example");
+ System.out.println();
+
+ ActorRef counter1 = UntypedActor.actorOf(UntypedCoordinatedCounter.class).start();
+ ActorRef counter2 = UntypedActor.actorOf(UntypedCoordinatedCounter.class).start();
+
+ counter1.sendOneWay(new Coordinated(new Increment(counter2)));
+
+ Thread.sleep(3000);
+
+ Future future1 = counter1.sendRequestReplyFuture("GetCount");
+ Future future2 = counter2.sendRequestReplyFuture("GetCount");
+
+ future1.await();
+ if (future1.isCompleted()) {
+ if (future1.result().isDefined()) {
+ int result = (Integer) future1.result().get();
+ System.out.println("counter 1: " + result);
+ }
+ }
+
+ future2.await();
+ if (future2.isCompleted()) {
+ if (future2.result().isDefined()) {
+ int result = (Integer) future2.result().get();
+ System.out.println("counter 2: " + result);
+ }
+ }
+
+ counter1.stop();
+ counter2.stop();
+ }
+}