关于java热部署知识.doc

关于java热部署知识.doc

ID:31869575

大小:115.50 KB

页数:14页

时间:2019-01-23

关于java热部署知识.doc_第1页
关于java热部署知识.doc_第2页
关于java热部署知识.doc_第3页
关于java热部署知识.doc_第4页
关于java热部署知识.doc_第5页
资源描述:

《关于java热部署知识.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、热部署就是要重新LoadClass;如果你的数据是在Class中的Static数据,那可能没什么好的办法;bohemia(资深程序员)2008-11-10现阶段不要指望j2ee应用服务器的热部署,这个是j2ee最大的问题,要是j2ee应用发布能像rails一样方便,j2ee会更加强大,貌似这个不太可能实现jones(架构师)2008-11-10自己实现classload。参见下面的例子:在J2EE的项目中,容器给我们提供的热部署功能使得我们不用重启动容器而修改我们的代码。比如使用Weblogic,我们可以在Weblogic-appl

2、ication.xml中配置是否支持热部署Servlet。查阅Weblogc文档,其实在Weblogic中,EJB组件也是可以热部署的,但如何要热部署EJB组件,Weblogc要求必须自定义ClassLoder。   JVM规范中没有指定JVM支持动态加载修改过的类。类的加载,卸载对于程序员是透明的。如果我们要实现类的动态加载我们就要理解JVM本身类的加载与卸载的原理,实现热部署。对于JVM加载类方面的资料在网上很多的,在这里我做简单概述:   (1)JVM加载时通过ClassLoader加载的。   (2)JVM有3层继承关系的C

3、lassLoder分别是:                                      -----BootStrap类加载器加载JRE/lib                                               -----------------ExtClassLoader加载JRE/lib/ext                                                          ----------AppClassLoader加载ClassPath/   (3)

4、为了安全性,JVM加载采用了双亲委派机制,如何理解呢,就是当需要加载一个类时,当前的ClassLoader先请求父ClassLoader,依次     类推,直到父类的ClassLoader无法加载时,才通过当前的ClassLoser加载,这就保证了像String这样的类型必须使用JRE里面的,使得     JRElib下类不会被修改。同时避免了ClassCaseException。  (4)在JVM中,一个实例是通过本身的类名+加载它的ClassLoader识别的,也就是说不同的ClassLoader加载同一个类在JVM是不同的。

5、  (5)同一个ClassLoader是不允许多次加载一个类的,否则会报java.lang.LinkageError。attempted duplicateclassdefinitionfor      nameXXX,在下面的例子中会指出。   既然JVM不支持热部署,那么要实现热部署,就必须自定义ClassLoader,当类被修改过后,加载该类。下面通过代码说明:packageclassloader;/***@authorvma*///自定义一个类加载器publicclassDynamicClassLoaderextendsCl

6、assLoader{        publicClassfindClass(byte[]b)throwsClassNotFoundException{       returndefineClass(null,b,0,b.length);   }packageclassloader;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;/***@authorvma*/publicclassManageClassLoader{   

7、DynamicClassLoaderdc=null;      LonglastModified=0l;   Classc=null;   //加载类,如果类文件修改过加载,如果没有修改,返回当前的   publicClassloadClass(Stringname)throwsClassNotFoundException,IOException{    if(isClassModified(name)){       dc= newDynamicClassLoader();     returnc=dc.findClass(get

8、Bytes(name));    }    returnc;   }   //判断是否被修改过   privatebooleanisClassModified(Stringfilename){       booleanreturnV

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。