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