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

EJB 2.0 のコンテナ管理による持続性 (CMP)

EJB 2.0 仕様では CMP が強化され、複数のエンティティー Bean 間で関係を持たせることが可能になりました。これは、コンテナ管理による関係 (CMR) と呼ばれます。コンテナによって、関係および関係の参照整合性を管理します。

EJB 1.1 仕様で提供されていた CMP モデルにはより多くの制限がありました。EJB 1.1 アーキテクチャーにおける CMP は、データベースやリソースマネージャーのタイプに依存しないデータアクセスに制限されていました。リモートインタフェースを通して公開できるのは、エンティティー Bean のインスタンス状態のみで、Bean の関係を公開する方法はありませんでした。EJB 1.1 バージョンの CMP は、エンティティー Bean クラスのインスタンス変数をデータベースまたはリソースマネージャー内でこれらの状態を表すデータ項目へマッピングすることに依存しています。CMP のインスタンスフィールドは配備記述子内で指定されます。Bean が配備されると、デプロイヤはツールを使用して、インスタンスフィールドのデータ項目に対するマッピングを実装するコードを生成します。

Bean の実装クラスのコーディング方法を変更する必要もあります。EJB 2.0 仕様では、CMP を使用するエンティティー Bean の実装クラスは、抽象クラスとして定義されるようになります。

この節では、次の項目について説明します。

持続フィールドの定義

EJB 2.0 仕様では、エンティティー Bean のインスタンス変数を CMP フィールドまたは CMR フィールドとして指定することが可能です。これらのフィールドは配備記述子内に定義します。CMP フィールドは cmp-field という要素でマークされ、コンテナ管理による関係フィールドは cmr-field という要素でマークされます。

実装クラスでは、CMP および CMR フィールドを public 変数として宣言しないように注意してください。その代わりに、これらの CMP および CMR フィールドの値を取得および設定するには、エンティティー Bean 内に get および set メソッドを定義します。この意味で、2.0 CMP を使用する Bean は JavaBeans モデルに従っていると言えます。クライアントは、インスタンス変数に直接アクセスするのではなく、エンティティー Bean の get および set メソッドを使用して、これらのインスタンス変数を取得および設定しているからです。get および set メソッドが関連するのは、CMP または CMR フィールドに指定された変数のみであることに注意してください。

エンティティー Bean の関係の定義

前述のとおり、EJB 1.1 アーキテクチャーはエンティティー Bean 間の CMR をサポートしていません。EJB 2.0 アーキテクチャーでは、1 対 1 と 1 対多の両方の CMR がサポートされています。これらの関係は CMR フィールドによって表され、これらのフィールドは配備記述子内で関係としてマークされます。配備記述子内の CMR フィールドは、各アプリケーションサーバーに適した配備ツールを使用して設定します。

CMP フィールドと同じように、Bean では CMR フィールドをインスタンス変数として宣言しません。その代わり、Bean ではこれらのフィールドに対して get および set メソッドが提供されています。

メッセージ駆動型 Bean

メッセージ駆動型 Bean は、EJB 2.0 アーキテクチャーによって導入されたもう 1 つの新機能です。メッセージ駆動型 Bean は、JMS (Java Message Service) を通して配信された非同期メッセージを処理するトランザクション対応のコンポーネントです。JMS API は J2EE 1.3 および J2EE 1.4 プラットフォームに不可欠な部分です。

非同期メッセージではアプリケーションがメッセージ交換によって通信できるため、送信者は受信者と無関係となります。メッセージを送信した送信者は、受信者がそのメッセージを受信または処理するのを待機する必要はありません。ここが同期通信と異なっている点です。同期通信では、別のコンポーネントのメソッドを呼び出しているコンポーネントは、処理が完了し、呼び出し元のコンポーネントにコントロールが戻って来るまで、待機またはブロックする必要があります。