we—the Akka committers—proudly announce the FIRST RELEASE CANDIDATE for Akka 2.2.0 “Coltrane”. Half a year has passed since the release of Akka 2.1.0 “Mingus” and much has happened in our code base. User-visible API changes have been kept to a minimum, though, as most work happened under the hood; more on that later. First let us take a look at what Coltrane brings you:
Cluster support (with a big thank-you for the feedback throughout the development cycle); we have continued to improve on the preview offered with Mingus, e.g. adding node roles or distributed pub-sub or the cluster client.
An experimental preview of Typed Channels.
This is just a very high-level overview of the biggest pieces, there have also been improvements in other areas like test coverage of our OSGi bundles, or how actor failures are logged, or in the semantics of ActorContext.unwatch(), or a more performant rewrite of Agents, or how dispatchers and mailboxes can be configured outside of your code.
This is what we intend to ship as 2.2.0 final unless issues are found, so please test it thoroughly and report back. Failures are important to hear about, but praise also does not hurt :-)
What changes for existing code?
We have continued on our path to unify the semantics between local and remote actor references. The most obvious difference was that remote references were bound to a name whereas local ones were bound to a specific actor lifecycle. If the local actor stops, the reference stops working, which was not the case for the remote reference in case a new actor was created at the same path. We changed it such that the local rules apply to remote references as well, making the “self” references of actors created subsequently with the same name distinct from each other. As a consequence, ActorRef equality was changed by taking into account the actor’s UID (which you can see in ActorRef.toString now).
The other most visible change concerns the creation of Props. Using anonymous inner classes as factories for your actors means that the required “$outer reference”—the reference to the enclosing scope—will have an influence on the serializability of your Props as well as on the thread-safety. Therefore we have rebased the inner workings of Props on the desired actor’s Class<?> and its constructor arguments. The benefit is that no closures are formed which would invite you e.g. to call methods on the enclosing actor, and also that serialization bindings are used to serialize the constructor arguments. Previously all Props were serialized only with Java serialization. In order to make full use of the potential of this approach we have deprecated some of the existing ways to obtain Props and introduced new ones.
Besides these changes there have been several smaller modifications, please read the migration guide to see if you may need to adapt your application while upgrading.
Where do I get it from?
The artifacts have been published to Maven Central as usual, but this time for two different Scala versions:
using Scala 2.10.1
“com.typesafe.akka” % “akka-actor_2.10” % “2.2.0-RC1”
using Scala 2.11.0-M3
“com.typesafe.akka” % “akka-actor_2.11.0-M3” % “2.2.0-RC1”
Development Statistics (compared to v2.1.0)
1044 files changed, 85693 insertions, 35814 deletions, 23 committers
commits added removed
commits added removed 127 20030 9910 Patrik Nordwall 99 20073 8543 Roland 79 17228 9401 Endre Sándor Varga 69 7482 6618 Viktor Klang 49 4820 2677 Björn Antonsson 20 1610 422 Johannes Rudolph 18 1586 942 Mathias 10 135 175 Dario Rexin 9 1764 440 Rich Dougherty 5 311 139 RickLatrine 5 1463 306 Christophe Pache 3 1212 490 Raman Gupta 2 83 20 Kaspar Fischer (hbf) 2 12 12 Ricky Elrod 2 95 53 Kevin Wright 2 163 66 Raymond Roestenburg 2 48 29 Jonas Boner 1 10 3 Michael Pilquist 1 548 77 Helena Edelson 1 38 24 Matthew Neeley 1 8 10 Peter Vlugter 1 3 3 Thomas Lockney 1 36 35 Derek Mahar
Thanks for all the external contributions, 23 committers is quite an outstanding number for a toolkit like Akka.
In total we closed 508 tickets on these four milestones.
Akka is released under the Apache V2 license.