Adam Bien Selbstständig

Java EE 8 ist keine Revolution, vielmehr bringt die neue Spezifikation eine Reihe von interessanten Erweiterungen mit sich.

In den letzten Ausgaben haben wir eine hochkomplexe Anwendung, einen Taschenrechner mit teilweise implementierten Grundrechenarten, mit möglichst viel Java EE 7 implementiert. Kaum wurde die Anwendung fertiggestellt, schon steht eine Migration an. Was genau ist bei einer Migration eines Microservice auf Java EE 8 zu berücksichtigen?

In den letzten Ausgaben haben wir eine hochkomplexe Anwendung, einen Taschenrechner mit teilweise implementierten Grundrechenarten, mit möglichst viel Java EE 7 implementiert. Kaum wurde die Anwendung fertiggestellt, schon steht eine Migration an. Was genau ist bei einer Migration eines Microservice auf Java EE 8 zu berücksichtigen?

Artikelserie

  • Teil 1: Microservices mit Java EE
  • Teil 2: Microservices mit Java EE, Application Server und Docker
  • Teil 3: Microservices mit Java EE, Fehlerbehandlung und Konfiguration
  • Teil 4: Java EE Microservices überwachen
  • Teil 5: Java EE Microservices anwendungsbezogen überwachen
  • Teil 6: Java EE und Microservices mit einem Dashboard überwachen
  • Teil 7: Microservices auf Java EE 8 migrieren

Für die Verwendung von Java EE 8 API muss jedoch die Version im Maven pom.xml angepasst werden:

<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<version>8.0</version>
<scope>provided</scope>
</dependency>

Das Java EE 8 API kommt als eine provided-Abhängigkeit, das heißt, sie wird nicht mit ins WAR aufgenommen, sondern kommt lediglich zum Einsatz, um die Anwendung zu kompilieren. Nach einem mvn package und etwa drei Sekunden später ist die Anwendung migriert. Somit gestaltet sich eine Migration ähnlich einfach wie von Java EE 6 nach Java EE 7.

Bisher haben wir den TomEE-Applikationsserver verwendet. TomEE hat uns gut gedient, allerdings implementiert TomEE die Java-EE-8-Spezifikation (noch) nicht vollständig. GlassFish v5 ist die Java-EE-8-Referenzimplementierung, und so unterstützt dieser Server naturgemäß die Java-EE-8-Spezifikation vollständig. Auch Payara 5, eine gepatchte GlassFish v5 und OpenLiberty, die Open-Source-Nanovariante des IBM WebSphere, sind interessante Alternativen mit gutem Java-EE-8-API-Support.

Wir entscheiden uns für die Referenzimplementierung, und so wird das TomEE Docker Base Image aus
Docklands mit dem GlassFish v5 ausgetauscht und die Anwendung neu gebaut. Ein Full-Profile-Applikationsserver bringt kaum Laufzeitnachteile im Vergleich zu den Micro- und Web-Profile-Varianten mit sich. Daher werden wir die Full-Profile-GlassFish-v5-Variante (aus Docklands) in unserem Beispiel verwenden:

FROM airhacks/tomee
FROM airhacks/glassfish
COPY ./target/calculator.war ${DEPLOYMENT_DIR}

Mit der Änderung des Dockerfile und einem docker build ist eine Java-EE-8-Version des Taschenrechners einsatzbereit: calculator/mvn clean install && docker build -t airhacks/calculator. Da es sich bei unserem Microservice um ein 29 kB Thin WAR handelt, dauert der Docker-build-Vorgang nur etwa 150 ms, das vollständige mvn clean install etwa zwei Sekunden. Dank Java EE 8 und des Thin-WAR-Ansatzes werden auch Dockerimages komplexerer Microservices in wenigen Sekunden aus dem Sourcecode erstellt.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 4.18 - "Security First"

Alle Infos zum Heft
579830798Microservices auf Java EE 8 migrieren
X
- Gib Deinen Standort ein -
- or -