Suche
Interview mit Arne Limburg

Reaktive Programmierung: Java EE, Spring 5 oder NodeJS?

Hartmut Schlosser

Arne Limburg

Die Reaktive Programming hat durch NodeJS Fahrt aufgenommen. In der Java-Welt wird Spring 5 mit dem darin enthaltenen Reactive Web Framework frischen Wind in die Reaktive Programmierung bringen. Arne Limburg nimmt sich das Thema Reactive auf dem kommenden Java Enterprise Summit genauer vor. Vorab haben wir mit ihm über die Vorteile der Reaktiven Programmierung, die Unterschiede zwischen NodeJS und Spring 5 und die reaktive Wunschliste für Java EE 9 gesprochen.

JAXenter: Was sind für dich die wichtigsten Gründe, sich in einem Software-Entwicklungsprojekt für die Reaktive Programmierung zu entscheiden?

Es gibt auch gute Gründe, sich gegen Reaktive Programmierung zu entscheiden.

Arne Limburg: Der wichtigste Grund ist sicherlich die Performance. Aber auch Speicherbedarf kann ein Thema sein. Mit Reactive Programming ist es möglich, eine große Menge Objekte aus der Datenbank zu laden und zum Client zu streamen, ohne alle gleichzeitig im Speicher zu haben.

Es gibt aber auch gute Gründe, sich gegen Reaktive Programmierung zu entscheiden. Wartbarkeit ist sicherlich einer davon.

JAXenter: Reaktive Programmierung geht mit NodeJS – mit dem Spring 5 Release auch in Java. Wo liegt der Unterschied zwischen den beiden Ansätzen der Reaktiven Programmierung in Node und Spring?

Arne Limburg: Der entscheidende Unterschied ist das Threading-Modell. In NodeJS wird der gesamte JavaScript-Code in einem Thread ausgeführt. In Java kann man das auch tun, muss es aber nicht. So kann ich z.B. ggf. alle Kerne eines Prozessors mit einem Application-Server ausreizen und muss nicht – wie in NodeJS – mehrere Instanzen starten.

Treffen Sie Arne Limburg auf unseren Konferenzen:

Java Enterprise Summit: 16. bis 18. Oktober | Frankfurt

 

W-JAX 2017: 6. bis 10. November | München

 

Tipp: Bis zum 17. August profitieren Sie noch von den Frühbucher-Aktionen der W-JAX 2017 und des Java Enterprise Summits.

X

JAXenter: Wie reaktiv ist verglichen mit den beiden beschriebenen Ansätzen Java EE?

Arne Limburg: In Java EE gibt es mittlerweile viele Ansätze für Asynchronität. Mit Java EE 8 wird es noch deutlich mehr. Gefühlt liegt der Fokus dabei allerdings auf „mehr Threads“ und nicht auf „weniger Threads“, wobei das natürlich Ansichtssache ist. Die APIs sind jedenfalls alle noch nicht direkt auf Reaktive Programmierung ausgelegt. Spring ist da mit der Verwendung von Project Reactor deutlich weiter. Und in Javascript werden sowieso überall Callbacks verwendet. Ich hoffe, dass das Java-9-Release in der Java-Welt auch abseits von Spring Schwung in das Thema Reactive bringt, mit dem neuen Flow API liefert es jedenfalls die Grundlage.

Lesen Sie auch: Zeitgemäße Webentwicklung – Java EE oder JavaScript?

JAXenter: Bald steht ja das Release von Java EE 8 an. Was ist an dem Release für dich spannend?

Arne Limburg: Die HTTP/2-Unterstützung ist super, aber auch überfällig. Wie gesagt, im gesamten Bereich Asynchronität tut sich eine Menge: asynchrone CDI-Events inkl. CompletionStage, CompletionStage-Support und Server-Sent Events in JAX-RS, WebSockets in JSF, …

JAXenter: Was muss sich in der Enterprise Java-Welt ändern, um die Idee des Reactive Programming richtig umsetzen zu können?

In Java EE wird das Konzept der Thread-Bindung nur halbherzig angegangen.

Arne Limburg: Vor allem müsste die Kopplung eines Requests an einen Thread überarbeitet werden. In Java EE hängt momentan einfach alles am aktuellen Thread: die Scopes, der Security-Context, die Transaktion. Den Security-Context kann man über die Concurrency Utilities mittlerweile immerhin in einen anderen Thread übernehmen. Um in Java EE richtig reaktiv programmieren zu können, müssten die gesamten Kontext-Information am aktuellen Aufruf hängen – unabhängig davon, auf welchem Thread der Aufruf fortgesetzt wird. Es gibt zwar schon eine Menge Ansätze für Asynchronität in Java EE, aber das grundsätzliche Konzept der Thread-Bindung wird nur halbherzig angegangen. Das ist allerdings auch nicht so einfach, weil Abwärtskompatibilität gewahrt werden muss.

JAXenter: Welche Umsetzungen wünscht du dir für Java EE 9?

Arne Limburg: Schön wäre eine reaktive Erweiterung des JDBC-API und ggf. von JPA. NoSQL-Datenbanken sind da schon deutlich weiter.

JAXenter: Vielen Dank für dieses Interview!

Arne Limburg ist Enterprise Architect bei der open knowledge GmbH in Oldenburg. Er verfügt über mehrjährige Erfahrung als Entwickler, Architekt und Trainer im Enterprise- und Microservices-Umfeld. Zu diesen Bereichen spricht er regelmäßig auf Konferenzen und führt Workshops durch. Darüber hinaus ist er im Open-Source-Bereich tätig, unter anderem als PMC Member von Apache OpenWebBeans und Apache DeltaSpike sowie als Urheber und Projektleiter von JPA Security.

X

Mehr zum Thema:

Reaktiv in die Praxis: Reaktive Programmierung mit RxJava

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Hartmut Schlosser ist Redakteur und Online-Koordinator bei Software & Support Media. Seine Spezialgebiete liegen bei Java-Enterprise-Technologien, JavaFX, Eclipse und DevOps. Vor seiner Tätigkeit bei S & S Media studierte er Musik, Informatik, französische Philologie und Ethnologie.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.