【问题标题】:Xalan DTMManager.newInstance performance issueXalan DTMManager.newInstance 性能问题
【发布时间】:2012-04-28 19:12:08
【问题描述】:

我们继承了一个应用程序(基于 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 方法就会要求(非空)类加载器加载类定义,并且它永远不会缓存结果!在 WebLogic 环境中,此操作非常昂贵,并且占用了我们很大一部分响应时间。

类定义没有被缓存有什么原因吗?有没有办法避免每次都加载类定义?

非常感谢。

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

【问题讨论】:

    标签: java xml weblogic xerces xalan


    【解决方案1】:

    除了避免大量使用这些标签之外,似乎无能为力。我们已经重构了这段代码:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2011-02-18
      • 2017-04-13
      • 2019-07-16
      • 2022-01-04
      • 1970-01-01
      相关资源
      最近更新 更多