カスタム・アプリケーション・モジュール・プールの実装

ApplicationPoolImplを拡張し、必要なメソッドをオーバーライドして、アプリケーション・モジュール・プールの独自のカスタム実装を作成できます。たとえば、同時に4つ以上のインスタンスがプールから取り出されないようにするクラスCustomPoolを定義できます。この場合、checkoutメソッドの定義はオーバーライドされ、4つ以上のインスタンスが取り出されないようチェックされます。4つ以上取り出された場合、例外がスローされます。


 1  /**
 2   **  This is a simple application pool class that allows
 3   **  checkout of only three instances.
 4   **/
 5  class CustomPool extends ApplicationPoolImpl
 6  {
 7  public CustomPool()
 8  {
 9  }
10  /**
11   * Ensures that only three instances are
12   * checked out of the pool. Otherwise, a
13   * RuntimeException is thrown.
14   *
15   * @return oracle.jbo.ApplicationModule
16   */
17  public synchronized ApplicationModule createNewInstance()
18  {
19    // if the instance count > 3 throw an exception
20    int nCount = getInstanceCount();
21    if(nCount > 3)
22    {
23      throw new RuntimeException("You have exceeded the number of
             instances for this pool");
24    }
25    return super.checkout();
26  }
27 }

5行: ApplicationPoolImplを拡張するCustomPoolクラスを作成します。

17から23行: checkoutメソッドをオーバーライドし、4つ以上のインスタンスが取り出されているかどうかテストします。4つ以上取り出されている場合、RuntimeExceptionがスローされます。

カスタム・アプリケーション・モジュール・プールの実装の使用方法

CustomPoolクラスをプログラムで使用できます。


 1 public class PoolTester extends Object {
2 /**
3 * Constructor
4 */
5 public PoolTester() {
6 }
7 public void doTest() throws Exception
8 {
9 Hashtable info = new Hashtable();
10 info.put(JboContext.INITIAL_CONTEXT_FACTORY, JboContext.JBO_CONTEXT_FACTORY);
11 info.put(JboContext.DEPLOY_PLATFORM, "LOCAL");
12 // create a pool with a custom application pool class
13 PoolMgr.getInstance().createPool("CustomTestAMPool",
"oracle.jbo.common.ampool.CustomPool" , "package2.Package2Module" ,
"jdbc:oracle:thin:scott/tiger@localhost:1521:orcl", info);
14 pool = PoolMgr.getInstance().getPool("CustomTestAMPool");
15 try
16 {
17 instance = pool.checkout();
18 instance = pool.checkout();
19 instance = pool.checkout();
20 instance = pool.checkout();
21 instance = pool.checkout();
22 }
23 catch(Exception ex)
24 {
25 ex.printStackTrace();
26 }
27 }
9から11行: 環境設定を定義します。これは、(ここで示されているとおり)直接またはプロパティ・ファイルから実行できます。この例では、ハッシュテーブルには、LOCALモードで接続するための環境を設定するプロパティが含まれます。

12から14行: CustomPoolを使用し、プールCustomTestAMPoolを作成します。PoolMgrはシングルトン・オブジェクトであるため、PoolMgr.getInstanceを使用して取得します。 createPoolを使用し、プールを作成します。この場合、createPoolでは、プール名、アプリケーション・モジュール・プールのデフォルト実装をオーバーライドするクラスの名前、アプリケーション・モジュールを含むパッケージの名前、データベースの接続文字列、ハッシュテーブル名が必要なことに注意してください。

15から25行: try-catchループを設定し、インスタンスのチェックを開始し、例外を捕捉します。20行pool.checkout()で、例外がスローされます。


関連項目
アプリケーション・モジュールのプール
アプリケーション・モジュール・プールについて
プールのためのクラスについて
JSPプロジェクトのBC4J構成プロパティについて