バージョン 6 から、デフォルト XSLT プロセッサーは、XSLT4J インタープリターから XL TXE-J コンパイラーに置き換わりました。 バージョン 6 より前のバージョンの Java からアプリケーションをマイグレーションする場合は、次の手順に従って、新しいライブラリーに対応するようにアプリケーションを準備してください。
このタスクについて
同じ変換を複数回適用する場合、XL TXE-J コンパイラーは XSLT4J インタープリターよりも高速です。 各変換を一度しか実行しない場合は、XL TXE-J コンパイラーのほうが XSLT4J インタープリターよりも低速です。これは、コンパイルと最適化によってパフォーマンスが低下するためです。
XSLT4J インタープリターを引き続き XSLT プロセッサーとして使用するには、javax.xml.transform.TransformerFactory サービス・プロバイダーを
org.apache.xalan.processor.TransformerFactoryImpl に設定してください。
XL-TXE-J コンパイラーにマイグレーションするには、以下の操作手順を実行します。
注: IBM XML 実装は、 IBM® SDK, Java™ Technology Edition バージョン 8 では非推奨であり、将来のリリースでは Oracle XML 実装に置き換えられます。
手順
- javax.xml.transform.TransformerFactory サービス・プロバイダーを設定する場合は、 com.ibm.xtq.xslt.jaxp.compiler.TransformerFactoryImpl を使用します。
- XSLT4J コンパイラーによって生成されたクラス・ファイルを再生成します。 XL TXE-J では、XSLT4J コンパイラーによって生成されたクラス・ファイルを実行できません。
- コンパイラーにより生成される一部のメソッドが、JVM メソッドのサイズ制限を超えることがあります。この場合、コンパイラーはサイズ制限を超過したメソッドを小さなメソッドに分割しようとします。
- コンパイラーによってメソッドが正常に分割されると、以下の警告が表示されます。
Some generated functions exceeded
the JVM method size limit and were automatically split into smaller
functions. You might get better performance by manually splitting
very large templates into smaller templates, by using the 'splitlimit'
option to the Process or Compile command, or by setting the 'https://www.ibm.com/xmlns/prod/xltxe-j/split-limit'
transformer factory attribute.
コンパイル済みクラスを使用できますが、分割制限を手動で制御することによってパフォーマンスを向上させることができます。
- コンパイラーによってメソッドが正常に分割されないと、以下のいずれかの例外が表示されます。
com.ibm.xtq.bcel.generic.ClassGenException:
Branch target offset too large for short
またはbytecode array size > 65535 at offset=#####
分割制限を手動で設定するか、または分割制限を小さくしてください。
分割制限を設定するには、 Process コマンドまたは Compile コマンドを使用する場合は -SPLITLIMIT オプションを使用し、変換プログラム・ファクトリーを使用する場合は https://www.ibm.com/xmlns/prod/xltxe-j/split-limit 変換プログラム・ファクトリー属性を使用します。 分割制限は 100 から 2000 の間に設定できます。 分割制限を手動で設定する場合、最善のパフォーマンスを得るには、設定可能な最大の分割制限を使用してください。
- XL TXE-J は、XSLT4J コンパイラーよりも多くのメモリーを必要とします。 メモリーが不足しているか、パフォーマンスが低下していると思われる場合は、 -Xmx オプションを使用してヒープのサイズを増やしてください。
- 新規属性キーを使用するようにアプリケーションをマイグレーションします。 古い TransformerFactory 属性キーは使用してはいけません。 古い名前は受け入れられますが、警告が表示されます。
表 1. 属性キーの XSL4J コンパイラーから XL TXE-J コンパイラー
| XSL4J コンパイラー属性 |
XL TXE-J コンパイラー属性 |
| translet-name |
https://www.ibm.com/xmlns/prod/xltxe-j/translet-name |
| destination-directory |
https://www.ibm.com/xmlns/prod/xltxe-j/destination-directory |
| package-name |
https://www.ibm.com/xmlns/prod/xltxe-j/package-name |
| jar-name |
https://www.ibm.com/xmlns/prod/xltxe-j/jar-name |
| generate-translet |
https://www.ibm.com/xmlns/prod/xltxe-j/generate-translet |
| auto-translet |
https://www.ibm.com/xmlns/prod/xltxe-j/auto-translet |
| use-classpath |
https://www.ibm.com/xmlns/prod/xltxe-j/use-classpath |
| デバッグ |
https://www.ibm.com/xmlns/prod/xltxe-j/debug |
| indent-number |
https://www.ibm.com/xmlns/prod/xltxe-j/indent-number |
| enable-inlining |
新規コンパイラーでは廃止 |
- オプション: 最良のパフォーマンスを得るには、再利用可能な XSLT 変換を再コンパイルしないようにしてください。
コンパイル済みの変換を再利用するためには、以下のいずれかの方法を使用します。
- ランタイム時にスタイルシートが変更されない場合は、ビルド・プロセスの一部としてスタイルシートをコンパイルし、コンパイル済みのクラスをクラスパス上に配置します。 org.apache.xalan.xsltc.cmdline.Compile コマンドを使用してスタイルシートをコンパイルし、 https://www.ibm.com/xmlns/prod/xltxe-j/use-classpath 変換プログラム・ファクトリー属性を true に設定して、クラスパスからクラスをロードします。
- アプリケーションを複数回実行するときに、同じスタイルシートが使用される場合は、https://www.ibm.com/xmlns/prod/xltxe-j/auto-translet TransformerFactory 属性を true に設定すると、コンパイル済みスタイルシートが自動的にディスクに保存されて、再利用可能になります。 コンパイラーは、コンパイル済みスタイルシートが使用可能な場合はそれを使用し、使用可能でない場合や期限切れの場合は、新たにスタイルシートをコンパイルします。 https://www.ibm.com/xmlns/prod/xltxe-j/destination-directoryトランスフォーマーファクトリ属性を使用して、コンパイルされたスタイルシートを格納するために使われるディレクトリを設定します。 デフォルトでは、コンパイル済みスタイルシートは、スタイルシートと同じディレクトリーに保管されます。
- アプリケーションが長期実行アプリケーションで、同一のスタイルシートを再利用する場合は、TransformerFactory を使用してスタイルシートをコンパイルし、Templates オブジェクトを作成します。 Templates オブジェクトを使用すると、スタイルシートを再コンパイルせずに Transformer オブジェクトを作成できます。 Transformer オブジェクトも再利用は可能ですが、スレッド・セーフではありません。
- アプリケーションが各スタイルシートを使用する回数が 1 回のみまたは非常に少ない場合、またはこのステップに示されているその他の変更を加えることができない場合は、javax.xml.transform.TransformerFactory サービス・プロバイダーを org.apache.xalan.processor.TransformerFactoryImpl に設定することで、XSLT4J インタープリターを使用し続けることができます。