对于java
程序员来说每天有大量时间浪费在
重启tomcat,而对于使用OSGI的同学们来说增加一个方法或变量便需要重新打包部署重启,更是耗时至极。
热部署一般有两种实现思路:1.文件改变后去加载新的文件2.直接在原文件上修改。因此对于一个热部署工具,如果是静态文件,那么上述两种方式都是很简单就可以实现的,而对于使用osgi方式,静态文件在jar中可以使用思路1(直接关联到workspace下)。
而对于
class实现起来就比较麻烦了,对于思路1一般采用类替换,这里有几种方式,一是抛弃原来的类加载器和类,重新创建一个类加载器并加载类;二是将类拆分成入口和方法,入口不变,真正的里面的方法都是在关联的一些匿名的类里,在新增/修改方法的时候,产生一个新的类,并且关联到那个入口上去,这便是动态语言(ruby)采用的机制,JRebel也采用类似机制实现的热部署。
对于思路2,dcevm也进行了实现,其思路与Jrebel有相似的地方,只不过JRebel运行在class loader这一层,而dcevm在jvm这一层, DCE VM通过修改jvm,在执行程序与硬件(应该确切的说是code编译后的机械码)中增加了一层,来实现代码在运行期动态修改(DCE)。
JRebel是收费的,而且对于OSGi这种多bundle环境来说配置复杂,DCE VM由于更底层因此安装使用非常简单。
1. 下载dcevm-0.2-win.jar
2. 运行:java –jar dcevm-0.2-win.jar
3. 选择一个jdk install,推荐使用jdk1.6.0 update25,亲测这个
版本可用
4. Test install
5.
myeclipse中使用此jdk作为myeclipse和tomcat使用的jdk
亲测在类中增加了一个属性和get set 不必重启tomcat即可在页面端生效
参考文章
http://code.alibabatech.com/blog/dev_related_470/principles-of-anatomy-jrebel.html
http://www.cnb
logs.com/redcreen/archive/2011/06/14/2080718.html