add akka-typed project with generic ActorRef

This is the first step towards more type-safety in Actor interactions,
comprising:

* generic ActorRef[T] that only accepts T messages
* generic ActorSystem[T] extends ActorRef[T] (sending to the guardian,
  whose Props[T] are provided for ActorSystem construction)
* removed the Actor trait: everything in there has been made into
  messages and signals
* new Behavior[T] abstraction that consumes messages (of type T) or
  Signals (lifecycle hooks, Terminated, ReceiveTimeout, Failed),
  producing the next Behavior[T] as the result each time
* the ask pattern is provided and yields properly typed Futures
* variants of ActorContext are provided for synchronous testing of
  Behaviors

All of this is implemented without touching code outside akka-typed
(apart from making guardianProps configurable), creating wrapper objects
around ActorRef, ActorContext, ActorSystem, Props and providing an Actor
implementation that just runs a Behavior.
This commit is contained in:
Roland Kuhn 2015-01-28 20:45:21 +01:00
parent 50d1569f37
commit d9efd041f7
40 changed files with 4724 additions and 21 deletions

View file

@ -0,0 +1,40 @@
/**
* Copyright (C) 2014 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.util;
import java.io.Serializable;
/*
* IMPORTANT: do not change this file, the line numbers are verified in LineNumberSpec
*/
public class LineNumberSpecCodeForJava {
// @FunctionalInterface // will be uncommented as soon as '-source 1.8' is set
public static interface F extends Serializable {
public String doit(String arg);
}
// public F f1() { // FIXME These are commented out until the build is switched to Java 8
// return (s) -> s;
// }
// public F f2() {
// return (s) -> {
// System.out.println(s);
// return s;
// };
// }
public F f3() {
return new F() {
private static final long serialVersionUID = 1L;
@Override
public String doit(String arg) {
return arg;
}
};
}
}