SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
JEE und Micro – kein Widerspruch!
Expertenkreis Java, GEDOPLAN GmbH
26.06.2019
Dirk Weil
Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Consulting, coaching, concepts, reviews, development
GEDOPLAN IT Training & partner
Java, JEE, tools trainings in Berlin, Bielefeld, Köln, on-site
JEE since 1998
Speaker and author
2gedoplan.deJEE und Micro - kein Widerspruch!
3gedoplan.de
Monolith  Microservices
JVM
JEE Server
Web
Shop
Acc
oun
ting
Logi
stics
JVM
Ser-
ver
Web
Shop
Logis
tics
JVM
Ser-
ver
Acc-
oun-
ting
JVM
Ser-
ver
JVM
Ser-
ver
Cata
-log
JVM
Ser-
ver
Or-
der
JVM
Ser-
ver
Pay-
ment
Stock
JVM
Ser-
ver
Car-
rier
JVM
Ser-
ver
Bil-
ling
JVM
Ser-
ver
Tax
JVM
Ser-
ver
JEE und Micro - kein Widerspruch!
JEE
4gedoplan.de
„So neue Sachen kannste mit Java EE nicht machen!“
JS UI
REST
Leichtgewichtig
Monitoring
Health
JEE und Micro - kein Widerspruch!
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.deJEE und Micro - kein Widerspruch!
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.deJEE und Micro - kein Widerspruch!
Vergleichanwendung
https://github.com/GEDOPLAN/micro-comparison
REST-Service mit Persistenz
JPA + CDI/Spring + JAX-RS/Spring Web
lauffähig als WAR bzw. Fat JAR oder Docker Image
Implementierungsvarianten
klassisches WAR für WildFly (und andere JEE-Server)
Spring Boot
Quarkus
KumuluzEE
7gedoplan.deJEE und Micro - kein Widerspruch!
Kandidaten
WildFly 16.0.0
klassischer Application Server
JEE 8 + MicroProfile 2.2
mittels Galleon provisionierbar
Spring Boot 1.5.16
populäre Alternative
zu Java EE
Runtime wird durch Dependencies kombiniert
große Vielfalt an 3rd-Party-Anbindungen
Autokonfiguration
nutzt viele JEE-Anteile
8gedoplan.deJEE und Micro - kein Widerspruch!
Kandidaten
KumuluzEE
kombiniert Runtime aus
JEE-Dependencies
Jetty, Weld, Jersey, Hibernate, …
Anwendungscode ist 100% Standard-JEE
Quarkus
kombiniert Runtime aus
JEE-Dependencies
spezieller CDI-Container ARC
Subset von CDI 2.0
Optimierung schon zur Build-Zeit
Hot Reloading im Dev-Modus
9gedoplan.deJEE und Micro - kein Widerspruch!
„Gewicht“: Anwendungscode
z. B. Persistenz
10gedoplan.de
@ApplicationScoped
@Transactional(rollbackOn = Exception.class)
public class PersonRepository extends SingleIdEntityRepository<Integer, Person> {
public List<Person> findByName(String name) {
return findMultiByProperty(Person_.name, name);
}
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public interface PersonRepository extends CrudRepository<Person, Integer> {
public List<Person> findByName(String name);
}
JEE und Micro - kein Widerspruch!
„Gewicht“: Anwendungscode
z. B. REST-Endpunkt
11gedoplan.de
@ApplicationScoped
@Path("person")
public class PersonResource {
@Inject
PersonRepository personRepository;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Person> getAll() {
return personRepository.findAll();
}
@RestController
@RequestMapping("/person")
public class PersonResource {
@Autowired
private PersonRepository personRepository;
@RequestMapping
public Iterable<Person> getAll() {
return personRepository.findAll();
}
JEE und Micro - kein Widerspruch!
„Gewicht“: Build
12gedoplan.de
WAR
Spring Boot
KumuluzEE
Quarkus
0
1
1
1
1
4
7
3
POM-Komplexität
Dependencies Plugins
WAR
Spring Boot
KumuluzEE
Quarkus
4,8 s
8,5 s
12,7 s
4,8 s
4,6 s
5,5 s
8,5 s
Build-Zeiten
mvn clean package dito, -Pfatjar
WAR
Spring Boot
KumuluzEE
Quarkus
30.692 kB
28.252 kB
25.192 kB
404 kB
12 kB
12 kB
Größe der Build-Ergebnisse
Thin WAR / Slim JAR Fat JAR
JEE und Micro - kein Widerspruch!
„Gewicht“: Laufzeit
13gedoplan.de
0,0 s 1,0 s 2,0 s 3,0 s 4,0 s 5,0 s 6,0 s
WAR
Spring Boot
KumuluzEE
Quarkus
Startzeit
Server Anwendung Reload
0 MB 50 MB 100 MB 150 MB 200 MB 250 MB
WAR
Spring Boot
KumuluzEE
Quarkus
Memory
Non-Heap Heap
JEE und Micro - kein Widerspruch!
Test
Arquillian
De-facto-Standard für JEE-Tests
Server Lifecycle, Deployment, Test
komplex
Auswahl und Konfiguration der Zielumgebung
Zusammenstellung des Deployments
Im Demo-Projekt für WildFly und KumuluzEE genutzt
@SpringBootTest: Spring-eigener Test Runner
Server Lifecycle, Test
einfach
@QuarkusTest: Quarkus-Pendent zu @SpringBootTest
14gedoplan.deJEE und Micro - kein Widerspruch!
Test
15gedoplan.de
WAR
Spring Boot
KumuluzEE
Quarkus
9,3 s
19,0 s
9,6 s
31,4 s
12,0 s
Testausführungszeit
Self-contained mit laufendem Server
JEE und Micro - kein Widerspruch!
Betriebsmodell
„Server mit Deployment, Server eingebettet –
ist das nicht zukünftig eh egal?“
Container
OS
+ JVM
+ Server?
+ Anwendung
16gedoplan.de
1.168 MB
1.038 MB
1.020 MB
962 MB
328 MB
235 MB
238 MB
231 MB
WAR
Spring Boot
KumuluzEE
Quarkus
Image Size Memory lt. top im Container
JEE und Micro - kein Widerspruch!
Health Monitoring, Metrics
MicroProfile Health
https://javaeeblog.wordpress.com/2019/01/27/alles-gesund-
health-checking-mit-microprofile-health/
MicroProfile Metrics
https://javaeeblog.wordpress.com/2019/03/15/wie-laeufts-
denn-so-monitoring-mit-microprofile-metrics/
17gedoplan.deJEE und Micro - kein Widerspruch!
Fazit
Micro-Frameworks auch für JEE verfügbar
Anwendungscode von JEE und Spring Boot sehr ähnlich
Projekt-Setup für klassische JEE-Anwendung einfacher
aber: Server notwendig
Entwicklungs-Zeiten für JEE und Micro vergleichbar kurz
klassische Deployzeiten vergleichbar mit Hot Reload
Footprint von Micro-Frameworks kleiner
insb. Quarkus durch Build-Time-Optimierung
Testen im klassischen JEE-Umfeld zu kompliziert
Spring Boot und Quarkus richtungsweisend
Server separat oder embedded tritt in den Hintergrund
18gedoplan.deJEE und Micro - kein Widerspruch!
Fazit
JEE und Micro - kein Widerspruch! 19gedoplan.de
„… kannste sehr wohl machen!“
Ausblick
Quarkus (u. a.) bietet
Compile in Maschinencode (GraalVM)
 Startzeiten im ms-Bereich
 Cloud, ggf. serverless
Reactive Programming
non-blocking
asychron
abstraktes Producer/Consumer-Konzept
20gedoplan.deJEE und Micro - kein Widerspruch!
More
github.com/GEDOPLAN/micro-comparison
Demo project
www.gedoplan-it-training.de
Trainings in Berlin, Bielefeld, inhouse
neu: JEE Microservice Foundation
neu: Java DevOps: Development und
Delivery mit Docker und Kubernetes
www.gedoplan-it-consulting.de
Reviews, Coaching, …
Blog
 dirk.weil@gedoplan.de
@dirkweil
21gedoplan.deJEE und Micro - kein Widerspruch!

Weitere ähnliche Inhalte

Ähnlich wie JEE und Micro – kein Widerspruch!

Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
guestc44b7b
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Ralf Sigmund
 

Ähnlich wie JEE und Micro – kein Widerspruch! (20)

Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
Arquillian
ArquillianArquillian
Arquillian
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
 
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsBASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
BASTA Spring 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Zehn Jahre JPA – Architekturkonzepte und Best Practices revisited
Zehn Jahre JPA – Architekturkonzepte und Best Practices revisitedZehn Jahre JPA – Architekturkonzepte und Best Practices revisited
Zehn Jahre JPA – Architekturkonzepte und Best Practices revisited
 
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
Wjax integrationsprojekte auf dem weg zur continuous delivery 2011 11-10
 
Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020Agile Oracle database modeling and development - APEX Connect 2020
Agile Oracle database modeling and development - APEX Connect 2020
 
Die Java Plattform Strategie
Die Java Plattform StrategieDie Java Plattform Strategie
Die Java Plattform Strategie
 
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer JungOSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
OSMC 2010 | Java Monitoring und Troubleshooting by Rainer Jung
 
20110119 activiti jughh
20110119 activiti jughh20110119 activiti jughh
20110119 activiti jughh
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOpsDWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
DWX 2022 - Top 10 Best-Practices für YAML-Pipelines in Azure DevOps
 
Ü̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und GradleÜ̈ber Ant und Maven zu SBT und Gradle
Ü̈ber Ant und Maven zu SBT und Gradle
 
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemachtJava EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
Java EE 6/7 - Enterprise-Anwendungsentwicklung leicht gemacht
 
Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus Microprofile-Anwendungen mit Quarkus
Microprofile-Anwendungen mit Quarkus
 
Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!Der Application Server ist tot (?) - es lebe Jakarta EE!
Der Application Server ist tot (?) - es lebe Jakarta EE!
 
Crowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performanceCrowdcode hitchhikers guide to java performance
Crowdcode hitchhikers guide to java performance
 

JEE und Micro – kein Widerspruch!

