Xalan DTMManager.newInstance性能问题

时间:2012-04-28 19:12:09

标签: java xml weblogic xerces xalan

我们继承了一个应用程序(基于Java,在WebLogic 10.3.5上运行),它广泛使用JSTL XML标记,尤其是XPath选择器。很快我们遇到了一些性能问题,因为这些标签的实现以及DTMManager类首先被解析然后由DTMManager.newInstance方法实例化。

DTMManager类名称查找问题以前是documented,并通过设置com.sun.org.apache.xml.dtm.DTMManager系统属性来解决。

但是,一旦找到类名,com.sun.org.apache.xml.internal.dtm.ObjectFactory.findProviderClass方法要求(非null)类加载器加载类定义,它永远不会缓存结果!在WebLogic环境中,此操作非常昂贵,占用了响应时间的很大一部分。

有没有理由为什么类定义永远不会被缓存?有没有办法避免每次都加载类定义?

非常感谢。

更新 com.sun.org.apache.xerces.internal.impl.dv.DTDDVFactory类可以观察到类似的行为 - ClassLoader会在每次调用DTDDVFactory.newInstance时重新加载类定义。

1 个答案:

答案 0 :(得分:0)

除了避免大量使用这些标签之外,似乎没有什么可以做的。我们重构了这段代码:

  • XML解析现在由自定义标记执行,该标记使用JAXB填充从XSD生成的对象图,并且
  • JSP现在使用标准表示法来查阅对象图

只是表明在JSP中进行XML解析并不是一个特别好的想法......