Introducing Akka Cloud to Edge Continuum. Build once for the Cloud. Seamlessly deploy to the Edge. Learn More
 

News & Articles

Full archive

May 22

2015

Akka 2.4-M1 Released!

Dear hAkkers,

we—the Akka committers—proudly present the first development milestone for Akka 2.4. Since the release of Akka 2.3.0 (already 14.5 months ago) much has happened, in particular around Streams & HTTP. It may therefore surprise you that these additions to the Akka toolkit are not yet part of the 2.4 development branch, but if you read on for a little while the pieces of the puzzle will fall into place. Besides a plethora of small improvements the main changes relative to the 2.3.x series are:

  • we dropped support for Java 6 & 7 as announced in the last roadmap update, requiring now Java 8 or later
  • we dropped support for Scala 2.10, kept 2.11 and added 2.12 (which is at milestone 1 currently as well); this is in keeping with our policy to support the Scala version that is “current” when the first milestone comes out plus any later version that is published during this series’ lifetime
  • we added the experimental Akka Typed module previously codenamed Project Gålbma, a new way of formulating Actor interactions with full type-system support
  • we promoted the ClusterSingleton, ClusterClient, DistributedPubSub and ClusterSharding patterns to fully supported Cluster tools
  • ClusterSharding also learnt a few new tricks (asynchronous shard allocation, reviving entries after migration [thanks to Dominic Black], and more flexible use of roles [thanks to Richard Marscher])
  • Akka Persistence can now use multiple different Journals within one ActorSystem (thanks to Andrei Pozolotin, who also split out ClusterMetrics into their own module)
  • we also removed the default Journal plugin and removed the hard dependency on LevelDB (since that was not a recommended production configuration anyway)
  • we added support for binding to a different host & port than what the ActorSystem advertises to its peers, a.k.a. “allow Akka to run in Docker containers”
  • the SLF4J logging adapter can now apply the log filtering rules prior to sending to the EventStream, see the migration guide
  • but the biggest feature is probably that Akka 2.4 will be binary backwards compatible with Akka 2.3, see the detailed description below.

Being binary compatible means that applications and libraries built on top of Akka 2.3.x continue to work with Akka 2.4.x without recompilation (subject to the conditions below), which implies that Akka Streams & HTTP as well as the upcoming Play Framework 2.4 can be combined with Akka 2.4.

Akka 2.4 Roadmap

What remains to be done before we can release 2.4.0-RC1 is to

  • complete the Java API and the documentation for Akka Typed
  • finalize Akka Persistence on the Write Side (i.e. PersistentActor will be non-experimental; the work on the Read Side will be deferred until Akka 2.5)
  • incorporate Streams & HTTP once ready (to become an experimental module, as usual)
  • incorporate Patrik’s akka-data-replication under the new module name akka-distributed-data

We will perform this work within the next weeks, releasing further milestones when appropriate. Please do what you usually do so well: try out our latest and report back when things break, not work as advertised, feel strange, or even when you are happy :-) Especially concerning binary compatibility we will need help from the community (you!) since we cannot run all possible programs ourselves; we base our BC efforts on the MiMa plugin but that is no perfect guarantee that everything will work out of the box.

Binary Compatibility

Akka 2.4.x is backwards binary compatible with previous 2.3.x versions (exceptions listed below). This means that the new JARs are a drop-in replacement for the old one (but not the other way around) as long as your build does not enable the inliner (Scala-only restriction). It should be noted that Scala 2.11.x is is not binary compatible with Scala 2.10.x, which means that Akka’s binary compatibility property only holds between versions that were built for a given Scala version—akka-actor_2.11-2.4-M1.jar is compatible with akka-actor_2.11-2.3.11.jar but not with akka-actor_2.10-2.3.11.jar.

Binary compatibility is not maintained for the following:

  • akka-testkit and akka-multi-node-testkit
  • experimental modules, such as akka-persistence and akka-contrib
  • features, classes, methods that were deprecated in 2.3.x and removed in 2.4.x

The dependency to Netty has been updated from version 3.8.0.Final to 3.10.3.Final. The changes in those versions might not be fully binary compatible, but we believe that it will not be a problem in practice. No changes were needed to the Akka source code for this update. Users of libraries that depend on 3.8.0.Final that break with 3.10.3.Final should be able to manually downgrade the dependency to 3.8.0.Final and Akka will still work with that version.

The dependency to Typesafe Config has been updated from 1.2.1 to 1.3.0 which should be binary compatible for the vast majority users, except for obscure edge cases as its changelog points out. This change was made in order in order to use new JDK8 specific features in the library as well as to align Akka with Play which is now also depending on 1.3.0.

When migrating a code base to 2.4 please refer to the migration guide in order to profit from some of the improvements.

Additional Release Details

