特許第6047564号(P6047564)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ オラクル・インターナショナル・コーポレイションの特許一覧

特許6047564セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法
<>
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000013
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000014
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000015
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000016
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000017
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000018
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000019
  • 特許6047564-セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法 図000020
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6047564
(24)【登録日】2016年11月25日
(45)【発行日】2016年12月21日
(54)【発明の名称】セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法
(51)【国際特許分類】
   G06F 12/00 20060101AFI20161212BHJP
   G06F 15/00 20060101ALI20161212BHJP
   G06F 17/30 20060101ALI20161212BHJP
【FI】
   G06F12/00 513J
   G06F15/00 420B
   G06F12/00 546T
   G06F17/30 110C
【請求項の数】15
【全頁数】23
(21)【出願番号】特願2014-518968(P2014-518968)
(86)(22)【出願日】2012年6月27日
(65)【公表番号】特表2014-525083(P2014-525083A)
(43)【公表日】2014年9月25日
(86)【国際出願番号】US2012044429
(87)【国際公開番号】WO2013003482
(87)【国際公開日】20130103
【審査請求日】2015年5月12日
(31)【優先権主張番号】61/501,583
(32)【優先日】2011年6月27日
(33)【優先権主張国】US
(31)【優先権主張番号】13/398,538
(32)【優先日】2012年2月16日
(33)【優先権主張国】US
(31)【優先権主張番号】13/398,606
(32)【優先日】2012年2月16日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】502303739
【氏名又は名称】オラクル・インターナショナル・コーポレイション
(74)【代理人】
【識別番号】110001195
【氏名又は名称】特許業務法人深見特許事務所
(72)【発明者】
【氏名】ソモギー,アレキサンダー
(72)【発明者】
【氏名】レバヌル,ナレシュ
(72)【発明者】
【氏名】フェルツ,スティーブン
(72)【発明者】
【氏名】チョウ,トン
【審査官】 漆原 孝治
(56)【参考文献】
【文献】 米国特許出願公開第2009/0034537(US,A1)
【文献】 特表2006−519441(JP,A)
【文献】 特表2009−503635(JP,A)
【文献】 特開2005−100344(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 15/00
G06F 17/30
(57)【特許請求の範囲】
【請求項1】
データソースおよびクラスタ化されたデータベース環境においてフィニティをサポートするためのシステムであって、
クラスタ化されたデータベースシステムおよび前記データベースシステムの中の複数のデータベースインスタンスに関連付けられた通知サービスを備え、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを備え、前記データソースは、データソースのための1つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ(XA)とセッションアフィニティとのうちの1つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときXAアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることが実施される、システム。
【請求項2】
複数のデータソースにわたって全体的に、または各データソースについて個々にアフィニティポリシーを規定することができ、前記アフィニティポリシーは、どの種類のアフィニティが実行時に当該データソースによって使用されるかを規定する、請求項1に記載のシステム。
【請求項3】
実行時に、アプリケーションがセッションアフィニティポリシーセットを有するデータソースからのコネクションを要求すると、前記システムは、いずれかの利用可能なウェブセッションコンテキストを得るためにコールバックを行ない、そのようなウェブセッションコンテキストが利用可能である場合、前記システムはそれを使用して最も適切なコネクションを選択することができる、請求項2に記載のシステム。
【請求項4】
前記システムは、リクエストによって前記システムのまわりを伝播するワークコンテキストといった機能を使用することができ、サーブレットコンテナは、ウェブセッションとともに継続されるワークコンテキストから、アフィニティポリシーが設定されているかどうかを判断することができ、そうであれば前記ワークコンテキストを適宜設定し、追加的な情報を検索して、次いで最も適切なコネクションを選択する、請求項3に記載のシステム。
【請求項5】
データソースおよびクラスタ化されたデータベース環境においてフィニティをサポートする方法であって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを含み、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを含み、前記データソースは、データソースのための1つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ(XA)とセッションアフィニティとのうちの1つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときXAアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
前記方法は、さらに、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることを実施するステップと、を含む、方法。
【請求項6】
命令を含むコンピュータプログラムであって、前記命令は、1つ以上のコンピュータによって読み取られ実行されると、当該1つ以上のコンピュータに、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを行なわせ、前記通知サービスは、前記クラスタ化されたデータベースにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを行なわせ、前記データソースは、データソースのための1つ以上のアフィニティポリシーに関連付けられて、各アフィニティポリシーは、データソースのための分散トランザクションアフィニティ(XA)とセッションアフィニティとのうちの1つを規定し、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
前記セッションアフィニティは、前記データソースのためのデフォルトアフィニティポリシとしてセットされて、前記セッションアフィニティは、前記データソースがセッションのコンテキストの外部からアクセスされるときXAアフィニティに切り替わり、
セッション中のアプリケーションにより要求されるデータベース動作は、同じデータベースインスタンスに向けられて、
さらに、当該1つ以上のコンピュータに、
前記データベースインスタンスに向けるための情報をアフィニティコンテキストに格納することにより、同じデータベースインスタンスに向けられることを実施するステップを行なわせる、コンピュータプログラム。
【請求項7】
データソースおよびクラスタ化されたデータベース環境において向上したアプリケーションコネクティビティを提供するためのシステムであって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスを備え、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを備え、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、
前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点ま再現する、システム。
【請求項8】
機能は非トランザクショナル読み出しオンリーまたは選択オンリーの場合に使用される、請求項7に記載のシステム。
【請求項9】
前記データベースドライバはJDBCドライバである、請求項7または8に記載のシステム。
【請求項10】
前記JDBCドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果を前記メモリスペースそのものに記録する、請求項に記載のシステム。
【請求項11】
データソースおよびクラスタ化されたデータベース環境において向上したアプリケーションコネクティビティを提供するための方法であって、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを含み、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを含み、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、
前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点ま再現する、方法。
【請求項12】
命令を含むコンピュータプログラムであって、前記命令は、1つ以上のコンピュータによって読み取られ実行されると、当該1つ以上のコンピュータに、
クラスタ化されたデータベースシステムおよびその中の複数のデータベースインスタンスに関連付けられた通知サービスへのアクセスを提供するステップを行なわせ、前記通知サービスは、前記クラスタ化されたデータベースのデータベースインスタンスにおける状態変化を示す通知をブロードキャストするために使用され、さらに、
アプリケーションサーバ、ならびにそれに関連付けられたデータソースおよびコネクションプールを提供するステップを行なわせ、前記データソースおよびコネクションプールは、前記クラスタ化されたデータベース内の前記複数のデータベースインスタンスへのコネクションを管理するために使用され、
ウェブセッションを用いたアプリケーションの動作中、コネクションが停止するかまたは失敗した場合、データベースドライバは、前記アプリケーション自体にはいずれのエラーまたは例外も生じないように、前記データベースから前記アプリケーションによって以前に照会された情報の状態をデータベースドライバ内のメモリスペースそのものに記録し、前記クラスタ化されたデータベースに対するウェブセッションを、前記アプリケーションによって以前に照会された情報の記録された状態に対応した点ま再現する、コンピュータプログラム
【請求項13】
前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けて、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項1に記載のシステム。
【請求項14】
前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けるステップをさらに含み、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項5に記載の方法。
【請求項15】
前記1つ以上のコンピュータに、前記アフィニティコンテキストを、前記アプリケーションのワークコンテキストオブジェクトを用いて前記セッションに関連付けるステップをさらに行わせ、
前記ワークコンテキストオブジェクトは、前記データベース動作のために前記アプリケーションの各要求にアクセス可能であり、前記システムのまわりに伝播する、請求項6に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
著作権表示
この特許文献の開示の一部分は、著作権保護の対象である題材を含む。特許商標庁の特許ファイルまたは記録に出現する限りにおいては、著作権所有者はいずれかの者による特許文献または特許開示の複製に異議はないが、それ以外のすべての著作権を一切留保する。
【0002】
優先権の主張
本願は、「セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法("SYSTEM AND METHOD FOR PROVIDING SESSION AFFINITY IN CLUSTERED DATABASE ENVIRONMENT")」と題された2012年2月16日付けの米国特許出願番号第13/398,538号、および「セッションアフィニティおよびクラスタ化されたデータベース環境におけるコネクティビティの向上を提供するためのシステムおよび方法("SYSTEM AND METHOD FOR IMPROVING CONNECTIVITY IN CLUSTERED DATABASE ENVIRONMENT")」と題された2012年2月16日付けの米国特許出願番号第13/398,606号の優先権の利益を主張し、それぞれ「アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際に改良をもたらすためのシステムおよび方法("SYSTEM AND METHOD FOR PROVIDING IMPROVEMENTS IN USING DATA SOURCE WITH AN APPLICATION SERVER AND CLUSTERED DATABASE")」と題された2011年6月27日付けの米国仮特許出願番号第61/501,583号の優先権を主張する。上記出願の各々は引用によってここに援用される。
【0003】
発明の分野
発明は概して、データベース、ミドルウェア、およびクラスタ化されたデータソースなどのコンピュータシステムおよびソフトウェアに関し、特に、アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際の様々な改良に関する。
【背景技術】
【0004】
関連する出願
本願は、「ミドルウェアマシンプラットフォーム("MIDDLEWARE MACHINE PLATFORM")」と題された2010年9月15日付けの米国仮特許出願番号第61/383,285号および「ミドルウェアマシンプラットフォーム("MIDDLEWARE MACHINE PLATFORM")」と題された2010年9月17日付けの米国仮特許出願番号第61/384,227号の優先権を主張する「ミドルウェアマシン環境を含むシステム("SYSTEM INCLUDING MIDDLEWARE MACHINE ENVIRONMENT")」と題された2011年9月15日付けの米国特許出願番号第13/234,027号と、「GRIDLINKデータソースを用いてクラスタ化されたデータベースにアプリケーションサーバをコネクトするためのシステムおよび方法("SYSTEM AND METHOD FOR USING GRIDLINK DATA SOURCE TO CONNECT AN APPLICATION SERVER WITH CLUSTERED DATABASE")」と題された2011年6月24日付けの米国特許出願番号第13/168,506号とに関し、これら出願の各々は引用によってここに援用される。
【0005】
背景
Oracle Real Application Cluster(RAC)などの製品を用いてクラスタ化されたデータベース環境を実装することができ、その結果として拡張性および高い可用性がエンドユーザアプリケーションに提供される。クラスタ化されたデータベースは、WebLogicサーバ(WLS)などの他の製品と統合して、アプリケーションサーバ/クラスタ化されたデータベース環境を提供することもできる。これらは、発明の実施例が扱うことが意図される概略的な分野である。
【発明の概要】
【課題を解決するための手段】
【0006】
概要
発明は、概してミドルウェアおよびクラスタ化されたデータソースなどのコンピュータシステムおよびソフトウェアに関し、特に、アプリケーションサーバおよびクラスタ化されたデータベースとともにデータソースを使用する際の様々な改良に関する。
【0007】
クラスタ化されたデータベース環境(たとえばOracle Real Application Cluster(RAC))は、1つのサーバのように見える多数のデータベースインスタンスを含む。アプリケーションサーバ(たとえばWebLogicサーバ(WLS))は、データソース(たとえばOracleのGridLinkデータソース)およびコネクションプールを使用して、クラスタ化されたデータベースにコネクトすることができる。通知サービスは、データベースインスタンスにおける状態変化を示す通知をブロードキャストし、それらは次いで、データベースインスタンスへのアクセスを制御するためにデータソースおよびコネクションプールによって使用される。
【0008】
一実施例によれば、データソース設定によって、データアフィニティ、一時的なアフィニティ、および/またはセッションもしくはセッションベースのアフィニティポリシーなどの好ましいアフィニティポリシーの特定が可能となる。セッションアフィニティポリシーを用いて、ウェブセッションのコンテキストの下でなされたデータベースアクセスに、データベースインスタンスアフィニティを与える。つまり、セッションアフィニティは、一時的なアフィニティの一形態であり、それによって、アプリケーションが特定のデータセットへ関連付けられた多重の更新を行なっているかもしれない期間中は、データベース動作は特定のインスタンスに向けられる。そのような動作を単一のデータベースインスタンスに向けることを用いて、高められたローカルキャッシュ利用によってアプリケーション性能を向上させることができる。
【0009】
一実施例によれば、システムは、アプリケーション連続性のための選択オンリーの場合を含むクラスタ化されたデータベース環境におけるアプリケーションコネクティビティを向上させる多くの機能を含む。たとえばJava(登録商標)Database Connectivity(JDBC)ドライバ内に実装される、アプリケーションに依存しないインフラストラクチャにより、アプリケーションから見て作業の回復が可能となり、システムコミュニケーション、ハードウェア障害、およびハングがマスキングされる。
【図面の簡単な説明】
【0010】
図1】一実施例に係る、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す図である。
図2】一実施例に係る、アフィニティ設定を利用してクラスタ化されたデータベースとともに使用される多数のアプリケーションサーバおよび/またはデータソースの実例を示す図である。
図3】一実施例に係る、ウェブアプリケーションを含み、かつデータソースおよびクラスタ化されたデータベースとともに使用されるウェブセッションアフィニティをサポートするシステムの実例を示す図である。
図4】一実施例に係る、例示的なウェブセッションアフィニティインタラクションの実例を示す図である。
図5】一実施例に係る、ウェブセッションアフィニティを提供するための方法のフローチャートである。
図6】一実施例に係る、ドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す図である。
図7】一実施例に係る、選択データを再現するのに使用されるドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの別の実例を示す図である。
図8】一実施例に係る、ドライバ再現機能を提供するための方法のフローチャートである。
【発明を実施するための形態】
【0011】
詳細な説明
一実施例によれば、クラスタ化されたデータベース環境(データベースクラスタと称することもある)は1つ以上の相互接続されたコンピュータまたはサーバを含み、エンドユーザおよびエンドユーザアプリケーションにとっては、それらは一体として単一のサーバであるかのように見える。概してデータベース記憶装置とデータベースインスタンスとの間に一対一の関係を提供する単一インスタンスデータベースとは異なり、クラスタ化されたデータベースは、データベース記憶装置といくつかのデータベースインスタンスとの間に一対多数の関係を提供することができる。
【0012】
たとえば、Oracle Real Application Cluster(RAC)データベースシステムは、複数のサーバをともにバインドするためにOracleクラスタウェアインフラストラクチャを使用してOracleのデータベースのクラスタ化を可能にし、したがってサーバは単一のシステムとして動作することができる。RACデータベースシステムは多くのデータベースインスタンスを含むことができ、その各々は単一のデータベース記憶装置にアクセスすることができる。このように、そのような複数のサーバの組合せられた処理能力は、単一のサーバを用いて実現可能なものよりも大きなスループットおよび拡張性を提供することができる。
【0013】
一実施例によれば、データソース(他の形態のデータソースを使用してもよいが、ここで説明されるいくつかの例ではGridLinkデータソースと称する)を用いて、WebLogicサーバ(WLS)インスタンスなどのアプリケーションサーバを、クラスタ化されたデータベースにコネクトすることができる。クラスタ化されたデータベースによって通知サービスを用いて、複数のそのデータベースインスタンス内のいずれかの状態変化を示す通知(Oracle RAC製品において使用される高速アプリケーション通知(Fast Application Notification)すなわち「FAN」通知またはイベントなど)をブロードキャストすることができる。データソースは、クラスタ化されたデータベース中の複数のデータベースインスタンスへの一組のコネクションを管理するコネクションプールを含む。データソースは、通知サービスを用いて登録し、クラスタ化されたデータベースの変更に関する通知を受信することができる。アプリケーションサーバは次いで、ランタイムにおけるクラスタ化されたデータベースのいずれかの状態変化に従って、クラスタ化されたデータベースへのコネクトを適切に設定し、および/または、管理することができる。
【0014】
図1は、一実施例に係る、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す。図1に示されるように、データソース104(他の形態のデータソースを使用してもよいが、この例ではGridLinkデータソースと称する)はアプリケーションサーバ101と関連付けられる。
【0015】
データソースは、アプリケーションサーバとの、またはアプリケーションサーバによる、クラスタ化されたデータベース102の使用を単純化し、クラスタ化されたデータベースを使用するために必要とされる設定および管理の複雑度を低下させる。データソースはコネクションプール106を含み、コネクションプール106はさらにデータベースクラスタ中の異なるデータベースインスタンス114,116,118への一組の異機種コネクション128,129を提供する。その結果、異なるデータベースインスタンスが単一のまたは共用記憶装置120にコネクトすることができる。
【0016】
コネクションプールにおけるコネクションの管理は、最小/最大容量などのコネクションプールに対して設定された静的な設定112またはタイムアウト、および/またはデータベースクラスタ内の状態変化をデータソースに知らせる通知サービス124から受信されるイベントメッセージ126に示されているコネクションプールに関するリアルタイム情報のいずれかに基づくことができる。
【0017】
アプリケーション108,110がデータソースからのコネクションを要求すると、好適なコネクションがコネクションプールから選択され、たとえばコネクションプールが受信した負荷バランシング情報および/またはプールからの使用時のコネクションの現時点分布に基づいて、アプリケーションに供給することができる。
【0018】
1つの例示的な例では、上記のシステムを用いて、Oracleのデータベースサービスを提供することができる。当該データベースサービスは、たとえば作業負荷、作業負荷の優先順位付け、リアルトランザクションのための性能手段、ならびに性能目標が破られた場合の警告および措置のための単一のシステムイメージを提供することができる。データベースサービスにより、データベース管理責任者が作業負荷を単一のエンティティとして設定し、管理し、有効/無効にし、かつ測定することが可能となる。データベースサービスは、作業負荷を論理的な分類に分けるためにさらに使用することができ、各サービスは、作業負荷を、共通の属性、サービスレベルのしきい値、および優先順位で表わす。アプリケーションサーバは、クラスタ化されたデータベースによって発せられた負荷バランシングアドバイザリイベントメッセージを受信し、それに応じてデータベースノードまたはインスタンスへのデータベースコネクションを調整することができる。次いでシステムは、データソース上で実行時に負荷バランシング設定を行なうことができ、データベースから受信された負荷バランシングアドバイザリメッセージに基づいて、アプリケーションサーバがデータベースコネクションをディスパッチすることが可能となる。次いでデータベースコネクションを特定のデータベースノードに向けて、データベース管理責任者によって設定された性能目標を満たすことができる。
【0019】
別の例では、システムは、分散トランザクション(XA)アフィニティをサポートして、グローバルトランザクションのコンテキスト内でデータベースクラスタに対して行なわれるすべてのデータベース動作が同じデータベースインスタンスに向けられることを確実に行なうことができる。そのようなXAアフィニティは、個別のデータソースの代わりにグローバルトランザクションIDに基づいて確立され、同じデータベースクラスタについて設定される異なるデータソースから得られるコネクションがすべて同じデータベースインスタンスに関連付けられること、またはクラスタ化されたデータベースに対して行なわれるグローバルトランザクションのためのデータベース動作がすべて同じデータベースインスタンスに向けられることを確実に行なうことができる。たとえば、XAトランザクションの第1のコネクション要求を負荷バランシングし、アフィニティコンテキストを割当てることができる。次のコネクション要求は最初のコネクションのアフィニティコンテキストを用いて、同じデータベースインスタンスにルーティングすることができる。
【0020】
上記の特徴に加えて、システムは、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのコネクションモジュールとして、ユニバーサルコネクションプール(UCP)ライブラリの使用などの追加的な特徴および機能を採用することができる。一般に、UCPライブラリは、データベースサーバから見てクライアント側ライブラリのように見え、論理的には、データベースにコネクトするために使用されるJava(登録商標)データベースコネクティビティ(JDBC)ドライバの拡張機能である。そのようなデータベースコネクションモジュールの使用は、総括的なJDBCコネクションプーリング実装の提供に加えて、クラスタ化されたデータベースのための高い可用性およびパフォーマンス能力をサポートすることができる。
【0021】
上記の特徴および機能のうちのいくつかを含むデータソースシステムの様々な実施例のさらなる説明は、「GRIDLINKデータソースを用いてクラスタ化されたデータベースにアプリケーションサーバをコネクトするためのシステムおよび方法("SYSTEM AND METHOD FOR USING GRIDLINK DATA SOURCE TO CONNECT AN APPLICATION SERVER WITH CLUSTERED DATABASE")」と題された2011年6月24日付けの米国特許出願番号第13/168,506号に示されており、当該出願は引用によってここに援用される。
【0022】
クラスタ化されたデータベース環境におけるセッションアフィニティ
一実施例によれば、システムは、ウェブセッションとの使用のために、セッションアフィニティの使用をサポートする。ここで言及される限りにおいて、セッションまたはセッションベースのアフィニティは一時的なアフィニティの一形態であり、それによって、アプリケーションが特定のデータセットへ関連付けられた多重の更新を行なっているかもしれない期間中は、アプリケーションによって要求されるデータベース動作は特定のデータベースインスタンスに向けられる。そのような動作を単一のデータベースインスタンスに向けることを用いて、高められたローカルキャッシュ利用を活用し、かつ全体的なアプリケーションパフォーマンスを向上させることができる。
【0023】
図2は、一実施例に係る、1つ以上のアフィニティ設定を利用して、多数のアプリケーションサーバおよび/またはデータソースがクラスタ化されたデータベースとともに使用されている環境の実例を示す。図2に示されるように、アプリケーションサーバ環境140は、1つ以上のアプリケーションサーバインスタンス142,162を含むことができる。各アプリケーションサーバインスタンスは、各々それ自身のコネクションプール146,166を有する1つ以上のデータソース144,164とコネクションプール設定154,174とを含むことができる。データソースはクラスタ化されたデータベースへのコネクション158,178をアプリケーション150,170にともに与え、アプリケーションとクラスタ化されたデータベースとの間により深い統合を与えるために、データベースサービスの消費を無制限にサポートする。
【0024】
一実施例によれば、データソースソースレベルごとに特定することができる、またはアプリケーションサーバ環境内のすべてあるいは複数のデータソースもしくはアプリケーションサーバにわたって特定することができる、1つ以上のアフィニティ設定156,176と、各データソースとを関連付けることもできる。使用することができるアフィニティスキームの例は、XAアフィニティ、およびセッションもしくはセッションベースのアフィニティを含む。
【0025】
ウェブアプリケーションのコンテキストでは、ウェブセッションの寿命は、ユーザによるeコマースショッピングカート機能の操作などのウェブアプリケーションとデータベースとの間の比較的長寿命のインタラクションとすることができる。セッションアフィニティが使用される際は、システムはそのウェブセッションの寿命のためにアフィニティコンテキストを保持する。これはアプリケーションパフォーマンスに利点をもたらす。システムはその特定のウェブセッション中に同じデータベースインスタンスに常に戻り、そのデータベース上でローカルキャッシュを利用することになるからである。そのようなセッションアフィニティ機能を使用することの他の利点は、データベース上のクラスタ待ち時間の短縮を含み、RACのコンテキストでは、RACクラスタデータセットの同期にあまり依存しないことを含む。
【0026】
一実施例によれば、セッションアフィニティおよび他のアフィニティスキームの両方をサポートする際に使用されるアフィニティ情報は、クラスタ全体にわたって複製されることが意図されるいずれかの負荷アドバイザリなどとともに、通知サービスによってそのFAN通知またはイベント内で拡張することができる。いくつかの実装例では、システムは、様々なアプリケーションによって使用されているデータからキーを抽出し、それらのキーに基づいて適切なサーバへのコネクションをルーティングすることができる。いくつかの実装例では、システムは、実行時にUCPを活用して、アプリケーションが実装することができるアプリケーションコールバックAPIを提供し、次いで実行時にアプリケーションをそのためにコールバックし、適切なルーティングを決定するために使用することができるキーを提供することもできる。
【0027】
一実施例によれば、複数のデータソースにわたって全体的に、または各データソースについて個々に、アフィニティポリシーを規定することができる。アフィニティポリシーは、(もしあるならば)どの種類のアフィニティが実行時にそのデータソースによって使用されるかを規定する。ウェブアプリケーションとの使用が意図される一実施例によれば、セッションアフィニティは、データソース環境内の各データソースにおいてデフォルトアフィニティポリシーとして設定される。全体的なポリシー設定は、リソースごとのポリシー設定に優先する。
【0028】
実行時に、アプリケーションが(特定的にまたはデフォルトで)セッションアフィニティポリシーセットを有するデータソースからのコネクションを要求すると、システムはいずれかの利用可能なウェブセッションコンテキストを得るためにコールバックを行なう。そのようなウェブセッションコンテキストが利用可能である場合、システムは、それを用いて最も適切なコネクションを選択することができる。別な方法として、システムはたとえばUCPを用いて、実行時の負荷バランシングなどの他の要因に基づいてコネクションを選択することができる。システムの構成に依存して、次いでそのウェブセッションについてアフィニティコンテキストを設定することができ、したがってアプリケーションが次に要求を行なう時には、適切なセッションアフィニティ情報をそのコンテキストに有する。
【0029】
WebLogic環境などの環境では、セッションが内部で受渡しされない場合がある。そのような環境では、システムは、リクエストによってシステムのまわりを伝播するワークコンテキストといった機能を代りに使用することができる。サーブレットコンテナは、ウェブセッションとともに継続されるワークコンテキストから、アフィニティポリシーが設定されているかどうかを判断することができ、設定されている場合は、ワークコンテキストを適宜設定し、追加的な情報を検索し、次いで最も適切なコネクションを選択する。
【0030】
図3は、一実施例に係る、データソースおよびクラスタ化されたデータベースとともに使用するためにウェブセッションとともにウェブアプリケーションを含むシステムの実例を示す。図3に示されるように、各アプリケーションサーバインスタンスは、各々それ自身のコネクションプール205を有する1つ以上のデータソース203とコネクションプール設定210とを含むことができる。ウェブアプリケーション206が実行され、ウェブセッション208中にリクエストの一部としてデータソースコネクションが呼出されると、セッションまたはセッションベースのアフィニティ212が使用されている場合、セッション218中で使用するためにコネクションがアプリケーション216に戻される。アプリケーションリクエストの実行が終了した後、かつサーブレットコンテナがそのレスポンスを終了する前に、コンテナは、いずれかの既存のセッションベースのアフィニティコンテキストをセッションおよび/またはワークコンテキストマップに保存し、したがってアフィニティコンテキストは、その同じウェブセッション中の次のリクエスト220によって使用されるようにセッションと関連付けられる。
【0031】
図4は、一実施例に係る、例示的なウェブセッションアフィニティインタラクションの実例を示す。一実施例によれば、一組のアフィニティコールバックインターフェースを、たとえばoracle.ucpパッケージにおいて規定することができる。一実施例によれば、getConnectionAffinityContextメソッドとsetConnectionAffinityContextメソッドとがデータソースおよびアフィニティ実装例によって使用され、アフィニティコンテキストの、アプリケーションコンテキストとの関連付けを管理する。各コネクション保持リクエストについては、getConnectionAffinityContextメソッドが呼出され、アプリケーションコンテキスト(たとえばグローバルトランザクションまたはウェブセッション)と関連付けられたアフィニティコンテキストが既にあるかどうかを判定する。もしなければ、その後、ランダムにまたは実行時のコネクション負荷バランシングに従ってコネクションが選択され、選択されたデータベース(たとえばRAC)インスタンスを識別するコンテキストオブジェクトによってsetConnectionAffinityContextメソッドが呼出される。アフィニティポリシー実装例は次いで、次のコネクション保持リクエストで使用するためのアプリケーションコンテキストとともにインスタンス情報を格納する。図4に示されるように、サーブレットコンテナによってリクエストが受信されると、サーブレットコンテナは、アプリケーションサーブレット/jspを実行する前にワークコンテキスト(ワークコンテキストはセッション内部属性とマップとの両方に格納される)をinitまたは回復する。240において、アプリケーションが実行され、datasource.getConnectionメソッドが呼出される。242において、データソース(この例ではGridLinkデータソース)によってSessionAffinityCallback.getAffnityContext()が呼出される。最初は「AffinityContext」は格納されていないため、244ではnullが返される。246において、SessionAffnityCallback.setAffinityContext(…)がデータソースによって呼出され、この例ではワークコンテキストマップにaffinityContextが格納される。248において、コネクションがアプリケーションに返される。250において、getConnection()がアプリケーションによって再び呼出されると、affinityContextをワークコンテキストマップからフェッチすることができ、次いで同じコネクションが返される。252において、アプリケーションリクエストの実行が終了された後かつサーブレットコンテナがレスポンスを終了する前に、サーブレットコンテナはいずれかの既存の「AffinityContext」をセッションおよびマップに保存し、したがってアフィニティコンテキストは、次のリクエスト254,256によって使用されるようにセッションと関連付けられる。
【0032】
一実施例によれば、アフィニティコンテキストは次のキー値:サービス名、およびデータベース固有名を含む。これらは正確なデータベースおよびサービスを確認するために使用され、そのインスタンスについてaff=trueである場合はインスタンスIDを返す。1つのコンテキストに対して1つのブラウザがある場合、次のチェックアウトリクエストは、これらの属性が一致することを確認するべきである。たとえば、前回のコンテキストとは異なるサービスが別のサービスに関係する場合、別のインスタンスを使用することができる。RACにおける算出はクロスサービスではなくサービスごとである。多くのブラウザウィンドウがある場合は、各々がそれ自身のコンテキスト情報を有し、それ自身のデータベースおよびサービスにアフィニティを保持するべきである。
【0033】
WebLogic環境の例では、RACセッションアフィニティ機能をサポートするために、アフィニティコンテキストをHTTPセッションに関連付けることができる。この例では、アフィニティコンテキストは、データベース名、インスタンス名、サービス名等を含み、RACからのコネクションを得るために使用される。同じHTTPセッション(URLまたはクエリパラメータまたはクッキーヘッダーにおける同じJSESSIONID)のリクエストについては、getConnection()は同じコネクションを返すことが保証される。エンドユーザが1つまたは複数のブラウザおよび複数のブラウザウィンドウを使用しているかどうかは重要ではない。セッションアフィニティは、同じデータベースおよびサービスについて複数のデータソースにまたがる。
【0034】
図5は、一実施例に係る、ウェブセッションアフィニティインタラクションを提供するための方法のフローチャートを示す。図に示されるように、ステップ260において、アプリケーションが実行され、データソースコネクションが呼出される。ステップ262において、既に格納されているアフィニティコンテキストがない場合、セッションベースアフィニティコンテキストがワークコンテキストマップに格納され、コネクションがアプリケーションに返される。ステップ264において、コネクションがアプリケーションによって再び呼出されると、セッションベースアフィニティコンテキストがワークコンテキストマップからフェッチされ、次いで同じコネクションが返される。ステップ266において、アプリケーションの実行が終了した後であってサーブレットコンテナがそのレスポンスを終了する前に、コンテナはいずれかの既存のセッションベースアフィニティコンテキストをセッションおよびマップに保存し、したがってアフィニティコンテキストは、次のリクエストによって使用されるようにセッションと関連付けられる。
【0035】
一実施例によれば、APIを内部コンポーネントによって使用されるように規定して、セッションおよびデータアフィニティポリシーを実装することができる。「セッション」アフィニティポリシー(デフォルト)は、アフィニティコンテキストがウェブアプリケーションセッションコンテキストの継続時間に関連付けられ、その継続時間中に使用されるべきであることを示す。このポリシーはXAアフィニティの代わりに使用することができ、ウェブセッション中のすべてのトランザクショナルデータソースの使用に該当する。セッションアフィニティポリシーを有するデータソースがウェブセッションのコンテキスト外部でアクセスされると、アフィニティポリシーはXAアフィニティに戻ることになる。
【0036】
一実施例によれば、WLSデータソースサブシステムは、特定のアフィニティポリシーを統合している他の内部コンポーネントによる使用が意図されるアフィニティコールバック登録を管理するための方法を提供する。コールバック登録はグローバルであり、アフィニティポリシーによってサーバに導入されたすべてのGridLinkデータソースに該当する。各種の1つのコールバックのみがいずれかの所与の時間に登録され得る。特定のコールバックは、データソースの好ましいアフィニティポリシーに基づいてアフィニティコンテキスト処理のためのコネクション保持時間において呼出されることになる。ポリシータイプのトランザクションによってコールバック実装例を登録しようとすると例外を生じさせ、現在のXAアフィニティ実装例の起こり得るオーバーライドを防ぐことになる。
【0037】
一実施例によれば、RACインスタンスが正確なイベントを生成している場合にのみアフィニティ処理が行なわれる。これは、trueに設定されている負荷バランシングアドバイザリFANイベントにおけるRACインスタンスのための「aff」フラグによって示される。アフィニティがRACインスタンスについていつ有効とされるかをより判断しやすくするために、AffEnabledプロパティを実行時のMBeanに加えることができる。
【0038】
Java(登録商標)プログラミングインターフェース
一実施例に従って、上記のセッションアフィニティ機能のためのJava(登録商標)プログラミングインターフェースの一例を以下に示す。例示的なJava(登録商標)プログラミングインターフェースは例示および説明の目的で示され、包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。
【0039】
public interface JDBCOracleParamsBean extends SettableBean
データソースのOracleデータベース関連のパラメータを含む。データソースのOracle特有の挙動についての設定パラメータは、Oracleのパラメータbeanを使用して特定することができる。
【0040】
public java.lang.String getAffinityPolicy()
データソースに使用されるアフィニティポリシーを特定する。オプションは、トランザクションアフィニティを特定するトランザクションと、ウェブセッションアフィニティ(デフォルト)を特定するセッションと、データアフィニティを特定するデータとを含むことができる。
【0041】
【数1】
【0042】
最新の負荷バランシングアドバイザリイベントからアフィニティプロパティを返す。
public interface ConnectionAffinityCallback
Oracle RACアフィニティのためのインターフェースをコールバックする。
【0043】
public boolean setConnectionAffinityContext(Object affinityContext)
アフィニティコンテキストを設定する。パラメータはaffinityContext、つまり不透明(opaque)型のコンテキストオブジェクトを含むことができる。コンテキストオブジェクトが首尾よく設定されるとtrueを返し、そうでない場合はfalseを返す。
【0044】
public java.lang.Object getConnectionAffinityContext()
アフィニティコンテキストオブジェクトを返す。
【0045】
public void
setAffinityPolicy(ConnectionAffinityCallback.AffinityPolicypolicy)
このコールバックに使用するためのアフィニティポリシーを設定する。パラメータはポリシー、つまり使用するアフィニティポリシーを含むことができる。
【0046】
public
oracle.ucp.ConnectionAffinityCallback.AffinityPolicygetAffinityPolicy()
このコールバックから現在のアフィニティポリシーを取得する。このコールバックについて設定されたアフィニティポリシーを返す。
【0047】
public boolean isApplicationContextAvailable()
このアフィニティポリシーについてアプリケーションコンテキストが存在するかどうかを確認する。このポリシーについてアプリケーションコンテキストが存在する場合はtrueを返し、そうでない場合はfalseを返す。
【0048】
【数2】
【0049】
Oracle RACデータアフィニティのためのインターフェースをコールバックする。
【0050】
public boolean setDataKey(Object keyObject)
このコールバック実装例内のアプリケーションによって使用されるデータキーオブジェクトを設定する。パラメータは、キーオブジェクト、つまりデータキーオブジェクトを含むことができる。データキーオブジェクトが首尾よく設定されるとtrueを返し、そうでない場合はfalseを返す。
【0051】
public int getPartitionId()
データベースのアフィニティについて論理的区分識別子を取得する。この上記のコールバック内のデータキーセットに特有の論理的区分識別子を返す。
【0052】
public interface AffinityCallback extends ConnectionAffinityCallback
Oracle RACアフィニティのためのインターフェースをコールバックする。AffinityCallbackインターフェースは、アフィニティプロバイダを登録するためにデータソースサービスとともに使用されるベースインターフェースである。インターフェースはUCP ConnectionAffinityCallbackインターフェースを拡張し、追加的なメソッドを規定する。既存のUCPアフィニティ実装例を下位分類して、AffinityCallbackインターフェースを実装し得る。
【0053】
public boolean isApplicationContextAvailable()
このアフィニティポリシーについてアプリケーションコンテキストが存在するかどうかを確認する。このポリシーについてアプリケーションコンテキストが存在する場合はtrueを返し、そうでない場合はfalseを返す。
【0054】
public interface DataAffinityCallback extends AffinityCallback,
DataBasedConnectionAffinityCallback
Oracle RACデータアフィニティのためのインターフェースをコールバックする。
【0055】
public interface Data sourceService
内部データソースサービスオペレーション。コンポーネントはこのサービスインタフェースを使用して、情報を取得し、データソースサブシステム上でグローバルオペレーションを行なうべきである。
【0056】
public void registerAffinityCallback(AffinityCallback callback)
アフィニティについて設定されるすべてのデータソースによって呼出されることになるグローバルアフィニティコールバックを登録する。パラメータは、コールバック、つまり登録するべきコールバックインスタンスを含むことができる。
【0057】
public boolean unregisterAffinityCallback(AffinityCallback callback)
特定されたアフィニティコールバックを登録しない。パラメータはコールバック、つまり登録しないコールバックインスタンスを含むことができる。コールバックが以前に登録されている場合はtrueを返し、そうでない場合はfalseを返す。
【0058】
【数3】
【0059】
アフィニティについて設定されるすべてのデータソースによって呼出されるグローバルデータアフィニティコールバックを登録する。パラメータは、コールバック、つまり登録するべきコールバックインスタンスを含むことができる。
【0060】
【数4】
【0061】
データソースが、特定されたアフィニティポリシーとともに現在のサーバに導入されているかどうかを返す。
【0062】
パラメータは、ポリシー、つまり導入されたデータソースのアフィニティポリシーを含むことができる。特定されたアフィニティポリシーとともにデータソースが導入されている場合はtrueを返し、そうでない場合はfalseを返す。
【0063】
【数5】
【0064】
特定されたアフィニティポリシーについてアフィニティポリシーリスナーコールバックを登録する。特定されたアフィニティポリシーの導入ステータスに変化がある場合は常に、コールバックが呼出されることになる。コールバックは最初の登録直後に呼出されることになる。パラメータは、リスナー、つまり登録するべきコールバック実装例と、ポリシー、つまり聞くべきアフィニティポリシーとを含むことができる。
【0065】
【数6】
【0066】
特定されたポリシーリスナーコールバックを登録しない。パラメータはリスナー、つまり登録しないリスナーコールバックを含むことができる。特定されたコールバックが登録されている場合はtrueを返し、そうでない場合はfalseを返す。
【0067】
public interface AffinityPolicyListener
特定のアフィニティポリシーとともにデータソースが導入されるかまたは導入されていない場合、実装例をDatasourceServiceによって登録して通知を受信することができる。
【0068】
【数7】
【0069】
特定のアフィニティポリシーの導入ステータスの変化が呼出される。パラメータはポリシー、つまり通知が該当するアフィニティポリシーを含むことができ、データソースがアフィニティポリシーによって導入されたかどうかが導入される。
【0070】
クラスタ化されたデータベース環境におけるアプリケーションコネクティビティの向上
一実施例によれば、システムはドライバ(たとえばJDBC)再現機能を含み、該機能は、アプリケーションから見て作業の回復を可能にし、多くのシステム、通信、およびハードウェア障害、ならびにハングをマスキングする汎用の、アプリケーションに依存しないインフラストラクチャを配信する。セマンティクスは、エンドユーザトランザクションをオンタイムでかつ最高で一回実行することができることを確実に行なうことを支援する。正味の結果は、エンドユーザがサービスの中断を見なければならないのは、継続しているポイントがないような停電時のみである。
【0071】
図6は、一実施例に係る、ドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの実例を示す。図6に示されるように、データソース282(他の形態のデータソースを使用してもよいが、この例ではGridLinkデータソースと称する)は、クラスタ化されたデータベース202とともに使用されるように、アプリケーションサーバ280に関連付けられた単一のデータソースを提供する。データソースはコネクションプール284を含み、その結果データベースクラスタ中の異なるデータベースインスタンス114,116および118に一組の異機種コネクションを提供する。異なるデータベースインスタンスは、単一のまたは共用記憶装置120にコネクトすることができる。
【0072】
一実施例によれば、システムは、データベースインスタンスにアクセスするために様々なコネクションによって使用されるJDBCドライバ286をさらに含む。アプリケーション290がデータソースからのコネクションを要求すると、好適なコネクションがコネクションプールから選択され、たとえばFAN通知によってコネクションプールが受信した負荷バランシング情報および/またはプールからの使用の際のコネクションの現時点分布に基づいてアプリケーションに供給されることができる。アプリケーションセッション292は次いで、コネクションプールおよびJDBCドライバを介してデータベースにリクエスト294を発し、対応するレスポンスまたは結果295を受信し、それらは次いでアプリケーションに返される。
【0073】
一実施例によれば、ウェブセッションを用いたアプリケーションの動作中に、コネクションが停止するかまたは失敗した場合、JDBCドライバは、アプリケーション自体にはいずれのエラーまたは例外も生じないように、どの情報またはデータがアプリケーションによってデータベースから以前に照会されたかについての状態287を記録し、データベースに対するクエリを処理する点までのセッションを再現する。
【0074】
他の実施例によれば同様の技術をトランザクショナルケースに使用することができ、かつトランザクションとの使用は意図されずそれらのケースをサポートするために拡張することができるが、一実施例によれば、機能は非トランザクショナル読み出しオンリーまたは選択オンリーの場合に特に有用である。使用ケースの複雑度(たとえば、読み出しオンリー対トランザクショナル、および単純対複雑なセッションリクエスト)に依存して、JDBCドライバ再現を使用する際にパフォーマンスおよびメモリヒットがあるかもしれず、したがってわずかに低いパフォーマンス対アプリケーション連続性の向上およびアプリケーション中断の減少の点でトレードオフがある。(上記のように、一実施例によれば、システムはOracleのJDBCドライバなどのJDBCドライバによって作動するJava(登録商標)特有のアプリケーションサーバ機能を実装する。他の実施例によれば、他のドライバ、たとえばTuxedoシステムのコンテキストにおいてOCI Oracleドライバを使用することができる)。
【0075】
図7は、一実施例に係る、選択されたデータを再現するのに使用されるドライバ再現機能とともに、クラスタ化されたデータベースにアプリケーションサーバをコネクトするためのデータソースを含むシステムの別の実例を示す。図7に示されるように、アプリケーションは、コネクションプールおよびJDBCドライバを介してクラスタ化されたデータベースのデータベースインスタンスからデータを選択するリクエストを行ない、JDBCドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果を記録する。次に、アプリケーションがデータベースインスタンスへのそのコネクション296を失ったとシステムが判断すると、以前に受信したアプリケーションリクエストに応答してJDBCドライバに保存されたデータがJDBCドライバによって使用され、セッションのその点までアプリケーションリクエストおよびレスポンス298を再現する。
【0076】
図8は、一実施例に係る、ドライバ再現機能を提供するための方法のフローチャートを示す。図8に示されるように、ステップ302において、アプリケーションは、コネクションプールおよびJDBCドライバを介してクラスタ化されたデータベースのデータベースインスタンスからデータを選択するリクエストを行なう。ステップ304において、JDBCドライバは、データベースインスタンスからの読み出しオンリーまたは選択データの結果をドライバメモリスペースそのものに記録する。ステップ306において、システムは次に、アプリケーションがデータベースインスタンスへのそのコネクションを失ったと判断する。ステップ308において、アプリケーションリクエストに応答して以前にJDBCドライバに保存されたデータがJDBCドライバによって使用され、セッションのその点までのアプリケーションリクエストおよびレスポンスを再現する。
【0077】
一実施例によれば、上記の機能は、たとえばOracleのデータベースドライバおよびサーバ、または他の形態のJDBCもしくはデータベースドライバにおいて主として実装することができる。WebLogicサーバなどのアプリケーションサーバがインターフェースを露出させ、次いでドライバ再現機能を制御し、かつ回復させる必要がある作業の区別に関与するのを支援することができる。
【0078】
一実施例によれば、正常なOracleのドライバ/データソースクラスは「oracle.jdbc.replay.OracleData sourcelmpl」クラスに置換することができる。管理コンソールは、このドライバが選択された場合、XAが無視されることを示すことになる。エンドユーザまたは管理者は、コンソールまたはテキストエディタを使用してまたはプログラムによって(たとえばWLST)正確なドライバを特定し、さらなる構成を提供することができる。
【0079】
上記の実施例は読み出しオンリーのシナリオによるドライバ再現機能の使用を例示しているが、他の実施例によれば、ドライバ再現機能はデータ更新シナリオによって使用することができる。
【0080】
コネクション初期化コールバックを作成するために、アプリケーションはoracle.ucp.jdbc.ConnectionlnitializationCallbackインターフェースを実装することができる。1つのコネクションプールごとに1つのコールバックが作成される。インターフェースは下以下に示されるような1つの方法を提供する。
【0081】
void initialize(java.sql.Connection connection) throws SQLException
ラベリングコールバックがコネクションプールに対して登録されると無視される。さもなければ、プールからのコネクション確認ごとに、かつ再現の際に回復可能なエラーに続いて再コネクションが成功するたびに実行される。実行時および再現において同じコールバックを使用することにより、当初のセッションが確立された時に使用されたのとまったく同じ初期化が実行時に再び確立されることを確実に行なうことができる。これがそうであることを確実に行なうのがコールバックの応答性の作成者である。コールバック呼出しが失敗した場合、再現はそのコネクション上で無効とされる。次の例は、単純な初期化コールバック実装例を実証する。
【0082】
【数8】
【0083】
WLSデータソースは、初期化コールバックを登録するためのregisterConnectionlnitializationCallback(ConnectionlnitializationCallbackコールバック)メソッドを提供する。1つのコールバックのみがコネクションプール上に登録され得る。次の例は、MyConnectionlnitializationCallbackクラスにおいて実施される初期化コールバックの登録を実証する。
【0084】
【数9】
【0085】
コールバックは、Oracleのパラメータにおいて新たなコネクション初期化コールバック要素を介して図式によって設定することもできる。WLSデータソースは、初期化コールバックを削除するためのremoveConnectionlnitializationCallback()メソッドを提供する。次の例は、初期化コールバックの削除を実証する。
【0086】
【数10】
【0087】
一実施例によれば、WebLogicサーバはoracle.jdbc.replay.internal.ConnectionlnitializationCallbackを実装し登録することができる。initialize()メソッドは、登録されていれば、ConnectionLabelingCallback実装例を呼出す。別な方法として、initialize()メソッドは、登録されていれば、ConnectionlnitializationCallback実装例を呼出す。ラベリングコールバックが登録されていない場合は、コネクションがプールによって分配されると、初期化コールバックも呼出されるべきである。WLSは、コネクション上の作業を一括するために、コネクション上でbeginRequestおよびendRequestを呼出すことになる。beginRequestは、オープントランザクションによって呼出された場合、または最後のbeginRequest以来endRequest()がない場合、エラーを返すかまたはプールにコネクションを返す。endRequestは、コネクションを新たなコネクションに置換することができるという宣言である。
【0088】
このマーカを受信することにより、再現のための記録に関して、以下の処置を再現ドライバが講ずることが可能となる。トランザクション履歴および蓄積されたpurge-on-close(遅延)カーソルをパージする。これは、記録された呼出し履歴をパージするだけである。いずれかのJDBCメソッド、SQL、またはPL/SQLを再び実行することによってコネクションの状態を変更することを伴わない。再現が無効とされる場合は、再現を無効にする(エラーコード)ために保存された理由をクリアする。再現を無効にする。再現は次のbeginRequest呼出しにおいて有効とされる。(トランザクションビットによって決定される)オープントランザクションによって呼出された場合、エラーを返す。繰り返されるendRequest呼出しについてはエラーは返されない。正当なエラーおよび閉じているセッションの結果であり得るためである。再現は、以下のようにコネクションごとに無効化できる。
【0089】
【数11】
【0090】
Java(登録商標)プログラミングインターフェース
一実施例によれば、上記のJDBCドライバ再現機能のためのJava(登録商標)プログラミングインターフェースの一例が以下に示される。例示的なJava(登録商標)プログラミングインターフェースは例示および説明の目的で示され、包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。
【0091】
<element name="connection-initialization-callback" type="string"
nillable="true" minOccurs="0">
コネクション初期化コールバックの名前。これは、データソースが作成されると、registerConnectionlnitializationCallbackに自動的に渡される。

public interface ConnectionInitializationCallback
プールからのコネクション確認ごとに、かつ再現時の回復可能なエラーに続いて再コネクションが成功するたびに呼出されるAPI。
【0092】
void initialize(java.sql.Connection connection) throws SQLException
プールからのコネクション確認ごとに、かつ再現時の回復可能なエラーに続いて再コネクションが成功するたびに呼出されるAPI。実行時および再現において同じコールバックを使用することで、当初のセッションが確立された時に使用されたのとまったく同じ初期化が実行時に再び確立されることを確実に行なうことができる。これがそうであることを確実に行なうのがコールバックの応答性の作成者である。コールバック呼出しが失敗した場合、再現はそのコネクション上で無効とされる。
【0093】
public String getConnectionInitializationCallback();
public void setConnectionInitializationCallback();
本発明は、本開示の教示に従ってプログラムされた1つ以上のプロセッサ、メモリ、および/またはコンピュータ読み取り可能な記録媒体を含む1つ以上の従来の汎用もしくは特殊デジタルコンピュータ、計算装置、マシン、またはマイクロプロセッサを使用して好都合に実装され得る。ソフトウェア分野の当業者には明白であるように、熟練したプログラマによって、本開示の教示に基づいて適切なソフトウェアコーディングを容易に準備することができる。いくつかの実施例によれば、本発明に従って開発されたシステムおよびコンポーネントは、コンピュータハードウェア、ソフトウェア、ファームウェア、もしくはそのいずれかの組合せを含むことができるかまたは、コンピュータハードウェア、ソフトウェア、ファームウェア、もしくはそのいずれかの組合せとして実装されるかもしくは提供されることができる。
【0094】
いくつかの実施例では、本発明は、本発明のプロセスのいずれかを実行するようにコンピュータをプログラムするのに使用することができる命令がその上/その中に格納されている記録媒体またはコンピュータ読み取り可能な媒体であるコンピュータプログラム製品を含む。記録媒体は、限定はされないが、フロッピー(登録商標)ディスクを含むいずれかの種類のディスク、光ディスク、DVD、CD−ROM、マイクロドライブ、および光磁気ディスク、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、フラッシュメモリ装置、磁気もしくは光カード、ナノシステム(分子メモリICを含む)、または命令および/またはデータを格納するのに好適ないずれかの種類の媒体もしくは装置を含むことができる。
【0095】
本発明の上記の説明は例示および説明を目的として示された。包括的であるものまたは発明を開示されている形態そのものに限定するものとは意図されない。多くの修正および変形が当業者にとって明白であろう。実施例は、発明の原理およびその実用化を最適に説明するために選択されかつ説明され、それにより当業者は様々な実施例について発明を理解することが可能となり、特定の使用に適した様々な修正が企図される。発明の範囲は添付の請求項およびそれらの均等物によって規定されることが意図される。
図1
図2
図3
図4
図5
図6
図7
図8