Saxon在ApacheTomcat中缓慢加载

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需要多长时间?模

我正在Tomcat项目中使用Saxon。第一次使用萨克森时,我经历了一个很长的延迟,10秒。我可能在最好的地方没有Saxon JAR或Saxon许可证

我已将Saxon许可证放在Tomcat lib目录中。(用CATALINA和Tomcat罐子)。我已经将Saxon JAR放在我的web应用程序的
web-INF/lib
dir中

我使用的是ApacheTomcat7.0.65、Java1.7.0_80、SaxonEE9.7.0.5、Windows10

  • 我怎么知道第一次加载Saxon需要多长时间?模糊的问题
  • 该项目是一个Maven项目,因此
    WEB-INF/lib
    dir有139个JAR
  • Saxon JAR和许可证应该放在哪里
  • 新信息2017年6月1日


    提供堆栈跟踪是否有帮助?慢速区域的部分列表如下所示:

    14,772 ms net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(javax‌​.xml.transform.Sourc‌​e)
    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.preallocatNumbe‌​rer(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.preAllocatNumber‌​rer(配置)
    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秒

    您是否使用JAXP
    TransformerFactory.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”)呢?