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.deMicroprofile-Anwendungen mit Quarkus - reloaded
3. Quarkus recap
JEE + MicroProfile + diverse Ergänzungen
Spring-Boot-Alternative
Dev Mode
Hotspot VM und native
https://quarkus.io/
3gedoplan.deMicroprofile-Anwendungen mit Quarkus - reloaded
4. Quarkus recap
Jakarta EE 8
Jakarta Persistence (aka JPA) mit Hibernate
Autoconfiguration für H2, PostgreSQL, MariaDB, MySQL,
MS SQL, Derby
CDI
Implementierung ARC mit limitiertem Support
Jakarta RESTful Web Services (aka JAX-RS)
RESTeasy mit JsonB-Support
Servlet
Undertow
TX
4gedoplan.deMicroprofile-Anwendungen mit Quarkus - reloaded
6. MicroProfile Fault Tolerance
Interceptors für Resilience
@Retry wiederholt Aufruf bei Fehler (=Exception)
@Timeout bricht langsame Aufrufe ab
@Fallback liefert Ersatzwert
6
@Retry(maxRetries = 4)
public int doSomethingWithRetry() {
@Timeout(1000)
public int doSomethingWithTimeout() {
private int return42() {
return 42;
}
@Fallback(fallbackMethod = "return42")
public int doSomethingWithFallback() {
gedoplan.deMicroprofile-Anwendungen mit Quarkus - reloaded
7. MicroProfile Fault Tolerance
Interceptors für Resilience
@CircuitBreaker unterdrückt Aufrufe bei hoher Fehlerrate
7
@CircuitBreaker(failureRatio = 0.25, requestVolumeThreshold = 10)
public int doSomethingWithCircuitBreaker() {
Demo
quarkus-fault-tolerance
closed open
half-open
zu viele
Fehler
ok
Delay
Fehler
gedoplan.deMicroprofile-Anwendungen mit Quarkus - reloaded
8. MicroProfile OpenTracing
Aufrufverfolgung
Zero Config für Rest Endpoints und MP Rest Clients
@Traced Interceptor Binding
Jaeger:
Trace Collection + UI
8gedoplan.de
@Traced
public String getPing() {
Demo
quarkus-opentracing
Microprofile-Anwendungen mit Quarkus - reloaded
10. (MicroProfile Reactive) Messaging
Einbindung von Message Brokern (Artemis, Kafka)
10gedoplan.de
@Inject @Channel("posted-person")
Emitter<Person> emitter;
…
this.emitter.send(person);
mp.messaging.outgoing.posted-person.connector=smallrye-kafka
mp.messaging.outgoing.posted-person.topic=person
mp.messaging.incoming.received-person.connector=smallrye-kafka
mp.messaging.incoming.received-person.topic=person
@Incoming("received-person")
public void onReceive(Person person) {
this.log.debug("onReceive(" + person + ")");
Microprofile-Anwendungen mit Quarkus - reloaded
11. MicroProfile OpenAPI / Swagger
Endpoint /openapi
(konfigurierbar)
API-Beschreibung kann
mit Annotationen angereichert
werden:
11gedoplan.de
$ curl http://localhost:8080/openapi
---
openapi: 3.0.1
info:
title: Generated API
version: "1.0"
paths:
/person:
get:
summary: Get all persons
responses:
"200":
description: OK
@GET
@Path("{id}")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Operation(summary = "Get a person")
@APIResponse(description = "Found person (JSON/XML)")
@APIResponse(responseCode = "404", description = "Person not found")
public Person getById(@PathParam("id") Integer id) {
Microprofile-Anwendungen mit Quarkus - reloaded
12. MicroProfile OpenAPI / Swagger
Swagger-UI unter /swagger-ui (konfigurierbar)
12gedoplan.de
Demo
quarkus-rest-cdi-jpa
Microprofile-Anwendungen mit Quarkus - reloaded
13. Native
Graal VM: Erstellung native application target/xyz-runner
Nur tatsächlich genutzter Code
Achtung: Reflection
Build auf Non-Linux im Docker Container
Startzeit im ms-Bereich, Memory consumption im MB-Bereich
13gedoplan.de
$ mvn -Pnative,docker
…
[INFO] docker run -v //c/GEDOPLAN/projects/gedoplan/showcase/quarkus-demo/q
[quarkus-getting-started-runner:22] classlist: 4,939.89 ms
…
[quarkus-getting-started-runner:22] write: 576.45 ms
[quarkus-getting-started-runner:22] [total]: 121,756.96 ms
[INFO] Quarkus augmentation completed in 126125ms
…
[INFO] DOCKER> [docker.gedoplan.de/showcase/quarkus-getting-started:latest]
Microprofile-Anwendungen mit Quarkus - reloaded
14. MyFaces
https://github.com/apache/myfaces/tree/master/extensions/quarkus
Work in progress!
View Files in src/main/resources/META-INF/resources
Alle Scopes mit Ausnahme von @ConversationScoped
Weitere Libraries:
https://github.com/rmpestano/quarkus-omnifaces
https://github.com/adminfaces/quarkus-admin-starter
14gedoplan.de
Demo
quarkus-myfaces
Microprofile-Anwendungen mit Quarkus - reloaded