JREBEL FOR ECLIPSE ECLIPSE DAY CHINA 2013
PRESENTER ANTON PRODUCT MANAGER
BASED ON JAVAAGENT TECHNOLOGY DISTRIBUTED AS IDE PLUGIN Eclipse, incl. MyEclipse, RAD, etc Also: IntelliJ IDEA, NetBeans, JDeveloper A PRODUCTIVITY TOOL FOR JAVA DEVELOPERS
THE TURNAROUND MAKE CHANGES MAKE CHANGES BUILD, DEPLOY, WAIT OBSERVE RESULTS AVERAGE: 2.5 min
THE TURNAROUND MAKE CHANGES MAKE CHANGES BUILD, DEPLOY, WAIT OBSERVE RESULTS NO BUILD! NO REDEPLOY! NO WAITING!
~1 min30 sec – 30 min1-60 sec IN-APPLICATION NAVIGATION APPLICATION STARTUP SERVER STARTUP WASTED TIME
HOW TO RELOAD A CLASS? Old Class Loader MyClass MyObject New Class Loader MyClass’ MyObject TRANSFER THE STATE
Classes Libraries OldClassLoader NewClassLoader Sevlet New Classes New Libraries Sevlet Session init() App State serialize/deserialize THIS IS WHAT EVERY APPLICATION SERVER DOES
Classes OldClassLoader NewClassLoader Sevlet New Classes New Libraries Sevlet Session App State CLASS LOADERS ARE EASY TO LEAK!
THE REALITY: CLASS LOADERS ARE NOT GOOD FOR RELOADING CLASSES
MyObject MyObject.class OldClassL oad er Code Debugger HotSwap New code New code HotSwap Make changes
JRebel vs HotSwap HotSwapJRebel Changing method bodies ++ Adding/removing methods -+ Adding/removing constructors -+ Adding/removing fields -+ Adding/removing classes -+ Adding/removing annotations -+ Replacing superclass * -- Adding/removing implemented interfaces * --
Maybe one day Java gets a better HotSwap: – JEP 159: Enhanced Class Redefinition But class reloading is not enough for real applications!
MyObject MyObject.class OldClassL oad er Code New code JRebel Framework Configuration (XML, annotations,..) JRebel Make changes
JRebel does NOT create new class loaders to update classes!
DEMO TIME!
GET AT ECLIPSE MARKETPLACE
ADD JREBEL NATURE
ENABLE JREBEL AGENT
JREBEL CONFIG CENTER
By starting the container you will see JRebel messages like below
REBEL.XML JRebel monitors directories specified in rebel.xml
INSTANT CLASS RELOADING JRebel reloads only what’s changed
FRAMEWORK CONFIGURATIONS JRebel understands framework configuration files