ンに関与しているインスタンス (READY および ACTIVE エンティティ EJB インスタンス ) を格納します。
以降の節では、エンティティ Bean インスタンスのライフサイクル、コンテナが フリー プールおよびキャッシュを取得および管理する方法について説明します。
図 4-2 を参照してください。
エンティティ EJB インスタンスの初期化 ( フリー プール )
initial-beans-in-free-poolにゼロ以外の値を指定すると、WebLogic Server では、起動時に、指定した数の Bean インスタンスがプール内に生成されます。
initial-beans-in-free-pool のデフォルト値はゼロです。 起動時に Bean イン スタンスをフリー プールに格納しておくと、Bean に対する最初のリクエストが 来たときに新しいインスタンスを生成せずに処理できるため、EJB の初期応答時 間が短縮されます。
フリー プールからの Bean インスタンスの取得は、プールが空の場合でも常に成 功します。 プールが空の場合は、新しい Bean インスタンスが作成されて返され ます。
POOLED Bean は匿名のインスタンスで、ファインダやホーム メソッドに使用さ
れます。 プールに格納できるインスタンスの最大数は、weblogic-ejb-jar.xml の max-beans-in-free-pool 要素の値で指定されます。
READY および ACTIVE エンティティ EJB インスタンス ( キャッシュ )
Bean のビジネス メソッドが呼び出されると、コンテナはプールからインスタン スを取得して ejbActivateを呼び出し、インスタンスはメソッド呼び出しを処 理します。
4 WebLogic Server EJB コンテナとサポートされるサービス
4-4 WebLogic エンタープライズ JavaBeans プログラマーズガイド
READY インスタンスはキャッシュ内にあり、ID ( 関連付けられた主キー ) を
持っていますが、現在トランザクションに関与していません。 WebLogic では、
READY エンティティ EJB インスタンスを、最長時間未使用 (LRU) の順序で保 持します。 モニタ タブの [Current Beans in Cache] フィールドには、アクティブな または準備が整っている Bean の数が表示されます。
ACTIVE インスタンスは現在トランザクションに関与しています。 トランザク
ションが完了すると、インスタンスは READY になり、他の Bean でスペースが 必要になるまでキャッシュに保持されます。
max-beans-in-cacheの影響と、キャッシュで許可される主キーが同じインス タンスの数は、次節「キャッシュのルールは同時方式によって異なる」で説明さ れているように同時方式によって異なります。
キャッシュのルールは同時方式によって異なる
表 4-1では、同時方式ごとに以下のことを示しています。
weblogic-ejb-jar.xmlの max-beans-in-cache要素の値が、キャッシュ 内のエンティティ Bean インスタンスの数をどのように制限するのか
主キーが同じエンティティ Bean インスタンスがどのくらいキャッシュで許 可されるのか
EJB のライフサイクル
図4-1 同時方式別のエンティティ EJB のキャッシング動作
キャッシュからの Bean の削除
READY エンティティ EJB インスタンスは、他の Bean でスペースが必要になる
とキャッシュから削除されます。 READY インスタンスがキャッシュから削除さ れる場合、Bean の ejbPassivate が呼び出されて、コンテナは Bean をフリー プールに戻そうとします。
コンテナがインスタンスをフリー プールに返そうとするときに、プール内に max-beans-in-free-poolの数のインスタンスが既にある場合、インスタンス は破棄されます。
ACTIVE エンティティ EJB インスタンスは、参加しているトランザクションが
コミットまたはロールバックするまで、キャッシュから削除されません。トラン ザクションがコミットまたはロールバックすると、インスタンスは READY に なり、キャッシュから削除できるようになります。
同時方式オプ
ション キャッシュ内の Bean インスタン スの数に対する
max-beans-in-cacheの影響
キャッシュ内に同時に 存在できる、主キーが 同じインスタンスの数 Exclusive max-beans-in-cache = ACTIVE
Bean の数 + READY インスタンスの
数
1
Database キャッシュでは
max-beans-in-cacheまでの
ACTIVE Bean インスタンスと、
max-beans-in-cache までの READY
Bean インスタンスを格納できる
複数
ReadOnly max-beans-in-cache = ACTIVE
Bean の数 + READY インスタンスの
数
1
4 WebLogic Server EJB コンテナとサポートされるサービス
4-6 WebLogic エンタープライズ JavaBeans プログラマーズガイド
エンティティ EJB のライフサイクルの遷移
図 4-2 では、EJB のフリー プールとキャッシュ、およびエンティティ Bean イン スタンスのライフサイクルを通じて発生する遷移について示します。
図4-2 エンティティ Bean のライフサイクル
ステートレス セッション EJB のライフサイクル
WebLogic Server は、フリー プールを使用してステートレス セッション EJB の
パフォーマンスとスループットを高めます。フリー プールには、非バインド ス テートレス セッション EJB が格納されます。非バインド EJB インスタンスはス テートレス セッション EJB クラスのインスタンスで、メソッド呼び出しを処理 しません。
EJB のライフサイクル
次の図に、WebLogic Server のフリー プールと、ステートレス EJB がフリー プールに出入りするプロセスを示します。点線は、WebLogic Server 側から見た EJB の「状態」を表しています。
図4-3 ステートレスセッション EJB のライフサイクルを示す WebLogic Server フリー プール
ステートレス セッション EJB インスタンスを初期化する
デフォルトでは、WebLogic Server には起動時にステートレス セッション EJB イ ンスタンスは存在しません。クライアントが個々の Bean にアクセスすると、
WebLogic Server は EJB の新しいインスタンスを初期化します。 ただし、
WebLogic Server の起動時に非アクティブな EJB インスタンスを作成する場合、
initial-beans-in-free-pool デプロイメント記述子要素を weblogic-ejb-jar.xmlファイルで指定します。
このようにしておけば、クライアントが EJB にアクセスしたときの初期応答時 間を短縮できます。これは、Bean を初期化してからアクティブ化するのではな く、フリー プールから Bean をアクティブ化することによって、最初のクライア ント リクエストを満足させることができるからです。 デフォルトでは、
initial-beans-in-free-pool は 0 に設定されています。
メ ソ ッ ド 完了
ク ラ イ アン ト リ ク エス ト
ク ラ イ アン ト リ ク エス ト
<initial-beans-in-free-pool>
フ リ ー プール
ビ ジー 非ア ク テ ィ ブ
存在し ない
4 WebLogic Server EJB コンテナとサポートされるサービス
4-8 WebLogic エンタープライズ JavaBeans プログラマーズガイド
注意: フリー プールの最大サイズは、max-beans-in-free-poolデプロイメン ト要素の値、使用可能メモリ、または実行スレッドの数によって制限さ れます。
ステートレス セッション EJB をアクティブ化およびプールす る
ステートレス セッション EJB に対するメソッドを呼び出すと、WebLogic Server はフリー プールからインスタンスを取得します。EJB は、クライアントのメ ソッド呼び出しの間アクティブ状態になります。メソッドが完了すると、EJB の インスタンスはフリー プールに戻されます。WebLogic Server は各メソッドの呼 び出し後にクライアントからステートレス セッション Bean を非バインドするの で、クライアントが使用する実際の Bean クラスは呼び出しごとに異なります。
EJB クラスのすべてのインスタンスがアクティブで、max-beans-in-free-pool に達した場合、EJB クラスを要求する新しいクライアントは、アクティブ EJB がメソッド呼び出しを完了するまでブロックされます。 トランザクションがタイ ムアウトになった場合 ( トランザクション非対応の呼び出しでは、5 分経過した 場合 )、WebLogic Server は、リモート クライアントに対しては
RemoteExceptionを、ローカル クライアントに対しては EJBExceptionを送出 します。
ステートフル セッション EJB のライフサイクル
WebLogic Server は、Bean インスタンスのキャッシュを使用してステートフル
セッション EJB のパフォーマンスを高めます。キャッシュはメモリ内にアク ティブな EJB インスタンスを格納することで、それらをクライアント リクエス トに即座に使用できるようにしています。キャッシュには、クライアントによっ て現在使用されている EJB と最近使用されたインスタンスが格納されます。
キャッシュ内のステートフル セッション Bean は、特定のクライアントにバイン ドされます。
次の図に、WebLogic Server のキャッシュと、ステートフル EJB がキャッシュに 出入りするプロセスを示します。
EJB のライフサイクル
図4-4 ステートフルセッション EJB のライフサイクル
4 WebLogic Server EJB コンテナとサポートされるサービス
4-10 WebLogic エンタープライズ JavaBeans プログラマーズガイド
ステートフル セッション EJB の作成
WebLogic Server には起動時にステートフル セッション EJB インスタンスは存在 しません。 クライアントがステートフル セッション Bean へのアクセスを開始す る前に、Bean とのセッションで使用する新しい Bean インスタンスが作成されま す。 セッションが終了すると、インスタンスは破棄されます。 セッションが進行 中の間は、インスタンスはメモリにキャッシュされます。
ステートフル セッション EJB のパッシベーション
パッシベーションは、EJB の状態をディスク上で保持しつつキャッシュからその EJB インスタンスを削除するために WebLogic Server が使用するプロセスです。
パッシブ化されている EJB はメモリには存在せず、キャッシュに格納されてい るときのようにクライアント リクエストに応じて即座に使用することはできま せん。
EJB 開発者は、ejbPassivate()メソッドが呼び出されたときに、ステートフル セッション Bean が、WebLogic Server によってデータがシリアライズされてイ ンスタンスのパッシベーションが行われるような状態に置かれるようにしなけれ ばなりません。 パッシベーションの間、WebLogic Server は transientであると 宣言されていないフィールドをシリアライズしようとします。 このため、すべて の非 transientフィールドがシリアライズ可能オブジェクト (Bean のリモート およびホーム インタフェースなど ) を表すようにしなければなりません。 EJB 2.1 では、許可されるフィールド タイプが指定されています。
パッシベーションの制御
ステートフル セッション Bean のパッシベーションを制御するルールは、Bean
の cache-type要素の値によって決まります。この要素の値は以下のいずれかで
す。
LRU- 最長時間未使用 ( 積極的なパッシベーション )
NRU- 最近未使用 ( 怠惰なパッシベーション )
idle-timeout-seconds要素と max-beans-in-cache要素も、cache-typeの値 に基づいてパッシベーションと削除の動作に影響を与えます。