Application Server 6.x は EJB 1.1 をサポートし、Application Server は EJB 2.0 をサポートします。このため、どちらも次のものをサポートできます。
ステートフルまたはステートレスなセッション Bean
BMP または CMP を持つエンティティー Bean
ただし、EJB 2.0 には MDB と呼ばれる新しいタイプのエンタープライズ Bean が導入されています。
J2EE 1.4 仕様によれば、EJB の各種コンポーネントは次のような構造を持つ JAR ファイルにグループ化する必要があります。
ejb-jar.xml という名前の XML 配備記述子を含む META-INF/ ディレクトリ
パッケージ内のホームインタフェースとリモートインタフェース、および Bean の実装クラスと補助クラスに対応する .class ファイル
Application Server 6.x では、このアーカイブ構造が使用されます。ただし、EJB 1.1 仕様では、各 EJB コンテナベンダーに対して、彼らが次のような特定のものを適当と見なした場合には実装させる余地を残しています。
CMP EJB のデータベースの持続性 (特に、データベース表における Bean の CMP フィールドと列とのマッピング設定)
CMP Bean に対するカスタム検索メソッドのロジックの実装
Application Server 6.x と Application Server 8.2 では移行の処理方法が同じでないため、次のようにいくつかの XML ファイルを変更する必要があります。
最新の DTD URL を指し示すように <!DOCTYPE 定義を変更してください (ejb-jar.xml などの J2EE の標準配備記述子の場合)。
ias-ejb-jar.xml ファイルをこのファイルの修正バージョン (たとえば、DTD に従って手動で作成した sun-ejb-jar.xml) に置き換えます。詳細は、http://www.sun.com/software/dtd/appserver/sun-ejb-jar_2_1-1.dtd を参照してください。
すべての <ejb-name>-ias-cmp.xml ファイルを、手動で作成した 1 つの sun-cmp-mappings.xml ファイルに置き換えます。詳細は、http://www.sun.com/software/dtd/appserver/sun-cmp-mapping_1_2.dtd を参照してください。
CMP エンティティー Bean の場合は、必要に応じて Application Server の bin ディレクトリ内の capture-schema ユーティリティーを使用して dbschema を生成します。次に、それをエンティティー Bean の META-INF ディレクトリより上位に配置します。
第 3 章「J2EE アプリケーションの移行」で説明したように、Application Server 6.x は EJB 1.1 仕様をサポートするのに対し、Application Server は EJB 2.0 仕様もサポートします。EJB 2.0 仕様では、次のような新機能がアーキテクチャーに導入されています。
MDB
CMP の向上
CMP を持つエンティティー Bean のコンテナ管理関係
ローカルインタフェース
EJB クエリー言語 (EJB QL)
Application Server でも EJB 1.1 仕様は引き続きサポートされますが、EJB 2.0 の拡張機能を利用できるように、EJB 2.0 アーキテクチャーの使用をお勧めします。
EJB 1.1 から EJB 2.0 への移行の詳細については、第 4 章「EJB 1.1 から EJB 2.0 への移行」を参照してください。
Application Server 6.x から Application Server 8.2 に EJB を移行するときは、EJB のコードを変更する必要はありません。ただし、次のような DTD の変更が必要です。
ejb-jar.xml などの J2EE の標準配備記述子で、最新の DTD を指し示すように <!DOCTYPE 定義を変更してください。
ias-ejb-jar.xml ファイルをこのファイルの修正バージョン (配備記述子に従って手動で作成した sun-ejb-jar.xml という名前のファイル) に置き換えます。詳細は、 http://wwws.sun.com/software/dtd/appserver/sun-ejb-jar_2_1-1.dtd を参照してください。
sun-ejb-jar.xml ファイルでは、すべての JNDI 名の「ejb/」の前に、すべての EJB の JNDI 名を追加する必要があります。その理由は、Application Server 6.5 では EJB の JNDI 名として ejb/<ejb-name> (<ejb-name> は ejb-jar.xml ファイル内で宣言された EJB の名前) しか指定できないためです。
Application Server では、sun-ejb-jar.xml に新しいタグが導入されました。これは、EJB の JNDI 名を宣言する場所です。
アプリケーション内の JNDI 名が変更されるのを防ぐため、EJB の JNDI 名を <jndi-name> タグ内で ejb/<ejb-name> として宣言してください。
Sun ONE Application Server 6.5 は、ステートフルセッション Bean のフェイルオーバーをサポートします。6.5 で SFSB フェイルオーバーを利用するには、フェイルオーバーと DSync (Distributed Store) を使用してセッションを設定する必要があります。DSync 機構は、実行中のセッション Bean の対話状態を保存するために使用されます。
Sun ONE Application Server 6.5 は、RMI/IIOP パス上のリッチクライアントに関して、ステートフルセッション Bean のフェイルオーバーをサポートしません。このようなアプリケーションは、Sun Java System Application Server 8.2 の RMI/IIOP パス上の SFSB フェイルオーバーを利用できます。SFSB フェイルオーバーの設定の詳細については、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』の「ステートフルセッション Bean のフェイルオーバー」を参照してください。
Sun Java System Application Server 8.2, Enterprise Edition は、ステートフルセッション Bean のフェイルオーバーをサポートします。Application Server 8.2 は、セッションデータの格納に高可用性データベース (HADB) を使用します。SFSB フェイルオーバーのサポートで順守される原則は、SFSB の対話状態をそのライフサイクルのあらかじめ定義された時点で持続的ストアに保存することです。この機構は、チェックポイントと呼ばれます。サーバーがクラッシュした場合は、SFSB のチェックポイント化された状態を持続的ストアから取得できます。セッションデータの格納に HADB を使用するには、HADB を永続的ストアとして設定してください。HTTP セッションとステートフルセッション Bean の基本となるストアは同じであり、永続的ストアの設定はセッションストアの設定とほぼ同じです。
セッションフェイルオーバーのための HADB の設定については、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』の第 9 章「高可用性 (HA) セッション持続性とフェイルオーバーの設定」を参照してください。
Sun ONE Application Server 6.5 に配備されたステートフルセッション Bean を Sun Java System Application Server 8.2 に移行するときは、EJB のコードを変更する必要はありません。ただし、次の手順を実行する必要があります。
ejb-jar.xml などの J2EE の標準配備記述子の場合は、最新の DTD URL を指し示すように <!DOCTYPE 定義を変更します。
ias-ejb-jar.xml ファイルをこのファイルの修正バージョン (つまり、DTD に従って手動で作成した sun-ejb-jar.xml) に置き換えます。
すべての <ejb-name>-ias-cmp.xml ファイルを、手動で作成した 1 つの sun-cmp-mappings.xml ファイルに置き換えます。
SFSB 状態のフェイルオーバーのサポートを利用するために、アプリケーションのソースコードを変更する必要はありません。SFSB のチェックポイント化に必要なすべての設定は、Application Server 固有の配備記述子 (sun-ejb-jar.xml) またはドメイン設定ファイル (domain.xml) に適用されます。
ただし、サーブレット経由で EJB にアクセスする場合は、EJB のホーム参照とリモート参照をセッションに格納する必要があります。ejbHome インタフェースと ejbRemote インタフェースをセッションに格納するコード例を次に示します。
session.setAttribute("ejbhome", ejbHome); session.setAttribute("ejbremote", ejbRemote);
次のコード例は、セッションから ejbHome と ejbRemote を取得する方法を示しています。
ejbHome = session.getAttribute("ejbhome"); ejbRemote = session.getAttribute("ejbremote");
domain.xml で、availability-service 要素の availability-enabled 属性が TRUE に設定されていることを確認します。availability-enabled 属性が TRUE に設定されている場合は、サーバーインスタンスのレベルでフェイルオーバーが有効になっていることを示します。つまり、サーバーインスタンスが要求を処理できなかった場合は、その要求は使用可能な次のサーバーインスタンスにルーティングされます。
SFSB チェックポイントによって EJB コンテナのパフォーマンスにオーバーヘッドが発生するので、アプリケーションにとって状態のフェイルオーバーが重要である SFSB だけにチェックポイントを制限することもできます。
sun-ejb-jar.xml では、チェックポイントをメソッドレベルで有効または無効にできます。詳細は、『Sun Java System Application Server Enterprise Edition 8.2 高可用性 (HA) 管理ガイド』の「チェックポイントを設定するメソッドの指定」を参照してください。
6.5 の SFSB EJB モジュールの配備記述子 (ias-ejb-jar.xml) で session 要素の failoverrequired 属性が TRUE に設定されている場合は、Application Server 8.2 環境でそのような EJB モジュールに対する可用性サービスを有効にすることもできます。
ejb-jar.xml などの J2EE の標準配備記述子を含む最新の DTD を指し示すように <!DOCTYPE 定義を変更してください。
ejb-jar.xml ファイル内のすべての CMP について、<cmp-version> タグの値を 1.1 に更新します。
すべての <ejb-name>-ias-cmp.xml ファイルを、手動で作成した sun-cmp-mappings.xml ファイルに置き換えます。詳細は、http://wwws.sun.com/software/dtd/appserver/sun-cmp-mapping_1_2.dtd を参照してください。
Application Server インストールの bin ディレクトリ内の capture-schema ユーティリティーを使用して dbschema を生成し、それをエンティティー Bean の META-INF フォルダより上位に配置します。
ias-ejb-jar.xml を Application Server の sun-ejb.jar.xml に置き換えます。
Application Server 6.5 では、検索の SQL が <ejb-name>-ias-cmp.xml に直接埋め込まれていました。Application Server では、数式を使用して各種の検索メソッドの <query-filter> が宣言されています。
Application Server はメッセージ駆動をシームレスにサポートします。このサポートは、Sun Java System Message Queue と Application Server を密接に統合し、ネイティブの組み込み型 JMS サービスを提供することによって実現されます。
Message Queue をインストールすると、任意の数の Application Server インスタンスをサポートする JMS メッセージングシステムが Application Server に提供されます。各サーバーインスタンスには、デフォルトで、そのインスタンスで実行中のすべての JMS クライアントをサポートする組み込み型 JMS サービスが関連付けられています。
『Enterprise JavaBeans Specification, v2.0』で定義されたコンテナ管理トランザクションと Bean 管理トランザクションの両方がサポートされます。
iPlanet Application Server のメッセージ駆動型 Beans サポートは、開発者に限定されており、古い専用 API を多用していました。メッセージングサービスは、iPlanet Message Queue for Java 2.0 によって提供されていました。Queue Connection Factory オブジェクトを設定するには、iPlanet Application Server の下に LDAP ディレクトリも必要でした。
現在は、QueueConnectionFactory と Application Server 内でメッセージ駆動型 Beans を設定するために必要なその他の要素を ejb-jar.xml ファイルに指定する必要があります。
配備記述子の変更の詳細については、「Application Server 6.x からの配備記述子の移行」を参照してください。メッセージ駆動型 Bean については、『Sun Java System Application Server Enterprise Edition 8.2 Developer’s Guide』の「Using Message-Driven Beans」を参照してください。