热部署实现机制
2013-01-29 22:41
162 查看
通过ClassLoader说明容器热部署实现机制
在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,当类被修改过后,加载该类。下面通过代码说明:
相关文章推荐
- 通过ClassLoader说明容器热部署实现机制
- 热部署机制的原理和编写简单demo实现类的替换
- 通过ClassLoader说明容器热部署实现机制
- Tomcat集群应用部署的实现机制
- Tomcat集群应用部署的实现机制
- 通过ClassLoader说明容器热部署实现机制
- 通过ClassLoader说明容器热部署实现机制
- redis sentinel(哨兵机制)部署(Windows下实现)
- [转载]ActiveMQ实现负载均衡+高可用部署方案
- js继承机制的实现
- CodeProject - 使用特性(attributes)和激活机制来实现工厂模式
- Java协程框架----Kilim实现机制解析
- Linux 线程实现机制分析--转
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
- Linux 线程实现机制分析
- tomcat+apache 实现负载均衡之一:同一台电脑部署2个以上tomcat
- ASP.NET MVC5 插件化机制简单实现
- WebKit Undo实现机制
- 基于Jenkins 实现php项目的自动化测试、自动打包和自动部署(-)
- Android AIDL——实现机制浅析