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!
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!
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!
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!