关于jav热部署知.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
热部署就是要重新Load Class; 如果你的数据是在Class中的Static数据,那可能没什么好的办法; HYPERLINK / \t _blank bohemia (资深程序员) 2008-11-10 现阶段不要指望j2ee应用服务器的热部署,这个是j2ee最大的问题,要是j2ee应用发布能像rails一样方便,j2ee会更加强大,貌似这个不太可能实现 HYPERLINK / \t _blank jones (架构师) 2008-11-10 自己实现classload。 参见下面的例子: 在J2EE的项目中,容器给我们提供的热部署功能使得我们不用重启动容器而修改我们的代码。比如使用Weblogic,我们可以在Weblogic-application.xml中配置是否支持热部署Servlet。查阅Weblogc 文档,其实在Weblogic中,EJB组件也是可以热部署的,但如何要热部署EJB组件,Weblogc要求必须自定义ClassLoder。 ??? JVM规范中没有指定JVM支持动态加载修改过的类。类的加载,卸载对于程序员是透明的。如果我们要实现类的动态加载我们就要理解JVM本身类的加载与卸载的原理,实现热部署。对于JVM加载类方面的资料在网上很多的,在这里我做简单概述: ??? (1)JVM加载时通过ClassLoader加载的。 ??? (2)JVM有3层继承关系的ClassLoder 分别是: ?????????????????????????????????????? BootStrap类加载器 加载JRE/lib ??????????????????????????????????????????????? ExtClassLoader 加载 JRE/lib/ext ?????????????????????????????????????????????????????????? AppClassLoader 加载ClassPath/ ??? (3)为了安全性,JVM加载采用了双亲委派机制,如何理解呢,就是当需要加载一个类时,当前的ClassLoader先请求父ClassLoader,依次 ????? 类推,直到父类的ClassLoader无法加载时,才通过当前的ClassLoser加载,这就保证了像String这样的类型必须使用JRE里面的, 使得 ????? JRE lib 下类不会被修改。同时避免了ClassCaseException。 ?? (4)在JVM中,一个实例是通过本身的类名+加载它的ClassLoader识别的,也就是说 不同的ClassLoader 加载同一个类在JVM是不同的。 ?? (5)同一个ClassLoader是不允许多次加载一个类的,否则会报java.lang.LinkageError。attempted? duplicate class definition for ?????? name XXX,在下面的例子中会指出。 ??? 既然JVM不支持热部署,那么要实现热部署,就必须自定义ClassLoader,当类被修改过后,加载该类。下面通过代码说明: package classloader; /** * @author vma */ // 自定义一个类加载器 public class DynamicClassLoader extends ClassLoader { ??? ?? ??? public Class? findClass(byte[] b) throws ClassNotFoundException { ??????? return defineClass(null, b, 0, b.length); ??? } package classloader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; /** * @author vma */ public class ManageClassLoader { ??? DynamicClassLoader dc =null; ??? ??? Long lastModified = 0l; ??? Class c = null; ??? //加载类, 如果类文件修改过加载,如果没有修改,返回当前的 ??? public Class loadClass(String name) throws ClassNotFoundException, IOException{ ???? if (isClassMod

文档评论(0)

mv2323 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档