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

News & Articles

Full archive

September 30

2015

Akka 2.4.0 Released!

Dear hAkkers,

we—the Akka committers—are proud to announce the final release of Akka 2.4.0.

The key features of the 2.4.0 release are:

  • dropped support for Java 6 & 7 as announced in the last roadmap update, and now require Java 8 or later—this will allow us to create modern idiomatic Java APIs over the course of the upcoming releases
  • dropped support for Scala 2.10, kept 2.11 and added 2.12 (which is at milestone 2 currently); 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
  • Akka Persistence was promoted to a fully supported module (not experimental)
  • added experimental stream based API for the Query Side of Akka Persistence (implementations must be provided by query plugins corresponding to the journal plugins for the various data stores)
  • improved support for Akka Persistence event migrations by Serializer with String Manifest and Event Adapters and prepared comprehensive documentation of strategies for schema evolution of persistent events
  • made Akka Persistence failure handling more robust and support rejections of events
  • Akka Persistence can now use multiple different Journals within one ActorSystem (thanks to Andrei Pozolotin, who also split out ClusterMetrics into their own module)
  • introduced Persistent FSM, thanks to an awesome contribution from leonidb
  • simplified setting up Akka Clusters behind NAT (including inside Docker containers)
  • added the experimental Akka Typed module previously codenamed Project Gålbma, a new way of formulating Actor interactions with full type-system support
  • promoted the ClusterSingleton, ClusterClient, DistributedPubSub and ClusterSharding patterns to fully a supported Cluster Tools module, including various API and configuration improvements
  • ClusterSharding also learnt a few new tricks (graceful shutdown, asynchronous shard allocation, reviving entries after migration thanks to Dominic Black, and more flexible use of roles [thanks to Richard Marscher)
  • ClusterClient now uses custom failure detection to avoid quarantining in case of transient network failures
  • added experimental Akka Distributed Data which was previously known as Akka Data Replication (see akka-data-replication migration guide), the Distributed Data module is useful for sharing eventually consistent data (CRDTs) between nodes in an Akka Cluster
  • new experimental feature that makes it possible to promote new members to WeaklyUp during network partitions, thanks to Hector Veiga for contributing
  • the SLF4J logging adapter can now apply the log filtering rules prior to sending to the EventStream, see the migration guide
  • make it possible to use any version of Protobuf for serialization of application messages, the internal dependency to Protobuf has been replaced by embedding a shaded (renamed package) version, if you use Protobuf in your application you need to add the dependency to your build, see 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.

Things that will be included in upcoming 2.4.x releases

The Java API and the documentation for Akka Typed will be added. The Scala API was released in 2.4.0 in order to gather early feedback on this rather exciting new module.

We will incorporate Streams & HTTP once ready (to become an experimental module, as usual) into 2.4.x. Note that you can use Akka Streams 1.0 together with Akka 2.4.0.

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.0.jar is compatible with akka-actor_2.11-2.3.14.jar but not with akka-actor_2.10-2.3.14.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.0 or earlier and removed in 2.4.x

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 Play Framework 2.4 can be combined with Akka 2.4.

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.

Migration Guide

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

Old Akka Persistence plugins released for 2.3 are not compatible with the changes that were done in 2.4. We kindly ask the Akka Persistence plugin maintainers to migrate and release for 2.4.0. Even though there are rather many API changes since 2.3 in the Persistence plugin API it should not be difficult to migrate. See the Persistence Plugin APIs section in the migration guide.

We have carefully made changes in Akka Persistence with the goal that events stored with Akka Persistence 2.3.14 should still be possible to replay with 2.4.x, i.e. no lost data. Specific journal implementations may of course violate that goal.

General Remarks

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-M2”, respectively.

357 issues were closed since 2.3.0. The complete list can be found in the 2.4-M1, 2.4-M2, 2.4-M3, 2.4.0-RC1, 2.4.0-RC2, 2.4.0-RC3 and 2.4.0 github issues milestones.

Credits

Thanks to the Community! For this release we had the help of 134 committers.

commits added removed
  287   84638   36405 Patrik Nordwall
  120   20906    5018 Konrad Malawski
   44   62744   11228 Roland Kuhn
   33    3686     734 Björn Antonsson
   30    2565    1543 Martynas Mickevicius
   12     347     181 hepin
   11    1381     138 Endre Sándor Varga
   11     538     106 Johan Andrén
    8   10253     620 Andrei Pozolotin
    8     768     255 Viktor Klang
    6      28      15 Nitsan Wakart
    4       5       5 Stanislav Savulchik
    3      58      16 Johannes Rudolph
    3      89      14 Csongor Somogyi
    3    3703      32 leonidb
    3     140      94 Marcin Kubala
    3      60       9 kustosz
    3      22      13 Marek Kadek
    3      90       7 Benjamin Poserow
    3     130      34 Jeroen Gordijn
    3     144       8 Colin Godsey
    3    1422     118 Patrik Nordwall & Konrad Malawski
    3     101      65 Eugene Platonov
    3     128       8 Nikita Melkozerov
    3     673     355 Ostapenko Evgeniy
    3       4       4 kerr
    2     869     834 dario.rexin
    2     127       8 Balázs Kossovics
    2    2109      50 Christopher Hunt
    2     218     192 Thibaut Robert
    2       2       3 Heiko Seeberger
    2      10       9 xuwei-k
    2     916     188 Dominic Black
    2       5       3 Stevo Slavić
    2      12      12 Christopher Batey
    2     181      68 tomekl007
    2      70      83 kukido
    2       4       5 qian miao
    2       3       2 Jamie
    2      99      98 Andrey Myatlyuk
    1       2       1 Arnout Engelen
    1      39       9 Daryl Odnert
    1     439      17 Ilya Epifanov
    1       1       1 Richard Summerhayes
    1     768     768 Julian Tescher
    1       1       1 Piyush Mishra
    1       1       1 Jean-Jay Vester
    1     219      37 Xingrun CHEN
    1      42      20 rmarsch
    1       1       1 Katherine Fellows
    1      74      15 Martin Eigenbrodt
    1     246      28 Michał Węgrzyn
    1       2       2 Seulgi Kim
    1       1       1 Enno Runne
    1     145       7 Matthew Livesey
    1      44      11 Marek Prochera
    1       1       1 Flavio W. Brasil
    1       8       2 Gaju Bhat
    1       3       3 Michael Ummels
    1      25       2 Ekin Gecikligun
    1       1       1 Ronak Buch
    1       2       2 Arnaud Gourlay
    1      71       1 Brendan Lawlor
    1       1       1 Raymond Roestenburg
    1       0       0 1ambda
    1      10       2 Saeed Zarinfam
    1     446       0 Marcus Ljungblad
    1      10       0 Nilanjan Raychaudhuri
    1      12       2 Paul Roman
    1       8       3 Mathias
    1       1       1 Goddamned Qu
    1       0       7 Samuel Heaney
    1      42       3 Alejandro Lujan
    1     630      26 Krzysztof Janosz
    1      36      39 pkaczor
    1      15       1 Ahmed Soliman
    1     246       2 Michal Rus
    1       8      46 Sergey Krauchenia
    1     605       0 Martin Krasser
    1       2       3 Eric Le Goff
    1       2       2 Chris Johnson
    1       1       0 luben karavelov
    1       2       2 Shikhar Bhushan
    1       7       0 John Ulric
    1       2       2 Ruurtjan
    1       2       1 Kane Rogers
    1       2       2 Stephen McDonald
    1       1       1 LeonardMeyer
    1     103      29 Michael R. Maletich
    1       1       1 dawidmalina
    1       1       1 Duarte Nunes
    1       4       6 gfaerie
    1       2       2 Dale Wijnand
    1       1       1 Jacob Gulotta
    1       5       1 James Carman
    1     197     121 rasummer
    1       2       2 Sergey Kisel
    1       6       5 Guido Medina
    1     303      19 Veiga Ortiz, Héctor
    1       2       2 Valerian
    1     440      34 Giovanni Botta
    1       1       1 Brendan McAdams
    1       1       1 Stephen Nancekivell
    1       6       1 Reid Spencer
    1     414       0 Dario Rexin
    1      17      10 sangche
    1      55       6 Paweł Wiejacha
    1       1       1 rsujak
    1      45       0 Dan Brown
    1       5       5 nordicway
    1     284       8 dch
    1     392     386 Andrea
    1       2       2 Pavel Boldyrev
    1       1       1 Chris Grieger
    1       2       2 Katsunori Kanda
    1       2       2 Tair Sabirgaliev
    1       1       1 litomSegal
    1       2       2 Lev T11v
    1      53      37 Michal Knapik
    1       1       1 Jonas Fonseca
    1       4       4 drozzy
    1       1       1 Ankush Khanna
    1       2       2 Robert Ladstätter
    1      53       7 dormidon
    1     381      85 Jeremy.Stone
    1       2       2 André Wolski
    1      13      13 Yaroslav Klymko
    1      15      15 Ben McCann
    1       8       7 Pavel Zalunin
    1       6       6 Evan Tsue
    1      78      12 adamw
    1     394       0 Gaston M. Tonietti
    1      95      18 Łukasz Dubiel
    1      37      15 Max Cai
    1       8       6 Raul Bache

Happy hAkking!