Application Server 6.x は、Servlet 2.2 API をサポートします。Sun Java System Application Server 8.2 は、Servlet 2.4 API をサポートします。
Servlet API 2.4 では、サーブレットのコアはあまり変更されていません。ほとんどの変更は、コアの外部に追加された新機能に関係しています。
もっとも重要な機能を次に示します。
サーブレットに JDK 1.2 以降が必要になった
フィルタ機構が作成された
アプリケーションライフサイクルイベントが追加された
国際化サポートが追加された
エラー属性とセキュリティー属性が拡張された
HttpUtils クラスが非推奨になった
いくつかの DTD 動作が拡張および明確化された
これらの変更は機能拡張であり、サーブレットを Servlet API 2.2 から 2.4 に移行する場合には必要ありません。
ただし、アプリケーション内のサーブレットが JNDI を使用して J2EE アプリケーション内のリソース (データソースや EJB など) にアクセスする場合は、ソースファイルや配備記述子にいくつかの変更が必要になることがあります。
これらの変更の詳細については、次の節で説明します。
最後のシナリオとして、サーブレットコードの変更が必要になる場合があります。JSP ページに既存の Java クラスと同じ名前が存在する場合は、Application Server 6.x で名前の競合が発生する可能性があります。このような場合は、JSP ページ内の該当する名前を変更することによって、競合を解決してください。さらに、場合によっては、この JSP ページを呼び出すサーブレットのコードも編集する必要があります。この問題は、新しいクラスローダー階層を使用する Application Server では解決されています。新しいバージョンのアプリケーションサーバーでは、特定のアプリケーションに関して、1 つのクラスローダーがすべての EJB モジュールを読み込み、別のクラスローダーが Web モジュールを読み込みます。これら 2 つのローダーどうしは通信しないため、名前の競合は発生しません。
JNDI コンテキストにバインドされたデータソースへの参照を取得するには、初期コンテキストオブジェクトからデータソースの JNDI 名を検索します。次に、このようにして取得されたオブジェクトを次のように DataSource タイプのオブジェクトとしてキャストします。
ds = (DataSource)ctx.lookup(JndiDataSourceName);
詳細は、「JDBC コードの移行」を参照してください。
第 4 章「EJB 1.1 から EJB 2.0 への移行」の 「JNDI コンテキストにおける EJB の宣言」を参照してください。
サーブレットまたは JSP アプリケーションのコンポーネントを実際に Application Server 6.x から Application Server 8.2 に移行するときは、コンポーネントのコードを変更する必要はありません。
Web アプリケーションがデータソースなどのサーバーリソースを使用する場合、Application Server ではそのリソースを web.xml ファイル内で宣言し、sun-web.xml ファイル内でも同様に宣言する必要があります。jdbc/iBank という名前のデータソースを宣言する場合は、web.xml ファイルの <resource-ref> タグは次のようになります。
<resource-ref> <res-ref-name>jdbc/iBank</res-ref-name> <res-type>javax.sql.XADataSource</res-type> <res-auth>Container</res-auth> <res-sharing-scope>Shareable</res-sharing-scope> </resource-ref>
これに対応する sun-web.xml ファイル内の宣言は、次のようになります。
<?xml version="1.0" encoding="UTF-8"?> <! DOCTYPE FIX ME: need confirmation on the DTD to be used for this file <sun-web-app> <resource-ref> <res-ref-name>jdbc/iBank</res-ref-name> <jndi-name>jdbc/iBank</jndi-name> </resource-ref> </sun-web-app>