Slide 1

Slide 1 text

reloading java applications like a pro Anton  Arhipov  

Slide 2

Slide 2 text

whoami anton arhipov @antonarhipov jrebel product lead zeroturnaround

Slide 3

Slide 3 text

agenda • the time sink • application updates (with jrebel)

Slide 4

Slide 4 text

make a change build, deploy, wait check the change the turnaround

Slide 5

Slide 5 text

package everything into WAR/EAR rackage modules into JARs compile classes copy static resources resolve dependencies build

Slide 6

Slide 6 text

exploded directory deployment

Slide 7

Slide 7 text

public class Launcher { public static void main(String[] args) { Server server = new Server(); SelectChannelConnector connector = new SelectChannelConnector(); connector.setPort(8080); server.addConnector(connector); WebAppContext context = new WebAppContext("war", "/"); server.setHandler(context); server.start(); } } jetty launcher

Slide 8

Slide 8 text

“…I  know  about  JRebel,  but  I  cannot   pay  for  it,  so  I  tried  Maven…”                                                                                        -­‐  Stackoverflow  

Slide 9

Slide 9 text

getResource(“hello.html”)   read(“src/main/.../hello.html”)  

Slide 10

Slide 10 text

package everything into WAR/EAR rackage modules into JARs compile classes copy static resources resolve dependencies build

Slide 11

Slide 11 text

package everything into WAR/EAR rackage modules into JARs compile classes copy static resources resolve dependencies build

Slide 12

Slide 12 text

no build! • compile with your IDE • prefer exploded deployment • avoid <>

Slide 13

Slide 13 text

1–60s 30s$–$15min ~1min container boot time application deployment navigation redeploy’s time

Slide 14

Slide 14 text

h@p://dow.ngra.de/2010/12/14/jee-­‐oss-­‐container-­‐startup-­‐Jmes-­‐apples-­‐vs-­‐oranges/   container startup time

Slide 15

Slide 15 text

h@p://zeroturnaround.com/java-­‐ee-­‐producJvity-­‐report-­‐2011/  

Slide 16

Slide 16 text

Externalized   Temporary   Serializable   DerivaJve   State   why code reloading is hard?

Slide 17

Slide 17 text

MyObject   MyObject.class   OldClassLoader   NewClassLoader   MyObject.class   MyObject   Recreate  object   naiive class reloading

Slide 18

Slide 18 text

Classes Libraries OldClassLoader NewClassLoader Sevlet New Classes New Libraries Sevlet Session Session init()   App State App State serialize/deserialize

Slide 19

Slide 19 text

Classes OldClassLoader NewClassLoader Sevlet New Classes New Libraries Sevlet Session Session App State App State

Slide 20

Slide 20 text

MyObject MyObject.class   OldClassLoader Code   101000101   100010010   Debugger HotSwap   New  code   111000100   101010010   New  code   111000100   101010010   hotswap Make  changes  

Slide 21

Slide 21 text

MyObject MyObject.class   OldClassLoader Code   101000101   100010010   New  code   111000100   101010010   JRebel   Framework   ConfiguraJon   (XML,  annotaJons,..)   jrebel Make  changes  

Slide 22

Slide 22 text

HotSwap   JRebel   Changing  method  bodies   +   +   Adding/removing  methods   -­‐   +   Adding/removing  constructors   -­‐   +   Adding/removing  fields   -­‐   +   Adding/removing  classes   -­‐   +   Adding/removing  annotaJons   -­‐   +   Replacing  superclass   -­‐   -­‐   Adding/removing  implemented   interfaces   -­‐   -­‐   jrebel vs hotswap

Slide 23

Slide 23 text

in action

Slide 24

Slide 24 text

Java App Framework Conf XML HTTP request

Slide 25

Slide 25 text

Java App Framework Conf XML HTTP request 1) Stop request

Slide 26

Slide 26 text

Java App Framework Conf XML HTTP request 2) Check resources

Slide 27

Slide 27 text

Java App Framework Conf XML HTTP request 3) Reconfigure the framework

Slide 28

Slide 28 text

Java App Framework Conf XML HTTP request 4) Resume request

Slide 29

Slide 29 text

Java App Framework Conf XML HTTP request PROFIT! J

Slide 30

Slide 30 text

Java App Framework Conf XML HTTP request OpJonally:   File  system     PUSH  

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

application reloading is hard • requires more than just class reloading • reloading of different components should appear in particular order • bootstrapping

Slide 33

Slide 33 text

with java ee

Slide 34

Slide 34 text

jrebel for java ee • JSP • JAX-RS • JAX-WS • JSF • CDI • JPA • EJB • Jasper • Jersey, CXF • Metro • Mojarra, MyFaces • Weld • EclipseLink, OpenJPA, Hibernate

Slide 35

Slide 35 text

goes cloud

Slide 36

Slide 36 text

Remote Deployments • Development servers • Virtualized environments • Cloud environments

Slide 37

Slide 37 text

Remote Deployments 0. make a change 1. git commit; git push 2. mvn clean install 3. deploy.sh

Slide 38

Slide 38 text

0. make a change 1. compile 2. synch & reload

Slide 39

Slide 39 text

h@p://bit.ly/33degree2013     win a free license

Slide 40

Slide 40 text

Questions? @antonarhipov [email protected]