Object Poolの実装

Object Poolの実装

 Object Poolを実際に利用するには、独自に実装する方法もありますが、汎用的に利用できるObject Poolを提供するライブラリが存在します。ここでは、オープンソースのApacheプロジェクトのcommons-poolの実装とその利用方法を紹介します。

 commons-poolは、Object Poolを実装するためのインターフェースと標準的な実装クラスのいくつかを用意しています。Object Poolインターフェースは2ページ目の図2(http://thinkit.jp/article/934/2/)のReusableクラスに相当するクラスを実装するためのインターフェースです。commons-poolでは、Object Poolの実装がいくつか用意されていますが、もっとも簡単に利用できる実装として、GenericObjectPoolクラスが提供されています。プールからオブジェクトを取得するためのメソッドがborrowObjectです。プールにオブジェクトを戻すためのメソッドがreturnObjectです。オブジェクトプールの利用を終了してプールにあるオブジェクトをすべて消去するためのメソッドがcloseです。GenericObjectPoolクラスは、Singletonにはなっていませんが、Singletonパターンを適用して、GenericObjectPoolのインスタンスを1つに制限することで、図2の場合と同様なオブジェクトプールにすることも可能です。

 commons-poolでは、プールするためのオブジェクトを生成する部分でFactory Methodパターン(*4)も利用しています。PoolableObjectfactoryは、プールするオブジェクトを生成するためのFactoryクラスを実装するためのインターフェースです。commons-poolを利用する場合、PoolableObjectFactoryを実装して、プールするオブジェクトを生成するクラスを作成します。図3では、例としてプールするオブジェクトをPooledObject、PooledObjectを生成するFactoryクラスをPooledObjectFactoryという名称にしてあります。PoolableObjectFactoryのFactoryメソッド(オブジェクトを生成して返すメソッド)は、makeObjectです。そのほかにオブジェクトを利用状態にするactivateObjectメソッド、オブジェクトを利用可能(未使用状態)にするpassivateObjcetメソッド、オブジェクトを消去するためのdestoryObjectメソッドなどが定義されています。

*4:Factory Methodパターン:GoFの23のパターンで紹介されているデザインパターンです。

Object PoolパターンとFactory Methodパターンの組み合わせ

 もっともシンプルにCommons-Poolを利用するには、図3において、PooledObjectとPooledObjectFactoryに相当するクラスを作成し、GenericObjectPoolを生成した後にsetFactoryメソッドで、作成したPooledObjectFactoryを渡します。Client、またはborrowObjectメソッドの内部からaddObjectメソッドが呼ばれると、PooledObjectFactoryを利用して、オブジェクトを生成して利用します。Factoryパターンと組み合わせたことで、commons-poosが提供する既存のGenericObject Poolを使って、ユーザーが定義したクラスをオブジェクトプールにすることができます。

 このように、Object Poolパターンは、Factory Methodパターンと組み合わせて利用されることで、汎用的に利用できるオブジェクトプールを提供できます。


【参考文献】
アランシャロウェイ、ジェームズ.R.とロット(原著),村上 雅章(翻訳)『オブジェクト指向のこころ』ピアソン・エデュケーション(発行年:2005)

「Apache Commons - commons pool」
http://commons.apache.org/pool/
(アクセス:2009/05)

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30