Interstage Application Server 移行ガイド |
目次
索引
![]() ![]() |
第3章 Interstage Application Server V6からの移行 | > 3.3 J2EEアプリケーションの移行 |
V7.0では、アプリケーションのクラスのロードを行うクラスローダ機能を提供しています。クラスローダ機能の提供により、クラスローダのデフォルト設定が従来と異なります。このため、クラスローダの分離方法をV6.0までの互換である“分離しない”以外を選択した場合は、以下の点に注意してください。
V6.0との違いについては、以下を参照してください。また、クラスローダの詳細については“J2EEユーザーズガイド”の“クラスローダ”を参照してください。
EARファイルを配備すると、下図のように、EARファイルに含まれるEJBアプリケーションはシステムクラスローダでロードされました。そのため、同一プロセス内の他のEARファイルに含まれるEJBアプリケーションを参照できました。
“クラスローダの分離”の設定値やアプリケーションの配備方法によって、アプリケーション間の参照可否が異なります。“クラスローダの分離”には“EAR間で分離”(デフォルト設定)を設定することをお勧めしますが、以下を参考にして、設定内容を検討してください。
EARファイルを配備すると、下図のように、クラスローダはEARごとに割り当てられます。このようにクラスローダを割り当てることにより、アプリケーション間の独立性が高められました。しかし、その一方で、同一プロセス内の他のEARに含まれるEJBアプリケーションを参照できなくなりました。
注) ejb-jarを単体で配備した場合は、V6.0までと同様に、同一プロセス内の他の単体で配備したejb-jarに含まれるEJBアプリケーションを参照できます。
下図のように、関連するEJBアプリケーションを1つのEARファイルに含めてIJServerに配備してください。
関連するEJBアプリケーションを1つのEARファイルに含めることができない場合は、以下のどちらかの方法で、“クラスローダの分離”に“分離しない”を設定してください。
クラスローダの分離については“J2EE ユーザーズガイド”の“クラスローダの分離”を参照してください。
“クラスローダの分離”に“分離しない”を設定した場合は、HotDeployができません。
HotDeployを行う必要がある場合は、以下のどちらかの対処をしてください。
V6では環境変数:CLASSPATHに設定された値はIJServer起動時に有効となっていました。
V7ではクラスローダの分離が“EAR間で分離”または“すべて分離”の場合、以下の理由により環境変数:CLASSPATHはIJServer起動時に有効となりません。
なお、クラスローダの分離が“分離しない”の場合は、V6と同様に環境変数:CLASSPATHはIJServer起動時に有効となります。この場合、環境変数:CLASSPATHはシステムクラスローダでロードされます。
IJServerのクラスの設定方法については、“J2EEユーザーズガイド”の“J2EEアプリケーションの設計”−“クラスローダ”−“IJServerで使用するクラスの設定について”を参照してください。
クラスローダの分離が“EAR間で分離”または“すべて分離”の場合、J2EEプロパティまたはワークユニットのクラスパスに設定されたクラスはInterstageクラスローダでロードされます。
そのためJ2EEプロパティ、またはワークユニットのクラスパスとアプリケーション(EAR、ejb-jar、WAR、RAR)の両方に同じクラス名のクラスが存在する場合、そのクラスをアプリケーションから参照するとアプリケーションのクラスが使用されます。同じクラスをJ2EEプロパティ、またはワークユニットのクラスパスに設定されたクラスから参照すると、J2EEプロパティまたはワークユニットのクラスパスに設定されたクラスが使用されます。
これは何を意味するのかというと、J2EEプロパティまたはワークユニットのクラスパスに設定されたクラスとアプリケーションのクラスが物理的に同じファイルであっても、参照する場所によって別のクラスとして扱われ、ClassCastExceptionが発生する可能性を含んでいるということになります。
これを回避するためには以下の手段が有効となります。
以下の条件に該当する場合、Interstageのインストールディレクトリには英数字および、“-”、“_”、“.”、“~”、“'”、“$”、“&”、“,”、“+”、“@”以外の文字は使用できません。
以下のいずれかの対処を行ってください。
以下の条件に該当する場合、ワークユニットのクラスパスには英数字および、“-”、“_”、“.”、“!”、“~”、“'”、“(”、“)”、“$”、“&”、“,”、“+”、“@”以外の文字は使用できません。
以下のいずれかの対処を行ってください。
クラスローダの分離方法に“EAR間で分離”(デフォルト設定)または“すべて分離”を選択した場合、HotDeploy機能などのクラスローダ機能の新機能を使用することができますが、EJBアプリケーションの規模に応じてメモリ使用量が変動します。
したがって、クラスローダの分離方法を変更(“分離しない”以外を選択)した場合は、メモリ使用量について再度、見積りを実施してください。
メモリ使用量の概算値は、以下の式より算出してください。
[EJBアプリケーションクラスファイルの合計サイズ]*2.0[安全係数] |
HotDeployなどのクラスローダ機能のエンハンス機能が必要ない場合、V7で作成したIJServerに、定義項目“クラスローダの分離”に“分離しない”を指定することで、クラスローダの構成をV6互換モードで動作させることができます。
同じNativeモジュールは同じクラスローダ上からのみ利用可能です。別々のクラスローダで同じNativeモジュールをロードしようとした場合、java.lang.UnsatisfiedLinkErrorがスローされます。
V6まではEJBアプリケーションはすべてシステムクラスローダでロードされていましたが、V7ではクラスローダの分離の定義によってEJBアプリケーションをロードするクラスローダが分離されます。そのため、別々のEJBアプリケーションから同じNativeモジュールをロードしようとした場合、別々のクラスローダで同じNativeモジュールがロードされることになり、java.lang.UnsatisfiedLinkErrorがスローされる可能性があります。
“J2EEユーザーズガイド”の“クラスローダ”の“クラスローダ使用時の注意事項”を参照して対処を行ってください。
目次
索引
![]() ![]() |