2012-04-28 50 views
1

我們繼承了一個應用程序(基於Java,運行在WebLogic 10.3.5上),它廣泛使用JSTL XML標記,特別是XPath選擇器。我們很快就遇到了一些性能問題,這是由於這些標記的實現以及DTMManager類是如何首先解析的,然後由DTMManager.newInstance方法實例化的。Xalan 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類 - ClassLoader在每次調用DTDDVFactory.newInstance時重新加載類定義。

+0

哇,我後悔讓這個問題已晚... Xerces的很慢... VTD-XML是比Xerces好得多,無論是解析還是XPath ... – 2016-05-06 06:42:59

回答

0

除了避免廣泛使用這些標籤之外,似乎沒什麼可以做的。我們重構這個代碼段:

  • XML解析現在被使用JAXB來填充從XSD生成的對象圖的自定義標籤進行,
  • 的JSP現在使用標準的符號諮詢對象圖

只是表明,在JSP做XML解析是不是一個特別好的主意......