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

News & Articles

Full archive

April 13

2017

Akka 2.5.0 Released!

Dear hakkers,

we—the Akka committers—are proud to be able to announce the availability of Akka 2.5.0. Since the release of Akka 2.4.0 (already 18 months ago) we have incrementally added many new features to the 2.4.x release series, including Akka Streams and HTTP. That has worked well and we think you appreciate the API stability of all those patch versions. As always, there are some changes one cannot do in patch versions and therefore it is time for Akka 2.5. One of these changes is to promote some of the experimental modules to fully stable modules and incorporate some API improvements before declaring them stable.

Akka 2.5 is binary backwards compatible with 2.4 with the ordinary exceptions listed in a separate section below. Read the migration guide as the first step.

The key features of the 2.5.0 release are:

  • The Java API for AbstractActor was promoted to fully stable API. While doing this we made some small, yet important, improvements to the API that will require some mechanical changes of your source code.Thanks to @ortigali for help.
  • Faster and more flexible Akka Streams materializer, which matters for short lived streams, such as HTTP requests.
  • Distributed Data was promoted to a fully stable module. Several improvements were also included, such as:
    • Support for delta-CRDTs in Distributed Data to reduce the amount of data that is replicated, thanks to help from @gosubpl.
    • Generic type for the key in Distributed Data ORMap, thanks to jgordijn
  • Coordinated shutdown to facilitate ordered stopping of actors and services and perform registered tasks during the shutdown process. This greatly simplifies tasks involved in graceful leaving of Akka Cluster.
  • Support remembering entities in Cluster Sharding with the Distributed Data (ddata) mode. ddata is now also the default mode for Cluster Sharding.
  • New Java API for Testkit taking advantage of lambas, thanks to @Hawstein
  • Fix performance regression for Scala 2.12, due to change in scheduling fairness of the JDK8 ForkJoinPool implementation
  • We added @ApiMayChange and other annotations which can be used to mark experimental API inside stable modules, primarily for use in Akka HTTP.
  • API improvements of Akka Typed, including Java API

Binary Compatibility

Akka 2.5.x is backwards binary compatible with previous 2.4.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.12.x is is not binary compatible with Scala 2.11.x, which means that Akka’s binary compatibility property only holds between versions that were built for a given Scala version—akka-actor_2.12-2.5.0.jar is compatible with akka-actor_2.12-2.4.17.jar but not with akka-actor_2.11-2.4.17.jar.

Binary compatibility is not maintained for the following:

  • akka-testkit and akka-multi-node-testkit
  • modules and API marked as “may change”, such as akka-typed and akka-contrib
  • features, classes, methods that were deprecated in 2.4.0 or earlier and removed in 2.5.x

We had to make two additional exceptions:

  • Custom Mailbox implementations. Scala 2.12 is using the standard JDK8 ForkJoinPool, which may cause performance regression for some Actor messaging scenarios. Therefore we have embedded the ForkJoinPool from Scala 2.11 in Akka. This breaks binary backwards compatibility for custom Mailbox implementations that were compiled with Akka 2.4.
  • To make the Java APIs AbstractPersistentActor and AbstractPersistentActorWithAtLeastOnceDelivery to work with Scala 2.12 we could find no other solution but to break the binary compatibility of the Scala versions (which the Java ones were based on).

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

Migration Guide

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

AbstractActor has been promoted from its experimental state and while doing this we did some small, but important, improvements to the API that will require some mechanical changes of your source code. See the Actor (Java) section in the migration guide.

It is possible to do a rolling update from Akka 2.4.17 to 2.5.0 but some configuration changes might be needed first. See the Rolling Update section in the migration guide.

Akka Persistence plugins released for 2.4 might not be compatible with the changes that were done in the API for Persistence Query in 2.5. We kindly ask the Akka Persistence plugin maintainers to migrate and release for 2.5. See the Persistence Query section in the migration guide. Akka Persistence plugin for Cassandra with version 0.50 that is compatible with Akka 2.5.0 has been released.

Akka 2.3 is End-of-Life

Akka 2.3.0 was released 3 years ago and with the release of 2.5.0 it will be officially declared as end-of-life, which means that we will not backport bug fixes and make new releases. If you are still using Akka 2.3 it’s highly recommended that you update. Use the migration guide for 2.4 and then the migration guide for 2.5.

Credits

The complete list of closed tickets can be found on the 2.5-M1, 2.5-M2, 2.5.0-RC1, 2.5.0-RC2, and 2.5.0 milestones on github.

For this release (since 448c12d) we had the help of 69 committers – thank you all very much!

commits  added  removed
    126  26744    23491 Patrik Nordwall
     51  17825     4361 Johan Andrén
     29    785      324 Johannes Rudolph
     26   4188     4425 Konrad `ktoso` Malawski
     22  12326     3778 Endre Sándor Varga
     21   1117     1128 ortigali
     16    102       45 Arnout Engelen
     11   2072    17741 Martynas Mickevičius
     10   5840      720 gosubpl
      6    246       73 Richard Imaoka
      5   1477      865 Björn Antonsson
      5     36       29 Nafer Sanabria
      5     22       37 Sebastian Harko
      4   2281      579 Jeroen Gordijn
      4     11       11 Devis Lucato
      3   1945      804 Roland Kuhn
      3    153       32 Josep Prat
      3     37       44 sebastian.harko
      2   1615     1619 Philippus Baalman
      2   1111      582 Hawstein
      2    381       24 Qing Wei, Lim
      2    151       48 inakov
      2    121       22 Kirill Plyashkevich
      2    102       21 Kirill Yankov
      2     91       25 Alexander Golubev
      2     42       37 Aurélien Thieriot
      2     36       36 VEINHORN
      2      5        6 Heiko Seeberger
      2      5        5 Tal Pressman
      2      5        2 toaditoad
      2      2        2 bill
      1    558       27 Maciej Ciołek
      1    339       10 cchantep
      1    217        0 Oleg Poleshuk
      1    165       21 monkey-mas
      1     93        5 Olli Helenius
      1     89        1 Daniel Urban
      1     51       15 Christian Schmitt
      1     53       13 虎鸣
      1     35       31 Ben Fonarov
      1     52        1 Michał Płachta
      1     47        1 Javier Puerto
      1     32       10 Andrey Baidarov
      1     13       28 hhimanshu
      1     37        2 Andrew Rapp
      1     30        2 Thomas Alton
      1     13       11 Guido Medina
      1     19        1 Damien Bailly
      1     13        1 Sergey
      1      5        3 sebbes
      1      4        4 Troxid
      1      5        1 Adam Voss
      1      6        0 A Andrievsky
      1      2        2 Philip L. McMahon
      1      2        2 Ikrom
      1      2        1 Dominik Pawlak
      1      2        1 Robert Varga
      1      1        1 Andrii Lashchenko
      1      1        1 Keiji Yoshida
      1      1        1 IanGrima
      1      1        1 Pepe García
      1      2        0 Andrey Kuznetsov
      1      1        1 Eric Loots
      1      1        1 Earl St Sauver
      1      1        1 Alex Bezhan
      1      1        1 Nicolas Rémond
      1      1        1 Nikita Marshalkin
      1      1        0 haggy

Happy hakking!

– The Akka Team