we—the Akka committers—proudly announce the FINAL RELEASE of 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.
- Fully actor-based remoting implementation with support for multiple transports and high-level failure detection.
- An extremely scalable actor-based network IO layer with SSL support and a protocol pipeline infrastructure.
- Reliable supervision and deathwatch for remote actors.
- 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.
Changes Since 2.2.0-RC2
- fix a bug in Props.create() when passing null arguments to the actor
- more useful error message in case of deserialization failures
- documentation updates
- update to Typesafe Config 1.0.2 (fixes a bug when using unicode BOM)
For the complete list of all 27 tickets please refer to the assembla milestone.
The Akka team at Typesafe would like to send special thanks to all external contributors (listed in decreasing order of commits): Mathias Doenitz, Johannes Rudolph, Dario Rexin, Rick Latrine, Christophe Pache, Raman Gupta, Kaspar Fischer, Ricky Elrod, Kevin Wright, Raymond Roestenburg, Michael Pilquist, Helena Edelson, Matthew Neeley, Thomas Lockney and Derek Mahar.
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:
"com.typesafe.akka" % "akka-actor_2.10" % "2.2.0"
using Scala 2.10.2
"com.typesafe.akka" % "akka-actor_2.11.0-M3" % "2.2.0"
using Scala 2.11.0-M3
In total we closed 563 tickets on six milestones.
Akka is released under the Apache V2 license.