《tomcat类冲突解决方案.docx》由会员分享,可在线阅读,更多相关《tomcat类冲突解决方案.docx(5页珍藏版)》请在第一文库网上搜索。
1、应用服务器类冲突报错解决方案类冲突的原因之所以会产生这样的一个报错的原因是因为在应用服务器当中,在加载类即对jar包的 调用上遵循这样一个顺序:就是先调用应用服务器的jar包再调用工程的jar包。第一个问题:jar包加载顺序具体如下图所示:C:Apache Software FoundationTomcat 6.0lib 这是 tomcat 卜的 jar 包。文件更)编辑(!)查看S 收藏0)工具9 帮助后退。传/ 解文件夹叵9梃接文件和文件夹任务J创连一个新文件夹。将这个文件夹发布到 KebR共享此文件夹EKml1 amotation-ap. jar 普%JAR压编文库Catalina. j
2、arn好压jar世缩文件Hvfl 1,027 KBV flEEm! CataIina-ant. jarUB 热AR压缩文件其它位置Tomcat 6. 0我的文档 共享文档我的电脑网上邻居详细信息Sel-api. jar好压JAR压缩文件27 KB阖 to*ct-il8n-j j4 n 密BJAR压翁文柞ServleLapiJar 好压JAK在缮文件87 KBjasper, jarE JAR压缩文件501 KBjasper-el. jar JAR 1文件 100 KBtW tOacat-Coyote. jar 1多好压N置箱文件fl 686 KB16个对象4 35 MB i我的电脑C:Apach
3、e Software FoundationTomcat 6.0webappsWebReportXWEB-INFMib 这是我们部署在 tomcat F webreport 工程的 jar 包。对于这两个地方的jar包又这样的加载顺序:先加载tomcat的Iib下的jar包再加载WebrePOrt 下面的jar包。第二个问题:类冲突报错的原因在我们的工程目录WebRepoMWEB-INFMib下的2个jar包:A 和BoA和B两个jar包中都有一个类class叫做Co现在的问题是A.C有一个方法(就是一个处理程序)叫做D,而B.C 中没有这个方法。A.C.DB.C在这个目录下加载是没有顺序的,在
4、使用C类的时候:如果加 载的是Ajar包中的C类,这时要使用D方法是没有报错;如果加载 的是Bjar包的C类,这时要用D方法就没有,就会报类冲突的错误。我们本身的jar包fr-server.Jar和fr-third.jar都放在工程的Iib目录 下,一般出现这样的类冲突都是发生在fr-third.jar与其他jar文件之 间的,因为fr-third.jar是引用的第三方的类,难免其他驱动程序的jar 包也会引用这些类,所以就留下了隐患。解决方案利用tomcat的Iib和webreport的工程的Iib的加载顺序,把方法 多的jar包放到tomcat的Iib下面,让他优先加载,这样就避免了加 载
5、了没有用到该方法的jar包。所以如果遇到这类问题的时候,根据报错信息寻找相关的jar包, 作相应的移植即可。类冲突解决实例上海泛微在使用tomcat的时候有过这样的报错,如下图所示:H首页 上一页 0 I/ I 下一页I 1末页会议日期:2010-D7-05 至 2010-07-11500 Servlet Exceptionava. lang. NociassDefFoundError: orgapache/COmmOnS/pool/implGeneriCobjeetPOoI at com.fr.data. pool. Connect IonPoolManager. getDat aSourc
6、e(Unknown Source) at com. fr. data. impL JDBCDatabaseConnection. createConnection(Unknown Source) at com. f r. data, ipl. NameDat abas eConnect ion. c r e at eC onne ct i on (Unknown Source) at com. fr. data, impl. TableDataAdapter. checkInCoIumn(Unknown Source) at com. f r. data, impl. TableD at aA
7、dapt e r. get Co IuninCount (Unknown Source) at com. f r. data, impl. DBTableData. get Co IumnCourrt (Unknown Source) at com. fr. report, core. cal. SE. dealWithBEDSColunin(Unknown Source) at com.fr.report.core. cal. SE.access$1900(Unknown Source) at com.fr.report, core. cal. SE$BE. cc_ce_array(Unkn
8、own Source) at com. fr. report, core. cal. SE. CalculateCellElejnent (Unknown Source) at com.fr.report.core. cal. SE.execute(Unknown Source) at com. fr. report. Worksheet. _execute(Unknown Source) at com.fr. report. Worksheet, execute(Unknown Source) u. q. -Ilf_ .1_D _ 1_ .a . TT 1 C .一一一 java.lang.
9、NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool 这个报错信息就是类冲突的具体报错信息,这句话就说明了缺少jar文件,这个报错是有关POOl 的一个方法,具体位置在fr-third.jar里面:EFineReport6.5WebReportWEB-INFMibfr-third-6.5.jarorgapachecommonspoolimpl11fr-third-6. 5. jar 好压f)j文件9 编辑)查看9 工具Ql选项a)帮助QD皆高W 1 $ N想/鹏O 后退 O ? IT ,r E FinRport
10、6. 5IbRportWEB-INFlibfr-third 6. 5. j*ror)Generi cKeyedbjectPool, class17.50 KB7.89 KB2010-06-24 00:11:50CLASSGenericKeyedobjectPoolSObjectTimestarn.1.44 KB1 KB2010-06-24 00:11:50CLASSK)GeneriCKeyedbjectPool$Evictor, class1.19 KB1 KB2010-06-24 00:11:50CLASSGeneriCKeyedObjectPool$Config. class1 KB1 KB2010-06-24 00:11:50CLAS5MGeneriCKeyedobjeCtPOo1$ ICIaSS1 KB1 KB2010-06-24 00:11:50CLASS_|总计1个文件(14. 45 KB , 14,804字节)总计16个文件(63.43 KB, 64,955字节)为了让拥有这个GenericObjectPool的jar包优先被加载,利用服务器的Iib和工程的Iib 的加载顺序关系,把fr-server.jar考到服务器的Iib下面,就不会出现这样的报错了。总之解决这样的问题的方法就是,根据报错找到对应的jar包,移植到Web服务器下面 的Iib下面即可。