© Excellent backgrounds/Shutterstock.com
Teil 2: Fehlerbehandlung von Aktoren

Aktoren für Fortgeschrittene


Aufbauend auf dem Grundlagenartikel zu Akka und dem Aktorenmodell, geht es diesmal um weiterführende Konzepte. Wir schauen uns an, was passiert, wenn eine auf Aktoren setzende Anwendung mit der realen Welt konfrontiert wird – einer Welt, in der stets Fehler auftreten können und überall blockierende Schnittstellen lauern.

Artikelserie

Teil 1: Die Grundlagen von Akka

Teil 2: Fehlerbehandlung von Aktoren

In komplexen Softwaresystemen, insbesondere wenn die Geschäftslogik über viele Komponenten oder gar Rechnergrenzen hinweg verteilt ist, kann immer etwas schiefgehen. Java setzt zur Behandlung von Fehlern auf Exceptions. Dieses Konzept lässt sich bei asynchroner Verarbeitung aber nur begrenzt nutzen. Bei Fehlern, die in einem nebenläufigen Prozess auftreten, ist es meist unklar, wie oder wann die Exception an den ursprünglichen Aufrufer weitergeleitet werden kann. Deshalb führt das Aktorenmodell sein eigenes Konzept zur Fehlerbehandlung ein.

Bevor wir darauf näher eingehen, lassen Sie uns ein kleines Experiment machen. Der vorherige Teil dieser Serie [1] enthielt eine Anwendung zum Lösen von Sudokus. Falls Sie diesen Teil verpasst haben, können Sie den Beispielcode unter [2] einsehen. Listing 1 zeigt den Aktor zum Prüfen einer Sudoku-Definition. Offenbar hat der Aktor ein Problem mit Nachrichten, die statt eines SudokuDef-Objekts eine Null-Referenz enthalten. In diesem Fall wird eine NullPointerException generiert. Was passiert nun, wenn das Testprogramm für den Sudoku-Service so modifiziert wird, dass es zu einem bestimmten Prozentsatz derartige Nachrichten produziert?

Listing 1: „SudokuCheckActor.scala“

class SudokuCheckActor extends Actor { override def receive: Receive = { case CheckSudoku(sudokuDef) => sender ! CheckSudokuResponse(sudokuDef, Sudokus.checkSudoku(sudokuDef)) } }

Ein solcher Programmablauf führt zunächst zu einer Reihe von Logausgaben für die aufgetretenen Exceptions. Danach treten Time-outs für Nachrichten auf, die nicht in der erwarteten Zeit beantwortet wurden. Eine nähere Analyse ergibt, dass die Time-outs mit den Exceptions korrelieren. Alle anderen Nachrichten wurden korrekt verarbeitet. Das ist im Grunde genommen ein annehmbares Ergebnis. Immerhin wurde das System durch die Exceptions – die ja letztendlich auf einen Programmierfehler zurückzuführen sind – nicht aus dem Tritt gebracht.

Die Erklärung für das beobachtete Verhalten hängt mit der speziellen Strategie zur Fehlerbehandlung von Aktoren zusammen. Hier gilt nämlich die Devi...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang