J2EE 仕様によれば、エンタープライズアプリケーションは次のような構造を必要とする EAR ファイルです。
application.xml という名前の J2EE アプリケーションの XML 配備記述子を含む META-INF/ ディレクトリ
エンタープライズアプリケーションの EJB モジュール用の .JAR アーカイブファイルと Web モジュール用の .WAR アーカイブファイル
アプリケーション配備記述子では、エンタープライズアプリケーションと Web アプリケーションのコンテキストルートを構成するモジュールが定義されます。
Application server 6.x と Application Server 8.2 は、主に J2EE モデルをサポートします。このモデルでは、アプリケーションがエンタープライズアーカイブ (EAR) ファイル (拡張子は .ear) の形式でパッケージ化されます。アプリケーションはさらに J2EE モジュールの集まりに分割され、EJB 用の Java アーカイブ (拡張子が .jar の JAR ファイル) とサーブレットおよび JSP 用の Web アーカイブ (拡張子が .war の WAR ファイル) にパッケージ化されます。
エンタープライズアプリケーションを配備する前に、次に示す手順を実行することが不可欠です。
EJB を 1 つ以上の EJB モジュールにパッケージ化します。
Web アプリケーションのコンポーネントを Web モジュールにパッケージ化します。
EJB モジュールと Web モジュールを組み合わせて 1 つのエンタープライズアプリケーションモジュールを作成します。
エンタープライズアプリケーションのルートコンテキストの名前を定義します。これによって、アプリケーションにアクセスするための URL が決まります。
Application Server では、Application Server 6.x にはなかった新しいクラスローダ階層が使用されます。この新しい方式では、特定のアプリケーションについて、1 つのクラスローダーがすべての EJB モジュールを読み込み、別のクラスローダーが Web モジュールを読み込みます。これら 2 つのモジュールは親子の階層関係を持っており、JAR モジュールクラスローダが WAR モジュールクラスローダの親モジュールになります。JAR クラスローダによって読み込まれたクラスはすべて WAR モジュールでも使用またはアクセスできますが、逆 (WAR クラスローダによって読み込まれたクラスを JAR モジュールで使用またはアクセスすること) はできません。あるクラスが JAR ファイルだけでなく WAR ファイルでも必要な場合は、そのクラスを JAR モジュール内だけでパッケージ化してください。この指針に従わない場合、クラス競合が発生する可能性があります。
Application Server 6.x と Application Server8.2 では、アプリケーションのアクセス URL (アプリケーションの Web モジュールのルートコンテキスト) に関して大きな違いがあります。hostname という名前のサーバー上に配備されたアプリケーションのルートコンテキストの名前が AppName である場合、このアプリケーションのアクセス URL は、次のように使用されるアプリケーションサーバーによって異なります。
Application Server 6.x の場合、常に Web フロントエンドと連携して使用されるので、アプリケーションのアクセス URL は次のような形式になります (Web サーバーが標準の HTTP ポート番号 80 で設定されている場合)。
http://<hostname>/NASApp/AppName/
Application Server8.2 の場合、URL は次のような形式になります。
http://<hostname>:<portnumber>/AppName/
Application Server 8.2 がデフォルトで使用する TCP ポートは、ポート番号 8080 です。
Application Server 6.x と Application Server のアクセス URL の違いはわずかなものに見えますが、絶対 URL 参照を使用するアプリケーションを移行するときに問題になる可能性があります。このような場合は、Application Server 6.x 用の Web サーバープラグインで使用される固有のマーカーが付加されないように、コードを編集して絶対 URL 参照を更新する必要があります。
Application Server 6.5 で開発され、フォームベース認証を使用するアプリケーションは、認証フォームまたはログインページに要求パラメータを渡すことができます。入力パラメータに基づいて認証パラメータを表示するようにログインページをカスタマイズすることもできます。
次に例を示します。
http://gatekeeper.uk.sun.com:8690/NASApp/test/secured/page.jsp?arg1=test&arg2=m
Application Server 8.2 は、ログインページ表示中の要求パラメータの引き渡しをサポートしません。フォームベース認証を使用し、要求パラメータを渡すアプリケーションは、Application Server8.2 に移行できません。このようなアプリケーションを Application Server8.2 に移植するには、コードの大幅な変更が必要です。代わりに、要求パラメータの情報をセッションに格納して、それをログインページの表示中に取得できます。
次に、この問題を解決するコード例を示します。
変更前の 6.5 のコードは次のとおりです。
---------index-65.jsp ----------- <%@page contentType="text/html"%> <html> <head><title>JSP Page</title></head> <body> go to the <a href="secured/page.htm">secured a rea</a> </body> </html> ----------login-65.jsp-------------- <%@page contentType="text/html"%> <html> <head> </head> <body> <!-- Print login form --> <h3>Parameters</h3><br> out.println("arg1 is " + request.getParameter("arg1")); out.println("arg2 is " + request.getParameter("arg2")); </body> </html>
変更後の Application Server8.2 のコードは次のとおりです。
---------index-81.jsp ----------- <%@page contentType="text/html"%> <html> <head><title>JSP Page</title></head> <body> <%session.setAttribute("arg1","test"); %> <%session.setAttribute("arg2","me"); %> go to the <a href="secured/page.htm">secured area</a> </body> </html>
index-81.jsp は、セッションの要求パラメータの格納方法を示しています。
----------login-81.jsp-------------- <%@page contentType="text/html"%> <html> <head> </head> <body> <!-- Print login form --> <h3>Parameters</h3><br> <!--retrieving the parameters from the session --> out.println("arg1 is"+(String)session.getAttribute("arg1")); out.println("arg2 is” + (String)session.getAttribute("arg2")); </body> </html>