1

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

DTMManager 类名称查找问题之前已记录在案,并通过设置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类的类似行为 - ClassLoader 在每次调用时重新加载类定义DTDDVFactory.newInstance

4

1 回答 1

0

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

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

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

于 2012-06-13T19:25:21.923 回答