  • 1. JEE und Micro – kein Widerspruch! Expertenkreis Java, GEDOPLAN GmbH 26.06.2019 Dirk Weil
  • 2. Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Consulting, coaching, concepts, reviews, development GEDOPLAN IT Training & partner Java, JEE, tools trainings in Berlin, Bielefeld, Köln, on-site JEE since 1998 Speaker and author 2gedoplan.deJEE und Micro - kein Widerspruch!
  • 3. 3gedoplan.de Monolith  Microservices JVM JEE Server Web Shop Acc oun ting Logi stics JVM Ser- ver Web Shop Logis tics JVM Ser- ver Acc- oun- ting JVM Ser- ver JVM Ser- ver Cata -log JVM Ser- ver Or- der JVM Ser- ver Pay- ment Stock JVM Ser- ver Car- rier JVM Ser- ver Bil- ling JVM Ser- ver Tax JVM Ser- ver JEE und Micro - kein Widerspruch!
  • 4. JEE 4gedoplan.de „So neue Sachen kannste mit Java EE nicht machen!“ JS UI REST Leichtgewichtig Monitoring Health JEE und Micro - kein Widerspruch!
  • 5. 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.deJEE und Micro - kein Widerspruch!
  • 6. 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.deJEE und Micro - kein Widerspruch!
  • 7. Vergleichanwendung https://github.com/GEDOPLAN/micro-comparison REST-Service mit Persistenz JPA + CDI/Spring + JAX-RS/Spring Web lauffähig als WAR bzw. Fat JAR oder Docker Image Implementierungsvarianten klassisches WAR für WildFly (und andere JEE-Server) Spring Boot Quarkus KumuluzEE 7gedoplan.deJEE und Micro - kein Widerspruch!
  • 8. Kandidaten WildFly 16.0.0 klassischer Application Server JEE 8 + MicroProfile 2.2 mittels Galleon provisionierbar Spring Boot 1.5.16 populäre Alternative zu Java EE Runtime wird durch Dependencies kombiniert große Vielfalt an 3rd-Party-Anbindungen Autokonfiguration nutzt viele JEE-Anteile 8gedoplan.deJEE und Micro - kein Widerspruch!
  • 9. Kandidaten KumuluzEE kombiniert Runtime aus JEE-Dependencies Jetty, Weld, Jersey, Hibernate, … Anwendungscode ist 100% Standard-JEE Quarkus kombiniert Runtime aus JEE-Dependencies spezieller CDI-Container ARC Subset von CDI 2.0 Optimierung schon zur Build-Zeit Hot Reloading im Dev-Modus 9gedoplan.deJEE und Micro - kein Widerspruch!
  • 10. „Gewicht“: Anwendungscode z. B. Persistenz 10gedoplan.de @ApplicationScoped @Transactional(rollbackOn = Exception.class) public class PersonRepository extends SingleIdEntityRepository<Integer, Person> { public List<Person> findByName(String name) { return findMultiByProperty(Person_.name, name); } @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public interface PersonRepository extends CrudRepository<Person, Integer> { public List<Person> findByName(String name); } JEE und Micro - kein Widerspruch!
  • 11. „Gewicht“: Anwendungscode z. B. REST-Endpunkt 11gedoplan.de @ApplicationScoped @Path("person") public class PersonResource { @Inject PersonRepository personRepository; @GET @Produces(MediaType.APPLICATION_JSON) public List<Person> getAll() { return personRepository.findAll(); } @RestController @RequestMapping("/person") public class PersonResource { @Autowired private PersonRepository personRepository; @RequestMapping public Iterable<Person> getAll() { return personRepository.findAll(); } JEE und Micro - kein Widerspruch!
  • 12. „Gewicht“: Build 12gedoplan.de WAR Spring Boot KumuluzEE Quarkus 0 1 1 1 1 4 7 3 POM-Komplexität Dependencies Plugins WAR Spring Boot KumuluzEE Quarkus 4,8 s 8,5 s 12,7 s 4,8 s 4,6 s 5,5 s 8,5 s Build-Zeiten mvn clean package dito, -Pfatjar WAR Spring Boot KumuluzEE Quarkus 30.692 kB 28.252 kB 25.192 kB 404 kB 12 kB 12 kB Größe der Build-Ergebnisse Thin WAR / Slim JAR Fat JAR JEE und Micro - kein Widerspruch!
  • 13. „Gewicht“: Laufzeit 13gedoplan.de 0,0 s 1,0 s 2,0 s 3,0 s 4,0 s 5,0 s 6,0 s WAR Spring Boot KumuluzEE Quarkus Startzeit Server Anwendung Reload 0 MB 50 MB 100 MB 150 MB 200 MB 250 MB WAR Spring Boot KumuluzEE Quarkus Memory Non-Heap Heap JEE und Micro - kein Widerspruch!
  • 14. Test Arquillian De-facto-Standard für JEE-Tests Server Lifecycle, Deployment, Test komplex Auswahl und Konfiguration der Zielumgebung Zusammenstellung des Deployments Im Demo-Projekt für WildFly und KumuluzEE genutzt @SpringBootTest: Spring-eigener Test Runner Server Lifecycle, Test einfach @QuarkusTest: Quarkus-Pendent zu @SpringBootTest 14gedoplan.deJEE und Micro - kein Widerspruch!
  • 15. Test 15gedoplan.de WAR Spring Boot KumuluzEE Quarkus 9,3 s 19,0 s 9,6 s 31,4 s 12,0 s Testausführungszeit Self-contained mit laufendem Server JEE und Micro - kein Widerspruch!
  • 16. Betriebsmodell „Server mit Deployment, Server eingebettet – ist das nicht zukünftig eh egal?“ Container OS + JVM + Server? + Anwendung 16gedoplan.de 1.168 MB 1.038 MB 1.020 MB 962 MB 328 MB 235 MB 238 MB 231 MB WAR Spring Boot KumuluzEE Quarkus Image Size Memory lt. top im Container JEE und Micro - kein Widerspruch!
  • 17. Health Monitoring, Metrics MicroProfile Health https://javaeeblog.wordpress.com/2019/01/27/alles-gesund- health-checking-mit-microprofile-health/ MicroProfile Metrics https://javaeeblog.wordpress.com/2019/03/15/wie-laeufts- denn-so-monitoring-mit-microprofile-metrics/ 17gedoplan.deJEE und Micro - kein Widerspruch!
  • 18. Fazit Micro-Frameworks auch für JEE verfügbar Anwendungscode von JEE und Spring Boot sehr ähnlich Projekt-Setup für klassische JEE-Anwendung einfacher aber: Server notwendig Entwicklungs-Zeiten für JEE und Micro vergleichbar kurz klassische Deployzeiten vergleichbar mit Hot Reload Footprint von Micro-Frameworks kleiner insb. Quarkus durch Build-Time-Optimierung Testen im klassischen JEE-Umfeld zu kompliziert Spring Boot und Quarkus richtungsweisend Server separat oder embedded tritt in den Hintergrund 18gedoplan.deJEE und Micro - kein Widerspruch!
  • 19. Fazit JEE und Micro - kein Widerspruch! 19gedoplan.de „… kannste sehr wohl machen!“
  • 20. Ausblick Quarkus (u. a.) bietet Compile in Maschinencode (GraalVM)  Startzeiten im ms-Bereich  Cloud, ggf. serverless Reactive Programming non-blocking asychron abstraktes Producer/Consumer-Konzept 20gedoplan.deJEE und Micro - kein Widerspruch!
  • 21. More github.com/GEDOPLAN/micro-comparison Demo project www.gedoplan-it-training.de Trainings in Berlin, Bielefeld, inhouse neu: JEE Microservice Foundation neu: Java DevOps: Development und Delivery mit Docker und Kubernetes www.gedoplan-it-consulting.de Reviews, Coaching, … Blog  dirk.weil@gedoplan.de @dirkweil 21gedoplan.deJEE und Micro - kein Widerspruch!