2017-05-22 7 views
0

TomcatプロジェクトでSaxonを使用しています。初めてサクソンが使用されたとき、私は10秒という長い遅延を経験します。私はSaxon JARまたはSaxonのライセンスをもっていない可能性があります。Apache TomcatでSaxonのロードが遅くなる

私はSaxonのライセンスをTomcatのlibディレクトリに入れました。 (CATALINAおよびTomcat JARを使用して)。私はSaxon JARをWebアプリケーションのWEB-INF/libディレクトリに配置しました。

私は、Apache Tomcatを7.0.65、Javaの1.7.0_80、サクソンEE 9.7.0.5を使用しています、Windowsの10

  1. は、どのように私はそれが最初の時間をロードするためにサクソンを取るどのくらい伝えることができますか?あいまいな質問。
  2. プロジェクトはMavenプロジェクトですので、WEB-INF/libディレクトリには139個のJARがあります。
  3. サクソンJARとライセンスはどこに置かれるべきですか?

NEW INFORMATIONに2017年6月1日

それはスタックトレースを供給するのに役立ちますか?遅い地域のリストの一部はこれです:6月2日

Class.forName("com.ibm.icu.text.RuleBasedNumberFormat");

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 

詳細はただnewTemplates(への呼び出しの前にClass.forNameを使用して

非常に少し時間がかかります)助けにならない。

com.saxonica.config.ICULibrary.hasNumberer() trueを返し

ICU4J-49.1.jarがクラスパスにある

new com.saxonica.config.ICULibrary();

+0

'Class.forName(" com.ibm.icu.text.RuleBasedCollat​​or ")についてはどうですか? –

答えて

0

あなたがJAXP TransformerFactory.newInstance()メソッドを使用して、サクソンをロードしている10秒かかりますか?これにはクラスパスの検索が含まれます。これはクラスパス上の139個のJARで非常に時間がかかることがあります。 Saxon TransformerFactoryを直接指定することによってインスタンス化することを検討してください。供給された新たな情報に基づいて

TransformerFactory f = new com.saxonica.config.EnterpriseTransformerFactory(); 
+0

クイック返信をありがとう。それを調べます。 –

+0

スタックトレースを提供するのに役立つでしょうか?低速領域の部分的なリストは次のとおりです。 14,772 ms net.sf.saxon.jaxp.SaxonTransformerFactory.newTemplates(javax.xml.transform.Source) 14,772 ms net.sf.saxon.s9api.XsltCompiler.compile(Source ) ... 11429ミリ秒net.sf.saxon.expr.instruct.NumberInstruction.simplify() 11429ミリ秒net.sf.saxon.expr.instruct.NumberInstruction.preallocatNumberer(コンフィギュレーション) 11429ミリ秒makeNumberer() 11429 ms getNumberer() 11,336 ms JavaPlatformPE.hasICUNumberer() ... 11,305 ms com.ibm.icu.text.RuleBasedCollat​​er。 ... 11,180 ms Class.getResourceAsStre –

+0

この情報をお寄せいただきありがとうございます。本当に答えにはコメントではないので、質問にコピーしました。 –

0

サクソン-EEは、ローカライゼーションをサポートするために使用するICUライブラリをロードするとき、遅延は、xsl:number命令をコンパイルするときに発生し、特にです。 Saxonはクラスcom.ibm.icu.text.RuleBasedCollatorcom.ibm.icu.text.RuleBasedNumberFormatに対して動的ロードを実行しています。これは、クラスパス上にある場合はsaxon9-icu.jarに、別のバージョンを使用している場合はICU4jライブラリの別のバージョンにあります。クラスが見つからなければ、Saxonはそれがなくても、ローカライゼーションのサポートを減らし続けます。

したがって、何らかの理由で、このクラスをロードするときにClass.getResourceAsStream()の呼び出しが慢性的に遅いようです。なぜか分からないが、うまくいけば、これは調査を絞り込むだろう。調べるべきことは、(a)ロードが実際に成功しているかどうか(静的メソッドを呼び出すにはcom.saxonica.config.ICULibrary.hasNumberer()を呼び出します)。 (b)ICUライブラリがクラスパス上にあるかどうか(Saxonディストリビューションで発行されたものかそうでないものか) (c)いくつかのローダートレースを行い、おそらく単に実行する

Class.forName("com.ibm.icu.text.RuleBasedNumberFormat") 

Saxonはまったく関与しません。

関連する問題