インスタンス マネージャ

コンテキスト/Bean インスタンス プール

Bean コンテキストは、公開されている Bean の環境のステートに関する情報を検索するために使用します。コンテキストは Bean インスタンスが作成されたときに作成され、Bean インスタンスが存在する間 Bean に関連付けられ、ほかの Bean インスタンスが使用することはできません。コンテキストには、Bean インスタンスについて、インスタンスのステートが変化したかどうかを示す情報などが記録されています。

利用できるコンテキストの数は、公開記述子内で ejipt.maxContexts
ejipt.maxFreeContexts、および ejipt.minFreeContextsenv-entries として設定することで管理できます。次の例では、これらのプロパティがサンプル 5a の公開記述子内でどのように設定されるのかを示しています。

...
<env-entry>
  <env-entry-name>ejipt.maxFreeContexts</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>5</env-entry-value>
</env-entry>
<env-entry>
  <env-entry-name>ejipt.maxContexts</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>5</env-entry-value>
</env-entry>
<env-entry>
  <env-entry-name>ejipt.minFreeContexts</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>0</env-entry-value>
</env-entry>
...

これらのプロパティの設定に関する詳細については、JRun JavaDocs ファイルによって提供されている API マニュアルの EjiptProperties を参照してください。

InstanceManager クラスは、コンテキストと相互動作する API を供給します。Bean のインスタンスがサーバーによって作成された最初のインスタンスであるかどうかがわかれば非常に便利です。InstanceManager.isFirst() メソッドは、現在のインスタンスがその Bean の最初のインスタンスである場合、true を返します。それによって Bean の初期化を行うことができます。このメソッドは通常、setEntityContext() または setSessionContext() メソッドから呼び出されます。EJB のサンプル 7c の次の例では、InstanceManager.isFirst() メソッドを呼び出します。

...
public void setEntityContext(EntityContext context) {
  super.setEntityContext(context);

  if (InstanceManager.isFirst()) {
    initBanks();
  }
}
...

InstanceManager.isLast() メソッドは、現在のインスタンスがその Bean の最後のインスタンスである場合、true を返します。これによって、Bean を削除する前にクリーンアップを実行できます。このメソッドは通常、unsetEntityContext() メソッドから呼び出されます。

インスタンスのステートの変化

InstanceManager.isDirty() メソッドは、インスタンスのステートの変化について EJB エンジンに知らせます。setDirty(true) を呼び出すと、ejbStore メソッドが呼び出され、強制的にインスタンスがコンテナに保存されます。setDirty(false) を呼び出すと、コンテナはステートの変化を無視し、データベース内のインスタンスを更新しません。

dirty フラグが設定されていない場合、コンテナはインスタンスを保存するかどうかの判断を試みます。これは、表面的な比較によって行われます。コンテナは == 演算子を使用してフィールドのステートとキャッシュされているステートの比較を繰り返し、ステートが変化したかどうかを判断します。深いレベルでの変化が起こった場合は、Bean メソッド内で dirty フラグを明示的に true に設定して、保存を強制しなければなりません。


メモ

isDirtysetDirty を使用するだけでなく、ejipt.isAlwaysDirty プロパティを true に設定できます。これによって各ビジネス メソッドに従って、コンテナが ejbStore を呼び出します。


詳細については、JRun JavaDocs ファイルによって提供されている API マニュアルの InstanceManager を参照してください。