Java on Tracks - Modellbahnsteuerung mit JEE, MicroProfile und self-contained...
Java EE Microservices ohne Server
1. Java EE Microservices ohne Server
Expertenkreis Java, 08.12.2016, GEDOPLAN
Dirk Weil, GEDOPLAN GmbH
2. Dirk Weil
GEDOPLAN GmbH, Bielefeld
GEDOPLAN IT Consulting
Konzeption, Realisierung von IT-Lösungen
GEDOPLAN IT Training
Seminare in Berlin, Bielefeld, on-site
Java EE seit 1998
Vorträge, Veröffentlichungen
Java EE Microservices ohne Server 2gedoplan.de
3. 200x – J(2)EE
Monolithische Anwendungen
Schwergewichtige Application Server
Java EE Microservices ohne Server 3gedoplan.de
JVM
J(2)EE Server
Web Shop AccountingLogistics
4. 200x – J(2)EE - reloaded
Monolithische Anwendungen
Schwergewichtige Application Server
SLAs
Java EE Microservices ohne Server 4gedoplan.de
JVM
J(2)EE
Server
Web Shop
JVM
J(2)EE
Server
Accounting
JVM
J(2)EE
Server
Logistics
5. 201x – Java EE - Microservices
Leichtgewichtige, „kleine“ Services
Unabhängig deploybar
Java EE Microservices ohne Server 5gedoplan.de
JVM
Java EE
Server
Catalog
JVM
Java EE
Server
Billing
JVM
Java EE
Server
Stock
JVM
Java EE
Server
Order
JVM
Java EE
Server
Payment
JVM
Java EE
Server
Supplier
JVM
Java EE
Server
Carrier
JVM
Java EE
Server
Tax
6. Programm-Modell
Java EE
Ausgereifte Bestandteile
Java EE Microservices ohne Server 6gedoplan.de
Browser Desktop/Mobile
JavaServer Faces Webservice
Servlet
CDI
Enterprise
JavaBeans
Connector MessagingJava Persistence
Java Batch
8. WildFly Swarm
Infrastruktur-Baukasten
auf Basis von WildFly
Anwendungscode
+ notwendige „Fractions“
================
ausführbares UberJAR
Java EE Microservices ohne Server 8gedoplan.de
SSO
TX
LB
Logging
Messa-
ging
Remote
Health
Cache
JPACDIRESTWeb
Application Code
9. WildFly Swarm
Komposition in Maven
Java EE Microservices ohne Server 9gedoplan.de
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>bom-all</artifactId>
<version>2016.11.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>jaxrs-cdi</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.wildfly.swarm</groupId>
<artifactId>jpa</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
10. WildFly Swarm
Plugin zum Bau des UberJAR
Java EE Microservices ohne Server 10gedoplan.de
<plugin>
<groupId>org.wildfly.swarm</groupId>
<artifactId>wildfly-swarm-plugin</artifactId>
<version>2016.11.0</version>
<configuration>
<mainClass>de.gedoplan.micro.bootstrap.SwarmBootstrap</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>package</goal>
</goals>
</execution>
</executions>
</plugin>
11. WildFly Swarm
Konfiguration in main-Klasse
Java EE Microservices ohne Server 11gedoplan.de
public class SwarmBootstrap {
public static void main(String[] args) throws Exception {
Swarm swarm = new Swarm();
System.setProperty("swarm.context.path", "micro-ohne-server");
URL standaloneFullXml = SwarmBootstrap.class
.getClassLoader()
.getResource("configuration/standalone-full.xml");
swarm
.withXmlConfig(standaloneFullXml)
.start()
.deploy();
}
}
12. WildFly Swarm
Start der main-Klasse in IDE
Start als ausführbares JAR
Java EE Microservices ohne Server 12gedoplan.de
13. Payara Micro
Reduzierter Server auf Basis von Payara
<70MB
Web Profile
JBatch, JCache, Concurrency
Anwendung = Standard-WAR
„Deployment“ per CmdLine-Parameter
Konfiguration mittels externer Konfigurationsdatei möglich
Java EE Microservices ohne Server 13gedoplan.de
14. Payara Micro
Start als ausführbares JAR
mit Deployment
und ggf. Konfigurationsdatei
Java EE Microservices ohne Server 14gedoplan.de
java
-jar targetdependencypayara-micro-4.1.1.164.jar
--domainConfig targetclassesmicrodomain-nocluster.xml
--deploy targetmicro-ohne-server.war
15. KumuluzEE
Leichtgewichtiges Framework aus Java-EE-Komponenten
JSF (Mojarra)
JAX-RS (Jersey)
JAX-WS (Metro)
Servlet, JSP, Websocket (Jetty)
CDI (Weld)
JPA (EclipseLink)
BV (Hibernate Validator)
JSON-P
Java EE Microservices ohne Server 15gedoplan.de
16. KumuluzEE
Komposition
in Maven
Java EE Microservices ohne Server 16gedoplan.de
<dependencies>
<dependency>
<groupId>com.kumuluz.ee</groupId>
<artifactId>kumuluzee-core</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.kumuluz.ee</groupId>
<artifactId>kumuluzee-servlet-jetty</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.kumuluz.ee</groupId>
<artifactId>kumuluzee-jax-rs-jersey</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.kumuluz.ee</groupId>
<artifactId>kumuluzee-cdi-weld</artifactId>
<version>2.0.0</version>
<scope>provided</scope>
</dependency>
17. KumuluzEE
Plugin zur Bereitstellung der Dependencies
Java EE Microservices ohne Server 17gedoplan.de
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
</plugin>
18. KumuluzEE
Optional: main-Klasse
Java EE Microservices ohne Server 18gedoplan.de
public class KumuluzEEBootstrap {
public static void main(String[] args) {
new EeApplication(new CustomizedEeConfig());
}
private static class CustomizedEeConfig extends EeConfig {
private ServerConfig serverConfig = new CustomizedServerConfig();
public ServerConfig getServerConfig() {
return this.serverConfig;
}
}
private static class CustomizedServerConfig extends ServerConfig {
public String getContextPath() {
return "/micro-ohne-server";
}
}
22. Footprint der Demoanwendung
Startup time
Java EE Microservices ohne Server 22gedoplan.de
0,0 s
2,0 s
4,0 s
6,0 s
8,0 s
10,0 s
12,0 s
Application
Platform
25. Besonderheiten
WildFly Swarm
Großes Angebot an Fractions
Camel, Flyway, EclipseLink, Hystrix, LogStash, Health, Ribbon,
Keycloak, Modcluster, …
Hollow Uber Jar
funktioniert leider nicht mit Main Class
Shutdown hook
fährt Anwendung leider nicht immer zuverlässig herunter
Achtung: Breaking changes 2016.11.0 2016.12.0
s. http://wildfly-swarm.io/posts/announcing-wildfly-swarm-2016-12-0/
Java EE Microservices ohne Server 25gedoplan.de
26. Besonderheiten
Payara Micro
Payara (Hydrolycus scomberoides) Vampirfisch
Home Page
http://www.payara.fish/
Documentation
https://payara.gitbooks.io/payara-
server/content/documentation/payara-
micro/payara-micro.html
Java EE Microservices ohne Server 26gedoplan.de
27. Besonderheiten
Payara Micro
Uber Jar
Application Scope teilweise fehlerhaft
Initalized Lifecycle Event kommt mehrfach
@PersistenceContext wird nicht ausgeführt
Java EE Microservices ohne Server 27gedoplan.de
29. Fazit
„Rightsizing your Applications“ ohne Program-Modell-Änderung
Anwendungen bleiben kompatibel zu klassischen App Servern
Aber: Selber komponieren (WildFly Swarm, KumuluzEE)
WildFly Swarm: Umfangreichste Implementierung
Payara Micro: OOTB nutzbar, allerdings nur Web Profile +
KumuluzEE: Schlankste Implementierung, aber auch unvollständig
Turn-around-Zeiten werden teilweise größer
Aktuelle klassische App Server sind auch keine Monster
Und … Docker … stay tuned
Java EE Microservices ohne Server 29gedoplan.de