《tomcat类冲突解决方案.docx》由会员分享,可在线阅读,更多相关《tomcat类冲突解决方案.docx(5页珍藏版)》请在第一文库网上搜索。
1、应用服务器类冲突报错解决方案类冲突的原因之所以会产生这样的一个报错的原因是因为在应用服务器当中,在加载类即对jar包的调用上遵循这样一个顺序:就是先调用应用服务器的jar包再调用工程的jar包。第一个问题:jar包加载顺序具体如下图所示:C:ApacheSoftwareFoundationTomcat6.01ib这是tomcat卜的jar包。文件更)编辑(!)查看S收藏0)工具9帮助后退。传/解文件夹叵9梃接文件和文件夹任务J创连一个新文件夹。将这个文件夹发布到KebR共享此文件夹EKm11amotation-ap.jar普%JAR压编文库Cata1ina.jarn好压jar世缩文件Hvf11
2、,027KBVf1EEm!CataIina-ant.jarUB热AR压缩文件其它位置Tomcat6.0我的文档共享文档我的电脑网上邻居详细信息Se1-api.jar好压JAR压缩文件27KB阖to*ct-i18n-jj4n密BJAR压翁文柞Serv1e1apiJar好压JAK在缮文件87KBjasper,jarEJAR压缩文件501KBjasper-e1.jarJAR1文件100KBtWtOacat-Coyote.jar1多好压N置箱文件f1686KB16个对象435MBi我的电脑C:ApacheSoftwareFoundationTomcat6.0webappsWebReportXWEB-I
3、NFMib这是我们部署在tomcatFwebreport工程的jar包。对于这两个地方的jar包又这样的加载顺序:先加载tomcat的Iib下的jar包再加载WebrePOrt下面的jar包。第二个问题:类冲突报错的原因在我们的工程目录WebRepoMWEB-INFMib下的2个jar包:A和BoA和B两个jar包中都有一个类c1ass叫做Co现在的问题是A.C有一个方法(就是一个处理程序)叫做D,而B.C中没有这个方法。A.C.DB.C在这个目录下加载是没有顺序的,在使用C类的时候:如果加载的是Ajar包中的C类,这时要使用D方法是没有报错;如果加载的是Bjar包的C类,这时要用D方法就没有
4、,就会报类冲突的错误。我们本身的jar包fr-server.Jar和fr-third.jar都放在工程的Iib目录下,一般出现这样的类冲突都是发生在fr-third.jar与其他jar文件之间的,因为fr-third.jar是引用的第三方的类,难免其他驱动程序的jar包也会引用这些类,所以就留下了隐患。解决方案利用tomcat的Iib和webreport的工程的Iib的加载顺序,把方法多的jar包放到tomcat的Iib下面,让他优先加载,这样就避免了加载了没有用到该方法的jar包。所以如果遇到这类问题的时候,根据报错信息寻找相关的jar包,作相应的移植即可。类冲突解决实例上海泛微在使用tom
5、cat的时候有过这样的报错,如下图所示:H首页上一页0I/I下一页I1末页会议日期:2010-D7-05至2010-07-11500Serv1etExceptionava.1ang.NociassDefFoundError:orgapache/COmmOnS/poo1/imp1GeneriCobjeetPOoIatcom.fr.data.poo1.ConnectIonPoo1Manager.getDataSource(UnknownSource)atcom.fr.data.imp1JDBCDatabaseConnection.createConnection(UnknownSource)atc
6、om.fr.data,ip1.NameDatabaseConnection.createConnection(UnknownSource)atcom.fr.data,imp1.Tab1eDataAdapter.checkInCoIumn(UnknownSource)atcom.fr.data,imp1.Tab1eDataAdapter.getCoIuninCount(UnknownSource)atcom.fr.data,imp1.DBTab1eData.getCoIumnCourrt(UnknownSource)atcom.fr.report,core.ca1.SE.dea1WithBEDS
7、Co1unin(UnknownSource)atcom.fr.report.core.ca1.SE.access$1900(UnknownSource)atcom.fr.report,core.ca1.SE$BE.cc_ce_array(UnknownSource)atcom.fr.report,core.ca1.SE.Ca1cu1ateCe11E1ejnent(UnknownSource)atcom.fr.report.core.ca1.SE.execute(UnknownSource)atcom.fr.report.Worksheet._execute(UnknownSource)atco
8、m.fr.report.Worksheet,execute(UnknownSource)u.q.-I1f_.1_D_1_.a.TT1C.一一一java.1ang.NoC1assDefFoundError:org/apache/commons/poo1/imp1/GenericObjectPoo1这个报错信息就是类冲突的具体报错信息,这句话就说明了缺少jar文件,这个报错是有关POO1的一个方法,具体位置在fr-third.jar里面:EFineReport6.5WebReportWEB-INFMibfr-third-6.5.jarorgapachecommonspoo1imp111fr-thi
9、rd-6.5.jar好压f)j文件9编辑)查看9工具Q1选项a)帮助QD皆高W1$N想/鹏O后退O?IT,rEFinRport6.5IbRportWEB-INF1ibfr-third6.5.j*ror)GenericKeyedbjectPoo1,c1ass17.50KB7.89KB2010-06-2400:11:50C1ASSGenericKeyedobjectPoo1SObjectTimestarn.1.44KB1KB2010-06-2400:11:50C1ASSK)GeneriCKeyedbjectPoo1$Evictor,c1ass1.19KB1KB2010-06-2400:11:50C
10、1ASSGeneriCKeyedObjectPoo1$Config.c1ass1KB1KB2010-06-2400:11:50C1AS5MGeneriCKeyedobjeCtPOo1$ICIaSS1KB1KB2010-06-2400:11:50C1ASS_|总计1个文件(14.45KB,14,804字节)总计16个文件(63.43KB,64,955字节)为了让拥有这个GenericObjectPoo1的jar包优先被加载,利用服务器的Iib和工程的Iib的加载顺序关系,把fr-server.jar考到服务器的Iib下面,就不会出现这样的报错了。总之解决这样的问题的方法就是,根据报错找到对应的jar包,移植到Web服务器下面的Iib下面即可。