|
|||||||
| 前 次 | フレームあり フレームなし | ||||||
参照:
説明
| パッケージ | |
| 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 を利用しましたが、
他の提供される実装または特別な目的に特化した実装も同じように扱うことができます。
|
|||||||
| 前 次 | フレームあり フレームなし | ||||||