The artifacts comprising this release have been published to https://repo1.maven.org/maven2/ and also to Maven Central. In addition, we adopted the sbt standard of encoding the Scala binary version in the artifact name, i.e. the core actor package’s artifactId is “akka-actor_2.11” or “akka-actor_2.12.0-M1”, respectively.

The complete list of closed tickets can be found in the 2.4-M1 github issues milestone.

Credits

We are extraordinarily proud of the long list of contributors to this release, looking at the commit history we find more than 100 names! We are particularly thankful to hepin1989 (a.k.a. kerr) who contributed already 19 pull requests to Akka. Other noteworthy mentions besides Andrei Pozolotin’s, Dominic Black’s and Richard Marscher’s (which are already listed above) are:

2.3.0 compared to 2.4-M1:

commits added removed
  140   17263   28182 Patrik Nordwall
   64    9394    2486 Konrad 'ktoso' Malawski
   36    6444    3433 Roland Kuhn
   33    3686     734 Björn Antonssonn
   27    2300     1275 Martynas Mickevičius
   11     345     179 hepin
    8   10253     620 Andrei Pozolotin
    8    1254     136 Endre Sándor Varga
    8     768     255 Viktor Klang
    6      28      15 Nitsan Wakart
    4       5       5 Stanislav Savulchik
    3      89      14 Csongor Somogyi
    3       4       4 kerr
    3      58      16 Johannes Rudolph
    3      90       7 Benjamin Poserow
    3     144       8 Colin Godsey
    3     101      65 Eugene Platonov
    3     140      94 Marcin Kubala
    3     128       8 Nikita Melkozerov
    3      60       9 kustosz
    2     110      14 Jeroen Gordijn
    2     127       8 Balázs Kossovics
    2       5       3 Stevo Slavić
    2     916     188 Dominic Black
    2     869     834 dario.rexin
    2      10       9 xuwei-k
    2     218     192 Thibaut Robert
    2     181      68 Tomasz Lelek
    1      10       2 Saeed Zarinfam
    1       4       6 gfaerie
    1       2       1 Kane Rogers
    1       2       2 Chris Johnson
    1      42      20 rmarsch
    1       1       1 Richard Summerhayes
    1       8       3 Mathias
    1      15      15 Ben McCann
    1       1       1 Piyush Mishra
    1       2       2 Valerian
    1       1       1 Jonas Fonseca
    1       3       3 Michael Ummels
    1       1       1 Katherine Fellows
    1      15       1 Ahmed Soliman
    1      36      39 Paweł Kaczor
    1      71       1 Brendan Lawlor
    1      41      18 Ostapenko Evgeniy
    1       2       2 André Wolski
    1       2       2 Katsunori Kanda
    1      53      37 Michal Knapik
    1     605       0 Martin Krasser
    1     284       8 dch
    1       2       2 Arnaud Gourlay
    1     246       2 Michal Rus
    1     440      34 Giovanni Botta
    1      74      15 Martin Eigenbrodt
    1       2       2 Shikhar Bhushan
    1     103      29 Michael R. Maletich
    1       2       2 Seulgi Kim
    1       1       1 Heiko Seeberger
    1     246      28 Michał Węgrzyn
    1       2       2 Pavel Boldyrev
    1       1       1 Goddamned Qu
    1       2       2 Dale Wijnand
    1       6       6 Evan Tsue
    1       1       1 Raymond Roestenburg
    1     219      37 Xingrun CHEN
    1     439      17 Ilya Epifanov
    1       1       1 Dawid Malina
    1      53       7 dormidon
    1       0       7 Samuel Heaney
    1      78      12 adamw
    1       2       2 Ruurtjan
    1     630      26 Krzysztof Janosz
    1      12       2 Paul Roman
    1      45       0 Dan Brown
    1       1       1 litomSegal
    1       8       2 Gaju Bhat
    1     197     121 rasummer
    1      42       3 Alejandro Lujan
    1      25       2 Ekin Gecikligun
    1       2       3 Eric Le Goff
    1       8       6 Raul Bache
    1      17      10 sangche
    1     394       0 Gaston M. Tonietti
    1     768     768 Julian Tescher
    1       7       0 John Ulric
    1       1       1 Flavio W. Brasil
    1     414       0 Dario Rexin
    1       1       1 Duarte Nunes
    1       1       1 qian miao
    1       2       2 Tair Sabirgaliev
    1      95      18 Łukasz Dubiel
    1      44      11 Marek Prochera
    1     446       0 Marcus Ljungblad
    1       2       2 Sergey Kisel
    1       6       1 Reid Spencer
    1       5       5 nordicway
    1       8       7 Pavel Zalunin
    1       1       1 Ronak Buch
    1       4       4 drozzy
    1       1       1 Jacob Gulotta
    1       1       1 LeonardMeyer
    1       2       1 Arnout Engelen
    1       1       1 Chris Grieger
    1       8      46 Sergey Krauchenia
    1      55       6 Paweł Wiejacha
    1      37      15 Max Cai

Happy hAkking!