jrebel for eclipse
DESCRIPTION
JREBEL FOR ECLIPSE. ECLIPSE DAY CHINA 2013. PRESENTER. ANTON ARHIPOV @ antonarhipov 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. - PowerPoint PPT PresentationTRANSCRIPT
PowerPoint Presentation
JREBEL FOR ECLIPSEECLIPSE DAY CHINA 2013PRESENTERANTON ARHIPOV@antonarhipovPRODUCT MANAGER
BASED ON JAVAAGENT TECHNOLOGYDISTRIBUTED AS IDE PLUGINEclipse, incl. MyEclipse, RAD, etcAlso: IntelliJ IDEA, NetBeans, JDeveloper
A PRODUCTIVITY TOOL FOR JAVA DEVELOPERSTHE TURNAROUNDMAKECHANGESBUILD,DEPLOY,WAITOBSERVERESULTSAVERAGE: 2.5 minTHE TURNAROUNDMAKECHANGESBUILD,DEPLOY,WAITOBSERVERESULTS
NO BUILD!NO REDEPLOY!NO WAITING!~1 min30 sec 30 min1-60 secIN-APPLICATION NAVIGATIONAPPLICATION STARTUPSERVER STARTUPWASTED TIMEHOW TO RELOAD A CLASS?Old Class LoaderMyClassMyObjectNewClass LoaderMyClassMyObjectTRANSFER THE STATEClassesLibrariesOldClassLoaderNewClassLoaderSevletNew ClassesNew LibrariesSevletSessionSessioninit()App StateApp Stateserialize/deserializeTHIS IS WHAT EVERY APPLICATION SERVER DOESClass loader scope Every deployed application gets a dedicated class loaderState recreationApplication state is recovered by reinitializationSession state is (optionally) serialized and deserialized in the new class loaderReloading timeApplication reinitialization time, typically around one minuteProblemsLeaks memoryLazy caches need to be warmed up every time
8ClassesOldClassLoaderNewClassLoaderSevletNew ClassesNew LibrariesSevletSessionSessionApp StateApp State
CLASS LOADERS ARE EASY TO LEAK!Class loader scope Every deployed application gets a dedicated class loaderState recreationApplication state is recovered by reinitializationSession state is (optionally) serialized and deserialized in the new class loaderReloading timeApplication reinitialization time, typically around one minuteProblemsLeaks memoryLazy caches need to be warmed up every time
9THE REALITY: CLASS LOADERS ARE NOT GOOD FOR RELOADING CLASSES
MyObjectMyObject.classOldClassLoaderCode101000101100010010DebuggerHotSwapNew code111000100101010010New code 111000100101010010HotSwapMake changesJRebel vs HotSwapHotSwapJRebelChanging 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!MyObjectMyObject.classOldClassLoaderCode101000101100010010New code111000100101010010JRebelFrameworkConfiguration(XML, annotations,..)JRebelMake changesJRebel 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 belowREBEL.XML
JRebel monitors directories specified in rebel.xmlINSTANT CLASS RELOADING
JRebel reloads only whats changedFRAMEWORK CONFIGURATIONS
JRebel understands framework configuration files
http://zeroturnaround.com/software/jrebel/features/frameworks/ Questions?@[email protected]://www.jrebel.com