开发学院软件开发Java 关于weblogic中使用Dom4j、Xerces导致执行线程挂起... 阅读

关于weblogic中使用Dom4j、Xerces导致执行线程挂起的问题

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 看看两个方法的具体实现,这个问题基本一目了然了吧,关于weblogic中使用Dom4j、Xerces导致执行线程挂起的问题(3), 在我们要解析XML文件的时候,我们首先需要从parser factory获取一个parser实例,最终看到线程都停在了java.util.zip.ZipFile.g

看看两个方法的具体实现,这个问题基本一目了然了吧。 在我们要解析XML文件的时候,我们首先需要从parser factory获取一个parser实例,但parser factroy是什么? 我们需要去查找。仔细看一下这个查找顺序:

1:System property, JVM中是否定义了javax.xml.parsers.SAXParserFactory,这个可以通过-D设定

2:$JRE_HOME/ lib/jaxp.properties文件,是否存在javax.xml.parsers.SAXParserFactory键值对

3:xerces.jar文件的meta-inf/services/javax.xml.parsers.SAXParserFactory文件是否有值

4:当前classloader,是否存在org.apache.xerces.jaxp.SAXParserFactoryImpl,

从thread dump可以看到,客户线程挂在了3上,因为1, 2条件不成立,所以走到了3, 而3每次都要打开jar文件,最终看到线程都停在了java.util.zip.ZipFile.getEntry()上。 解决方法:

1:启动JVM的时候,增加-Djavax.xml.parsers.SAXParserFactory=***

2::在$JRE_HOME/lib/增加jaxp.properties文件,其中定义javax.xml.parsers.SAXParserFactory=***

3:用展开的xerces.jar文件代替原有的jar文件

客户同时提及了另外一个问题:我们有自己的parser factory, 为什么最后用了weblogic的? 而且不停的load class? Trace 如下:

"ExecuteThread: '42' for queue: 'OCS.Thread.Pool'" daemon prio=5 tid=004ca430 nid=245 lwp_id=1886146 waiting for monitor entry [0x1d9ba000..0x1d9ba4f0]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:278)
 - waiting to lock <364cdf18> (a weblogic.utils.classloaders.GenericClassLoader)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
 at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:224)
 at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:93)
 at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:174)
 ......

上一页  1 2 3 4  下一页

Tags:关于 weblogic 使用

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接