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

JEE und Micro - kein Widerspruch! (BED-Con 2019)

Dirk Weil
September 06, 2019

JEE und Micro - kein Widerspruch! (BED-Con 2019)

Präsentation auf der BED-Con 2019 in Berlin:
Die klassische Enterprise-Welt nutzt Server wie WebSphere oder JBoss/WildFly, um darauf große WAR- oder EAR-Files zu deployen. Wenngleich dieses Modell im traditionellen Server-Betrieb sehr gut funktioniert, so erscheint es doch recht schwergewichtig und wenig geeignet für moderne, verteilte – ggf. Cloud-basierte – Services. „Mit Java EE kann man moderne Sachen nicht machen“ ist eine leider verbreitete Ansicht. Vermeintlich leichtgewichtige Alternativen locken – allen voran Spring Boot. Aber stimmt das so? Bei genauerer Betrachtung erscheinen die konkurrierenden Konzepte nahezu deckungsgleich. Zudem bieten das Microprofile und darauf basierende Implementierungen wie Quarkus genau die vielfach vermissten Leichtgewicht-Eigenschaften: Kein separater Server, kleiner Footprint, einfache Konfiguration, Health Monitoring u. v m. Angenehm ist, dass das Programmierkonzept davon unberührt bleibt, d. h. EE-Entwickler können sehr schnell leichtgewichtige Services entwickeln, ohne komplett umlernen zu müssen.

Dirk Weil

September 06, 2019
Tweet

More Decks by Dirk Weil

Other Decks in Programming

Transcript

  1. 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 2 gedoplan.de JEE und Micro - kein Widerspruch!
  2. 3 gedoplan.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!
  3. JEE 4 gedoplan.de „So neue Sachen kannste mit Java EE

    nicht machen!“ JS UI REST Leichtgewichtig Monitoring Health JEE und Micro - kein Widerspruch!
  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 JEE und Micro - kein Widerspruch!
  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 JEE und Micro - kein Widerspruch!
  6. 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 7 gedoplan.de JEE und Micro - kein Widerspruch!
  7. 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 8 gedoplan.de JEE und Micro - kein Widerspruch!
  8. 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 9 gedoplan.de JEE und Micro - kein Widerspruch!
  9. „Gewicht“: Anwendungscode z. B. Persistenz 10 gedoplan.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!
  10. „Gewicht“: Anwendungscode z. B. REST-Endpunkt 11 gedoplan.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!
  11. „Gewicht“: Build 12 gedoplan.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!
  12. „Gewicht“: Laufzeit 13 gedoplan.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!
  13. 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 14 gedoplan.de JEE und Micro - kein Widerspruch!
  14. Test 15 gedoplan.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!
  15. Betriebsmodell „Server mit Deployment, Server eingebettet – ist das nicht

    zukünftig eh egal?“ Container OS + JVM + Server? + Anwendung 16 gedoplan.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!
  16. Configuration, Health Monitoring, Metrics MicroProfile Config https://javaeeblog.wordpress.com/2019/08/19/welche- einstellung-haben-sie-anwendungskonfiguration-mit- microprofile-config/ 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/ 17 gedoplan.de JEE und Micro - kein Widerspruch!
  17. 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 18 gedoplan.de JEE und Micro - kein Widerspruch!
  18. 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  [email protected] @dirkweil 20 gedoplan.de JEE und Micro - kein Widerspruch!