当前位置:编程学习 > 网站相关 >>

Weblogic classloader分析

首先采用两个用例测试一下基本的web应与EJB应用的classloader层次结构。测试的源代码提供在附件中了:
1. web应用,包括两个同内容不同名的JSP和两个同内容不同名的Servlet. JspLoader.jsp, jspLoader2.jsp, ServletLoader, ServletLoader2.
2. EJB应用   包括一个简单的EJB3.0 bean, LoaderBean和客户端EjbClient.
测试结果:
JSPLoader.Jsp:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation:
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation:
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
Level7: weblogic.servlet.jsp.TagFileClassLoader@816eac finder: weblogic.utils.classloaders.CodeGenClassFinder@816f22 annotation:
Level8: weblogic.servlet.jsp.JspClassLoader@1150af3 finder: weblogic.utils.classloaders.CodeGenClassFinder@1150b67 annotation:
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61
JSPLoader2.Jsp:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation:
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation:
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
Level7: weblogic.servlet.jsp.TagFileClassLoader@816eac finder: weblogic.utils.classloaders.CodeGenClassFinder@816f22 annotation:
Level8: weblogic.servlet.jsp.JspClassLoader@1150af3 finder: weblogic.utils.classloaders.CodeGenClassFinder@1150b67 annotation:
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61 
 
ServletLoader:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
 
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61
 
ServletLoader2:
 
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
 
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61
 
EJB:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@1e8de86 finder: weblogic.utils.classloaders.CodeGenClassFinder@1e8defa annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@1e8df10 finder: weblogic.utils.classloaders.CodeGenClassFinder@1e8df89 annotation: TestEJB3Loader@
 
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61
从上面的结果首先以下结论:
同一Web应用的JSP或Servlet,其classloader的前六层是一样的(严格的说是7层,因为bootstrapClassLoader没输出,原因这里也不提了)。
对于JSP页面多了两层Classloader,TagFileClassLoader 和JspClassLoader,从上面结果可以看每个JSP文件对应一个JspClassLoader,而整个web应用的JSP页面共用一个TagFileClassLoader。
再看EJB,classloader的前三层与web应用的前三层是一样的,基本以为GenericClassLoader是用来加载weblogic的产品内部的相关类,前两层用来加载JDK的类,具体情况以后再做论述。
weblogic11g p3也是就10.3.4(oracle把weblogic的这个版本号搞得人晕头转向,后附一个版本对照表)添加了一个类分析工具Classloader Analysis Tool,以web应用的方式法提供。
补充:Web开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,