この特集のトップページへ
Chapter 5:ビジネスロジック層の構築

head2.gif 5.4.5 リソースディスペンサ
 ところで,COM+は 「リソースディスペンサ」と呼ばれる機構に対応している。リソースディスペンサとは,COMオブジェクトが永続的ではなく一時的にデータを保存するための機構である。リソースディスペンサが保存するデータは一時的なデータなので,COM+サービスを停止させたり,Windows 2000を再起動させたりすると,そのデータは破棄される。

 COM+は,ODBCリソースディスペンサと共有プロパティという2つのリソースディスペンサを提供している。前者はデータベース接続のコネクションプーリングをサポートするもので,後者はCOM+アプリケーション単位でアクセスできる共有メモリ領域である。共有プロパティについては「5.6 共有プロパティ」で説明することにして,ここではODBCリソースディスペンサについて説明する。

 データベースと接続するためには,データベースとコネクションを張る必要があるわけだが,コネクションを張るのには時間がかかるばかりか,1つのコネクションを張るために必要なメモリも馬鹿にならない。そこで,ODBCリソースディスペンサは,コネクションをプーリングする機能を提供している。具体的には,Fig.5-34のように,データベースに接続するためのコネクションを溜めておき,COMオブジェクト間で使い回す。

Fig.5-34 ODBCリソースディスペンサ
fig5_34.gif

 ODBCリソースディスペンサは,COMオブジェクトがデータベースへのコネクションを閉じると,本当にそのコネクションを閉じてしまうのではなく,接続プールに保存しておく。そして別のCOMオブジェクトが同じデータベースにアクセスしようとしたときには,新たにコネクションを作るのではなく,接続プールに溜めておいたコネクションを取り出して再利用する。これによって,データベースと接続するために必要となるリソースは軽減される。

 ODBCリソースディスペンサの設定は,コントロールパネルの[管理ツール]−[データソース(ODBC)]の[接続プール]ページで設定することができる(Fig.5-35)。

Fig.5-35 ODBCデータソースアドミニストレータ
fig5_35.gif

 ODBCリソースディスペンサを使うにあたり,COM+側やCOMコンポーネント側で特別な設定をする必要はない。ODBCを経由してデータベースに接続する際には,自動的にODBCリソースディスペンサによるコネクションプーリングが働く。

 ただし,ODBCリソースディスペンサによるコネクションプーリングを有効に機能させるには,データベースへのコネクションを握っている時間を短くすることが重要である。ADOの場合,データベースに接続するにはADODB.ConnectionオブジェクトのOpenメソッドを呼び出す。そして,データベースとの接続を切るには,ADODB.ConnectionオブジェクトのCloseメソッドを呼び出す。Openメソッドを呼び出したときには接続プーリングからデータベースコネクションが取り出され,利用される。Closeメソッドを呼び出したときには,利用していたデータベースコネクションがコネクションプールに戻されるわけだ。つまり,Openメソッドを呼び出してからCloseメソッドを呼び出すまでの時間が短ければ短いほど,COMオブジェクト間でデータベースコネクションの使い回しが効きやすくなるということになる。

 一般的に,データベースにアクセスするプログラムを開発する場合,データベースのコネクションを張るには時間がかかるので,いったんコネクションを張ったら,できるだけそれを長いあいだ使って,各種のデータ操作を実行することがよしとされる。特に,スタンドアロン環境のアプリケーションの場合には,アプリケーションが初期化されるときにデータベースとのコネクションを張り,アプリケーションが終了するまでそれを離さず,維持しているコネクションですべてのデータベース操作をすることは常套手段である。

 しかし,COM+で管理されるCOMオブジェクトでは,このような開発スタイルは望ましくない。COM+に管理されるCOMコンポーネントは,本当に必要なときにだけデータベースのコネクションを張り,必要がなくなったらすぐに手放すという開発スタイルにしなければならない。


One Point!ADOを使ってデータベースに接続したとき,ADOで利用するプロバイダがODBCドライバであったならば,自動的にODBCリソースディスペンサが働く。また,ODBCを経由せずにADOでSQL Serverのプロバイダを選択したときには,ODBCリソースディスペンサではなく,SQL ServerのOLE DBプロバイダ側で接続プーリングがサポートされる。

One Point!ODBCリソースディスペンサでは,同じ接続であるかどうかを,データベースへの接続文字列を比較することで調査する。よって,COMオブジェクトが接続するたびに異なるデータベースへの接続文字列を使う場合は,同じ接続とは見なされないため,接続プーリングは有効に機能しない。データベースへの接続文字列には,ユーザー名やパスワードなども含まれている。たとえば,COMオブジェクトを呼び出した個々のユーザー名を接続文字列中に指定するようなコーディングにしてしまうと,接続プーリングが有効に働かないということになる。そのため,ビジネスロジックをCOM+で管理する場合には,データベースアクセスを代行するような特別なユーザーを作成し,そのユーザーでデータベースにアクセスするようにし,クライアント側のユーザー名を使ってデータベースと接続しないのが一般的である。
prevpg.gif Chapter 5-1 22/23 nextpg.gif