SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
Schnell, schneller, Quarkus
Expertenkreis Java, GEDOPLAN GmbH
27.08.2020
Dirk Weil
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 1998
Speaker und Autor
2gedoplan.deSchnell, schneller, Quarkus!
Quarkus
Red Hats Antwort auf Spring Boot
Designierter Nachfolger von Thorntail (aka WildFly Swarm)
Optimiert für kurze Startzeiten
Hotspot und GraalVM
https://quarkus.io/
3gedoplan.deSchnell, schneller, Quarkus!
Microprofile Runtimes: Klassische Application Server
4
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.deSchnell, schneller, Quarkus!
Microprofile Runtimes: „Micro“ Frameworks
5
Anwendungsklassen
Konfigurationsfiles *
CDI Runtime
JPA Runtime
REST Runtime
JRE
build
run
* Anwendungsparameter,
DB-Verbindungen,
Messaging
Security
…
Fat JAR
JAR + Dependencies
groß
gedoplan.deSchnell, schneller, Quarkus!
Quarkus
Core
+ Extensions
(= Maven Dependencies)
Project Bootstrap mit
Maven Plugin
(oder Gradle)
6
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bom</artifactId>
<version>${quarkus.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-junit5</artifactId>
<scope>test</scope>
</dependency>mvn io.quarkus:quarkus-maven-plugin:1.7.0.Final:create 
-DprojectGroupId=de.gedoplan.showcase 
-DprojectArtifactId=ssq-quarkus 
-DprojectVersion=1.0-SNAPSHOT 
-Dextensions=quarkus-hibernate-orm,…
gedoplan.deSchnell, schneller, Quarkus!
Quarkus
Maven-Plugin für Build
Thin jar target/quarkus-getting-started-runner.jar
Dependencies in target/lib/
Anwendungsstart
java –jar target/quarkus-getting-started-runner.jar
7
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus.version}</version>
<executions>
<execution>
<goals><goal>build</goal></goals>
</execution>
gedoplan.deSchnell, schneller, Quarkus!
JEE  Quarkus (a.k.a. WAR  JAR)
JEE-Code weitestgehend unverändert nutzbar
RESTful Webservices
CDI
JPA
Konfiguration in application.properties
Schnell, schneller, Quarkus! 8gedoplan.de
Demo
Quarkus
Development mode
Hot reload
bei REST/Web-Request
falls Quellcodeänderung
9
Listening for transport dt_socket at address: 5005
__ ____ __ _____ ___ __ ____ ______
--/ __ / / / / _ | / _ / //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ / 
--________/_/ |_/_/|_/_/|_|____/___/
07:13:51,653 INFO [io.quarkus] (Quarkus Main Thread) ssq-quarkus 1.0-SNAPSHOT on
07:13:51,658 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live
07:13:51,666 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal,
gedoplan.deSchnell, schneller, Quarkus!
Demo
Test Support
Unterstützung für
JUnit 4 / 5
RestAssured
@QuarkusTest
Test Runner / Extension
Test Profile
u. a. anderer HTTP-Port
Injektion
Alternatives
10
@QuarkusTest
public class PersonEndpointTest {
@Test
void testGetCount() {
given()
.when().get("/person/count")
.then()
.statusCode(200)
.body(is("2"));
gedoplan.deSchnell, schneller, Quarkus!
Demo
MicroProfile Metrics
REST Endpoints zur Lieferung von Messdaten
/metrics/{application|base|vendor}/name
Formate: OpenMetrics (Prometheus), JSON
erweiterbar um eigene Messwerte
11
@Counted(name = "personGet", absolute = true)
public List<Person> get() {
@Timed(name = "personPost", absolute = true)
public Response post(Person person, …) {
@Gauge(name = "answerToLifeUniverseAndEverything", absolute = true,
unit = MetricUnits.NONE)
public long getAnswerToLifeUniverseAndEverything() {
return 42;
{
"personPost" : {
"count": 5,
"min": 1670500.0,
"mean": 8909118.276749168,
"max": 3.73522E7,
…
}
gedoplan.deSchnell, schneller, Quarkus!
Demo
Docker
Dockerfile beim Bootstrap bereits erzeugt
Schnell, schneller, Quarkus! 12gedoplan.de
mvn package
docker build -f src/main/docker/Dockerfile.fast-jar 
-t gedoplan-showcase/ssq-quarkus-jvm 
.
docker run 
-d --rm -p 8080:8080 
--name ssq-quarkus-jvm 
gedoplan-showcase/ssq-quarkus-jvm
Demo
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
13gedoplan.de
mvn package -Pnative -Dquarkus.native.container-build=true
…
[ssq-quarkus-1.0-SNAPSHOT-runner:27] image: 8.222,80 ms,
[ssq-quarkus-1.0-SNAPSHOT-runner:27] write: 3.131,64 ms,
[ssq-quarkus-1.0-SNAPSHOT-runner:27] [total]: 270.664,54 ms,
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentat
Schnell, schneller, Quarkus!
__ ____ __ _____ ___ __ ____ ______
--/ __ / / / / _ | / _ / //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ / 
--________/_/ |_/_/|_/_/|_|____/___/
INFO [io.quarkus] (main) ssq-quarkus … started in 0.231s.
Weitere Features
Websockets
OpenAPI + Swagger UI
Messaging (reactive + imperative) mit AMQP, Kafka, JMS
NoSQL
Flyway
Security mit OpenID, Keycloak, JWT RBAC
Spring DI, Web, Data JPA, Security
Scheduling
Mail
JSF
…
14gedoplan.deSchnell, schneller, Quarkus!
Fazit
Lightweight Enterprise Java
~ Spring Boot für JEE
kaum Umdenken notwendig für JEE-Entwickler
macht Spaß
native Ausführung möglich
Richtung: Cloud, serverless (?)
15gedoplan.deSchnell, schneller, Quarkus!
More
github.com/GEDOPLAN/schnell-schneller-quarkus
Demo-Projekte
www.gedoplan-it-training.de
Trainings in Berlin, Bielefeld, inhouse
Microservices mit Quarkus - kompakt
www.gedoplan-it-consulting.de
Reviews, Coaching, …
Blog
 dirk.weil@gedoplan.de
@dirkweil
16gedoplan.deSchnell, schneller, Quarkus!

Weitere ähnliche Inhalte

Ähnlich wie Schnell, schneller, Quarkus!!

Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Andreas Schreiber
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
mh0708
 
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und HadoopLogical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
OPITZ CONSULTING Deutschland
 

Ähnlich wie Schnell, schneller, Quarkus!! (20)

Microservices mit Rust
Microservices mit RustMicroservices mit Rust
Microservices mit Rust
 
MicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative StandardMicroProfile 2.x: Der alternative Standard
MicroProfile 2.x: Der alternative Standard
 
Node.js
Node.jsNode.js
Node.js
 
Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework? Warum empfehle ich meinen Kunden das Spring Framework?
Warum empfehle ich meinen Kunden das Spring Framework?
 
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
Dr. Andreas Lattner - Aufsetzen skalierbarer Prognose- und Analysedienste mit...
 
Webapplikationen mit Node.js
Webapplikationen mit Node.jsWebapplikationen mit Node.js
Webapplikationen mit Node.js
 
Backend-Services mit Rust
Backend-Services mit RustBackend-Services mit Rust
Backend-Services mit Rust
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher SoftwareEinsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
Einsatz von Subversion bei der Entwicklung technisch-wissenschaftlicher Software
 
Production-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 WochenProduction-ready Infrastruktur in 3 Wochen
Production-ready Infrastruktur in 3 Wochen
 
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Lightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPALightweight AOP with CDI and JPA
Lightweight AOP with CDI and JPA
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
 
In-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und KubernetesIn-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und Kubernetes
 
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQLJakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
Jakarta EE 10: Ein erster Blick auf Eclipse JNoSQL
 
Python in der Luft- und Raumfahrt
Python in der Luft- und RaumfahrtPython in der Luft- und Raumfahrt
Python in der Luft- und Raumfahrt
 
Mögen die Tests mit dir sein
Mögen die Tests mit dir seinMögen die Tests mit dir sein
Mögen die Tests mit dir sein
 
Best Practices für TDD in JavaScript
Best Practices für TDD in JavaScriptBest Practices für TDD in JavaScript
Best Practices für TDD in JavaScript
 
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und HadoopLogical Data Warehouse - SQL mit Oracle DB und Hadoop
Logical Data Warehouse - SQL mit Oracle DB und Hadoop
 

Schnell, schneller, Quarkus!!

  • 1. Schnell, schneller, Quarkus Expertenkreis Java, GEDOPLAN GmbH 27.08.2020 Dirk Weil
  • 2. 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 1998 Speaker und Autor 2gedoplan.deSchnell, schneller, Quarkus!
  • 3. Quarkus Red Hats Antwort auf Spring Boot Designierter Nachfolger von Thorntail (aka WildFly Swarm) Optimiert für kurze Startzeiten Hotspot und GraalVM https://quarkus.io/ 3gedoplan.deSchnell, schneller, Quarkus!
  • 4. Microprofile Runtimes: Klassische Application Server 4 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.deSchnell, schneller, Quarkus!
  • 5. Microprofile Runtimes: „Micro“ Frameworks 5 Anwendungsklassen Konfigurationsfiles * CDI Runtime JPA Runtime REST Runtime JRE build run * Anwendungsparameter, DB-Verbindungen, Messaging Security … Fat JAR JAR + Dependencies groß gedoplan.deSchnell, schneller, Quarkus!
  • 6. Quarkus Core + Extensions (= Maven Dependencies) Project Bootstrap mit Maven Plugin (oder Gradle) 6 <dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-bom</artifactId> <version>${quarkus.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency>mvn io.quarkus:quarkus-maven-plugin:1.7.0.Final:create -DprojectGroupId=de.gedoplan.showcase -DprojectArtifactId=ssq-quarkus -DprojectVersion=1.0-SNAPSHOT -Dextensions=quarkus-hibernate-orm,… gedoplan.deSchnell, schneller, Quarkus!
  • 7. Quarkus Maven-Plugin für Build Thin jar target/quarkus-getting-started-runner.jar Dependencies in target/lib/ Anwendungsstart java –jar target/quarkus-getting-started-runner.jar 7 <plugins> <plugin> <groupId>io.quarkus</groupId> <artifactId>quarkus-maven-plugin</artifactId> <version>${quarkus.version}</version> <executions> <execution> <goals><goal>build</goal></goals> </execution> gedoplan.deSchnell, schneller, Quarkus!
  • 8. JEE  Quarkus (a.k.a. WAR  JAR) JEE-Code weitestgehend unverändert nutzbar RESTful Webservices CDI JPA Konfiguration in application.properties Schnell, schneller, Quarkus! 8gedoplan.de Demo
  • 9. Quarkus Development mode Hot reload bei REST/Web-Request falls Quellcodeänderung 9 Listening for transport dt_socket at address: 5005 __ ____ __ _____ ___ __ ____ ______ --/ __ / / / / _ | / _ / //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ / --________/_/ |_/_/|_/_/|_|____/___/ 07:13:51,653 INFO [io.quarkus] (Quarkus Main Thread) ssq-quarkus 1.0-SNAPSHOT on 07:13:51,658 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live 07:13:51,666 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, gedoplan.deSchnell, schneller, Quarkus! Demo
  • 10. Test Support Unterstützung für JUnit 4 / 5 RestAssured @QuarkusTest Test Runner / Extension Test Profile u. a. anderer HTTP-Port Injektion Alternatives 10 @QuarkusTest public class PersonEndpointTest { @Test void testGetCount() { given() .when().get("/person/count") .then() .statusCode(200) .body(is("2")); gedoplan.deSchnell, schneller, Quarkus! Demo
  • 11. MicroProfile Metrics REST Endpoints zur Lieferung von Messdaten /metrics/{application|base|vendor}/name Formate: OpenMetrics (Prometheus), JSON erweiterbar um eigene Messwerte 11 @Counted(name = "personGet", absolute = true) public List<Person> get() { @Timed(name = "personPost", absolute = true) public Response post(Person person, …) { @Gauge(name = "answerToLifeUniverseAndEverything", absolute = true, unit = MetricUnits.NONE) public long getAnswerToLifeUniverseAndEverything() { return 42; { "personPost" : { "count": 5, "min": 1670500.0, "mean": 8909118.276749168, "max": 3.73522E7, … } gedoplan.deSchnell, schneller, Quarkus! Demo
  • 12. Docker Dockerfile beim Bootstrap bereits erzeugt Schnell, schneller, Quarkus! 12gedoplan.de mvn package docker build -f src/main/docker/Dockerfile.fast-jar -t gedoplan-showcase/ssq-quarkus-jvm . docker run -d --rm -p 8080:8080 --name ssq-quarkus-jvm gedoplan-showcase/ssq-quarkus-jvm Demo
  • 13. 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 13gedoplan.de mvn package -Pnative -Dquarkus.native.container-build=true … [ssq-quarkus-1.0-SNAPSHOT-runner:27] image: 8.222,80 ms, [ssq-quarkus-1.0-SNAPSHOT-runner:27] write: 3.131,64 ms, [ssq-quarkus-1.0-SNAPSHOT-runner:27] [total]: 270.664,54 ms, [INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentat Schnell, schneller, Quarkus! __ ____ __ _____ ___ __ ____ ______ --/ __ / / / / _ | / _ / //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ / --________/_/ |_/_/|_/_/|_|____/___/ INFO [io.quarkus] (main) ssq-quarkus … started in 0.231s.
  • 14. Weitere Features Websockets OpenAPI + Swagger UI Messaging (reactive + imperative) mit AMQP, Kafka, JMS NoSQL Flyway Security mit OpenID, Keycloak, JWT RBAC Spring DI, Web, Data JPA, Security Scheduling Mail JSF … 14gedoplan.deSchnell, schneller, Quarkus!
  • 15. Fazit Lightweight Enterprise Java ~ Spring Boot für JEE kaum Umdenken notwendig für JEE-Entwickler macht Spaß native Ausführung möglich Richtung: Cloud, serverless (?) 15gedoplan.deSchnell, schneller, Quarkus!
  • 16. More github.com/GEDOPLAN/schnell-schneller-quarkus Demo-Projekte www.gedoplan-it-training.de Trainings in Berlin, Bielefeld, inhouse Microservices mit Quarkus - kompakt www.gedoplan-it-consulting.de Reviews, Coaching, … Blog  dirk.weil@gedoplan.de @dirkweil 16gedoplan.deSchnell, schneller, Quarkus!