Jakarta Commons Object Pooling Package

一般的なオブジェクトプーリングAPIと、そのいくつかの実装です。

参照:
          説明

パッケージ
org.apache.commons.pool オブジェクトをプーリングするためのAPIです。
org.apache.commons.pool.impl オブジェクトをプーリングするためのAPIの実装です。

 

一般的なオブジェクトプーリングAPIと、そのいくつかの実装です。

org.apache.commons.pool パッケージはシンプルなオブジェクトのプーリングを行うためのインターフェイスと 新たなプール実装を作成する際に有用と思われるいくつかの基底クラスを定義します。 このAPIは全てのオブジェクトを同じ場所にプールし扱う方法と キーを介して対応するオブジェクトをプーリングする方法とをサポートします。

org.apache.commons.pool.impl パッケージはいくつかのプールの実装を含みます。 StackObjectPool は限られた数のインスタンスの再利用のサポートに有用です。 また必要となる新たなインスタンスをプール内にあらかじめ生成する機能を持ちます。 GenericObjectPool はデータベースコネクションプール等に有用な様々な設定オプションと限られた数のオブジェクトのセットを扱う機能を持ちます。 SoftReferenceObjectPool は数に制限なくオブジェクトをプールすることができますが、必要であればプール内のアイドル状態のオブジェクトを ガベージコレクタに削除させることができます。 これらはそれぞれオブジェクトのアクセスにキーを使うものと使わないものの2種類があります。

以下に HashMap をプーリングする簡単なサンプルを示します。 まず ObjectPoolFactory を作成します。

    public class HashMapFactory 
        extends BasePoolableObjectFactory
    {
        /**
         * プールに渡されるインスタンスを生成します。
         * @return プールに渡されるインスタンス
         */
        public Object makeObject() 
            throws Exception
        {
            return new HashMap();
        }
        
        /**
         * プールに渡されるインスタンスの後処理をします。
         * @param obj 後処理を行うインスタンス
         */
        public void passivateObject(Object obj) 
            throws Exception
        {
            Map map = (Map)obj;
            map.clear();
        }
    }

プールされた Map を繰り返し利用するクラスの例を以下に示します:

    public class Foo
    {
        private ObjectPool pool;
        public Foo()
        {
            PoolableObjectFactory factory = new HashMapFactory();
            pool = new StackObjectPool(factory, 1000);
        }

        public doSomething()
        {
            ...
            Map map = null;
            try
            {
                map = (Map)pool.borrowObject();
                // use map
                ...
            }
            finally
            {
                if (map != null)
                {
                    pool.returnObject(map);
                }
            }
            ...
        }
    }

上記例では ObjectPool を利用しましたが、 他の提供される実装または特別な目的に特化した実装も同じように扱うことができます。

翻訳者:
日置 聡


このドキュメントは、Ja-Jakartaにより訳されました。 コメントがある場合は report@jajakarta.orgまでお願いします。
Translated into Japanese by jajakarta.org. The original page is here.
Copyright (c) 2002-2003 - Apache Software Foundation