Post on 07-Jan-2017
Just Enough App Server
by antonio goncalves@agoncal
2 @agoncal
Antonio Goncalves
Take what you need from Java EE
and resize your App Server
4 @agoncal
How do we see Java EE App Servers ?
One Monolith !SlowFat
Heavyweight
Old
Not sexy
Boring
App servers are
monolithic !
6 @agoncal
Java EE
7 @agoncal
Web Profile
8 @agoncal
Servlets
9 @agoncal
Three types of Java EE App Servers
Three Monoliths !
10 @agoncal
Bits & Pieces
11 @agoncal
Servlets
JSP
Expression LanguageServlets
JSTL
12 @agoncal
Web Profile
JSP
Expression LanguageServlets
JSTL
Interceptors JAX-RS
JSON-P
CDI
JPAWebSocket
JTA
Bean Validation
13 @agoncal
Java EE
JSP
Expression LanguageServlets
JSTL
Interceptors JAX-RS
JSON-P
CDI
JPAWebSocket
JTA
Bean Validation
JMSJSFJAX-WS EJB
JavaMail
JCA
Concurrency
Batch
JASPIC
14 @agoncal
JVM
JSP
Expression LanguageServlets
JSTL
Interceptors JAX-RS
JSON-P
CDI
JPAWebSocket
JTA
Bean Validation
JMSJSFJAX-WS EJB
JavaMail
JCA
Concurrency
Batch
JASPIC
JVM
15 @agoncal
JVM
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
16 @agoncal
Your own app
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code
17 @agoncal
Your own app dependencies
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code SLF4J Angular ReactPrimefaces Bootstrap JQuery
App servers are
slow !
19 @agoncal
Startup time of App Servers
20 @agoncal
Startup time of JBoss
Using a Windows XP virtual machine (Virtual Box)
3.2.8 4.2.3 5.1 6.1 7 Beta0
5
10
15
20
25
30
35
40
Startup time
Specs
App servers
consume resources !
22 @agoncal
Memory consumption of App Servers
App servers use
outdated packaging !
24 @agoncal
Your own app… needs packaging
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code SLF4J Angular ReactPrimefaces Bootstrap JQuery
25 @agoncal
Skinny War
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code SLF4J Angular ReactPrimefaces Bootstrap JQuery
26 @agoncal
My code
Fat War
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
SLF4J ApacheCommons Drools SLF4J Angular React
Demo
CD-BookStoreTop BooksTop CDs
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
3 apps
3 different needs !
29 @agoncal
CD-Book Store
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code Primefaces Bootstrap JQuery
30 @agoncal
Top Books
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code
31 @agoncal
Top CDs
JTA
JMS
JSP
Interceptors JAX-RS
Expression Language
JSF
Servlets
JSON-P
CDI
JAX-WS
JPA
Bean Validation
EJB
JavaMailWebSocket
JSTL
JCA
Concurrency
Batch
JASPIC
JDBC JNDI Logging JAX-B JMXCommons
Annotations
My code
What a Waste !
Let's package what we need…
...in a “uber” Jar
33 @agoncal
My code
CD-Book Store
JTAInterceptors
JAX-RS
Expression Language
JSF
Servlets
JSON-PCDI
JPA
Bean Validation
EJB
JDBC JNDI Logging JAX-BCommons
Annotations
Primefaces Bootstrap JQuery
34 @agoncal
My code
Top Books
JTAInterceptors
Expression LanguageServlets
JSON-PCDI
JPA
Bean Validation
JDBC JNDI Logging JAX-BCommons
Annotations
JAX-RS
35 @agoncal
My code
Top CDs
Servlets
CommonsAnnotations Logging
36 @agoncal
Several solutions to choose from
● Full Java EE● WildFly Swarm● Payara Micro● TomEE● KumuluzEE
● “Sort of” Java EE● Spring Boot
● Other● Dropwizard● Lagom
Demo
WildFly Swarm
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
And what about multiple apps ?
39 @agoncal
My code
Top CDsssssssss
Servlets
CommonsAnnotations Logging
My code
Servlets
CommonsAnnotations
Logging
My code
Servlets
CommonsAnnotations
Logging
My code
Servlets
CommonsAnnotations Logging
My code
Servlets
CommonsAnnotations
Logging
My code
Servlets
CommonsAnnotations
Logging
40 @agoncal
My code
Top CDsssssssss
CommonsAnnotations Logging
My code
CommonsAnnotations
Logging
My code
CommonsAnnotations
Logging
My code
CommonsAnnotations Logging
My code
CommonsAnnotations
Logging
My code
CommonsAnnotations
Logging
ServletsLocal Maven Repo
If only we had Jigsaw !
Demo
WildFly Swarmwith M2_REPO
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
Some metrics
43 @agoncal
Packaging Size
44 @agoncal
Startup time
And how do I manage it now ?
46 @agoncal
Configure your apppublic class MyMain { public static void main(String...args) { new Container() .fraction(new DatasourcesFraction() .jdbcDriver("h2", (d) -> { d.driverClassName("org.h2.Driver"); d.driverModuleName("com.h2database.h2"); }) .dataSource("ExampleDS", (ds) -> { ds.driverName("h2"); ds.connectionUrl("jdbc:h2:mem:test"); ds.userName("foo"); ds.password("bar"); })) .start() .deploy();
Demo
WildFly Swarmwith management
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
And what about Docker ?
49 @agoncal
Dockerfile
FROM java:openjdk-8-jdk
EXPOSE 8081
ADD target/topcds-swarm.jar /opt/topcds-swarm.jarENTRYPOINT ["java", "-jar", "/opt/topcds-swarm.jar"]
Demo
Docker
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
Demo
Raspberry PI
https://github.com/agoncal/agoncal-sample-javaee/06-EnoughAppServer
Final word
53 @agoncal
Wildfly Swarm
● Based on good old JBoss AS● Bundles several fractions
● Java EE● Netflix OSS (Ribbon, Hystrix, RxJava)● Spring● Logstash● Swagger● ...
54 @agoncal
Java EE App Servers
● Java EE app server have changed● Are not monolithic, slow, consume resources ● Package the way you want (skinny/fat war, uber
jar)● Re-use your Java EE expertise● Look Ma, « Microservices inside »● « I’m centralised and I’m proud! »
That's it !
56 @agoncal
http://amazon.com/author/agoncal
57 @agoncal
https://www.pluralsight.com/authors/antonio-goncalves
Thanks
www.antoniogoncalves.organtonio.goncalves@gmail.com
@agoncal@pluralsight
@devoxxfr@lescastcodeurs
Q & A
60 antonio goncalves
Creative Commons
● Attribution — You must attribute the work inthe manner specified by the author or licensor(but not in any way that suggests that theyendorse you or your use of the work).
● Noncommercial — You may not use this work forcommercial purposes.
● Share Alike — If you alter, transform, or buildupon this work, you may distribute the resultingwork only under the same or similar license tothis one.