Just enough app server

Post on 07-Jan-2017

6.638 views 1 download

Transcript of Just enough app server

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.