(57)【特許請求の範囲】
【請求項１】
データソースおよびクラスタ化されたデータベース環境においてアフィニティをサポートするためのシステムであって、
クラスタ化されたデータベースシステムおよび前記データベースシステムの中の複数のデータベースインスタンスに関連付けられた通知サービスを備え、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを備え、前記データソースは、データソースのための１つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ（ＸＡ）とセッションアフィニティとのうちの１つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときＸＡアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることが実施される、システム。
【請求項２】
複数のデータソースにわたって全体的に、または各データソースについて個々にアフィニティポリシーを規定することができ、前記アフィニティポリシーは、どの種類のアフィニティが実行時に当該データソースによって使用されるかを規定する、請求項１に記載のシステム。
【請求項３】
実行時に、アプリケーションがセッションアフィニティポリシーセットを有するデータソースからのコネクションを要求すると、前記システムは、いずれかの利用可能なウェブセッションコンテキストを得るためにコールバックを行ない、そのようなウェブセッションコンテキストが利用可能である場合、前記システムはそれを使用して最も適切なコネクションを選択することができる、請求項２に記載のシステム。
【請求項４】
前記システムは、リクエストによって前記システムのまわりを伝播するワークコンテキストといった機能を使用することができ、サーブレットコンテナは、ウェブセッションとともに継続されるワークコンテキストから、アフィニティポリシーが設定されているかどうかを判断することができ、そうであれば前記ワークコンテキストを適宜設定し、追加的な情報を検索して、次いで最も適切なコネクションを選択する、請求項３に記載のシステム。
【請求項５】
データソースおよびクラスタ化されたデータベース環境においてアフィニティをサポートする方法であって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを含み、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを含み、前記データソースは、データソースのための１つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ（ＸＡ）とセッションアフィニティとのうちの１つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときＸＡアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
前記方法は、さらに、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることを実施するステップと、を含む、方法。
【請求項６】
命令を含むコンピュータプログラムであって、前記命令は、１つ以上のコンピュータによって読み取られ実行されると、当該１つ以上のコンピュータに、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを行なわせ、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを行なわせ、前記データソースは、データソースのための１つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ（ＸＡ）とセッションアフィニティとのうちの１つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときＸＡアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
さらに、当該１つ以上のコンピュータに、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることを実施するステップを行なわせる、コンピュータプログラム。
【請求項７】
データソースおよびクラスタ化されたデータベース環境において向上したアプリケーションコネクティビティを提供するためのシステムであって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスを備え、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを備え、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、
前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点まで再現する、システム。
【請求項８】
機能は非トランザクショナル読み出しオンリーまたは選択オンリーの場合に使用される、請求項７に記載のシステム。
【請求項９】
前記データベースドライバはＪＤＢＣドライバである、請求項７または８に記載のシステム。
【請求項１０】
前記ＪＤＢＣドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果を前記メモリスペースそのものに記録する、請求項９に記載のシステム。
【請求項１１】
データソースおよびクラスタ化されたデータベース環境において向上したアプリケーションコネクティビティを提供するための方法であって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを含み、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを含み、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、
前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点まで再現する、方法。
【請求項１２】
命令を含むコンピュータプログラムであって、前記命令は、１つ以上のコンピュータによって読み取られ実行されると、当該１つ以上のコンピュータに、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを行なわせ、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを行なわせ、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点まで再現する、コンピュータプログラム。
【請求項１３】
前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けて、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項１に記載のシステム。
【請求項１４】
前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けるステップをさらに含み、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項５に記載の方法。
【請求項１５】
前記１つ以上のコンピュータに、前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けるステップをさらに行わせ、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項６に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
著作権表示
この特許文献の開示の一部分は、著作権保護の対象である題材を含む。特許商標庁の特許ファイルまたは記録に出現する限りにおいては、著作権所有者はいずれかの者による特許文献または特許開示の複製に異議はないが、それ以外のすべての著作権を一切留保する。
【０００２】
優先権の主張
本願は、「セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法（"SYSTEM AND METHOD FOR PROVIDING SESSION AFFINITY IN CLUSTERED DATABASE ENVIRONMENT"）」と題された２０１２年２月１６日付けの米国特許出願番号第１３／３９８，５３８号、および「セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法（"SYSTEM AND METHOD FOR IMPROVING CONNECTIVITY IN CLUSTERED DATABASE ENVIRONMENT"）」と題された２０１２年２月１６日付けの米国特許出願番号第１３／３９８，６０６号の優先権の利益を主張し、それぞれ「アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際に改良をもたらすためのシステムおよび方法（"SYSTEM AND METHOD FOR PROVIDING IMPROVEMENTS IN USING DATA SOURCE WITH AN APPLICATION SERVER AND CLUSTERED DATABASE"）」と題された２０１１年６月２７日付けの米国仮特許出願番号第６１／５０１，５８３号の優先権を主張する。上記出願の各々は引用によってここに援用される。
【０００３】
発明の分野
発明は概して、データベース、ミドルウェア、およびクラスタ化されたデータソースなどのコンピュータシステムおよびソフトウェアに関し、特に、アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際の様々な改良に関する。
【背景技術】
【０００４】
関連する出願
本願は、「ミドルウェアマシンプラットフォーム（"MIDDLEWARE MACHINE PLATFORM"）」と題された２０１０年９月１５日付けの米国仮特許出願番号第６１／３８３，２８５号および「ミドルウェアマシンプラットフォーム（"MIDDLEWARE MACHINE PLATFORM"）」と題された２０１０年９月１７日付けの米国仮特許出願番号第６１／３８４，２２７号の優先権を主張する「ミドルウェアマシン環境を含むシステム（"SYSTEM INCLUDING MIDDLEWARE MACHINE ENVIRONMENT"）」と題された２０１１年９月１５日付けの米国特許出願番号第１３／２３４，０２７号と、「ＧＲＩＤＬＩＮＫデータソースを用いてクラスタ化されたデータベースにアプリケーションサーバをコネクトするためのシステムおよび方法（"SYSTEM AND METHOD FOR USING GRIDLINK DATA SOURCE TO CONNECT AN APPLICATION SERVER WITH CLUSTERED DATABASE"）」と題された２０１１年６月２４日付けの米国特許出願番号第１３／１６８，５０６号とに関し、これら出願の各々は引用によってここに援用される。
【０００５】
背景
Ｏｒａｃｌｅ  Ｒｅａｌ  Ａｐｐｌｉｃａｔｉｏｎ  Ｃｌｕｓｔｅｒ（ＲＡＣ）などの製品を用いてクラスタ化されたデータベース環境を実装することができ、その結果として拡張性および高い可用性がエンドユーザアプリケーションに提供される。クラスタ化されたデータベースは、ＷｅｂＬｏｇｉｃサーバ（ＷＬＳ）などの他の製品と統合して、アプリケーションサーバ／クラスタ化されたデータベース環境を提供することもできる。これらは、発明の実施例が扱うことが意図される概略的な分野である。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
発明は、概してミドルウェアおよびクラスタ化されたデータソースなどのコンピュータシステムおよびソフトウェアに関し、特に、アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際の様々な改良に関する。
【０００７】
クラスタ化されたデータベース環境（たとえばＯｒａｃｌｅ  Ｒｅａｌ  Ａｐｐｌｉｃａｔｉｏｎ  Ｃｌｕｓｔｅｒ（ＲＡＣ））は、１つのサーバのように見える多数のデータベースインスタンスを含む。アプリケーションサーバ（たとえばＷｅｂＬｏｇｉｃサーバ（ＷＬＳ））は、データソース（たとえばＯｒａｃｌｅのＧｒｉｄＬｉｎｋデータソース）およびコネクションプールを使用して、クラスタ化されたデータベースにコネクトすることができる。通知サービスは、データベースインスタンスにおける状態変化を示す通知をブロードキャストし、それらは次いで、データベースインスタンスへのアクセスを制御するためにデータソースおよびコネクションプールによって使用される。
【０００８】
一実施例によれば、データソース設定によって、データアフィニティ、一時的なアフィニティ、および／またはセッションもしくはセッションベースのアフィニティポリシーなどの好ましいアフィニティポリシーの特定が可能となる。セッションアフィニティポリシーを用いて、ウェブセッションのコンテキストの下でなされたデータベースアクセスに、データベースインスタンスアフィニティを与える。つまり、セッションアフィニティは、一時的なアフィニティの一形態であり、それによって、アプリケーションが特定のデータセットへ関連付けられた多重の更新を行なっているかもしれない期間中は、データベース動作は特定のインスタンスに向けられる。そのような動作を単一のデータベースインスタンスに向けることを用いて、高められたローカルキャッシュ利用によってアプリケーション性能を向上させることができる。
【０００９】
一実施例によれば、システムは、アプリケーション連続性のための選択オンリーの場合を含むクラスタ化されたデータベース環境におけるアプリケーションコネクティビティを向上させる多くの機能を含む。たとえばＪａｖａ（登録商標）Ｄａｔａｂａｓｅ  Ｃｏｎｎｅｃｔｉｖｉｔｙ（ＪＤＢＣ）ドライバ内に実装される、アプリケーションに依存しないインフラストラクチャにより、アプリケーションから見て作業の回復が可能となり、システムコミュニケーション、ハードウェア障害、およびハングがマスキングされる。
【図面の簡単な説明】
【００１０】
【図１】一実施例に係る、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す図である。
【図２】一実施例に係る、アフィニティ設定を利用してクラスタ化されたデータベースとともに使用される多数のアプリケーションサーバおよび／またはデータソースの実例を示す図である。
【図３】一実施例に係る、ウェブアプリケーションを含み、かつデータソースおよびクラスタ化されたデータベースとともに使用されるウェブセッションアフィニティをサポートするシステムの実例を示す図である。
【図４】一実施例に係る、例示的なウェブセッションアフィニティインタラクションの実例を示す図である。
【図５】一実施例に係る、ウェブセッションアフィニティを提供するための方法のフローチャートである。
【図６】一実施例に係る、ドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す図である。
【図７】一実施例に係る、選択データを再現するのに使用されるドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの別の実例を示す図である。
【図８】一実施例に係る、ドライバ再現機能を提供するための方法のフローチャートである。
【発明を実施するための形態】
【００１１】
詳細な説明
一実施例によれば、クラスタ化されたデータベース環境（データベースクラスタと称することもある）は１つ以上の相互接続されたコンピュータまたはサーバを含み、エンドユーザおよびエンドユーザアプリケーションにとっては、それらは一体として単一のサーバであるかのように見える。概してデータベース記憶装置とデータベースインスタンスとの間に一対一の関係を提供する単一インスタンスデータベースとは異なり、クラスタ化されたデータベースは、データベース記憶装置といくつかのデータベースインスタンスとの間に一対多数の関係を提供することができる。
【００１２】
たとえば、Ｏｒａｃｌｅ  Ｒｅａｌ  Ａｐｐｌｉｃａｔｉｏｎ  Ｃｌｕｓｔｅｒ（ＲＡＣ）データベースシステムは、複数のサーバをともにバインドするためにＯｒａｃｌｅクラスタウェアインフラストラクチャを使用してＯｒａｃｌｅのデータベースのクラスタ化を可能にし、したがってサーバは単一のシステムとして動作することができる。ＲＡＣデータベースシステムは多くのデータベースインスタンスを含むことができ、その各々は単一のデータベース記憶装置にアクセスすることができる。このように、そのような複数のサーバの組合せられた処理能力は、単一のサーバを用いて実現可能なものよりも大きなスループットおよび拡張性を提供することができる。
【００１３】
一実施例によれば、データソース（他の形態のデータソースを使用してもよいが、ここで説明されるいくつかの例ではＧｒｉｄＬｉｎｋデータソースと称する）を用いて、ＷｅｂＬｏｇｉｃサーバ（ＷＬＳ）インスタンスなどのアプリケーションサーバを、クラスタ化されたデータベースにコネクトすることができる。クラスタ化されたデータベースによって通知サービスを用いて、複数のそのデータベースインスタンス内のいずれかの状態変化を示す通知（Ｏｒａｃｌｅ  ＲＡＣ製品において使用される高速アプリケーション通知（Fast Application Notification）すなわち「ＦＡＮ」通知またはイベントなど）をブロードキャストすることができる。データソースは、クラスタ化されたデータベース中の複数のデータベースインスタンスへの一組のコネクションを管理するコネクションプールを含む。データソースは、通知サービスを用いて登録し、クラスタ化されたデータベースの変更に関する通知を受信することができる。アプリケーションサーバは次いで、ランタイムにおけるクラスタ化されたデータベースのいずれかの状態変化に従って、クラスタ化されたデータベースへのコネクトを適切に設定し、および／または、管理することができる。
【００１４】
図１は、一実施例に係る、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す。図１に示されるように、データソース１０４（他の形態のデータソースを使用してもよいが、この例ではＧｒｉｄＬｉｎｋデータソースと称する）はアプリケーションサーバ１０１と関連付けられる。
【００１５】
データソースは、アプリケーションサーバとの、またはアプリケーションサーバによる、クラスタ化されたデータベース１０２の使用を単純化し、クラスタ化されたデータベースを使用するために必要とされる設定および管理の複雑度を低下させる。データソースはコネクションプール１０６を含み、コネクションプール１０６はさらにデータベースクラスタ中の異なるデータベースインスタンス１１４，１１６，１１８への一組の異機種コネクション１２８，１２９を提供する。その結果、異なるデータベースインスタンスが単一のまたは共用記憶装置１２０にコネクトすることができる。
【００１６】
コネクションプールにおけるコネクションの管理は、最小／最大容量などのコネクションプールに対して設定された静的な設定１１２またはタイムアウト、および／またはデータベースクラスタ内の状態変化をデータソースに知らせる通知サービス１２４から受信されるイベントメッセージ１２６に示されているコネクションプールに関するリアルタイム情報のいずれかに基づくことができる。
【００１７】
アプリケーション１０８，１１０がデータソースからのコネクションを要求すると、好適なコネクションがコネクションプールから選択され、たとえばコネクションプールが受信した負荷バランシング情報および／またはプールからの使用時のコネクションの現時点分布に基づいて、アプリケーションに供給することができる。
【００１８】
１つの例示的な例では、上記のシステムを用いて、Ｏｒａｃｌｅのデータベースサービスを提供することができる。当該データベースサービスは、たとえば作業負荷、作業負荷の優先順位付け、リアルトランザクションのための性能手段、ならびに性能目標が破られた場合の警告および措置のための単一のシステムイメージを提供することができる。データベースサービスにより、データベース管理責任者が作業負荷を単一のエンティティとして設定し、管理し、有効／無効にし、かつ測定することが可能となる。データベースサービスは、作業負荷を論理的な分類に分けるためにさらに使用することができ、各サービスは、作業負荷を、共通の属性、サービスレベルのしきい値、および優先順位で表わす。アプリケーションサーバは、クラスタ化されたデータベースによって発せられた負荷バランシングアドバイザリイベントメッセージを受信し、それに応じてデータベースノードまたはインスタンスへのデータベースコネクションを調整することができる。次いでシステムは、データソース上で実行時に負荷バランシング設定を行なうことができ、データベースから受信された負荷バランシングアドバイザリメッセージに基づいて、アプリケーションサーバがデータベースコネクションをディスパッチすることが可能となる。次いでデータベースコネクションを特定のデータベースノードに向けて、データベース管理責任者によって設定された性能目標を満たすことができる。
【００１９】
別の例では、システムは、分散トランザクション（ＸＡ）アフィニティをサポートして、グローバルトランザクションのコンテキスト内でデータベースクラスタに対して行なわれるすべてのデータベース動作が同じデータベースインスタンスに向けられることを確実に行なうことができる。そのようなＸＡアフィニティは、個別のデータソースの代わりにグローバルトランザクションＩＤに基づいて確立され、同じデータベースクラスタについて設定される異なるデータソースから得られるコネクションがすべて同じデータベースインスタンスに関連付けられること、またはクラスタ化されたデータベースに対して行なわれるグローバルトランザクションのためのデータベース動作がすべて同じデータベースインスタンスに向けられることを確実に行なうことができる。たとえば、ＸＡトランザクションの第１のコネクション要求を負荷バランシングし、アフィニティコンテキストを割当てることができる。次のコネクション要求は最初のコネクションのアフィニティコンテキストを用いて、同じデータベースインスタンスにルーティングすることができる。
【００２０】
上記の特徴に加えて、システムは、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのコネクションモジュールとして、ユニバーサルコネクションプール（ＵＣＰ）ライブラリの使用などの追加的な特徴および機能を採用することができる。一般に、ＵＣＰライブラリは、データベースサーバから見てクライアント側ライブラリのように見え、論理的には、データベースにコネクトするために使用されるＪａｖａ（登録商標）データベースコネクティビティ（ＪＤＢＣ）ドライバの拡張機能である。そのようなデータベースコネクションモジュールの使用は、総括的なＪＤＢＣコネクションプーリング実装の提供に加えて、クラスタ化されたデータベースのための高い可用性およびパフォーマンス能力をサポートすることができる。
【００２１】
上記の特徴および機能のうちのいくつかを含むデータソースシステムの様々な実施例のさらなる説明は、「ＧＲＩＤＬＩＮＫデータソースを用いてクラスタ化されたデータベースにアプリケーションサーバをコネクトするためのシステムおよび方法（"SYSTEM AND METHOD FOR USING GRIDLINK DATA SOURCE TO CONNECT AN APPLICATION SERVER WITH CLUSTERED DATABASE"）」と題された２０１１年６月２４日付けの米国特許出願番号第１３／１６８，５０６号に示されており、当該出願は引用によってここに援用される。
【００２２】
クラスタ化されたデータベース環境におけるセッションアフィニティ
一実施例によれば、システムは、ウェブセッションとの使用のために、セッションアフィニティの使用をサポートする。ここで言及される限りにおいて、セッションまたはセッションベースのアフィニティは一時的なアフィニティの一形態であり、それによって、アプリケーションが特定のデータセットへ関連付けられた多重の更新を行なっているかもしれない期間中は、アプリケーションによって要求されるデータベース動作は特定のデータベースインスタンスに向けられる。そのような動作を単一のデータベースインスタンスに向けることを用いて、高められたローカルキャッシュ利用を活用し、かつ全体的なアプリケーションパフォーマンスを向上させることができる。
【００２３】
図２は、一実施例に係る、１つ以上のアフィニティ設定を利用して、多数のアプリケーションサーバおよび／またはデータソースがクラスタ化されたデータベースとともに使用されている環境の実例を示す。図２に示されるように、アプリケーションサーバ環境１４０は、１つ以上のアプリケーションサーバインスタンス１４２，１６２を含むことができる。各アプリケーションサーバインスタンスは、各々それ自身のコネクションプール１４６，１６６を有する１つ以上のデータソース１４４，１６４とコネクションプール設定１５４，１７４とを含むことができる。データソースはクラスタ化されたデータベースへのコネクション１５８，１７８をアプリケーション１５０，１７０にともに与え、アプリケーションとクラスタ化されたデータベースとの間により深い統合を与えるために、データベースサービスの消費を無制限にサポートする。
【００２４】
一実施例によれば、データソースソースレベルごとに特定することができる、またはアプリケーションサーバ環境内のすべてあるいは複数のデータソースもしくはアプリケーションサーバにわたって特定することができる、１つ以上のアフィニティ設定１５６，１７６と、各データソースとを関連付けることもできる。使用することができるアフィニティスキームの例は、ＸＡアフィニティ、およびセッションもしくはセッションベースのアフィニティを含む。
【００２５】
ウェブアプリケーションのコンテキストでは、ウェブセッションの寿命は、ユーザによるｅコマースショッピングカート機能の操作などのウェブアプリケーションとデータベースとの間の比較的長寿命のインタラクションとすることができる。セッションアフィニティが使用される際は、システムはそのウェブセッションの寿命のためにアフィニティコンテキストを保持する。これはアプリケーションパフォーマンスに利点をもたらす。システムはその特定のウェブセッション中に同じデータベースインスタンスに常に戻り、そのデータベース上でローカルキャッシュを利用することになるからである。そのようなセッションアフィニティ機能を使用することの他の利点は、データベース上のクラスタ待ち時間の短縮を含み、ＲＡＣのコンテキストでは、ＲＡＣクラスタデータセットの同期にあまり依存しないことを含む。
【００２６】
一実施例によれば、セッションアフィニティおよび他のアフィニティスキームの両方をサポートする際に使用されるアフィニティ情報は、クラスタ全体にわたって複製されることが意図されるいずれかの負荷アドバイザリなどとともに、通知サービスによってそのＦＡＮ通知またはイベント内で拡張することができる。いくつかの実装例では、システムは、様々なアプリケーションによって使用されているデータからキーを抽出し、それらのキーに基づいて適切なサーバへのコネクションをルーティングすることができる。いくつかの実装例では、システムは、実行時にＵＣＰを活用して、アプリケーションが実装することができるアプリケーションコールバックＡＰＩを提供し、次いで実行時にアプリケーションをそのためにコールバックし、適切なルーティングを決定するために使用することができるキーを提供することもできる。
【００２７】
一実施例によれば、複数のデータソースにわたって全体的に、または各データソースについて個々に、アフィニティポリシーを規定することができる。アフィニティポリシーは、（もしあるならば）どの種類のアフィニティが実行時にそのデータソースによって使用されるかを規定する。ウェブアプリケーションとの使用が意図される一実施例によれば、セッションアフィニティは、データソース環境内の各データソースにおいてデフォルトアフィニティポリシーとして設定される。全体的なポリシー設定は、リソースごとのポリシー設定に優先する。
【００２８】
実行時に、アプリケーションが（特定的にまたはデフォルトで）セッションアフィニティポリシーセットを有するデータソースからのコネクションを要求すると、システムはいずれかの利用可能なウェブセッションコンテキストを得るためにコールバックを行なう。そのようなウェブセッションコンテキストが利用可能である場合、システムは、それを用いて最も適切なコネクションを選択することができる。別な方法として、システムはたとえばＵＣＰを用いて、実行時の負荷バランシングなどの他の要因に基づいてコネクションを選択することができる。システムの構成に依存して、次いでそのウェブセッションについてアフィニティコンテキストを設定することができ、したがってアプリケーションが次に要求を行なう時には、適切なセッションアフィニティ情報をそのコンテキストに有する。
【００２９】
ＷｅｂＬｏｇｉｃ環境などの環境では、セッションが内部で受渡しされない場合がある。そのような環境では、システムは、リクエストによってシステムのまわりを伝播するワークコンテキストといった機能を代りに使用することができる。サーブレットコンテナは、ウェブセッションとともに継続されるワークコンテキストから、アフィニティポリシーが設定されているかどうかを判断することができ、設定されている場合は、ワークコンテキストを適宜設定し、追加的な情報を検索し、次いで最も適切なコネクションを選択する。
【００３０】
図３は、一実施例に係る、データソースおよびクラスタ化されたデータベースとともに使用するためにウェブセッションとともにウェブアプリケーションを含むシステムの実例を示す。図３に示されるように、各アプリケーションサーバインスタンスは、各々それ自身のコネクションプール２０５を有する１つ以上のデータソース２０３とコネクションプール設定２１０とを含むことができる。ウェブアプリケーション２０６が実行され、ウェブセッション２０８中にリクエストの一部としてデータソースコネクションが呼出されると、セッションまたはセッションベースのアフィニティ２１２が使用されている場合、セッション２１８中で使用するためにコネクションがアプリケーション２１６に戻される。アプリケーションリクエストの実行が終了した後、かつサーブレットコンテナがそのレスポンスを終了する前に、コンテナは、いずれかの既存のセッションベースのアフィニティコンテキストをセッションおよび／またはワークコンテキストマップに保存し、したがってアフィニティコンテキストは、その同じウェブセッション中の次のリクエスト２２０によって使用されるようにセッションと関連付けられる。
【００３１】
図４は、一実施例に係る、例示的なウェブセッションアフィニティインタラクションの実例を示す。一実施例によれば、一組のアフィニティコールバックインターフェースを、たとえばｏｒａｃｌｅ．ｕｃｐパッケージにおいて規定することができる。一実施例によれば、ｇｅｔＣｏｎｎｅｃｔｉｏｎＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔメソッドとｓｅｔＣｏｎｎｅｃｔｉｏｎＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔメソッドとがデータソースおよびアフィニティ実装例によって使用され、アフィニティコンテキストの、アプリケーションコンテキストとの関連付けを管理する。各コネクション保持リクエストについては、ｇｅｔＣｏｎｎｅｃｔｉｏｎＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔメソッドが呼出され、アプリケーションコンテキスト（たとえばグローバルトランザクションまたはウェブセッション）と関連付けられたアフィニティコンテキストが既にあるかどうかを判定する。もしなければ、その後、ランダムにまたは実行時のコネクション負荷バランシングに従ってコネクションが選択され、選択されたデータベース（たとえばＲＡＣ）インスタンスを識別するコンテキストオブジェクトによってｓｅｔＣｏｎｎｅｃｔｉｏｎＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔメソッドが呼出される。アフィニティポリシー実装例は次いで、次のコネクション保持リクエストで使用するためのアプリケーションコンテキストとともにインスタンス情報を格納する。図４に示されるように、サーブレットコンテナによってリクエストが受信されると、サーブレットコンテナは、アプリケーションサーブレット／ｊｓｐを実行する前にワークコンテキスト（ワークコンテキストはセッション内部属性とマップとの両方に格納される）をｉｎｉｔまたは回復する。２４０において、アプリケーションが実行され、ｄａｔａｓｏｕｒｃｅ．ｇｅｔＣｏｎｎｅｃｔｉｏｎメソッドが呼出される。２４２において、データソース（この例ではＧｒｉｄＬｉｎｋデータソース）によってＳｅｓｓｉｏｎＡｆｆｉｎｉｔｙＣａｌｌｂａｃｋ．ｇｅｔＡｆｆｎｉｔｙＣｏｎｔｅｘｔ（）が呼出される。最初は「ＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔ」は格納されていないため、２４４ではｎｕｌｌが返される。２４６において、ＳｅｓｓｉｏｎＡｆｆｎｉｔｙＣａｌｌｂａｃｋ．ｓｅｔＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔ（…）がデータソースによって呼出され、この例ではワークコンテキストマップにａｆｆｉｎｉｔｙＣｏｎｔｅｘｔが格納される。２４８において、コネクションがアプリケーションに返される。２５０において、ｇｅｔＣｏｎｎｅｃｔｉｏｎ（）がアプリケーションによって再び呼出されると、ａｆｆｉｎｉｔｙＣｏｎｔｅｘｔをワークコンテキストマップからフェッチすることができ、次いで同じコネクションが返される。２５２において、アプリケーションリクエストの実行が終了された後かつサーブレットコンテナがレスポンスを終了する前に、サーブレットコンテナはいずれかの既存の「ＡｆｆｉｎｉｔｙＣｏｎｔｅｘｔ」をセッションおよびマップに保存し、したがってアフィニティコンテキストは、次のリクエスト２５４，２５６によって使用されるようにセッションと関連付けられる。
【００３２】
一実施例によれば、アフィニティコンテキストは次のキー値：サービス名、およびデータベース固有名を含む。これらは正確なデータベースおよびサービスを確認するために使用され、そのインスタンスについてａｆｆ＝ｔｒｕｅである場合はインスタンスＩＤを返す。１つのコンテキストに対して１つのブラウザがある場合、次のチェックアウトリクエストは、これらの属性が一致することを確認するべきである。たとえば、前回のコンテキストとは異なるサービスが別のサービスに関係する場合、別のインスタンスを使用することができる。ＲＡＣにおける算出はクロスサービスではなくサービスごとである。多くのブラウザウィンドウがある場合は、各々がそれ自身のコンテキスト情報を有し、それ自身のデータベースおよびサービスにアフィニティを保持するべきである。
【００３３】
ＷｅｂＬｏｇｉｃ環境の例では、ＲＡＣセッションアフィニティ機能をサポートするために、アフィニティコンテキストをＨＴＴＰセッションに関連付けることができる。この例では、アフィニティコンテキストは、データベース名、インスタンス名、サービス名等を含み、ＲＡＣからのコネクションを得るために使用される。同じＨＴＴＰセッション（ＵＲＬまたはクエリパラメータまたはクッキーヘッダーにおける同じＪＳＥＳＳＩＯＮＩＤ）のリクエストについては、ｇｅｔＣｏｎｎｅｃｔｉｏｎ（）は同じコネクションを返すことが保証される。エンドユーザが１つまたは複数のブラウザおよび複数のブラウザウィンドウを使用しているかどうかは重要ではない。セッションアフィニティは、同じデータベースおよびサービスについて複数のデータソースにまたがる。
【００３４】
図５は、一実施例に係る、ウェブセッションアフィニティインタラクションを提供するための方法のフローチャートを示す。図に示されるように、ステップ２６０において、アプリケーションが実行され、データソースコネクションが呼出される。ステップ２６２において、既に格納されているアフィニティコンテキストがない場合、セッションベースアフィニティコンテキストがワークコンテキストマップに格納され、コネクションがアプリケーションに返される。ステップ２６４において、コネクションがアプリケーションによって再び呼出されると、セッションベースアフィニティコンテキストがワークコンテキストマップからフェッチされ、次いで同じコネクションが返される。ステップ２６６において、アプリケーションの実行が終了した後であってサーブレットコンテナがそのレスポンスを終了する前に、コンテナはいずれかの既存のセッションベースアフィニティコンテキストをセッションおよびマップに保存し、したがってアフィニティコンテキストは、次のリクエストによって使用されるようにセッションと関連付けられる。
【００３５】
一実施例によれば、ＡＰＩを内部コンポーネントによって使用されるように規定して、セッションおよびデータアフィニティポリシーを実装することができる。「セッション」アフィニティポリシー（デフォルト）は、アフィニティコンテキストがウェブアプリケーションセッションコンテキストの継続時間に関連付けられ、その継続時間中に使用されるべきであることを示す。このポリシーはＸＡアフィニティの代わりに使用することができ、ウェブセッション中のすべてのトランザクショナルデータソースの使用に該当する。セッションアフィニティポリシーを有するデータソースがウェブセッションのコンテキスト外部でアクセスされると、アフィニティポリシーはＸＡアフィニティに戻ることになる。
【００３６】
一実施例によれば、ＷＬＳデータソースサブシステムは、特定のアフィニティポリシーを統合している他の内部コンポーネントによる使用が意図されるアフィニティコールバック登録を管理するための方法を提供する。コールバック登録はグローバルであり、アフィニティポリシーによってサーバに導入されたすべてのＧｒｉｄＬｉｎｋデータソースに該当する。各種の１つのコールバックのみがいずれかの所与の時間に登録され得る。特定のコールバックは、データソースの好ましいアフィニティポリシーに基づいてアフィニティコンテキスト処理のためのコネクション保持時間において呼出されることになる。ポリシータイプのトランザクションによってコールバック実装例を登録しようとすると例外を生じさせ、現在のＸＡアフィニティ実装例の起こり得るオーバーライドを防ぐことになる。
【００３７】
一実施例によれば、ＲＡＣインスタンスが正確なイベントを生成している場合にのみアフィニティ処理が行なわれる。これは、ｔｒｕｅに設定されている負荷バランシングアドバイザリＦＡＮイベントにおけるＲＡＣインスタンスのための「ａｆｆ」フラグによって示される。アフィニティがＲＡＣインスタンスについていつ有効とされるかをより判断しやすくするために、ＡｆｆＥｎａｂｌｅｄプロパティを実行時のＭＢｅａｎに加えることができる。
【００３８】
Ｊａｖａ（登録商標）プログラミングインターフェース
一実施例に従って、上記のセッションアフィニティ機能のためのＪａｖａ（登録商標）プログラミングインターフェースの一例を以下に示す。例示的なＪａｖａ（登録商標）プログラミングインターフェースは例示および説明の目的で示され、包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。
【００３９】
public interface JDBCOracleParamsBean extends SettableBean
データソースのＯｒａｃｌｅデータベース関連のパラメータを含む。データソースのＯｒａｃｌｅ特有の挙動についての設定パラメータは、Ｏｒａｃｌｅのパラメータｂｅａｎを使用して特定することができる。
【００４０】
public java.lang.String getAffinityPolicy() 
データソースに使用されるアフィニティポリシーを特定する。オプションは、トランザクションアフィニティを特定するトランザクションと、ウェブセッションアフィニティ（デフォルト）を特定するセッションと、データアフィニティを特定するデータとを含むことができる。
【００４１】
【数１】
0006047564.tif 000002
【００４２】
最新の負荷バランシングアドバイザリイベントからアフィニティプロパティを返す。
public interface ConnectionAffinityCallback
Ｏｒａｃｌｅ  ＲＡＣアフィニティのためのインターフェースをコールバックする。
【００４３】
public boolean setConnectionAffinityContext(Object affinityContext) 
アフィニティコンテキストを設定する。パラメータはａｆｆｉｎｉｔｙＣｏｎｔｅｘｔ、つまり不透明（opaque）型のコンテキストオブジェクトを含むことができる。コンテキストオブジェクトが首尾よく設定されるとｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００４４】
public java.lang.Object getConnectionAffinityContext() 
アフィニティコンテキストオブジェクトを返す。
【００４５】
public void
setAffinityPolicy(ConnectionAffinityCallback.AffinityPolicypolicy)
このコールバックに使用するためのアフィニティポリシーを設定する。パラメータはポリシー、つまり使用するアフィニティポリシーを含むことができる。
【００４６】
public 
oracle.ucp.ConnectionAffinityCallback.AffinityPolicygetAffinityPolicy()
このコールバックから現在のアフィニティポリシーを取得する。このコールバックについて設定されたアフィニティポリシーを返す。
【００４７】
public boolean isApplicationContextAvailable() 
このアフィニティポリシーについてアプリケーションコンテキストが存在するかどうかを確認する。このポリシーについてアプリケーションコンテキストが存在する場合はｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００４８】
【数２】
0006047564.tif 000003
【００４９】
Ｏｒａｃｌｅ  ＲＡＣデータアフィニティのためのインターフェースをコールバックする。
【００５０】
public boolean setDataKey(Object keyObject) 
このコールバック実装例内のアプリケーションによって使用されるデータキーオブジェクトを設定する。パラメータは、キーオブジェクト、つまりデータキーオブジェクトを含むことができる。データキーオブジェクトが首尾よく設定されるとｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００５１】
public int getPartitionId() 
データベースのアフィニティについて論理的区分識別子を取得する。この上記のコールバック内のデータキーセットに特有の論理的区分識別子を返す。
【００５２】
public interface AffinityCallback extends ConnectionAffinityCallback
Ｏｒａｃｌｅ  ＲＡＣアフィニティのためのインターフェースをコールバックする。ＡｆｆｉｎｉｔｙＣａｌｌｂａｃｋインターフェースは、アフィニティプロバイダを登録するためにデータソースサービスとともに使用されるベースインターフェースである。インターフェースはＵＣＰ  ＣｏｎｎｅｃｔｉｏｎＡｆｆｉｎｉｔｙＣａｌｌｂａｃｋインターフェースを拡張し、追加的なメソッドを規定する。既存のＵＣＰアフィニティ実装例を下位分類して、ＡｆｆｉｎｉｔｙＣａｌｌｂａｃｋインターフェースを実装し得る。
【００５３】
public boolean isApplicationContextAvailable() 
このアフィニティポリシーについてアプリケーションコンテキストが存在するかどうかを確認する。このポリシーについてアプリケーションコンテキストが存在する場合はｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００５４】
public interface DataAffinityCallback extends AffinityCallback,
DataBasedConnectionAffinityCallback
Ｏｒａｃｌｅ  ＲＡＣデータアフィニティのためのインターフェースをコールバックする。
【００５５】
public interface Data sourceService
内部データソースサービスオペレーション。コンポーネントはこのサービスインタフェースを使用して、情報を取得し、データソースサブシステム上でグローバルオペレーションを行なうべきである。
【００５６】
public void registerAffinityCallback(AffinityCallback callback)
アフィニティについて設定されるすべてのデータソースによって呼出されることになるグローバルアフィニティコールバックを登録する。パラメータは、コールバック、つまり登録するべきコールバックインスタンスを含むことができる。
【００５７】
public boolean unregisterAffinityCallback(AffinityCallback callback)
特定されたアフィニティコールバックを登録しない。パラメータはコールバック、つまり登録しないコールバックインスタンスを含むことができる。コールバックが以前に登録されている場合はｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００５８】
【数３】
0006047564.tif 000004
【００５９】
アフィニティについて設定されるすべてのデータソースによって呼出されるグローバルデータアフィニティコールバックを登録する。パラメータは、コールバック、つまり登録するべきコールバックインスタンスを含むことができる。
【００６０】
【数４】
0006047564.tif 000005
【００６１】
データソースが、特定されたアフィニティポリシーとともに現在のサーバに導入されているかどうかを返す。
【００６２】
パラメータは、ポリシー、つまり導入されたデータソースのアフィニティポリシーを含むことができる。特定されたアフィニティポリシーとともにデータソースが導入されている場合はｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００６３】
【数５】
0006047564.tif 000006
【００６４】
特定されたアフィニティポリシーについてアフィニティポリシーリスナーコールバックを登録する。特定されたアフィニティポリシーの導入ステータスに変化がある場合は常に、コールバックが呼出されることになる。コールバックは最初の登録直後に呼出されることになる。パラメータは、リスナー、つまり登録するべきコールバック実装例と、ポリシー、つまり聞くべきアフィニティポリシーとを含むことができる。
【００６５】
【数６】
0006047564.tif 000007
【００６６】
特定されたポリシーリスナーコールバックを登録しない。パラメータはリスナー、つまり登録しないリスナーコールバックを含むことができる。特定されたコールバックが登録されている場合はｔｒｕｅを返し、そうでない場合はｆａｌｓｅを返す。
【００６７】
public interface AffinityPolicyListener
特定のアフィニティポリシーとともにデータソースが導入されるかまたは導入されていない場合、実装例をＤａｔａｓｏｕｒｃｅＳｅｒｖｉｃｅによって登録して通知を受信することができる。
【００６８】
【数７】
0006047564.tif 000008
【００６９】
特定のアフィニティポリシーの導入ステータスの変化が呼出される。パラメータはポリシー、つまり通知が該当するアフィニティポリシーを含むことができ、データソースがアフィニティポリシーによって導入されたかどうかが導入される。
【００７０】
クラスタ化されたデータベース環境におけるアプリケーションコネクティビティの向上
一実施例によれば、システムはドライバ（たとえばＪＤＢＣ）再現機能を含み、該機能は、アプリケーションから見て作業の回復を可能にし、多くのシステム、通信、およびハードウェア障害、ならびにハングをマスキングする汎用の、アプリケーションに依存しないインフラストラクチャを配信する。セマンティクスは、エンドユーザトランザクションをオンタイムでかつ最高で一回実行することができることを確実に行なうことを支援する。正味の結果は、エンドユーザがサービスの中断を見なければならないのは、継続しているポイントがないような停電時のみである。
【００７１】
図６は、一実施例に係る、ドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す。図６に示されるように、データソース２８２（他の形態のデータソースを使用してもよいが、この例ではＧｒｉｄＬｉｎｋデータソースと称する）は、クラスタ化されたデータベース２０２とともに使用されるように、アプリケーションサーバ２８０に関連付けられた単一のデータソースを提供する。データソースはコネクションプール２８４を含み、その結果データベースクラスタ中の異なるデータベースインスタンス１１４，１１６および１１８に一組の異機種コネクションを提供する。異なるデータベースインスタンスは、単一のまたは共用記憶装置１２０にコネクトすることができる。
【００７２】
一実施例によれば、システムは、データベースインスタンスにアクセスするために様々なコネクションによって使用されるＪＤＢＣドライバ２８６をさらに含む。アプリケーション２９０がデータソースからのコネクションを要求すると、好適なコネクションがコネクションプールから選択され、たとえばＦＡＮ通知によってコネクションプールが受信した負荷バランシング情報および／またはプールからの使用の際のコネクションの現時点分布に基づいてアプリケーションに供給されることができる。アプリケーションセッション２９２は次いで、コネクションプールおよびＪＤＢＣドライバを介してデータベースにリクエスト２９４を発し、対応するレスポンスまたは結果２９５を受信し、それらは次いでアプリケーションに返される。
【００７３】
一実施例によれば、ウェブセッションを用いたアプリケーションの動作中に、コネクションが停止するかまたは失敗した場合、ＪＤＢＣドライバは、アプリケーション自体にはいずれのエラーまたは例外も生じないように、どの情報またはデータがアプリケーションによってデータベースから以前に照会されたかについての状態２８７を記録し、データベースに対するクエリを処理する点までのセッションを再現する。
【００７４】
他の実施例によれば同様の技術をトランザクショナルケースに使用することができ、かつトランザクションとの使用は意図されずそれらのケースをサポートするために拡張することができるが、一実施例によれば、機能は非トランザクショナル読み出しオンリーまたは選択オンリーの場合に特に有用である。使用ケースの複雑度（たとえば、読み出しオンリー対トランザクショナル、および単純対複雑なセッションリクエスト）に依存して、ＪＤＢＣドライバ再現を使用する際にパフォーマンスおよびメモリヒットがあるかもしれず、したがってわずかに低いパフォーマンス対アプリケーション連続性の向上およびアプリケーション中断の減少の点でトレードオフがある。（上記のように、一実施例によれば、システムはＯｒａｃｌｅのＪＤＢＣドライバなどのＪＤＢＣドライバによって作動するＪａｖａ（登録商標）特有のアプリケーションサーバ機能を実装する。他の実施例によれば、他のドライバ、たとえばＴｕｘｅｄｏシステムのコンテキストにおいてＯＣＩ  Ｏｒａｃｌｅドライバを使用することができる）。
【００７５】
図７は、一実施例に係る、選択されたデータを再現するのに使用されるドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの別の実例を示す。図７に示されるように、アプリケーションは、コネクションプールおよびＪＤＢＣドライバを介してクラスタ化されたデータベースのデータベースインスタンスからデータを選択するリクエストを行ない、ＪＤＢＣドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果を記録する。次に、アプリケーションがデータベースインスタンスへのそのコネクション２９６を失ったとシステムが判断すると、以前に受信したアプリケーションリクエストに応答してＪＤＢＣドライバに保存されたデータがＪＤＢＣドライバによって使用され、セッションのその点までアプリケーションリクエストおよびレスポンス２９８を再現する。
【００７６】
図８は、一実施例に係る、ドライバ再現機能を提供するための方法のフローチャートを示す。図８に示されるように、ステップ３０２において、アプリケーションは、コネクションプールおよびＪＤＢＣドライバを介してクラスタ化されたデータベースのデータベースインスタンスからデータを選択するリクエストを行なう。ステップ３０４において、ＪＤＢＣドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果をドライバメモリスペースそのものに記録する。ステップ３０６において、システムは次に、アプリケーションがデータベースインスタンスへのそのコネクションを失ったと判断する。ステップ３０８において、アプリケーションリクエストに応答して以前にＪＤＢＣドライバに保存されたデータがＪＤＢＣドライバによって使用され、セッションのその点までのアプリケーションリクエストおよびレスポンスを再現する。
【００７７】
一実施例によれば、上記の機能は、たとえばＯｒａｃｌｅのデータベースドライバおよびサーバ、または他の形態のＪＤＢＣもしくはデータベースドライバにおいて主として実装することができる。ＷｅｂＬｏｇｉｃサーバなどのアプリケーションサーバがインターフェースを露出させ、次いでドライバ再現機能を制御し、かつ回復させる必要がある作業の区別に関与するのを支援することができる。
【００７８】
一実施例によれば、正常なＯｒａｃｌｅのドライバ／データソースクラスは「oracle.jdbc.replay.OracleData sourcelmpl」クラスに置換することができる。管理コンソールは、このドライバが選択された場合、ＸＡが無視されることを示すことになる。エンドユーザまたは管理者は、コンソールまたはテキストエディタを使用してまたはプログラムによって（たとえばＷＬＳＴ）正確なドライバを特定し、さらなる構成を提供することができる。
【００７９】
上記の実施例は読み出しオンリーのシナリオによるドライバ再現機能の使用を例示しているが、他の実施例によれば、ドライバ再現機能はデータ更新シナリオによって使用することができる。
【００８０】
コネクション初期化コールバックを作成するために、アプリケーションはoracle.ucp.jdbc.ConnectionlnitializationCallbackインターフェースを実装することができる。１つのコネクションプールごとに１つのコールバックが作成される。インターフェースは下以下に示されるような１つの方法を提供する。
【００８１】
void initialize(java.sql.Connection connection)  throws SQLException
ラベリングコールバックがコネクションプールに対して登録されると無視される。さもなければ、プールからのコネクション確認ごとに、かつ再現の際に回復可能なエラーに続いて再コネクションが成功するたびに実行される。実行時および再現において同じコールバックを使用することにより、当初のセッションが確立された時に使用されたのとまったく同じ初期化が実行時に再び確立されることを確実に行なうことができる。これがそうであることを確実に行なうのがコールバックの応答性の作成者である。コールバック呼出しが失敗した場合、再現はそのコネクション上で無効とされる。次の例は、単純な初期化コールバック実装例を実証する。
【００８２】
【数８】
0006047564.tif 000009
【００８３】
ＷＬＳデータソースは、初期化コールバックを登録するためのregisterConnectionlnitializationCallback(ConnectionlnitializationCallbackコールバック）メソッドを提供する。１つのコールバックのみがコネクションプール上に登録され得る。次の例は、MyConnectionlnitializationCallbackクラスにおいて実施される初期化コールバックの登録を実証する。
【００８４】
【数９】
0006047564.tif 000010
【００８５】
コールバックは、Ｏｒａｃｌｅのパラメータにおいて新たなコネクション初期化コールバック要素を介して図式によって設定することもできる。ＷＬＳデータソースは、初期化コールバックを削除するためのremoveConnectionlnitializationCallback()メソッドを提供する。次の例は、初期化コールバックの削除を実証する。
【００８６】
【数１０】
0006047564.tif 000011
【００８７】
一実施例によれば、ＷｅｂＬｏｇｉｃサーバはoracle.jdbc.replay.internal.ConnectionlnitializationCallbackを実装し登録することができる。initialize()メソッドは、登録されていれば、ConnectionLabelingCallback実装例を呼出す。別な方法として、initialize()メソッドは、登録されていれば、ConnectionlnitializationCallback実装例を呼出す。ラベリングコールバックが登録されていない場合は、コネクションがプールによって分配されると、初期化コールバックも呼出されるべきである。ＷＬＳは、コネクション上の作業を一括するために、コネクション上でbeginRequestおよびendRequestを呼出すことになる。beginRequestは、オープントランザクションによって呼出された場合、または最後のbeginRequest以来endRequest()がない場合、エラーを返すかまたはプールにコネクションを返す。endRequestは、コネクションを新たなコネクションに置換することができるという宣言である。
【００８８】
このマーカを受信することにより、再現のための記録に関して、以下の処置を再現ドライバが講ずることが可能となる。トランザクション履歴および蓄積されたpurge-on-close（遅延）カーソルをパージする。これは、記録された呼出し履歴をパージするだけである。いずれかのＪＤＢＣメソッド、ＳＱＬ、またはＰＬ／ＳＱＬを再び実行することによってコネクションの状態を変更することを伴わない。再現が無効とされる場合は、再現を無効にする（エラーコード）ために保存された理由をクリアする。再現を無効にする。再現は次のbeginRequest呼出しにおいて有効とされる。（トランザクションビットによって決定される）オープントランザクションによって呼出された場合、エラーを返す。繰り返されるendRequest呼出しについてはエラーは返されない。正当なエラーおよび閉じているセッションの結果であり得るためである。再現は、以下のようにコネクションごとに無効化できる。
【００８９】
【数１１】
0006047564.tif 000012
【００９０】
Ｊａｖａ（登録商標）プログラミングインターフェース
一実施例によれば、上記のＪＤＢＣドライバ再現機能のためのＪａｖａ（登録商標）プログラミングインターフェースの一例が以下に示される。例示的なＪａｖａ（登録商標）プログラミングインターフェースは例示および説明の目的で示され、包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。
【００９１】
<element name="connection-initialization-callback" type="string"
nillable="true" minOccurs="0">
コネクション初期化コールバックの名前。これは、データソースが作成されると、registerConnectionlnitializationCallbackに自動的に渡される。
public interface ConnectionInitializationCallback
プールからのコネクション確認ごとに、かつ再現時の回復可能なエラーに続いて再コネクションが成功するたびに呼出されるＡＰＩ。
【００９２】
void initialize(java.sql.Connection connection)  throws SQLException  
プールからのコネクション確認ごとに、かつ再現時の回復可能なエラーに続いて再コネクションが成功するたびに呼出されるＡＰＩ。実行時および再現において同じコールバックを使用することで、当初のセッションが確立された時に使用されたのとまったく同じ初期化が実行時に再び確立されることを確実に行なうことができる。これがそうであることを確実に行なうのがコールバックの応答性の作成者である。コールバック呼出しが失敗した場合、再現はそのコネクション上で無効とされる。
【００９３】
public String getConnectionInitializationCallback();
public void setConnectionInitializationCallback();
本発明は、本開示の教示に従ってプログラムされた１つ以上のプロセッサ、メモリ、および／またはコンピュータ読み取り可能な記録媒体を含む１つ以上の従来の汎用もしくは特殊デジタルコンピュータ、計算装置、マシン、またはマイクロプロセッサを使用して好都合に実装され得る。ソフトウェア分野の当業者には明白であるように、熟練したプログラマによって、本開示の教示に基づいて適切なソフトウェアコーディングを容易に準備することができる。いくつかの実施例によれば、本発明に従って開発されたシステムおよびコンポーネントは、コンピュータハードウェア、ソフトウェア、ファームウェア、もしくはそのいずれかの組合せを含むことができるかまたは、コンピュータハードウェア、ソフトウェア、ファームウェア、もしくはそのいずれかの組合せとして実装されるかもしくは提供されることができる。
【００９４】
いくつかの実施例では、本発明は、本発明のプロセスのいずれかを実行するようにコンピュータをプログラムするのに使用することができる命令がその上／その中に格納されている記録媒体またはコンピュータ読み取り可能な媒体であるコンピュータプログラム製品を含む。記録媒体は、限定はされないが、フロッピー（登録商標）ディスクを含むいずれかの種類のディスク、光ディスク、ＤＶＤ、ＣＤ−ＲＯＭ、マイクロドライブ、および光磁気ディスク、ＲＯＭ、ＲＡＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＤＲＡＭ、ＶＲＡＭ、フラッシュメモリ装置、磁気もしくは光カード、ナノシステム（分子メモリＩＣを含む）、または命令および／またはデータを格納するのに好適ないずれかの種類の媒体もしくは装置を含むことができる。
【００９５】
本発明の上記の説明は例示および説明を目的として示された。包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。多くの修正および変形が当業者にとって明白であろう。実施例は、発明の原理およびその実用化を最適に説明するために選択されかつ説明され、それにより当業者は様々な実施例について発明を理解することが可能となり、特定の使用に適した様々な修正が企図される。発明の範囲は添付の請求項およびそれらの均等物によって規定されることが意図される。
【図１】
0006047564.tif 000013
【図２】
0006047564.tif 000014
【図３】
0006047564.tif 000015
【図４】
0006047564.tif 000016
【図５】
0006047564.tif 000017
【図６】
0006047564.tif 000018
【図７】
0006047564.tif 000019
【図８】
0006047564.tif 000020