Bean クラス実装の作成

エンティティ Bean の必要条件は、セッション Bean の場合とかなり異なるため、このセクションでは各タイプについて別々に説明します。各セクションには詳細な説明が含まれています。

エンティティ Bean

エンティティ Bean は、サーバーのシャットダウン中に存続させるオブジェクトを表します。パーシスタンスには、次の 2 つのタイプがあります。

エンティティ Bean のインスタンスを表現するデータは通常、リレーショナル データベースのテーブルの行に格納されています。このデータベースには、JDBC データ ストアからアクセスします。これらのテーブルは、複数のデータベースにまたがる場合もあります。

エンティティ Bean に関する一般的な必要条件は次のとおりです。

また、実装が必要な定義済みシグネチャを使用する特殊なメソッドもあります。

次の import ステートメントは、エンティティ Bean クラス実装に必ず含めます。

import java.rmi.*; 
import javax.ejb.*;

次のステートメントは、クラスがパブリック タイプで、EntityBean インターフェイスを実装するという必要条件を示しています。

public class BalanceBean implements EntityBean

エンティティ Bean のインスタンスは、関連するコンテキストを格納して、サーバー環境にアクセスできるようにする必要があります。ただし、このフィールドにパーシスタンスは与えません。

protected EntityContext _context;

setEntityContext メソッドは、必ず定義する必要があります。このメソッドは、Bean インスタンスが作成された後でコンテナによって呼び出され、関連するエンティティ コンテキストを設定します。

public void setEntityContext(final EntityContext context) {
    _context = context;
}

unsetEntityContext メソッドも定義する必要があります。このメソッドは、Bean インスタンスが削除される前にコンテナによって呼び出され、関連するエンティティ コンテキストを消去します。

public void unsetEntityContext() {
  _context = null;
}

エンティティ Bean はゼロまたはそれ以上の ejbCreate メソッドを持つことができ、それぞれのメソッドは、ホーム インターフェイスで定義された create メソッドに対応している必要があります。メソッドはパブリック タイプで、ホーム インターフェイスの create メソッドと同じ引数を使用し、プライマリ キー タイプを返す必要があります。BMP を使用するエンティティ Bean については通常、渡されるキーに対する行があるかチェックし、その行がある場合は DuplicateKeyException を返し、その行がない場合は作成するようなロジックをコーディングします。

ejbPostCreate メソッドは、エンティティ Bean のホーム インターフェイスに create メソッドが含まれる場合にのみ必要となります。メソッドはパブリック タイプで、ejbCreate メソッドと同じ引数を使用し、戻り値は void タイプです。ビジネス メソッドが呼び出される前に、ejbPostCreate メソッドを使用して、Bean インスタンスを初期化します。

エンティティ Bean 実装には、ejbFindByPrimaryKey メソッドも含まれている必要があります。このメソッドは、パブリック タイプでなければならず、必ずプライマリ キー タイプを返します。この Bean 実装には、ejbFindAllAccounts のような finder メソッドを追加して含めることができます。

エンティティ Bean は、EntityBean インターフェイスから次のメソッドも実装する必要があります。

これらのメソッドに使用するコードは、CMP と BMP では異なります。詳細については、Chapter 28, "Bean 管理パーシスタンス"およびChapter 29, "コンテナ管理パーシスタンス"を参照してください。

Bean のリモート インターフェイスで定義されるメソッドの場合、Bean 実装内にシグネチャが一致するメソッドが存在する必要があります。通常、これらのメソッドはビジネス ロジックを実装します。次の例は、save メソッドの実装を示します。

public void save(final int value) {
  _value += value;
}

セッション Bean

セッション Bean は通常、ビジネス オブジェクトではなくビジネス ロジックを表します。セッション Bean はデータベースの読み取りと書き込みが可能ですが、Bean インスタンス自体は、サーバーのシャットダウン後に保持されません。セッション Bean メソッドの代表的な使用法に、1 つまたは複数のエンティティ Bean メソッドの呼び出しをラップすることがあります。これらの連携がトランザクションを形成します。

セッション Bean には、次の 2 つのタイプがあります。

すべてのセッション Bean には、 javax.ejb.SessionBean インターフェイスの実装が必要です。

次の import は必ず含める必要があります。

import java.rmi.*;
import javax.ejb.*;

次のステートメントは、クラスがパブリック タイプで、SessionBean インターフェイスを実装する必要条件を示しています。

public class LoginSessionBean implements SessionBean

Bean インスタンスは、関連するコンテキストを格納して、サーバー環境にアクセスできるようにする必要があります。

protected SessionContext _context; 

setSessionContext メソッドは、必ず定義する必要があります。このメソッドは、Bean インスタンスが作成され後にコンテナによって呼び出され、関連するセッション コンテキストを設定します。

public void setSessionContext(final SessionContext context) {
  _context = context;
}

ejbCreate メソッドは、ホーム インターフェイスに create メソッドが含まれる場合にのみ必要となります。このメソッドはパブリック タイプで、void タイプの値を返す必要があります。ステートレス セッション Bean の場合、ejbCreate メソッドに引数を使用することはできません。ステートフル セッション Bean にゼロまたはそれ以上の引数を持つ ejbCreate メソッドがいくつか含まれている場合があります。

セッション Bean は、SessionBean インターフェイスから次のメソッドも実装する必要があります。