Event-driven, non-blocking, polyglot

Reaktiv auf der JVM: Java-Framework Vert.x 3.7 unterstützt GraphQL

Hartmut Schlosser

© Shutterstock / martinho Smart

 

Eclipse Vert.x 3.7 ist erschienen. Das ereignisorientierte Framework wartet mit einer wichtigen Neuerung auf: Ab sofort wird die Abfragesprache GraphQL unterstützt. Was hat sich sonst noch getan?

Vert.x im Jahr 2019

Etwas ruhiger scheint es in den letzten Monaten um das Java Framework Vert.x geworden zu sein. Der Gewinner der JAX Innovation Awards 2014 hatte die Java-Szene als eines der ersten reaktiven Aktoren-Frameworks im Erlang-Stil beeindruckt und galt vielen als das bessere Node für die JVM. Mittlerweile hat Vert.x auf der JVM Konkurrenz von anderen reaktiven Frameworks wie Akka erhalten.

Doch jetzt macht Vert.x mit einer neuen Version auf sich aufmerksam, die unterstreicht, dass noch mächtig Leben in der Bude ist: Vert.x 3.7 kommt mit einer neuen GraphQL Extension daher und ebnet den Weg hin zu Vert.x 4.0.

Neu in Vert.x 3.7

Das Highlight in Vert.x 3.7 ist die Unterstützung der von Facebook initiierten Query Language GraphQL. Die Erweiterung Vert.x Web GraphQL integriert eine neue GraphQL Java-Library, mit der sich komplette GraphQL Server aufbauen lassen. Der GraphQL Handler unterstützt dabei die individuelle Anpassung des Query-Kontexts, GraphQL Java-Data-Loader und POST-Request-Batching nach dem apollo-link-batch-http Transport-Modell.

Neu in Vert.x 3.7 ist zudem die Unterstützung des cassandra-driver-mapping-Moduls im Vert.x Cassandra Client. Um dieses Feature zu aktivieren, muss lediglich der Classpath angepasst werden:

<dependency>

<groupId>com.datastax.cassandra</groupId>

<artifactId>cassandra-driver-mapping</artifactId>

<version>3.7.1</version>

</dependency>

Danach können für beliebige Entities Mapper erstellt und CRUD-Operationen ausgeführt werden. Das folgende Codefragment vom Vert.x-Blog zeigt das Feature in Aktion:

@Table(keyspace = "test", name = "users")

class User {

@PartitionKey String name;

// ... other fields and methods

}


VertxMappingManager manager = VertxMappingManager.create(cassandraClient);

VertxMapper<User> mapper = manager.mapper(User.class, vertx);

mapper.save(new User("john", hander -> {}));

Zu den weiteren Neuerungen in Vert.x 3.7 gehören ein überarbeiteter Redis Client mit einem neuen API, die Möglichkeit, über den Vert.x AMQP Client AMQP-Nachrichten zu empfangen und zu senden, sowie JSON Decoding ohne vorherige Angabe der Datenstruktur.

Was ist Vert.x?

Vert.x ist ein Anwendungs-Framework für die Java-Plattform, das stark vom Erlang-Aktorenkonzept beeinflusst ist. Es ist ereignisorientiert, nicht-blockierend und auf nebenläufiges Programmieren ausgelegt. Seine wichtigsten Merkmale sind das eventbasierte Programmiermodell, der verteilte EventBus und ein polyglottes API, das eine Vielzahl von Sprachen wie Scala, Kotlin, Python, Ruby, JavaScript direkt unterstützt.

Im Zentrum steht ein verteilter EventBus, bei dem an die Stelle synchroner Serviceaufrufe das Schicken von Events und das Registrieren von Handlern für die asynchrone Antwort tritt. Vert.x-Experte Michael Omann ordnet das Framework im JAXenter-Interview folgendermaßen ein:

In klassischen Architekturen, insbesondere im JEE-Bereich, steht die synchrone Kommunikation und das „Thread-per-Request”-Modell im Vordergrund. Eine effiziente Umsetzbarkeit von asynchroner Kommunikation und Nebenläufigkeit ist häufig nicht gegeben. Zwar gibt es heute eine Reihe von Techniken und Bibliotheken, die sich komplementär einsetzen lassen, um die Skalierbarkeit oder Robustheit zu verbessern; das zugrunde liegende Problem der ineffizienten Ressourcenverwaltung lösen sie aber nicht.

In reaktiven Toolkits wie Vert.x oder Akka sind diese Eigenschaften der Standard. Entsprechend bemühen sich die Toolkits auch, die richtigen Abstraktionen für den Entwickler bereitzustellen. Vert.x ist leichtgewichtig, sehr flexibel, einfach erweiterbar und integriert sich gut in bestehende Anwendungen. Vor allem ist Vert.x “unvoreingenommen”. Es zwingt uns Entwicklern kein bestimmtes Programmiermodell auf. Man kann das Toolkit für seinen jeweiligen Anwendungsfall zuschneiden.

Vert.x wurde 2011 von Tim Fox bei VMware entworfen und ist seit 2013 offizielles Eclipse-Projekt. Es steht quelloffen unter der Apache 2.0-Lizenz zur Verfügung.

Vert.x 4.0 in Sicht

Vert.x 3.7 ist das letzte Minor-Release vor der Version 4.0. In Vert.x 4.0 stehen dann größere Umbauten an, die auch Breaking Changes enthalten können. Geplant ist beispielsweise die Erweiterung des asynchronen Programmiermodells um CompletionStage als Alternative zum derzeitigen Callback-Modus.

Ein Veröffentlichungsdatum für Vert.x 4.0 ist noch nicht bekannt. Die offizielle Roadmap gibt Details zu den anstehenden Veränderungen. Eine gute Einführung in Vert.x in Relation zu ähnlichen reaktiven Frameworks bietet der Artikel „Reaktive Programmiermodelle im Vergleich“ von Oliver Heger.

 

Reaktive Programmiermodelle im Vergleich

 

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Content-Stratege, IT-Redakteur, Storyteller – als Online-Teamlead bei S&S Media ist Hartmut Schlosser immer auf der Suche nach der Geschichte hinter der News. SEO und KPIs isst er zum Frühstück. Satt machen ihn kreative Aktionen, die den Leser bewegen. @hschlosser
Kommentare

Hinterlasse einen Kommentar

1 Kommentar auf "Reaktiv auf der JVM: Java-Framework Vert.x 3.7 unterstützt GraphQL"

avatar
4000
  Subscribe  
Benachrichtige mich zu:
Entwickler
Gast

‚[…] steht die synchrone Kommunikation und das „Thread-per-Request”-Modell im Vordergrund. […] Umsetzbarkeit von asynchroner Kommunikation und Nebenläufigkeit ist häufig nicht gegeben.‘

Die Antwort heißt Loom. Fibers ermöglichen weiterhin synchrone Programmierung ohne Blockierung von Kernel-Threads fast zum Null-Tarif.
https://openjdk.java.net/projects/loom/