Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Next Level JEE - JEE-Anwendungen auf Quarkus migrieren

Next Level JEE - JEE-Anwendungen auf Quarkus migrieren

Präsentation zum gleichnamigen Vortrag

Dirk Weil

May 31, 2022
Tweet

More Decks by Dirk Weil

Other Decks in Programming

Transcript

  1. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Softwareentwicklung, Beratung,

    Konzepte, Reviews GEDOPLAN IT Training Java, JEE, Tools u.v.a.m. in Berlin, Bielefeld, on-site JEE seit 1999 Speaker und Autor 2 gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  2. Enterprise-Anwendungen Programmiermodell Deklarativ (~Annotationen) Dependency Injection Standardisierte Implementierung der Subsysteme

    Laufzeitmodell Klassische Application Server Micro Framework Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 3 gedoplan.de @ApplicationScoped @Path("persons") public class PersonResource { @Inject PersonRepository personRepository; @GET @Produces("application/json") public List<Person> get() { return personRepository.findAll();
  3. Enterprise-Anwendungen Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 4

    gedoplan.de Java EE / Jakarta EE = Application Server = "schwergewichtig"
  4. Der schwergewichtige (?) Application Server 5 Anwendungsklassen Konfigurationsfiles (Deployment Descriptors,

    Properties, …) JEE Server CDI Runtime JPA Runtime REST Runtime Technische Konfiguration * JRE build deploy run * DB-Verbindungen, Messaging Security … Thin WAR klein groß gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren Demo
  5. Die leichtgewichtige (?) Alternative: „Micro“ Framework 6 Anwendungsklassen Konfigurationsfiles *

    CDI Runtime JPA Runtime REST Runtime JRE build run * Anwendungsparameter, DB-Verbindungen, Messaging Security … Fat JAR JAR + Dependencies groß gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  6. Quarkus Red Hats Antwort auf Spring Boot Nachfolger von Thorntail

    (aka WildFly Swarm) Optimiert für kurze Startzeiten Hotspot und GraalVM https://quarkus.io/ 7 gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  7. Quarkus Core + Extensions (= Maven Dependencies) Project Bootstrap mit

    Maven Plugin (oder Gradle) 8 <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</group <artifactId>${quarkus.platform.artifact-id}< <version>${quarkus.platform.version}</versio <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jsonb</artifactId </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> mvn io.quarkus:quarkus-maven-plugin:2.9.2.Final:create \ -DprojectGroupId=de.gedoplan.showcase \ -DprojectArtifactId=quarkus \ -DprojectVersion=1.0-SNAPSHOT \ -Dextensions=quarkus-resteasy-jsonb,… gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  8. Quarkus Maven-Plugin für Build Thin jar und Dependencies in target/quarkus-app

    Anwendungsstart java -jar target/quarkus-app/quarkus-run.jar 9 <plugins> <plugin> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.platform.version}</version> <extensions>true</extensions> <executions> <execution> <goals> <goal>build</goal> <goal>generate-code</goal> <goal>generate-code-tests</goal> gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren Demo
  9. Quarkus Development mode: mvn quarkus:dev Hot reload bei REST/Web-Request falls

    Quellcodeänderung 10 Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] ssq-quarkus 1.0-SNAPSHOT on JVM (powered by Quarkus 2.9.2.Final INFO [io.quarkus] Profile dev activated. Live Coding activated. INFO [io.quarkus] Installed features: [cdi, resteasy, resteasy-jsonb, smallrye-co gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren Demo
  10. JEE  Quarkus JEE-Code bleibt überwiegend unverändert JPA Extensions für

    Hibernate und DB ergänzen statt persistence.xml application.properties Entity- und Repository-Klassen unverändert Producer für EntityManager bereits vorhanden Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 11 gedoplan.de
  11. JEE  Quarkus CDI keine Standard-Implementierung (noch) "Ballast-befreit" Build time

    augmention https://quarkus.io/guides/cdi-reference#supported_features beans.xml wird nicht gelesen! REST Resource-Klassen unverändert Application-Klasse kann entfallen Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 12 gedoplan.de Demo
  12. Dev Services Bereitstellung von (externen) Subsystemen Datenbanken Message Broker Zero

    Configuration Startet Docker Container aka Testcontainers Ausnahme: In-Memory-DBs werden in-process gestartet Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 13 gedoplan.de Demo
  13. Docker Dockerfile beim Bootstrap bereits erzeugt Next Level JEE -

    JEE-Anwendungen auf Quarkus migrieren 14 gedoplan.de mvn package -DskipTests=true docker build \ -f src/main/docker/Dockerfile.jvm \ -t gedoplan-showcase/next-lvl-quarkus:jvm \ . docker run \ -d --rm -p 8080:8080 \ -e DB_HOST=192.168.178.69 \ --name quarkus-jvm \ gedoplan-showcase/next-lvl-quarkus:jvm Demo Name oder Adresse des DB-Hosts einsetzen
  14. Native Graal VM: Erstellung native application target/xyz-runner Nur tatsächlich genutzter

    Code Build auf Non-Linux im Docker Container Startzeit im ms-Bereich, Memory consumption im (kleinen) MB-Bereich 15 gedoplan.de mvn package -Pnative -Dquarkus.native.container-build=true -DskipTests=true … [INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 282527ms Next Level JEE - JEE-Anwendungen auf Quarkus migrieren __ ____ __ _____ ___ __ ____ ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \ --\___\_\____/_/ |_/_/|_/_/|_|\____/___/ INFO [io.quarkus] (main) quarkus 1.0-SNAPSHOT native … started in 0.170s
  15. Test Support Unterstützung für JUnit 5 RestAssured u. a. @QuarkusTest

    Test Runner / Extension Test Profile u. a. anderer HTTP-Port Injektion Alternatives Continuous Testing im Dev Mode 16 @QuarkusTest public class PersonEndpointTest { @Test void testGetAverageAge() { given() .when().get("/api/person/avgAge") .then() .statusCode(200) .body(is("22.0")); gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren Demo
  16. JEE  Quarkus Web src/main/resources/META-INF/resources statt src/main/webapp web.xml in src/main/resources/META-INF

    JSF Extension aus MyFaces noch nicht final (2.3-next) Controller, Facelets etc. unverändert Next Level JEE - JEE-Anwendungen auf Quarkus migrieren 17 gedoplan.de Demo
  17. Weitere Features MicroProfile Health, Metrics, Rest Client, Fault Tolerance, …

    OpenAPI + Swagger UI Websockets Messaging (reactive + imperative) mit AMQP, Kafka, JMS NoSQL Flyway Security mit OpenID, Keycloak, JWT RBAC Spring DI, Web, Data JPA, Security Scheduling Mail … 18 gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  18. Fazit Lightweight Enterprise Java ~ Spring Boot für JEE kaum

    Umdenken notwendig für JEE-Entwickler macht Spaß native Ausführung möglich Richtung: Microservices, Cloud, Serverless 19 gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren
  19. More github.com/GEDOPLAN/next-lvl-jee Demo-Projekte www.gedoplan.de Trainings in Berlin, Bielefeld, inhouse Schnelleinstieg

    in Quarkus Microservices mit Quarkus – kompakt Workshop: Migration von JEE zu Quarkus-(Micro-)Services www.gedoplan.de Reviews, Coaching, … Blog  [email protected] @dirkweil 20 gedoplan.de Next Level JEE - JEE-Anwendungen auf Quarkus migrieren