`
can_do
  • 浏览: 248048 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于应用服务器Apusic中ClassLoader(类加载器)的使用情况

阅读更多
实际加载应用时用到的ClassLoader如下:

1、 加载Apusic公共包,即<Apusic_Home>/lib/或者<Apusic_Home>/common或者<Apusic_Home>/sp或者<Apusic_Home>/classes下时用到的ClassLoader如下:

sun.misc.Launcher$AppClassLoader



注意:同一个域下或者JVM下的此AppClassLoader实例是同一个。

换句话说,加载Apusic server下的jar或者class或者域(mydomain)的lib下的jar时,用且仅用到一个AppClassLoader实例,为:



2、 加载War应用时,用到的ClassLoader如下:

com.apusic.web.container.ReloadableClassLoader

注意:加载<your_war_name>/WEB-INF/lib或者<your_war_name>/WEB-INF/classes,用到ReloadableClassLoader,并且同一个war应用下是同一个ReloadableClassLoader实例,不同的war应用,引用不同的ReloadableClassLoader的实例。



3、 加载EAR应用中的EJB时,用的ClassLoader如下:

com.apusic.util.DynamicClassLoader

注意:com.apusic.util.DynamicClassLoader是类加载器

com.apusic.web.container.ReloadableClassLoader的父类;



说明:

(1)、java classloader的继承关系:

sun.misc.Launcher$AppClassLoader=>java.net.URLClassLoader=>java.security.SecureClassLoader=>java.lang.ClassLoader

java定义中:sun.misc.Launcher$ExtClassLoader和sun.misc.Launcher$AppClassLoader是brother关系,不是father-child关系

(2)、apusic classloader的继承关系:

com.apusic.web.container.ReloadableClassLoader=>com.apusic.util.DynamicClassLoader=>com.apusic.util.UCPClassLoader=>java.security.SecureClassLoader=>java.lang.ClassLoader

(3)、loading:
(I)、ClassLoader =>bootstrap loader
(II)、System ClassLoader(AppClassLoader) =>ClassLoader.getSystemClassLoader() =>sun.misc.Launcher$AppClassLoader
(III)、System ClassLoader's parent (ExtClassLoader)=>sun.misc.Launcher$ExtClassLoader
但实际JVM在加载时,将ExtClassLoader视作AppClassLoader的父加载器。

(IV)、实际使用中:Apusic中的ClassLoader继承关系:
com.apusic.web.container.ReloadableClassLoader=>com.apusic.util.DynamicClassLoader=>sun.misc.Launcher$AppClassLoader
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics