`
三问飞絮
  • 浏览: 316469 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

Weblogic10 Classloading 问题<转>

    博客分类:
  • Java
 
阅读更多

首先要说说Weblogic的classloading的机制(不同的Applicaiton Server,classloading的方式各有不同)。简而言之,weblogic默认情况下采用的是parent first的方式。但这个parent first,是有“讲究”(tricky)的。

 

1。父类加载器和子类加载器之间的关系类似于Java中,父类和子类之间的对象关系。

2。Weblogic会将所有load到的class缓存到cache中。(子类classloader能看到父类classloader加载到cache中的class)

 

默认情况下,当我们的应用程序(ear,war)运行时,会先去cache中查找class,如果找不到。就去System Classpath loader 里去找class。如果System Classpath loader里能找到你需要的类,那么不好意思,你在ear和war包里包含的class就没用了。

 

如果System ClassPath Loader找不到,接下来去ear的class path里找,接着去EJB class path里找,最后到war的class path里找。一旦找到了该类,就会load起这个类,并将该类放入cache中。

上面的描述,没什么奇怪,但需要注意的是下面的情况。当应用程序执行时,classloader需要的类还未在classloader里存在。默认情况下,此时classloader会由上至下从class path里找,也就是说先去System和Application的class path里找,而不是先向war的class path里找。所以,这种情况下,如果application的class path里能找到所需要的class,那么就算war的class path里有同样的class,war里的class是不会被load到的。

 

假设情况1:(只在webapp里有class A)

No Class A in current class loader cache -> Find System class path (Not found class A) -> Find Application class path (Not found class A) -> Find EJB class path (Not found class A) -> Find WebApp class loader (Found class A)

假设情况2:(在application和webapp里都有class A)

No Class A in current class loader cache -> Find System class path (Not found class A) -> Find Application class path (Found class A)

 

实际案例:

前几天,有同事用到一个第三方类库wsdl4j.jar,并该类库放在在Webapp的lib目录里。但是系统运行时,总是报类库版本不对的错误。问题就是在于,之前该项目在Application的class path里已经存在该类库了(给其他的war用),而且application class path里的类库和war里用的是不同的版本。

 

app.ear

|----->lib

            |-->wsdl4j.jar

|------>a.war (using wsdl4j.jar in ear/lib)

|------>b.war (using wsdl4j.jar in ear/lib)

|------>c.war (using wsdl4j.jar in war/lib)

             |---->WEB-INF

                      |---->lib

                                |--->wsdl4j.jar

 

解决方法:

weblogic提供了一个标签<prefer-web-inf-classes>,这个标签默认是false的,只要设置这个标签为true,就可以让WEB-INF里的类先被load到了。

 

特殊案例:(当第三方jar和weblogic.jar有冲突)

项目中使用CXF的webservice,CXF里有自己的javax.jws.*实现,而weblogic.jar里也有类似实现,Weblogic启动的时候似乎已经把weblogic.jar里的类都load进所谓的system classpath classloader了,程序在使用javax.jws.*的类时,类已经被system classpath classloader加载了,所以就算使用<prefer-web-inf-classes>标签也没有用。CXF总是用不上自己的javax.jws.*。

 

解决方法:

根据weblogic的官方文档,只要是在$CLASSPATH里的jar包都会在weblogic启动的时候load起来,存入“system classpath classloader”的cache里,所以程序运行时,classloader先从cache里找class,也就找到weblogic.jar里的javax.jws.*,所以永远不会尝试查找CXF里的javax.jws.*了。weblogic9以后提供了一个新的标签<prefer-application-packages>。用这个新标签能够让应用程序遇到javax.jws.*时,程序会直接到指定的ear的application class loader里找类,而不使用在“system classpath classloader”里的class。

 

大部分情况下,使用<prefer-web-inf-classes>,应该能解决classloading的问题,在<prefer-web-inf-classes>不生效的时候,就考虑使用<prefer-application-packages>。在网上还有人提到,同时使用这两个标签(一个在weblogic.xml里设,另一个在weblogic-application.xml在设)时,<prefer-web-inf-classes>的配置无效,这个问题还有待考证。

 

Reference:

http://chang.baidu.com/e_ville/snap/90dd96b459e4b1f74394861f.html

http://e-docs.bea.com/wls/docs100/programming/classloading.html#wp1082452

http://svn.apache.org/repos/asf/webservices/axis2/site/1_4/app_server.html

分享到:
评论

相关推荐

    Weblogic使用手册

    Weblogic使用手册&lt;br&gt;域、管理服务器与受管服务器 9&lt;br&gt;启动管理控制台 10&lt;br&gt;运行时对象与配置对象 11&lt;br&gt;日志消息的集中访问 12&lt;br&gt;WEBLOGIC管理服务器与WEBLOGIC受管服务器 13&lt;br&gt;启动时的错误消息 13&lt;br&gt;启动...

    jive.chm

    2 MakeWAR.jar文件中的MakeWAR.class源代码MakeWAR.java &lt;br&gt; 3 为Jive写的补丁程序patcher.jar的源程序 &lt;br&gt; 4 WebLogic中文问题配置文件 &lt;br&gt; 5 JSP系统信息配置探针 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;反编译与混淆&lt;br&gt; 1 編譯、...

    Terac Miracle v2.0

    &lt;br&gt;Multi-languages(English/Chinese...) &lt;br&gt;Fully customizable templates &lt;br&gt;Categories &lt;br&gt;Comments &lt;br&gt;Files upload &lt;br&gt;RSS syndication &lt;br&gt;WYSIWYG editor &lt;br&gt;*Multi-Users &lt;br&gt;*Static HTML &lt;br&gt;*...

    <<J2EE应用与BEA.WebLogic.Server第2版>>part1 电子速度PDF格式

    J2EE应用与BEA.WebLogic.Server第2版&lt;br&gt;超过10mb&lt;br&gt;分三部分&lt;br&gt;第一部分

    Tomcat下发布JSP程序的N种方法

    &lt;br&gt;&lt;br&gt;loadable(搂得抱)意义为:适于承载的, 可受载的&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;web应用服务器Bea weblogic8.1 设置虚拟目录&lt;br&gt; &lt;br&gt;安装WebLogic8.1, 创建好myDomain域. &lt;br&gt;----------------------------------------...

    jsp+servlet+javabean成绩管理系统

    采用jsp+servlet+javabean,jsp负责...&lt;br&gt;开发调试平台为jbuilder9+tomcat4,在resin和weblogic下测试通过。&lt;br&gt;数据库平台为ms sql server2000&lt;br&gt;数据库连接池为apache组织下jakarta项目组开发的commons-dbcp 1.0

    <<J2EE应用与BEA.WebLogic.Server第2版>>part3 电子速度PDF格式

    J2EE应用与BEA.WebLogic.Server第2版&lt;br&gt;超过10mb&lt;br&gt;分三部分&lt;br&gt;第三部分

    <<J2EE应用与BEA.WebLogic.Server第2版>>part2 电子速度PDF格式

    J2EE应用与BEA.WebLogic.Server第2版&lt;br&gt;超过10mb&lt;br&gt;分三部分&lt;br&gt;第二部分

    CVE-2021-2394工具包

    -jndi &lt;arg&gt; JNDI地址 weblogic JNDI注入选这项填入地址 -Jport &lt;arg&gt; JRMPListener监听 输入监听端口,在本机开启JRMPListener输 -os &lt;arg&gt; window/linux 目标主机系统 不选默认为window -P &lt;arg&gt; Remote Port ...

    基于Weblogic 的ejb 学习笔记

    (1) 无状态会话bean&lt;br&gt; 不保存客户机的会话状态&lt;br&gt; 优点:使用小量的实例即可满足大量的客户。每个实例都没有标识,相互之间是等价的。&lt;br&gt; 等?的无状态会话bean: 多次和一次调用的结果和效应相同。&lt;br&gt; 在...

    WebLogic反序列化_CVE-2017-3248

    -C &lt;arg&gt; (执行命令)Execute Command[need set] -dst &lt;arg&gt; path to dst file -H &lt;arg&gt; (执行主机)Remote Host[need set] -https enable https or tls -noExecPath custom execute path -os &lt;arg&gt; (操作...

    ATGrid报表控件/插件V2.1.7.711

    &lt;br&gt;8、支持MIS开发的各种开发工具:如VC、VB、Delphi、C++Bulider、InterDev &lt;br&gt;9、支持WEB开发,FrontPage、InterDev、ASP.NEt、C# &lt;br&gt;10、EtCell内置支持VBScript脚本包括事件 &lt;br&gt;11、在WEB上支持VBScript、...

    JAVA基础

    大型应用服务器,如oracle application server,IBM webspere,bea weblogic&lt;br&gt;3。无线领域:WAP GATEWAY,JAVA通信软件&lt;br&gt;4。嵌入式领域:如手机游戏,嵌入式设备应用程序,java芯片&lt;br&gt;5。Java图形,如GIS平台的...

    双选框 两个<select>标签组成 高效代码清晰

    由两个&lt;select&gt;标签组成的具有挑选功能的js组建。 可实现左侧的元素移到右侧,右侧移到左侧。 有提交功能。 代码简洁、高效复用性强。 本段代码有Map的遍历读者不必细究。

    weblogic

    weblogic 教程&lt;br&gt;&lt;br&gt;---非扫描,非影像,共三章

    Weblogic 服务器的基本配置

    Weblogic 服务器的基本配置&lt;br&gt;Weblogic 服务器的基本配置

    weblogic在eclipse中的配置

    weblogic 8和weblogic 9在eclipse中的配置&lt;br&gt;eclipse的简单安装&lt;br&gt;一个helloworld的简单实例&lt;br&gt;&lt;br&gt;这个也是仿照同学的写的&lt;br&gt;&lt;br&gt;希望对weblogic的入门者有用

    EJB_WebService PPT

    J2EE相关概念及其体系层次结构&lt;br&gt;EJB相关概念及其分类&lt;br&gt;JBuilder和Weblogic开发会话Bean&lt;br&gt;JBuilder和Weblogic开发实体Bean&lt;br&gt;会话Bean和实体Bean开发J2EE应用&lt;br&gt;不同的解析器解析XML文件&lt;br&gt;JBuilder和...

    weblogic使用手册

    weblogic使用手册&lt;br&gt;&lt;br&gt;格式:pdf

Global site tag (gtag.js) - Google Analytics