$30 off During Our Annual Pro Sale. View Details »

Reloading Java Applications Like A Pro

Reloading Java Applications Like A Pro

Anton Arhipov

March 14, 2013
Tweet

More Decks by Anton Arhipov

Other Decks in Programming

Transcript

  1. reloading java applications
    like a pro
    Anton  Arhipov  

    View Slide

  2. whoami
    anton arhipov
    @antonarhipov
    jrebel product lead
    zeroturnaround

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  6. exploded directory deployment

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. Externalized   Temporary  
    Serializable   DerivaJve  
    State  
    why code reloading is hard?

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  22. 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

    View Slide

  23. in action

    View Slide

  24. Java
    App
    Framework
    Conf
    XML
    HTTP request

    View Slide

  25. Java
    App
    Framework
    Conf
    XML
    HTTP request
    1) Stop request

    View Slide

  26. Java
    App
    Framework
    Conf
    XML
    HTTP request
    2) Check resources

    View Slide

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

    View Slide

  28. Java
    App
    Framework
    Conf
    XML
    HTTP request
    4) Resume request

    View Slide

  29. Java
    App
    Framework
    Conf
    XML
    HTTP request
    PROFIT! J

    View Slide

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

    View Slide

  31. View Slide

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

    View Slide

  33. with java ee

    View Slide

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

    View Slide

  35. goes cloud

    View Slide

  36. Remote Deployments
    • Development servers
    • Virtualized environments
    • Cloud environments

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  40. Questions?
    @antonarhipov
    [email protected]

    View Slide