Sun Java System Application Server Enterprise Edition 8.2 アップグレードと移行

Application Server 6.x からのエンタープライズアプリケーションの移行

J2EE 仕様によれば、エンタープライズアプリケーションは次のような構造を必要とする EAR ファイルです。

アプリケーション配備記述子では、エンタープライズアプリケーションと Web アプリケーションのコンテキストルートを構成するモジュールが定義されます。

Application server 6.x と Application Server 8.2 は、主に J2EE モデルをサポートします。このモデルでは、アプリケーションがエンタープライズアーカイブ (EAR) ファイル (拡張子は .ear) の形式でパッケージ化されます。アプリケーションはさらに J2EE モジュールの集まりに分割され、EJB 用の Java アーカイブ (拡張子が .jar の JAR ファイル) とサーブレットおよび JSP 用の Web アーカイブ (拡張子が .war の WAR ファイル) にパッケージ化されます。

エンタープライズアプリケーションを配備する前に、次に示す手順を実行することが不可欠です。

ProcedureEAR ファイルを構築する

  1. EJB を 1 つ以上の EJB モジュールにパッケージ化します。

  2. Web アプリケーションのコンポーネントを Web モジュールにパッケージ化します。

  3. EJB モジュールと Web モジュールを組み合わせて 1 つのエンタープライズアプリケーションモジュールを作成します。

  4. エンタープライズアプリケーションのルートコンテキストの名前を定義します。これによって、アプリケーションにアクセスするための URL が決まります。

    Application Server では、Application Server 6.x にはなかった新しいクラスローダ階層が使用されます。この新しい方式では、特定のアプリケーションについて、1 つのクラスローダーがすべての EJB モジュールを読み込み、別のクラスローダーが Web モジュールを読み込みます。これら 2 つのモジュールは親子の階層関係を持っており、JAR モジュールクラスローダが WAR モジュールクラスローダの親モジュールになります。JAR クラスローダによって読み込まれたクラスはすべて WAR モジュールでも使用またはアクセスできますが、逆 (WAR クラスローダによって読み込まれたクラスを JAR モジュールで使用またはアクセスすること) はできません。あるクラスが JAR ファイルだけでなく WAR ファイルでも必要な場合は、そのクラスを JAR モジュール内だけでパッケージ化してください。この指針に従わない場合、クラス競合が発生する可能性があります。

アプリケーションルートコンテキストとアクセス URL

Application Server 6.x と Application Server8.2 では、アプリケーションのアクセス URL (アプリケーションの Web モジュールのルートコンテキスト) に関して大きな違いがあります。hostname という名前のサーバー上に配備されたアプリケーションのルートコンテキストの名前が AppName である場合、このアプリケーションのアクセス URL は、次のように使用されるアプリケーションサーバーによって異なります。

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>