尽展体育的魅力,创造历史辉煌!2008让我们为奥运加油,为中国加油!
 
 奥运金牌榜
  
  高级搜索
  首页   技术论坛   博客   产品中心   资源中心   银弹在线   商城  

 
  本文的标签
EOS知识库 (收录442篇)EOS应用分析设计 (收录63篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

Websphere中遇到的类加载问题java.lang.NoClassDefFoundError极其注意事项


发布时间:2007-11-12 18:11:24 作者:cservice 出处: 语言:中文 阅读次数:881

【适用范围】

通用

【问题描述和定位】

在EOS5.3项目的bizlet中写了一个类,在EOS5.3的开发环境中访问没任何问题,部署到WAS6.0上,通过前台页面访问时报错,从日志中看到这样的Exception:
[07-10-24 21:19:33:456 CST] 00000043 WebApp E SRVE0026E: [Servlet 错误]-[webDriver]:java.lang.NoClassDefFoundError: com/primeton/tp/web/driver/webdriver/WebDriver
 at com.primeton.eos.cewolf.tag.DatasetProducerTag.doStartTag(DatasetProducerTag.java:59)
 at com.ibm._jsp._ShowImage._jspx_meth_fbcewolf_datasetProducer_0(_ShowImage.java:312)
 at com.ibm._jsp._ShowImage._jspService(_ShowImage.ja...

看错误信息,很明显是找不到类com.primeton.tp.web.driver.webdriver.WebDriver的缘故。那为什么在开发环境没有出错,部署到WAS上会出错呢?

这是因为WAS的类加载有严格的层次机制,以WAS5.1为例,先加载系统类WebSphere/AppServer/lib,接着加载应用类eos4ws.ear/lib,最后加载Web层的类eos4ws.ear/default.war/WEB-INF/lib。

自己写的类中import了com.primeton.tp.web.driver.webdriver.WebDriver,WebDriver在/default.war/WEB-INF/lib目录中的,对WAS而言,它的class目录层次最低,加载bizlet层的类时,它还没有被加载,所以会出错。

开发环境中没有出错的原因是采用了Jboss3应用服务器作为调试Server,Jboss3比较特殊,在deploy\jbossweb-tomcat50.sar\META-INF\jboss-service.xml 中提供了一个配置项“UseJBossWebLoader”,将它设置为true以后,会导致不同web应用下的class可见,从而\jboss-3.2.5\server\default\lib中的类可以调用到WEB-INF目录下的类,具体描述可以参见如下链接,我们建议尽量避免使用这种情况,因为当不同的应用中拥有同样的类和资源的时候,不同应用之间会产生冲突:

http://gocom.primeton.com/modules/newbb/viewtopic8781.htm?PHPSESSID=8...

【解决方案和步骤】

因为这个类是在JSP页面上调用的,那么,可以把这个类转移到项目的WEB-INF/src目录中,它会被编译、部署到WEB-INF/classes目录中,这样,就能调用同级的WebDriver类了。同时检查Server上ear/classes目录中已经部署过去的class文件有没有删除,不能只是在Studio中删除。

【备注】

 评论 查看全部评论
 
tongyiting 于 2008-05-29
哇!太及时了!谢谢!不过这么多bizlet都放到WEB-INF中工作量很大

 

声明:本栏目转载文字、造型、样式、图形及程序如有来自网络,版权归原作者或首发媒体所有,欢迎任何个人访问或者转载,若有作者及出处有误,请来信说明,我们将及时更正。