Saxon在ApacheTomcat中缓慢加载
我正在Tomcat项目中使用Saxon。第一次使用萨克森时,我经历了一个很长的延迟,10秒。我可能在最好的地方没有Saxon JAR或Saxon许可证 我已将Saxon许可证放在Tomcat lib目录中。(用CATALINA和Tomcat罐子)。我已经将Saxon JAR放在我的web应用程序的Saxon在ApacheTomcat中缓慢加载,tomcat,saxon,Tomcat,Saxon,我正在Tomcat项目中使用Saxon。第一次使用萨克森时,我经历了一个很长的延迟,10秒。我可能在最好的地方没有Saxon JAR或Saxon许可证 我已将Saxon许可证放在Tomcat lib目录中。(用CATALINA和Tomcat罐子)。我已经将Saxon JAR放在我的web应用程序的web-INF/libdir中 我使用的是ApacheTomcat7.0.65、Java1.7.0_80、SaxonEE9.7.0.5、Windows10 我怎么知道第一次加载Saxon需要多长时间?模
web-INF/lib
dir中
我使用的是ApacheTomcat7.0.65、Java1.7.0_80、SaxonEE9.7.0.5、Windows10
WEB-INF/lib
dir有139个JAR提供堆栈跟踪是否有帮助?慢速区域的部分列表如下所示:
14,772 ms net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(javax.xml.transform.Source)
14,772 ms net.sf.saxon.s9api.XsltCompiler.compile(Source)
...
11,429 ms net.sf.saxon.expr.instruct.NumberInstruction.simplify()
11,429 ms net.sf.saxon.expr.instruct.NumberInstruction.preallocatNumberer(Configuration)
11,429 ms makeNumberer()
11,429 ms getNumberer()
11,336 ms JavaPlatformPE.hasICUNumberer()
...
11,305 ms com.ibm.icu.text.RuleBasedCollater.<clinit>
...
11,180 ms Class.getResourceAsStre
14772 ms net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(javax.xml.transform.Sourc(e)
14772 ms net.sf.saxon.s9api.XsltCompiler.compile(源代码)
...
11429 ms net.sf.saxon.expr.instruction.NumberInstruction.simplify()
11429 ms net.sf.saxon.expr.instruction.NumberInstruction.preAllocatNumberrer(配置)
11429 ms makeNumberer()
11429毫秒GetNumber()
11336 ms JavaPlatformPE.hasICUNumberer()
...
11305 ms com.ibm.icu.text.RuleBasedCalator。
...
11180 ms Class.getResourceAsStre
6月2日的更多信息
Class.forName(“com.ibm.icu.text.RuleBasedNumber格式”)代码>
花很少的时间
在调用newTemplates()之前使用Class.forName没有帮助
com.saxonica.config.ICULibrary.hasNumberer()
返回true
icu4j-49.1.jar位于类路径中
new com.saxonica.config.ICULibrary()代码>需要10秒您是否使用JAXPTransformerFactory.newInstance()方法加载Saxon?这涉及到对类路径的搜索,这可能非常耗时,因为类路径上有139个jar。考虑通过直接指定萨克森变压器工厂来实现实例化,例如
TransformerFactory f = new com.saxonica.config.EnterpriseTransformerFactory();
根据提供的新信息,编译xsl:number
指令时会出现延迟,尤其是加载Saxon EE用于本地化支持的ICU库时。Saxon正在对类com.ibm.icu.text.RuleBasedCalator
和com.ibm.icu.text.RuleBasedNumberFormat
进行动态加载,如果类路径上有saxon9-icu.jar,则应在该类中找到,如果您有不同的版本,则应在ICU4j库的不同版本中找到。如果找不到该类,Saxon将继续使用它,但本地化支持会减少
因此,出于某种原因,加载此类时对Class.getResourceAsStream()的调用似乎长期缓慢。我不知道为什么,但希望这能缩小调查范围。要检查的是(a)加载是否确实成功(调用静态方法com.saxonica.config.icullibrary.hasNumberer()
以了解);(b) ICU库是否在类路径上,如Saxon发行版中发布的或其他版本;然后(c)执行一些加载程序跟踪,也许只是执行
Class.forName("com.ibm.icu.text.RuleBasedNumberFormat")
根本不涉及撒克逊人 谢谢你的快速回复。我会调查的。提供堆栈跟踪会有帮助吗?缓慢区域的部分列表如下:14772 ms net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(javax.xml.transform.Source)14772 ms net.sf.saxon.s9api.XsltCompiler.compile(源)。。。11429 ms net.sf.saxon.expr.instruction.NumberInstruction.simplify()11429 ms net.sf.saxon.expr.instruction.NumberInstruction.PreAllocatNumber(配置)11429 ms MakeNumber()11429 ms GetNumber()11336 ms JavaPlatformPE.hasICUNumberer()。。。11305 ms com.ibm.icu.text.RuleBasedCalator。。。11180 ms Class.getResourceasstre感谢您提供的信息,我已将其复制到问题中,因为它实际上不是对答案的评论。那么Class.forName(“com.ibm.icu.text.rulebasedcolator”)呢?