我对Tomcat 7类加载器及其文档感到有些困惑。
这是我的设置:
执行XML解析的webapp在" clean"上运行正常。没有common.loader库的Tomcat。 common.loader库之一是xercesimpl2.jar。如果存在此JAR,则webapp不再正常工作(它在Xerces中找到GregorianCalendan的实现,并且优先于JRE java.xml.datatype类) - 只有在首先找到JRE类时,webapp才有效。
现在根据Tomcat文档,类查找prio将首先是#st;引导程序,而不是webapp / classes,webapp / lib,然后是common.loader) 为什么webapp不能正常工作,如果它首先使用JRE类(我猜是由引导加载程序加载)?
如果我将xercesimpl.jar移动到webapp的lib文件夹,XML解析webapp也可以工作,但是我需要通过公共加载器加载xercesimpl.jar。
非常感谢任何帮助。
答案 0 :(得分:0)
首先,如果可能的话,我会建议你避免将一堆库扔进公共加载器。它有可能导致很多问题(库版本问题,类转换问题等等),并且通常不会给你带来太多好处(可能会节省少量内存)。
通常,您在共享类加载器中放置的唯一内容(如公共加载器)是JDBC或MQ等驱动程序。相反,这些通常在普通装载机中效果最好。
其次,有一类特殊的库需要使用JVM的认可标准覆盖机制加载。你所指的是其中一个库。 Tomcat在这里有一些相关信息。
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html#XML_Parsers_and_Java
使用支持的加载机制应该有助于解决XML解析器问题。