【文献】
Tulika Das,外1名,Oracle Universal Connection Pool for JDBC開発者ガイド,Oracle Corporation,2009年10月,URL,https://docs.oracle.com/cd/E16338_01/java.112/b56283/title.htm
【文献】
WINGSプロジェクト,Windows Azure Platform開発入門,日経BP社,2012年 1月10日,第1版,pp.183-185
(58)【調査した分野】(Int.Cl.,DB名)
前記システムは、マルチテナントクラウドベース環境内の複数のテナントまたはテナントアプリケーションによる使用に適合化されており、前記複数のテナントまたはテナントアプリケーションのうちの特定の各テナントまたはテナントアプリケーションを、ラベル付けされたコネクションタイプと関連付けることができ、前記特定のアプリケーションは前記コネクションタイプを前記特定のテナントのために使用して前記データベースに接続する、請求項1に記載のシステム。
前記システムは、マルチテナントクラウドベース環境内の複数のテナントまたはテナントアプリケーションによる使用に適合化されており、前記コネクションプールは、前記特定のアプリケーションが構成コールバックを用いてコンテナを指定または設定し特定のコネクションを前記複数のテナントまたはテナントアプリケーションのうちの1つから前記複数のテナントまたはテナントアプリケーションのうちの別の1つに転用することに対するサポートを含み、これは特定のデータベースコネクションに対しテナントを切換えるという効果を有する、請求項1または2に記載のシステム。
前記コネクションプールロジックは、高コストコネクションとしてラベル付けされたコネクションを識別し、コネクションの総数が特定のしきい値未満の場合は前記高コストコネクションを用いて要求を満たすことがないようにする、請求項1〜3のいずれか1項に記載のシステム。
前記コネクションプールロジックは、アクティブコネクションとアイドルコネクションの総数が少ないときに特定のタイプの高コストコネクションの使用が要求されると結果として既存のコネクションが転用されるのではなく新たな高コストコネクションが作成されるように、構成される、請求項1〜4のいずれか1項に記載のシステム。
前記方法は、マルチテナントクラウドベース環境内の複数のテナントまたはテナントアプリケーションによる使用に適合化されており、前記複数のテナントまたはテナントアプリケーションのうちの特定の各テナントまたはテナントアプリケーションを、ラベル付けされたコネクションタイプと関連付けることができ、前記特定のアプリケーションは前記コネクションタイプを前記特定のテナントのために使用して前記データベースにコネクションする、請求項6に記載の方法。
前記方法は、マルチテナントクラウドベース環境内の複数のテナントまたはテナントアプリケーションによる使用に適合化されており、前記コネクションプールは、前記特定のアプリケーションが構成コールバックを用いてコンテナを指定または設定し特定のコネクションを前記複数のテナントまたはテナントアプリケーションのうちの1つから前記複数のテナントまたはテナントアプリケーションのうちの別の1つに転用することに対するサポートを含み、これは特定のデータベースコネクションに対しテナントを切換えるという効果を有する、請求項6または7に記載の方法。
前記コネクションプールロジックは、高コストコネクションとしてラベル付けされたコネクションを識別し、コネクションの総数が特定のしきい値未満の場合は前記高コストコネクションを用いて要求を満たすことがないようにする、請求項6〜8のいずれか1項に記載の方法。
前記コネクションプールロジックは、アクティブコネクションとアイドルコネクションの総数が少ないときに特定のタイプの高コストコネクションの使用が要求されると結果として既存のコネクションが転用されるのではなく新たな高コストコネクションが作成されるように、構成される、請求項6〜9のいずれか1項に記載の方法。
【発明を実施するための形態】
【0010】
詳細な説明
ある実施形態に従い、コネクションプールを含むシステムについて説明する。このシステムは、高コストコネクションを識別し、コネクションの総数が特定のしきい値未満の場合はこれら高コストコネクションを使用して要求を満たすことのないようにすることができる。ある実施形態に従うと、このシステムは、コネクションプールを介してデータベースにアクセスできるようにするクラウドベースのまたはマルチテナントクラウド環境に対して使用することができる、または、この環境に対するサポートを提供することができる。
【0011】
ある実施形態に従うと、こうすることによって、コネクションプールは、新たな物理コネクションを使用してさまざまなテナントアプリケーション等のさまざまなアプリケーションからのコネクション要求を、既にプールされている可能性がある他のコネクション(たとえば他のテナントコネクション)に再初期化のオーバヘッドを発生させることなく、満たすことができる。
【0012】
コネクションラベリング
図1は、ある実施形態に従う、コネクションプールに対して使用されるコネクションラベリングのためのシステムを示す。
図1に示されるように、Fusion Applications環境等のアプリケーションサーバ/データベース環境100は、データベース102に対するアクセスを含むまたは提供することができる。
図1にさらに示されるように、このシステムはまた、現在使用中のコネクション108およびアイドル状態のコネクション110を含むコネクションプール106におけるオブジェクトの作成および使用を制御する105。
【0013】
ソフトウェアアプリケーション109は、コネクションプールから取出されたコネクション111を、このコネクションの使用前に初期化し得る。初期化の例は、アプリケーションコード内でのメソッドコールを必要とする単純な状態の再初期化、または、ネットワーク上でのラウンドトリップを必要とするデータベース操作を含むより複雑な初期化を含む。後者のタイプの初期化のコストは非常に高い可能性がある。
【0014】
Oracle Universal Connection Pool(UCP)といったある種のコネクションプールは、そのコネクションプールをコネクションプールプロパティを用いて構成できるようにしたものである。このプロパティは、プール対応のデータソースインスタンスを通して利用可能なメソッドを取得し設定している。これらメソッドは、プールをプログラムで構成するには便利な方法である。設定されているプールプロパティがない場合、コネクションプールはデフォルトプロパティ値を使用する。
【0015】
図2は、ある実施形態に従う、コネクションプールに対して使用されるコネクションラベリングのためのシステムをさらに示す。
【0016】
ある実施形態に従うと、コネクションをラベル付けすることにより、アプリケーションは、任意の名称/値のペアをコネクションに付けることができる。そうすると、アプリケーションは、コネクションプールに対し、所望のラベルを有するコネクションを要求することができる。特定のラベルを特定のコネクション状態に関連付けることにより、アプリケーションは、既に初期化されているコネクションをプールから取出すことができるとともに再初期化の時間とコストを避けることができる。コネクションラベリングによってユーザ定義のキーまたは値が意味付けされることはなく、ユーザ定義のキーおよび値の意味は、アプリケーションによってのみ定義される。
【0017】
たとえば
図2に示されるように、コネクションプールは、ここではコネクションA112およびB114として示されている、現在使用中の複数のコネクションを含み得る。これらコネクションは各々ラベル付けすることができる。
図2に示される例では、コネクションA112は(青)でラベル付けされ、コネクションB114は(緑)でラベル付けされている。これらのラベル/色は説明のために設けたものである。さまざまな実施形態に従い、異なるタイプのラベルを使用して異なるコネクションタイプ間の区別を行なってもよい。
【0018】
図2にさらに示されるように、コネクションプールは、ここではコネクションC116、D118、E120、F122、G124、およびN126として示されている、アイドル状態の複数のコネクションも含み得る。各アイドルコネクションも同様にラベル付けすることができる。この例では(青)または(緑)でラベル付けされている。これらのラベル/色も、説明のために設けたものである。
【0019】
図2にさらに示されるように、ある実施形態に従うと、ソフトウェアアプリケーション130が、特定のタイプのコネクション、たとえば(赤)コネクションを用いて、データベースに対する要求を行なうことを求める場合、このアプリケーションはgetConnection(赤)要求132を行なえばよい。これに応じて、コネクションプールロジックは、ここではX134(赤)として示される新たな(赤)コネクションを作成するか、または、既存のアイドルコネクションを、(青または緑)から、ここではE135(赤)として示される(赤)に転用する。
【0020】
図3は、ある実施形態に従う、コネクションプールに対して使用されるコネクションラベリングのためのシステムをさらに示す。
【0021】
ある実施形態に従うと、各ソフトウェアアプリケーションは、コストファンクションコールバックを使用して構成情報(configuration information)136を提供することができる。構成情報は、このアプリケーションに関して、コネクションの転用に関連するコスト、ならびに、高コストコネクションおよびしきい値等のその他の構成情報を規定している。
【0022】
たとえば、特定のアプリケーションは、(青)コネクションを(赤)コネクションに転用するコストの値を50、(緑)コネクションを(赤)コネクションに転用するコストの値を80、高コストコネクションの値を70、妥当なしきい値を10とみなしてもよい。これらの値の意味も同様にアプリケーションによって規定される。上記値は説明のために設けたものである。さまざまな実施形態に従い、異なる数値または数字でない値を用いて異なるコネクションコスト間の区別を行なうことができる。
【0023】
ある実施形態に従うと、コネクションプールロジックは、プール内の利用可能な各コネクションに対して繰返される。各コネクションに対し、コネクションプールロジックはコストメソッドをコールする。コストメソッドの結果は、コネクションを必要な状態に再構成するのに必要なコストの見積もりを表わす整数である。この値が大きいほどコネクションを再構成する(reconfigure)コストは高い。
【0024】
ある実施形態に従うと、アプリケーショ
ンが提供する
(138
)構成情報140を用いて、コネクションプールロジックは、コネクション、特に高コストコネクションを作成するか転用するかの判断141を下すことができる。たとえば、ある実施形態に従うと、システムは以下の疑似コードによって示されるものと同様のプロセスを実行することができる。
【0025】
High-Cost: 70 //高コスト:70
Threshold: 10 //しきい値:10
getConnection(Red)
IF perfect match (Red) //完全一致(赤)?
THEN return it //そうであれば、これを返す
ELSE find cheapest connection
//そうでなければ、最もコストの低いコネクションを見つけ出す
IF cheapest connection’s cost < High-Cost
//最もコストの低いコネクションのコスト<高コスト?
THEN repurpose this connection //そうであれば、このコネクションを転用
ELSE IF sum connections < Threshold
//そうでなければ、コネクションの総数<しきい値?
THEN create new connection and apply label
//そうであれば、新たなコネクションを作成しラベルを付与
ELSE sum conn ≧ Threshold THEN repurpose cheapest connection
//そうでなければ、コネクションの総数≧しきい値であれば、
//最もコストの低いコネクションを転用
上記例を用いた場合、ある実施形態に従うと、特定のアプリケーションは、高コストを70、しきい値を10と定義してもよい。
【0026】
システムが特定のコネクションタイプ(たとえば赤)の要求を受けたとき、コネクションプールロジックは先ず完全な/既存の一致(すなわちアイドル状態の赤コネクション)があるか否か判断し、あれば、このコネクションをアプリケーションによる使用のために返す。そうでなければ、コネクションプールロジックは、(赤コネクションに)転用できる最もコストの低いコネクションを見つけ出す。最もコストの低いコネクションのコストが高コスト(70)未満であれば、このコネクションを転用する。そうでなく、コネクションの総数がしきい値(10)未満であれば、新たな(赤)コネクションを作成しそのようにラベル付けしてアプリケーションに与える。そうでなく、コネクションの総数がしきい値以上であれば、最もコストの低いコネクションを(赤)コネクション142として転用する。
【0027】
図4は、ある実施形態に従う、コネクションプールに対して使用されるコネクションラベリングのためのシステムをさらに示す。
【0028】
ある実施形態に従うと、アクティブコネクションとアイドルコネクションの総数が少ないときに特定のタイプの高コストコネクションの使用が要求されると、結果として、既存の(潜在的にはこれも高コストの)コネクションが転用されるのではなく、新たな高コストコネクションY144(赤)が作成されるであろう。よって、この新たなタイプのコネクションを、その後のこのタイプの要求に対して使用することができる。この提案されている手法では、結果として、既存の(潜在的にはこれも高コストの)コネクションが転用されるのではなく、高コストコネクションが作成されることになるであろうが、この手法は、特に複雑な、たとえば一般的に高コストコネクションを利用するマルチテナントクラウド環境において、パフォーマンスを大幅に改善することができる。
【0029】
図5は、ある実施形態に従う、コネクションプールに対して使用されるコネクションラベリングのプロセスを示すフローチャートである。
図5に示されるように、ある実施形態に従うと、ステップ152において、システムは、データベースへのコネクションの要求(たとえばgetConnection(赤))を受ける。
【0030】
ステップ154において、システムは、完全な/既存のコネクション一致(赤)があるか否か判断する。一致する既存のコネクションがあれば、ステップ156で、既存の(赤)コネクションが返される。そうでなければ、ステップ158で、最もコストの低い既存の非一致コネクション(たとえば青、緑)を見つけ出す。
【0031】
ステップ160で、システムは、最もコストの低い非一致コネクションのコストが高コスト未満か否か判断する。高コスト未満であれば、ステップ162で、この最もコストの低い非一致コネクションを(赤)コネクションとして転用する。
【0032】
ステップ164で、システムは、すべてのコネクションの総数がしきい値未満か否か判断する。しきい値未満であれば、ステップ166で、新たなコネクションが作成され、適切なコネクションラベル(赤)が新たなコネクションに付与される。そうでない場合として、ステップ168で、すべてのコネクションの総数がしきい値以上であれば、最もコストの低いコネクションが(赤)コネクションとして転用される。
【0033】
これまで説明してきたのは、コネクション、特に高コストコネクションを作成するか転用するか判断するための1つの手法である。他の実施形態および実装例に従い、他の手法を使用してもよい。また、先に述べたようにラベル/色は説明のために設けているのであって、他の実施形態では異なるタイプのラベルを使用して異なるコネクションタイプ間の区別を行なってもよい。
【0034】
マルチテナント環境に対するコネクションラベリング
ある実施形態に従うと、コネクションプールに対して使用されるコネクションラベリングのためのシステムおよび方法は、コネクションラベリングを使用するクラウドベースのマルチテナント環境に対するサポートを含み得る。ある実施形態に従うと、このタイプの環境は「サービスとしてのアプリケーション」(Application as a Service)(AaaS)環境とみなすことができる。
【0035】
図6は、ある実施形態に従う、コネクションラベリングを使用するクラウドベースのマルチテナント環境に対するサポートを含む、コネクションプールに対して使用されるコネクションラベリングのためのシステムを示す。
図6に示されるように、マルチテナントクラウド環境は、Fusion Applications環境等のアプリケーションサーバ/データベース環境100を含み得る。環境100は、クラウドベース環境170内の複数のテナントまたはテナントアプリケーション172、174、176が使用する、データベース102に対するアクセスを含むまたは提供する。
図6にさらに示されるように、このシステムはまた、コネクションプール106におけるオブジェクトの作成を制御するコネクションプールロジック104を含む。
【0036】
テナントがクラウド171を介してアクセスするソフトウェアアプリケーションは、コネクションプールから取出されたコネクション178を、このコネクションの使用前に初期化し得る。先に述べたように、初期化の例は、アプリケーションコード内でのメソッドコールを必要とする単純な状態の再初期化、または、ネットワーク上でのラウンドトリップを必要とするデータベース操作を含むより複雑な初期化を含み、後者のタイプの初期化のコストは非常に高い可能性がある。これも先に述べたように、コネクションをラベル付けすることにより、アプリケーションは、任意の名称/値のペアをコネクションに付けることができ、そうすると、アプリケーションは、コネクションプールに対し、所望のラベルを有するコネクションを要求することができる。特定のラベルを特定のコネクション状態に関連付けることにより、アプリケーションは、既に初期化されているコネクションをプールから取出すことができるとともに再初期化の時間とコストを避けることができる。ここでも、コネクションラベリングによってユーザ定義のキーまたは値が意味付けされることはなく、ユーザ定義のキーおよび値の意味は、アプリケーションによってのみ定義される。
【0037】
たとえば、
図6に示されるように、コネクションプールは、ここではコネクションA112およびB114として示されている、現在使用中の複数のコネクション108を含み得るとともに、ここではコネクションC116、D118、E120、F122、G124、およびN126として示されている、アイドル状態の複数のコネクション110も含み得る。各コネクションは同様にラベル付けすることができ、この例では(青)または(緑)でラベル付けされている。ここでも、これらのラベル/色は説明のために設けたものであり、さまざまな実施形態に従って、異なるタイプのラベルを使用して異なるコネクションタイプ間の区別を行なってもよい。
【0038】
図7は、ある実施形態に従う、コネクションラベリングを使用するクラウドベースのマルチテナント環境に対するサポートを含む、コネクションプールに対して使用されるコネクションラベリングのためのシステムをさらに示す。
【0039】
ある実施形態に従うと、ソフトウェアアプリケーション130が、特定のタイプのコネクション、たとえば(赤)コネクションを用いて、データベースに対する要求を行なうことを求める場合、このアプリケーションはgetConnection(赤)要求180を行なえばよい。これに応じて、コネクションプールロジックは、新たな(赤)コネクションを作成するか、または、既存のアイドルコネクションを(青または緑)から(赤)に転用する。
【0040】
ある実施形態に従うと、コネクションプールは、アプリケーションがconfiguration()コールバック(構成コールバック)を用いて「SET CONTAINER」を指定すなわちコンテナを設定し特定のコネクションをあるテナントから別のテナントに転用することをサポートし、これは、特定のデータベースコネクション上のテナントを切換えるという効果を有する。
【0041】
ある実施形態に従うと、各ソフトウェアアプリケーションは、コストファンクションコールバックを使用して構成情報136を提供することができる。構成情報は、このアプリケーションに関して、コネクションの転用に関連するコスト、ならびに、高コストコネクションおよびしきい値等のその他の構成情報を規定している。
【0042】
たとえば、特定のアプリケーションは、(青)コネクションを(赤)コネクションに転用するコストの値を50、(緑)コネクションを(赤)コネクションに転用するコストの値を80、高コストコネクションの値を70、妥当なしきい値を10とみなしてもよい。これらの値の意味も同様にアプリケーションによって規定される。上記値は説明のために設けたものである。さまざまな実施形態に従い、異なる数値または数字でない値を用いて異なるコネクションコスト間の区別を行なうことができる。
【0043】
ある実施形態に従うと、コネクションプールロジックは、プール内の利用可能な各コネクションに対して繰返される。各コネクションに対し、コネクションプールロジックはコストメソッドをコールする。コストメソッドの結果は、コネクションを必要な状態に再構成するのに必要なコストの見積もりを表わす整数である。この値が大きいほどコネクションを再構成するコストは高い。
【0044】
ある実施形態に従うと、アプリケーションが提供する構成情報を用いて、コネクションプールロジックは、コネクション、特に高コストコネクションを作成するか転用するかの判断を下すことができる。たとえば、ある実施形態に従うと、システムは上記プロセスと同様のプロセスを実行することができる。
【0045】
上記例を用いた場合、ある実施形態に従うと、特定のアプリケーションは、高コストを70、しきい値を10と定義してもよい。システムが特定のコネクションタイプ(たとえば赤)の要求を受けたとき、コネクションプールロジックは先ず完全な/既存の一致(すなわちアイドル状態の赤コネクション)があるか否か判断し、あれば、このコネクションをアプリケーションによる使用のために返す。そうでなければ、コネクションプールロジックは、(赤コネクションに)転用できる最もコストの低いコネクションを見つけ出す。最もコストの低いコネクションのコストが高コスト(70)未満であれば、このコネクションを転用する。そうでなく、コネクションの総数がしきい値(10)未満であれば、ここではZ184(赤)として示されている新たな(赤)コネクションを作成しそのようにラベル付けしてアプリケーションに与える。そうでなく、コネクションの総数がしきい値以上であれば、最もコストの低いコネクションを、ここではE182(赤)として示されている(赤)コネクションとして転用する。
【0046】
ある実施形態に従うと、アクティブコネクションおよびアイドルコネクションの総数が少ないときに特定のタイプの高コストコネクションの使用が要求されると、その結果、既存の(潜在的にはこれも高コストの)コネクションが転用されるのではなく、新たな高コストコネクションが作成されるであろう。よって、この新たなタイプのコネクションを、その後のこのタイプの要求に対して使用することができる。
【0047】
この提案されている手法では、結果として、既存の(潜在的にはこれも高コストの)コネクションが転用されるのではなく、高コストコネクションが作成されることになるであろうが、この手法は、特に複雑な、たとえば一般的に高コストコネクションを利用するマルチテナントクラウド環境において、パフォーマンスを大幅に改善することができる。
【0048】
たとえば、
図7に示されるように、このシステムは、クラウドベース環境内の複数のテナントまたはテナントアプリケーションによって使用されることができる。このようなマルチテナント環境では、コネクションのタイプは非常に複雑である場合がある。なぜなら、複数のテナントに対応する必要があるとともに、たとえば異なるテナントからデータベースへのそれぞれのアクセス間のセキュリティを管理する必要があるからである。本明細書に記載の手法を用いて、クラウド環境内で機能するアプリケーションのパフォーマンスを改善することができる。
【0049】
図8は、ある実施形態に従う、コネクションラベリングを使用するクラウドベースのマルチテナント環境に対するサポートを含む、コネクションプールに対して使用されるコネクションラベリングのプロセスを示すフローチャートである。
図8に示されるように、ある実施形態に従うと、ステップ192で、複数のテナントまたはテナントアプリケーションが使用するデータベースへのアクセスを含むまたは提供するマルチテナントクラウド環境が提供される。
【0050】
ステップ194で、ソフトウェアアプリケーションがデータベースへのアクセスを要求するために使用することができるコネクションを提供するコネクションプールが提供され、コネクションは特定のアプリケーションの構成に従ってラベル付けすることができる。
【0051】
ステップ196で、複数のテナントまたはテナントアプリケーションからのコネクション要求をコネクションラベリングおよびコネクションコスト情報とともにサポートするようにソフトウェアアプリケーションが構成される。
【0052】
ステップ198で、高コストコネクションとしてラベル付けされたコネクションが識別され、システムはその後、高コストコネクションの作成または転用を制御して複数のテナントまたはテナントアプリケーションからの要求を満たす。
【0053】
実装例
以下は、さまざまな実施形態に従う、Oracle UCP環境においてコネクションプールに対しコネクションラベリングを如何にして使用できるかを示す例である。他の実施形態に従い、たとえばWebLogicサーバコネクションプールまたはその他の種類のコネクションプールに対して使用される機能を提供することができる。
【0054】
Oracle UCPにおいて、コネクションラベリング(Connection Labeling)(CL)は、高コストコネクションを識別するためのメカニズムを提供する。ある実施形態に従うと、CLは、少なくとも離散値をサポートしなければならず、ある範囲の値をサポートし得る。CLは、再利用高コストコネクションしきい値の構成パラメータ(minpoolsize、maxpoolsizeと同様)を提供し得る。利用できる最小コストのコネクションが高コストコネクションであった場合、このシステムは、現在のプールサイズを、再利用高コストコネクションしきい値に対してテストするとともに、最小プールサイズに対してテストすることができる。現在のプールサイズ<最小プールサイズ、または、現在のプールサイズ<しきい値であれば、システムは新たなコネクションを返す。そうではなく、(現在のプールサイズ>=しきい値)であれば、システムは、最小コストの高コストコネクションを返す。利用できるコネクションがないときは、現在の動作を保ち(すなわち最大プールサイズを条件として新たなコネクションを返し、>=最大プールサイズであれば、タイムアウト等を条件として、コネクションが利用できるようになるのを待つ)。
【0055】
ある実施形態に従うと、UCPコネクションラベリング動作、UCPのコネクションラベリングの特徴は、プール内のコネクションの初期化および再初期化のコストをいずれかのアプリケーションが求めるための、コネクションラベリングコールバックの実装おけるcost()メソッドをサポートする。このプールは、アプリケーションの要求に合わせて十分にカスタマイズすることができるフレキシブルなコスト値の範囲をサポートする。プールは、コールバックから返されたcost()値を用いて、各コネクション要求を満たすために最適のコネクション候補を決定する。これは常に最小コスト値のコネクションを選ぶ。0である最小コスト値は、再初期化がないことを示す。一方、Integer.MAX_VALUEは、要求を満たすために新たな物理コネクションを使用することをプールに強制する。プールは、ラベルが付与されたコネクションとラベルがないコネクションを区別する。コネクションラベリングが起動されると、プールは常に、ラベルが付与されているプール内のコネクションを先ずチェックし、要求を満たすために利用できるラベル付きのコネクションを見つけ出すことができない場合のみ、ラベルのないコネクションから利用できるものを見つけ出そうとする。これに失敗したときは、プールにまだ成長の余地があれば、新たな物理コネクションを作成しようとする。
【0056】
さまざまな実施形態に従う、上記の変形は、下記のものを含み得る。
新たなUCPプールのプロパティとしてConnectionLabelingHighCost(UCPデータソースPoolxxxDataSource上でも利用可能)を追加する。設定値が0よりも大きいとき、コスト値がこのプロパティ値以上であるコネクションは、「高コスト」コネクションとみなされる。デフォルト値はInteger.MAX_VALUEである。たとえば、プロパティ値が5に設定されている場合、ラベリングコールバックからの計算されたコスト値が5以上であるコネクションは、高コストコネクションとみなされる。
【0057】
新たなUCPプールのプロパティとしてHighCostConnectionReuseThreshold(UCPデータソースPoolxxxDataSource上でも利用可能)を追加する。設定値が0よりも大きいとき、これは、プール内のコネクションの総数のしきい値を指定し、このしきい値よりも大きい場合、コネクションラベリングはプール内の高コストコネクションを再利用して要求を満たすことができる。このしきい値よりも小さい場合、コネクションラベリングは、利用できる低コストのコネクションを使用するか、または新たな物理コネクションを作成して、要求を満たす。たとえばこのプロパティ値が20に設定されている場合、利用できる低コストのコネクションがなくコネクションの総数が20に達すると、コネクションラベリングは高コストコネクションを再利用する。HighCostConnectionReuseThresholdのデフォルト値は0である。コネクションラベリングのコールバックは、このプロパティの実施と同時に登録されねばならない。有効なコネクションラベリングのコールバック登録は、コネクションラベリングを起動し続ける。プーリング(pooling)ロジックは、コスト−選択の繰返し後に、最小コスト結果がConnectionLabelingHighCost以上のとき、新たなしきい値をチェックする。この新たなしきい値がチェックされる時点におけるコネクションの総数は、アクティブなコネクション作成要求の数を説明する(プールはこの情報を抽出するためのコードを既に有している)。このチェックは、MinPoolSizeおよびMaxPoolSize双方を説明するものでなければならない。なお、コスト値としてInteger.MAX_VALUEを有する、ラベル付けされたコネクションは、新たなしきい値に達した後であっても再利用されない。このことは、新たなしきい値およびConnectionLabelingHighCostが設定されていないときの既存のコネクションラベリングの動作と一致する。
【0058】
ある実施形態に従うと、ラベルを有するコネクション要求(すなわちラベル付けされた要求)を満たすために、プール内のラベルがない(ステートレスな)コネクションを再利用してはならないという要件はない。HighCostConnectionReuseThresholdに達しコネクションラベリングが起動されると、プールは引続き、新たな物理コネクションの作成よりもラベルがない(ステートレスな)コネクションを優先する。
【0059】
ある実施形態に従うと、特殊なコネクションラベリングコールバック実装をサポートするために、いずれのコネクションに対しても、アプリケーションは、高コストを考慮し、このようなコールバックにおけるcost()メソッドは、(1)プールサイズがHighCostConnectionReuseThresholdに達する前に、単にこのようなコネクションに対してInteger.MAX_VALUEを返し、(2)しきい値に達した後は実際の高コスト値を返すようにスイッチする。これにより、しきい値を下回った場合に、既存のUCPコードが高コストコネクションを再利用して要求を満たすのを効果的に禁止する。コールバック実装は、プールサイズをしきい値に対して動的にチェックすることができる。
【0060】
本発明の実施形態は、本開示の教示に従いプログラムされた、1つ以上のプロセッサ、メモリ、および/またはコンピュータ読取可能な記録媒体を含む、従来の汎用もしくは専用デジタルコンピュータ、コンピューティングデバイス、マシン、またはマイクロプロセッサを1つ以上用いて、適宜実装し得る。適切なソフトウェアコーディングは、熟練したプログラマが本開示の教示に基づいて容易に準備できるものである。これはソフトウェア技術における当業者には明らかであろう。
【0061】
実施形態によっては、本発明は、本発明のプロセスのうちいずれかを実行するためにコンピュータをプログラムするのに使用できる命令が格納された非一時的な記録媒体または(1つまたは複数の)コンピュータ読取可能な媒体であるコンピュータプログラムプロダクトを含む。この記録媒体の例は、フロッピー(登録商標)ディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスクを含む、任意の種類のディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリデバイス、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または、命令および/またはデータを格納するのに適した任意の種類の媒体もしくはデバイスを含み得るものの、これらに限定されない。
【0062】
本発明の実施形態に関するこれまでの記載は例示および説明を目的として提供されている。すべてを網羅するまたは本発明を開示された形態そのものに限定することは意図されていない。当業者には数多くの変更および変形が明らかであろう。実施の形態は、本発明の原理およびその実際の応用を最もうまく説明することによって他の当業者が本発明のさまざまな実施の形態および意図している特定の用途に適したさまざまな変形を理解できるようにするために、選択され説明されている。