3.7.4 パーサ切り替え機能の注意事項
- 〈この項の構成〉
(1) コンテナ拡張ライブラリへのXML実装
usrconf.cfgにXML Processor以外のXML実装のクラスパスを指定すると,アプリケーションサーバの起動処理やコンポーネントの動作に影響を与えるため,コンテナ拡張ライブラリにXML実装は指定できません。
コンテナ拡張ライブラリの詳細については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「18. コンテナ拡張ライブラリ」を参照してください。
(2) アプリケーションサーバの機能を使用する場合の注意事項
アプリケーションサーバが提供する機能には,XML Processorの動作を前提とするものがあります。次の表に示す機能は,同一のアプリケーションの中でパーサ切り替え機能と同時に使用すると正常に動作しない場合があるため,注意してください。
APIの種類 |
XML実装の切り替えに対応していないアプリケーションサーバの機能 |
---|---|
JAXP API |
|
StAX API |
|
JAXB API |
|
回避策として,ユーザ同梱のXML実装を必要とする部分と,アプリケーションサーバが提供する機能を必要とする部分とを別のアプリケーションに分けることを検討してください。
また,Service Coordinatorが動作するJ2EEサーバ上では,ユーザ同梱のXML実装を必要とするアプリケーションをService Coordinatorと別のJ2EEサーバで動作させることで回避してください。
(3) 切り替えるXML実装のバージョンについて
パーサ切り替え機能はXML実装を切り替えるだけで,APIは切り替えられません。そのため,APIのバージョンはアプリケーションサーバがサポートするバージョンから変更できません。
例えば,アプリケーションサーバがサポートするバージョンとは異なるバージョンに準拠したXML実装に切り替えた場合,XML Processor 09-50でサポートしているJAXP1.4/StAX1.0/JAXB2.2の範囲で使用され,新しいバージョンで追加されたAPIを使った開発・実行はできません。また,仕様変更による影響が発生したり,API使用時にエラーや例外が発生したりするおそれがあるため,異なるバージョンのXML実装へ切り替える場合には注意してください。
(4) XMLの実装クラスの切り替えについて
JAXP1.4やJAXB2.2では,実装クラス切り替えの仕組みを規定しています。次に示す方法ですでに実装クラスを切り替えている場合は,その指定が優先されるため,パーサ切り替え機能の指定は有効になりません。
-
システムプロパティでファクトリクラスを指定している場合
-
jaxp.propertiesでJAXPのファクトリクラスを指定している場合
-
stax.propertiesでStAXのファクトリクラスを指定している場合
-
jaxb.propertiesでJAXBのファクトリクラスを指定している場合
したがって,jaxb.propertiesの指定が必須であるJAXB1のような実装はパーサ切り替え機能で切り替えることはできません。
(5) Component Containerのローカル呼び出し最適化機能を使用する場合の注意事項
J2EEアプリケーションでXML実装を同梱する場合,Component Containerのローカル呼び出し最適化機能で最適化の範囲にallを指定する(ejbserver.rmi.localinvocation.scope=all)と,同一J2EEサーバ上で動作するすべてのアプリケーションのXML実装が切り替わります。J2EEアプリケーションが持つEJB-JARやライブラリJARは同一のクラスローダでロードされるため,同名のクラスはJ2EEアプリケーション間で共有されます。内容の異なる同名クラスが存在する場合は,Javaの仕様上,先にロードされたクラスだけが有効となるため,注意して使用してください。
ローカル呼び出し最適化機能の詳細については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「付録B.2 ローカル呼び出し最適化時のクラスローダ構成」を参照してください。
(6) クライアントで動作するJavaアプリケーションのXML実装切り替えについて
Javaアプリケーションでは,Javaアプリケーション用ユーザプロパティファイルにシステムプロパティを指定することでXML実装が切り替えられるため,パーサ切り替え機能はサポートしていません。
Javaアプリケーション用ユーザプロパティファイルの詳細については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「12.2.2 usrconf.properties(Javaアプリケーション用ユーザプロパティファイル)」を参照してください。