JP5385545B2 - トランザクションの実行を制御する装置及び方法 - Google Patents

トランザクションの実行を制御する装置及び方法 Download PDF

Info

Publication number
JP5385545B2
JP5385545B2 JP2008107466A JP2008107466A JP5385545B2 JP 5385545 B2 JP5385545 B2 JP 5385545B2 JP 2008107466 A JP2008107466 A JP 2008107466A JP 2008107466 A JP2008107466 A JP 2008107466A JP 5385545 B2 JP5385545 B2 JP 5385545B2
Authority
JP
Japan
Prior art keywords
transaction
processing
provider
specific
transactions
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2008107466A
Other languages
English (en)
Other versions
JP2009259009A (ja
Inventor
博己 増田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to JP2008107466A priority Critical patent/JP5385545B2/ja
Priority to US12/336,485 priority patent/US8161016B2/en
Publication of JP2009259009A publication Critical patent/JP2009259009A/ja
Application granted granted Critical
Publication of JP5385545B2 publication Critical patent/JP5385545B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Description

本発明は、トランザクションの実行を制御する装置及び方法に関する。特に、本発明は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置及び方法に関する。
複数の処理を組み合わせて実現される1つのトランザクションにおいて、既に成立しているトランザクションを取り消して(UNDOして)再実行する(REDOする)こと(以下、「UNDO/REDO」という)が必要になる場合がある。例えば、顧客自身の間違いや事務プロセスの入力ミス等、過去の事務プロセスに間違いがあったことに気が付いてそれを修正しようとする場合である。
このようなトランザクションの取消しや再実行については、従来から、種々の技術が提案されている(例えば、特許文献1〜3参照)。
特許文献1では、ログデータを回復単位(UR)及び機能(BEGIN、COMMIT、ABORT、END、REDO、UNDO)で区分してトランザクション回復流(TRS)に記録し、URの状態変化(COMMIT/ABORT)に応答してTRSの所定のUR区分のログデータの部分集合(REDO又はUNDO)を資源回復流(RRS)にマッピングし、URの状態変化の終了時にRRSを使用して所定のUR区分に関連する全てのログデータをTRSから消去している。
特許文献2では、回復中に障害が発生すると、予め設定された数の補償動作の後、現在走査している動作記録のシーケンス番号を含むNextUndoVSN記録をログに書き込み、障害後、ログを後ろ向きに走査しているときに、NextUndoVSN記録からその記録に含まれるシーケンス番号を有する動作記録までを無視している。
特許文献3では、分散トランザクション処理システムを構成する全ての分散トランザクション処理装置がアクセスできるログファイルに、トランザクション処理の進捗状況を示すログデータを記録し、他の分散トランザクション処理装置に障害が発生した場合に、ログファイルに記録されたログデータを用いて、障害が発生した分散トランザクション処理装置に関係するトランザクションの障害回復処理を行い、障害からの回復後に、ログファイルに記録されたログデータを用いて、障害により中断したローカルトランザクションの処理を継続している。
尚、トランザクションに含まれる処理の一例であるDB更新に関する技術としては、共有データに対する更新結果は更新記憶装置に書き込み、その間、共有データに対する参照操作は、共有記憶装置上の1つ前のバージョンの共有データに対して実行することで、ロック機構を不要とする技術(例えば、特許文献4参照)や、トランザクションのグループの総体として構成される大域トランザクションを連鎖階層のセットとして処理し、大域トランザクションのアトミック実行を保証する技術(例えば、特許文献5参照)がある。
また、UNDOやREDOに関する技術としては、ユーザインターフェースオブジェクトの開発者が、アンドゥ情報の生成及び追跡に責任をもたなくてよいように、アンドゥ情報を自動的に生成し追跡する技術(例えば、特許文献6参照)がある。
特開昭63−10252号公報 特開平9−204338号公報 WO2004/055674号公報 特開平8−235046号公報 特開平10−69418号公報 特開2005−18774号公報
しかしながら、これらの特許文献に記載の何れの技術も、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う環境でUNDO/REDOを実現する手段は提供していない。
本発明の目的は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う環境でUNDO/REDOを可能とすることにある。
かかる目的のもと、本発明は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置であって、リクエスタは、複数のトランザクションの各々における処理の要求先のプロバイダを示す第1の履歴情報を記憶する第1の記憶部と、複数のトランザクションのうちの特定のトランザクションの再実行の要求があると、第1の履歴情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々における処理の要求先のプロバイダを特定する特定部と、特定部により特定された要求先のプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の取消しを指示する取消し指示部とを備え、複数のプロバイダの各々は、複数のトランザクションの各々におけるリクエスタの要求に応じて処理を行う前の状態を示す第2の履歴情報を記憶する第2の記憶部と、取消し指示部により取消しが指示されると、第2の履歴情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理を取り消す取消し部とを備えた、装置を提供する。
また、この装置において、第1の記憶部は、複数のトランザクションの各トランザクションに関する第1の履歴情報を、各トランザクションを識別する第1の識別情報と、各トランザクションの前及び後の何れかに実行されたトランザクションを識別する第2の識別情報とに関連付けて記憶し、特定部は、第1の識別情報と第2の識別情報とに基づいて、特定のトランザクションよりも後に実行されたトランザクションを特定する、ものであってもよい。この場合、リクエスタは、複数のトランザクションのうちの一のトランザクションを識別する第3の識別情報を取得する取得部と、一のトランザクションにおける処理の要求を第3の識別情報と共に要求先のプロバイダに送信する送信部とを更に備え、複数のプロバイダの各々は、処理の要求を第3の識別情報と共にリクエスタから受信する受信部と、他のトランザクションを識別する第4の識別情報が処理の対象に関連付けて記憶され、他のトランザクションが処理を完了した旨が第4の識別情報に関連付けて記憶されている場合に、処理を行い、第3の識別情報を処理の対象に関連付けて記憶し、処理が終了すると、一のトランザクションが処理を完了した旨を第3の識別情報に関連付けて記憶する処理部とを更に備えた、ものであってもよい。
更に、この装置において、第1の記憶部は、複数のトランザクションの各トランザクションに関する第1の履歴情報を、各トランザクションを識別し、かつ、各トランザクションの順序を特定可能な識別情報に関連付けて記憶し、特定部は、識別情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションを特定する、ものであってもよい。
そして、この装置において、リクエスタは、特定部により特定された要求先のプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の再実行を指示する再実行指示部を更に備え、複数のプロバイダの各々は、再実行指示部により再実行が指示されると、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理を、要求以外の要求に応じて行った処理との間の順序関係が損なわれないように再実行する再実行部を更に備えた、ものであってもよい。この場合、第2の記憶部は、複数のトランザクションの各トランザクションに関する第2の履歴情報を、各トランザクションを識別する第1の識別情報と、各トランザクションの前及び後の何れかに実行されたトランザクションを識別する第2の識別情報とに関連付けて記憶し、再実行部は、第1の識別情報と第2の識別情報とに基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理と、要求以外の要求に応じて行った処理との間の順序関係を特定する、ものであってもよい。また、第2の記憶部は、複数のトランザクションの各トランザクションに関する第2の履歴情報を、各トランザクションを識別し、かつ、各トランザクションの順序を特定可能な識別情報に関連付けて記憶し、再実行部は、識別情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理と、要求以外の要求に応じて行った処理との間の順序関係を特定する、ものであってもよい。
更に、処理は、複数のプロバイダの各々が保持するデータベースを更新する処理であり、第2の履歴情報は、データベースの更新前イメージを含む、ものであってもよい。
また、本発明は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する方法であって、リクエスタには、複数のトランザクションの各々における処理の要求先のプロバイダを示す第1の履歴情報が記憶されており、複数のプロバイダの各々には、複数のトランザクションの各々におけるリクエスタの要求に応じて処理を行う前の状態を示す第2の履歴情報が記憶されており、リクエスタが、複数のトランザクションのうちの特定のトランザクションの再実行の要求があると、第1の履歴情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々における処理の要求先のプロバイダを特定するステップと、リクエスタが、特定した要求先のプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の取消しを指示するステップと、複数のプロバイダの各々が、取消しが指示されると、第2の履歴情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理を取り消すステップとを含む、方法も提供する。
更に、本発明は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置としてコンピュータを機能させるプログラムであって、コンピュータを、複数のトランザクションの各々における処理の要求先のプロバイダを示す履歴情報を記録する記録部と、複数のトランザクションのうちの特定のトランザクションの再実行の要求があると、履歴情報に基づいて、特定のトランザクションよりも後に実行されたトランザクションの各々における処理の要求先のプロバイダを特定する特定部と、特定部により特定された要求先のプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の取消しを指示する取消し指示部として機能させる、プログラムも提供する。
更にまた、本発明は、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置であって、リクエスタは、複数のトランザクションの各トランザクションの第1のトランザクションIDと、各トランザクションの直前に実行されたトランザクションの第2のトランザクションIDと、各トランザクションにおける処理の要求先のプロバイダのプロバイダIDとを含む履歴情報を記憶する第1の履歴情報記憶部と、最新のトランザクションの最新トランザクションIDを管理する管理情報を記憶する第1の管理情報記憶部と、複数のトランザクションのうちの特定のトランザクションの再実行の要求があると、最新トランザクションIDを第1のトランザクションIDとして含む履歴情報を出発点として、第2のトランザクションIDを第1のトランザクションIDとして含む履歴情報を、特定のトランザクションのトランザクションIDを第1のトランザクションIDとして含む履歴情報まで辿りながら、特定のトランザクションよりも後に実行されたトランザクションの各々における処理の要求先のプロバイダのプロバイダIDを特定する特定部と、特定部により特定されたプロバイダIDのプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の取消しを指示する取消し指示部と、特定部により特定されたプロバイダIDのプロバイダに対して、特定のトランザクションよりも後に実行されたトランザクションの各々において要求した処理の再実行を指示する再実行指示部とを備え、複数のプロバイダの各々は、複数のトランザクションの各トランザクションにおけるリクエスタの要求に応じた処理のログの第1のログIDと、処理の直前の処理のログの第2のログIDと、処理を行ったトランザクションの第3のトランザクションIDと、処理を行う前の状態を示す状態情報とを含む履歴情報を記憶する第2の履歴情報記憶部と、最新のログの最新ログIDを管理する管理情報を記憶する第2の管理情報記憶部と、取消し指示部により取消しが指示されると、最新ログIDを第1のログIDとして含む履歴情報を出発点として、第2のログIDを第1のログIDとして含む履歴情報を、特定のトランザクションのトランザクションIDを第3のトランザクションIDとして含む履歴情報まで辿りながら、状態情報を用いて、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理を取り消す取消し部と、再実行指示部により再実行が指示されると、特定のトランザクションよりも後に実行されたトランザクションの各々におけるリクエスタの要求に応じて行った処理を、処理を行ったトランザクションのトランザクションIDよりも古いトランザクションIDのトランザクションで要求以外の要求に応じて行った処理を再実行した後に再実行する再実行部とを備えた、装置も提供する。
本発明によれば、複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う環境でUNDO/REDOが可能となる。
以下、添付図面を参照して、本発明を実施するための最良の形態(以下、「実施の形態」という)について詳細に説明する。
本実施の形態では、データベース(以下、「DB」という)の更新を含む複数のウェブサービスを組み合わせてトランザクションの一例である1つの業務プロセスを実現するアプリケーションを考える。このようなアプリケーションが原子性(Atomicity)を持つ場合、全てのウェブサービスを2PC(2フェーズコミット)のスコープに置かなくてはならない。ここで、原子性とは、当業者にはよく知られているように、互いに独立した複数のプロバイダサーバシステムの各々が提供する複数の独立したウェブサービスが実行したDB更新が、全て成立するか、全て失われるか、の何れかであることを意味する。後続のウェブサービスで障害が発生し、DB更新が完結できなければ、先行するウェブサービスによって既に実行済みのDB更新は全て取り消さなくてはならない。しかし、高い信頼性を求められる基幹系事務システムでは、次のような幾つかの理由から、一般的には2PCの方式は採用されない。
1)一般にリクエスタは高い信頼性/整合性を求められるようなDBを保有しない。そのため、高い可用性と永続的な整合性を求められるDBを保有するプロバイダに比べて、相対的に信頼性の低いシステム設計/システム運用しか実現できていない。2PCの採用は、トータルシステムとしての信頼性が、リクエスタと複数のプロバイダの中で最も「低い」信頼性になることを意味する。即ち、あるシステムがその低い信頼性のためにスローダウンを引き起こし、業務プロセスの処理時間が著しく遅延すると、その影響は他の全てのリクエスタ/プロバイダに波及する。例えば、全てのシステムにおいてDBレコードのロックの開放が著しく遅延し、そのロックの開放を待つ全ての業務プロセスを待たせることになる。また、各プロバイダによって引き起こされたスローダウンは更にそのプロバイダのサービスを要求する全てのリクエスタにも波及する。リクエスタに高い信頼性を保証しなくてはならないプロバイダにとって、このような信頼性を脅かす脅威を潜在的に持つ2PCの設計は容易には受容できない。
2)2PCでは、スコープ内の全てのウェブサービスが完了するまで、各プロバイダは、更新したDBレコードのロックを開放できず、コミットまでロックを保持し続けなくてはならない。そのため、一般に、ロック保持時間が長くなり、デッドロックが発生しやすくなる。通常、DBMS(DB Management System)は、デッドロック検知の仕組みを持っており、デッドロックの発生を速やかに検出する。そして、デッドロックの当事者の一方を強制的に異常終了させることによってシステム全体のスローダウンを防止する。しかし、互いに独立したプロバイダシステム間で発生するデッドロックは、各々が独自のDBMSを保有しているため、検出することができない。従って、一般的には、ロック保持時間の上限値(タイムアウト値)を設定し、その上限値を超えてロックを保持したウェブサービスをタイムアウトとして強制終了させることになる。ところが、広範なスコープを持つ2PCの業務プロセスを持つシステムでは、他のプロバイダでの処理時間を考慮しなくてはならないため、このようなタイムアウト値の設定は非常に困難である。そこで、現実的には、非常に大きなタイムアウト値を設定せざるをえない。これにより、デッドロックは長時間放置されることになり、たった1つのデッドロックがシステム全体のスローダウンを引き起こす脅威となる。
このような課題を解決するため、本実施の形態は、次のような構成を備える。
図1は、本実施の形態における業務プロセス実行制御装置100の構成を示したブロック図である。本実施の形態における業務プロセス実行制御装置100は、リクエスタ10と、プロバイダ20a,20b,20c,…と、GBPIDサーバ30とから構成される。
このうち、リクエスタ10は、エンドユーザから業務プロセスの要求を受け取り、複数のウェブサービスを組み合わせて、その要求を実現する。このリクエスタ10は、所謂フロントエンドサーバに相当するものであり、SOA(Service Oriented Architecture)における「サービスリクエスタ」である。
プロバイダ20a,20b,20c,…は、リクエスタ10からの要求に従って、ウェブサービスを実行する。このプロバイダ20a,20b,20c,…は、所謂バックエンドサーバに相当するものであり、SOAにおける「サービスプロバイダ」である。尚、以降の説明で各プロバイダを区別する必要がない場合は、「プロバイダ20」と表記する。また、図では、3つのプロバイダ20を示したが、プロバイダ20の数はこれに限られるものではない。
GBPIDサーバ30は、業務プロセスの要求ごとに採番される識別情報であるGBPID(Global Business Process ID)に関する処理を実現するサーバである。全てのリクエスタ10、プロバイダ20と接続し、要求を処理する。ここで、GBPIDの採番は昇順とする。例えば、タイムスタンプの利用が考えられる。但し、厳密には昇順である必要はなく、複数のリクエスタ10/プロバイダ20に跨ってユニークであればよい。尚、このGBPIDサーバ30は、汎用のサーバコンピュータで実現するとよい。
次に、本実施の形態における業務プロセス実行制御装置100の概略動作を説明する。尚、ここでは、保険契約に関する業務プロセスを例として説明する。
図2は、業務プロセス実行制御装置100の概略動作を説明するための図である。図において、リクエスタ10内には、左側から右側へ向けて、リクエスタ10が行うべき処理を時系列に示しており、それに対応する下段の位置に各処理に対応するサービスを実行するプロバイダ20又はGBPIDサーバ30を示している。従って、2つのGBPIDサーバ30が示されているが、これらは同じGBPIDサーバ30であり、処理内容の違いに応じて2つ図示したに過ぎない。そして、プロバイダ20としては、契約管理を行うプロバイダ20aと、顧客管理を行うプロバイダ20bとを示している。
また、図2には、図1に示さなかった構成要素も示しているので、これについて説明する。
まず、プロバイダ20aは、ログDB21aと、契約DB29aとを備える。更に、図面作成の都合上、プロバイダ20aの枠外に示しているが、ID対応DB200aも備える。ログDB21aは、後述する更新取消処理等のためにDBの更新前イメージを保存するDBである。契約DB29aは、業務DBの一例であり、契約に関するデータを保存するDBである。ID対応DB200aは、各GBPIDに関する「更新前ログ」のログIDを管理するDBである。また、プロバイダ20bは、ログDB21bと、顧客DB29bとを備える。更に、図面作成の都合上、プロバイダ20bの枠外に示しているが、ID対応DB200bも備える。ログDB21bは、ログDB21aと同様、後述する更新取消処理等のためにDBの更新前イメージを保存するDBである。顧客DB29bは、業務DBの一例であり、顧客に関するデータを保存するDBである。ID対応DB200bは、各GBPIDに関する「更新前ログ」のログIDを管理するDBである。尚、図では、プロバイダ20a、20bに対応して、ログDB21a、21b、及び、ID対応DB200a、200bを示したが、以降の説明で各ログDBを区別する必要がない場合は、「ログDB21」、「ID対応DB200」と表記する。
次に、GBPIDサーバ30は、図面作成の都合上、枠外に示しているが、同期点管理DB31を備える。同期点管理DB31は、同じ業務プロセスにおける複数のDB更新を1つの「業務同期点」として取り扱うためのDBである。「業務同期点」を識別するためにGBPIDを用いている。つまり、DBレコードではなく、GBPIDごとに、コミット/ロールバックの状態を管理する。
プロバイダ20a、プロバイダ20b、GBPIDサーバ30がこれらのDBを有することを前提として、本実施の形態では、次のような概略動作を行う。
まず、リクエスタ10は、GBPIDサーバ30からGBPIDを入手する(A)。図において、GBPIDサーバ30は、GBPID「1001」、「1002」、「1003」を採番しており、これらのGBPIDが「実行中」というステータスと共に同期点管理DB31に記録されている。尚、ステップAでは、このうちGBPID「1001」を入手したものとする。
次に、リクエスタ10は、各プロバイダ20に対して、ウェブサービスを依頼する。その際、ウェブサービスの実行に使用するGBPIDを各プロバイダ20に通知する。
これにより、各プロバイダ20は、全てのDBの更新に当たって、DBレコードの例えば先頭にGBPIDを埋め込んで、そのGBPIDを持つ業務プロセスが、DBレコードを「更新実行中」或いは「更新をロールバック中」或いは「更新をコミット済み」であることを示す。この3つのステータスの何れであるかは、同期点管理DB31に記録されている。尚、この場合において、プロバイダ20において同一の業務プロセス内の同一のGBPIDを持つ複数のウェブサービスがフロー上並行処理されることが想定されれば、同一GBPID内での枝番をGBPIDの後ろに付加した、ウェブサービスごとにユニークなIDをGBPIDの代わりに埋め込んで、同一の業務プロセス内の複数のウェブサービスの処理順序を正確に管理できるようにする必要がある。以降の説明では、特に混乱が生じない限り、このGBPIDと枝番の組み合わせからなるIDも単にGBPIDと表記する。
但し、このとき、ステータスが「実行中」や「ロールバック」のGBPIDを持つDBレコードは使用しない。つまり、DBレコードはコミットされていなければ使用しないが、コミットされているかどうかは、同期点管理DB31を見れば分かる。更新しようとするDBレコードに埋め込まれたGBPIDのステータスが「実行中」や「ロールバック」になっている状況が生じた場合、コミットになるまで待ち、デッドロック回避のため、一定時間経過後にタイムアウトを返す方法と、トランザクションを異常終了させる方法(タイムアウトと同様に扱う方法)とがある。
また、各プロバイダ20は、ウェブサービスの処理中に発生した全てのDB更新をコミット後も取り消せるように、DBレコードの更新前イメージをログDB21に書き出しておく。
図の例では、次の3つのウェブサービスを依頼する。
第一に、リクエスタ10は、医療特約追加をプロバイダ20aに依頼する。このとき、GBPID「1001」もプロバイダ20aに通知する(B)。すると、プロバイダ20aは、GBPID「1001」を契約DB29aのレコードに埋め込み、DBレコードの更新前イメージをログID#1のログデータとしてログDB21aに書き出す(C)。尚、GBPID「1001」とログID#1との対応は、ID対応DB200aに記録しておく。そして、プロバイダ20aは、全ての処理が正常終了した時点で、サービスをコミットし、DBレコードのロックを全て開放する。
第二に、顧客DB更新データ生成をプロバイダ20aに依頼する。このとき、GBPID「1001」もプロバイダ20aに通知する(D)。すると、プロバイダ20aは、ID対応DB200aからGBPID「1001」に対応するログID#1を特定し、ログDB21a内のログID#1のログデータに基づいて、顧客DB更新データを生成する。そして、これをリクエスタ10に戻す。そして、プロバイダ20aは、全ての処理が正常終了した時点で、サービスをコミットし、DBレコードのロックを全て開放する。
第三に、顧客DB更新をプロバイダ20bに依頼する。このとき、GBPID「1001」もプロバイダ20bに通知する(E)。すると、プロバイダ20bは、GBPID「1001」を顧客DB29bのレコードに埋め込み、DBレコードの更新前イメージをログID#2のログデータとしてログDB21bに書き出す(F)。尚、GBPID「1001」とログID#2との対応は、ID対応DB200bに記録しておく。そして、プロバイダ20bは、全ての処理が正常終了した時点で、サービスをコミットし、DBレコードのロックを全て開放する。
リクエスタ10は、全てのウェブサービスが正常に終了し、業務プロセスを完了できると判断した時点で、該当するGBPIDを「コミット状態」にするようGBPIDサーバ30に指示する(G)。図では既に、GBPID「1002」が「コミット状態」というステータスと共に同期点管理DB31に記録されているが、この時点で、GBPID「1001」も「コミット状態」というステータスと共に同期点管理DB31に記録される。
ところで、本実施の形態では、前述の通り、各プロバイダ20が、DBレコードの参照/更新の際に常にGBPIDの状況をチェックし、「コミット状態」にないGBPIDを持つDBレコードの参照処理/更新処理を行わないようにしている。
このように、GBPIDのチェックは、基本的には全てのDBアクセスについて実施する必要があるものである。しかしながら、DBレコードにアクセスする都度、同期点管理DB31を参照していては、パフォーマンスが低下するという問題点が出てくる。
そこで、本実施の形態では、次のような構成も採用可能にしている。
図3は、業務プロセス実行制御装置100の概略動作の変形例を説明するための図である。
図では、リクエスタ10がステップGで行ったGBPIDサーバ30への指示により、GBPID「1002」に加え、GBPID「1001」も「コミット状態」になると、同期点管理DB31に「1003未満はコミット済み」という情報が記録される。尚、図では、これを「<1003 commit」と簡略化して示している。こうすることにより、各プロバイダ20は、メモリ上に「実行中」になっている最小のGBPIDであるOPGID(Oldest Pending GBPID)を保持することができる。そして、OPGIDより小さいGBPIDであれば、コミットされていると判断し、OPGIDより大きなGBPIDである場合にのみ、同期点管理DB31を参照して、コミットされているかどうかを判断することができる。
一方、ウェブサービスの実行中に何らかの障害が発生したとする。この場合、ロールバックを行うことになるが、そのときの概略動作を説明する。
図4は、業務プロセス実行制御装置100におけるロールバック時の概略動作を説明するための図である。尚、図には、3つのGBPIDサーバ30が示されているが、図2と同様、これらは同じGBPIDサーバ30である。
図において、ステップA〜Fは、図2で説明したものと同様である。但し、この図では、ステップFで顧客DB29bを更新する際に障害が発生したものとする。すると、プロバイダ20は、ロールバック処理を行い、ロックを開放すると共に、リクエスタ10にサービスが実行されなかったことを通知する。リクエスタ10は、障害の通知を受けると、該当するGBPIDを「ロールバック状態」にするようGBPIDサーバ30に指示する(H)。図では、GBPID「1001」が「ロールバック状態」というステータスと共に同期点管理DB31に記録されている。
その後、リクエスタ10は、既に完了している全てのウェブサービスについて、DB更新を取り消すよう、更新取消処理を起動する(I)。各プロバイダ20は、更新取消を依頼されると、例えばログDB21に保管してあるDBレコードの更新前イメージでDBを更新する等の方法により、DBを更新前の状態に戻す。この場合、各プロバイダ20は、「ロールバック状態」になっているGBPIDを見つけると、自分でログDB21を用いて更新前イメージに戻し、処理を継続する。具体的には、ID対応DB200から必要なログIDを入手し、そのログIDに対応する更新前イメージでレコードを置き換える。このとき、同じGBPIDで異なるサービスが同一レコードを更新する場合の更新取消を想定して、ログIDの逆順(GBPID+枝番の降順)にログを用いて更新前イメージに戻す必要がある。これにより、DBレコード上のGBPIDは、以前の古いGBPIDに戻る。図では、プロバイダ20a及びプロバイダ20bが更新取消を指示されており、GBPID「1001」がGBPID「0833」に戻されている。そして、全てのプロバイダ20における更新取消が完了すると、該当するGBPIDを「コミット状態」にするようGBPIDサーバ30に指示する(J)。更新取消指示直後、GBPID「1001」は「ロールバック状態」というステータスと共に同期点管理DB31に記録されていたが、更新取消完了後は、「コミット状態」というステータスと共に同期点管理DB31に記録されることになる。
以上述べたように、本実施の形態では、サービスの処理終了時に直ちにコミット/ロールバックを実行し、ロックを開放する。従って、2PCの場合のように、他のリクエスタ10、プロバイダ20の処理に引きずられて、ロック保持時間が遅延することはなく、冒頭で述べたような問題は発生しない。
また、コミットされたDBレコードであっても、GBPIDごとに管理される状態情報が「コミット状態」にならない限り、参照/更新はされないことが保証される。従って、DBの更新前ログを用いた更新取消処理が常に成立し、業務プロセス全体の大域的なデータの原子性も達成できる。
更に、DBレコードごと或いはウェブサービスごとにコミット/ロールバックを管理するのではなく、それらを包括したGBPIDごとにコミット/ロールバックを管理するだけでよいため、仕組みが単純化できる。
更にまた、GBPIDの状態を、リクエスタ10やプロバイダ20から独立したGBPIDサーバ30で一括管理するため、リクエスタ10やプロバイダ20の間に新たな依存関係は発生せず、各システムに閉じた実装だけで、複雑な大域的なデータの原子性を達成できる。具体的には、リクエスタ10やプロバイダ20の数が増大したり、プロバイダ20が複数の企業に跨ったりしたとしても、GBPIDサーバ30を共有する限り、実装は変わらない。また、GBPIDサーバ30の信頼性が十分に高ければ、リクエスタ10やプロバイダ20の信頼性が低下することはない。
尚、GBPIDの採番は、特定のプロバイダ20が提供するウェブサービスとして実装することも考えられる。最も簡単なGBPIDの採番方法は、そのプロバイダ20のタイムスタンプをGBPIDとして返すことである。但し、GBPIDのユニーク性を保証するためには、同じタイムスタンプ値が発生した場合に、そのタイムスタンプ値に異なる枝番を付与する等の工夫が必要となる。また、大量の採番が必要となる場合は、ウェブサービスの並列処理化を図る必要も出てくる。この場合、採番プロセスごとにユニークな採番プロセスIDを付与し、タイムスタンプ値と枝番と採番プロセスIDとの組合せをGBPIDとすることによって、並列処理される採番プロセス間でのGBPIDの重複を避けることができる。このように採番プロセスIDを付与すると、極めて短い時間の間に発生した業務プロセスの間で、GBPIDの逆転が発生する可能性があるが、本実施の形態では、その程度の逆転で不具合は発生しない。
ところで、上述したような複数のDB更新を含むウェブサービスを組み合わせて1つの業務プロセスを実現するアプリケーションでは、次のような問題により、UNDO/REDOの実装が困難であった。
1)1つの業務プロセスは、実際には、リクエスタとは独立した複数のプロバイダがDB更新を伴うサービスを行うことにより実現されている。各プロバイダは、複数のリクエスタからの要求に応じてサービスを実行しているため、あるリクエスタだけではUNDO/REDOを行うべき全てのウェブサービスを把握できない。また、あるプロバイダは、1つの業務プロセスに含まれる他のプロバイダによって実行されているUNDO/REDOを行うべき全てのウェブサービスを把握できない。従って、どのシステムも、UNDO/REDOを実行することができない。
2)UNDO/REDOの対象となる業務プロセスは、実行した順序とは逆の順序でUNDOし、実行した順序でREDOしなくてはならない。この順序は正確でなくてはならない。プロセスの順序の把握は、1つのシステムで業務プロセスが実行される場合は容易であるが、複数のプロバイダに分散して業務プロセスが実行される場合は容易ではない。例えば、あるプロバイダでは、業務プロセスAに含まれるサービスのほうが業務プロセスBよりも先に実行されたが、別のプロバイダでは、業務プロセスBに含まれるサービスのほうが業務プロセスAよりも先に実行される場合がある。このような場合は、どの順番でUNDO/REDOを行っても何れかのプロバイダでは実行順序が誤ることになるので、正しいUNDO/REDOを実行できない。
このような課題を解決するため、本実施の形態では、次のような構成を設ける。
1)リクエスタ側では、業務プロセスの実行履歴(以下、「業務プロセス履歴」という)をとり、各プロバイダでは、サービスの実行履歴(以下、「サービス履歴」という)をとる。そして、各プロバイダがサービス履歴に基づいてUNDOを実行する。また、リクエスタが、業務プロセス履歴に基づいて、順次業務プロセスのREDOを実行する。業務プロセスがREDOされると、各プロバイダにはサービスが要求されることになる。各プロバイダは、要求されたサービスを実行する前に、サービス履歴を参照し、それ以前に他のリクエスタから要求されたサービスがあればそれらのREDOを実行し、その後で要求されたサービスを実行する。このような設計によって、リクエスタとプロバイダが協調して、全てのリクエスタ/プロバイダで整合のとれたUNDO/REDOを実現することができる。
2)先に述べたように、全てのリクエスタは、業務プロセスの要求ごとにプロバイダに跨る昇順のGBPIDを付与し、サービスの実行に使用するGBPIDを各プロバイダに通知する。各プロバイダは、全てのDBの更新に当たって、DBレコードにこのGBPIDを埋め込む。リクエスタは、業務プロセスが正常に完了すると、該当するGBPIDを「コミット状態」にする。また、各プロバイダは、DBレコードの参照/更新の際に常にGBPIDの状況をチェックし、「コミット状態」にないGBPIDを持つDBレコードは処理しないものとする。このような仕組みを取ることによって、何れかのプロバイダの何れかのDBレコードで競合が発生する業務プロセスの実行を逐次化することが可能となる。このGBPIDをキーとして処理順序に従った逆方向チェインを作ることによって、UNDO/REDOすべき業務プロセス/サービスの間で整合性のとれた処理順序を確定することができる。
このようなUNDO/REDOについて、複数の保険契約に加入している契約者の例を用いて説明する。
図5(a)は、このような例を模式的に示した図である。尚、この例では、UNDO/REDOを契約者単位に行うものとし、契約者IDをUNDO/REDOのキーとしている。尚、図中、c#は、各契約者の契約者IDを表すシンボルである。また、p#1〜p#4は、各保険の契約番号を表すシンボルである。例えば、p#1は、この契約者の終身保険の契約番号を示し、p#2は、この契約者の医療保険の契約番号を示している。
また、図5(b)は、保険契約に関する業務プロセスの一例を示す。
図示するように、処理Axで終身保険の変更を行い、処理Bxでログデータから入力メッセージを生成し、処理Czで顧客DBを更新する。また、処理Dxで医療保険の変更を行い、処理Exでログデータから入力メッセージを生成し、処理Fzで顧客DBを更新する。更に、処理Gyで傷害保険の変更を行い、処理Hyでログデータから入力メッセージを生成し、処理Izで顧客DBを更新する。尚、各処理を表す記号の2文字目が、その処理を提供するプロバイダ20を示している。具体的には、A,B,C,Dはプロバイダ20xが、G,Hはプロバイダ20yが、C,F,Iはプロバイダ20zが提供するウェブサービスである。つまり、終身保険及び医療保険をプロバイダ20xが、傷害保険をプロバイダ20yが、顧客管理をプロバイダ20zが処理することになる。
尚、この例では、各契約処理の結果によって、顧客DBを更新する入力メッセージの内容が異なるものとしている。そこで、ログデータを用いて入力メッセージを生成している。ここで、ログデータとは、先に述べたログDB21に保管されたデータである。そして、詳細は後述するが、ログDB21には、入出力メッセージや業務DBの更新前/更新後イメージ等、あるトランザクションに関連したログデータが保管されており、そのログデータを用いて、入出力メッセージの復元又はDB更新のUNDOができるものとする。
また、図中、顧客DBは、契約者IDをキーとするDBの一例である。尚、契約ごとのUNDO/REDOを行うためには、契約ごとに顧客DB更新トランザクションが分割されていることが必要である。
次に、図5に示した業務プロセスにおけるUNDO/REDOの概略動作について説明する。
図6は、UNDO/REDOの概略動作を示した図である。図示するように、リクエスタ10は業務プロセス履歴DBを持ち、プロバイダ20x,20y,20zは、それぞれ、サービス履歴DB21x,21y,21zを持つ(サービス履歴DB21はログDB21と同じ)。そして、UNDO/REDOは、リクエスタ10が業務プロセス履歴に基づいて、UNDO/REDOのプロセスフローを制御することによって行われる。
即ち、リクエスタ10は、図示するように、GBPID「1001」、契約者ID「442」のDB更新を修正して再実行する(修正REDOする)処理を起動する。これにより、リクエスタ10は、「フロー制御」の枠内に示すようなフローに従い、プロバイダ20x,20y,20zにUNDO/REDOを指示する。
即ち、第1ステップとして、リクエスタ10は、修正REDOのGBPIDを採番する。
次に、第2ステップとして、リクエスタ10は、関連する全てのプロバイダ20にUNDOを要求する。ここでは、プロバイダ20x,20y,20zがサービスを提供することにより業務プロセスが実行されているので、プロバイダ20x,20y,20zに対して、UNDOを要求している。尚、暗黙のうちに他のプロバイダ20に派生することがないことを前提とする。つまり、例えば、あるプロバイダ20が別のプロバイダ20にウェブサービスを依頼し、依頼されたプロバイダ20が何らかのDB更新をしたにも関わらず、そのDB更新がなされたことをリクエスタ10が知らない、という状況は生じないものとする。
また、第3ステップとして、リクエスタ10は、GBPID「1001」の保険変更処理の内容を変更し、修正REDOする。
そして、第4、第5ステップとして、リクエスタ10は、GBPID「1001」以降のプロセスのREDOを各プロバイダ20に対して順次要求する。
更に、全てのREDOが完了すると、第6ステップとして、コミットする。
ここで、本実施の形態におけるリクエスタ10が保持するDBの構造について説明する。尚、この例では、UNDO/REDOを契約単位に行うものとし、契約番号をUNDO/REDOのキーとする。
図7(a)は、業務プロセス履歴DB11及び最新GBPIDDB12の構造例を示した図である。
まず、最新GBPIDDB12は、契約者IDと契約番号の組み合わせごとに、最後に成立したGBPIDだけを保管している。例えば、契約者ID「c#1」、契約番号「p#1」に対しては、GBPID「1342」が最後に成立しており、契約者ID「c#1」、契約番号「p#2」に対しては、GBPID「1928」が最後に成立したことが記録されている。図6では、契約者IDごとにUNDO/REDOを行うようこととしたが、図7(a)では、契約番号ごとにUNDO/REDOを行うこととしているため、契約者IDと契約番号の組み合わせごとにGBPIDを記憶するようにしている。尚、図中、契約者ID「c#1」に対する契約番号と、契約者ID「c#2」に対する契約番号とに、同じ「p#1」が記録されているが、これは、特定の種類の保険契約(この場合は、終身保険)の契約番号であることを示しているに過ぎず、契約番号自体が同じであることを意味するものではない。
また、業務プロセス履歴DB11は、業務プロセスの実行ごとの履歴である業務プロセス履歴を記録する。ここで、業務プロセス履歴は、GBPIDをキーとして、入出力メッセージ等を保管する。尚、入力メッセージには、サービスを依頼したプロバイダ20の識別子(例えば、プロバイダ名)も含まれる。また、業務プロセス履歴は、契約者IDと契約番号の組み合わせに対する1つの前の更新を行ったGBPIDも保持する。これが逆方向ポインタとして機能し、全ての業務プロセス履歴を逆順に辿ることができる。尚、現在のGBPIDの1つ前のGBPIDは、最新GBPIDDB12から入手できる。
例えば、契約者ID「c#1」、契約番号「p#1」のレコードは、最後にGBPID「1342」で更新されており、その前にGBPID「1344」で更新されており、更にその前にGBPID「1001」で更新されている。このように、処理順序は、最新GBPIDDB12からの逆方向チェインによって保証される。
但し、上述したGBPID「1342」とGBPID「1344」の関係のように、GBPIDは逆転することもある。つまり、あるレコードが、あるGBPIDで更新された後に、それよりも小さなGBPIDで更新されることが起こり得る。
図7(b)に、このときの状況について示す。
図において、上段はGBPID「1342」のライフサイクルを、下段はGBPID「1344」のライフサイクルを示す。この場合、GBPID「1344」で先に契約DBの契約番号「p#1」のレコードが更新されている。これにより、図中、太矢印で示す期間は、前述したGBPIDの排他制御機能により、契約DBの契約番号「p#1」のレコードが更新されないことが保証される。即ち、GBPID「1344」についてコミットされた後に、GBPID「1342」で契約DBの契約番号「p#1」のレコードが更新される。従って、GBPIDは逆転しているものの、逆方向チェインが正しい処理順序を示している。尚、ここでは、各業務プロセス履歴に1つ前のGBPIDを含めたが、1つ後のGBPIDを含めるようにしてもよい。
また、本実施の形態におけるプロバイダ20が保持するDBの構造について説明する。尚、この例でも、UNDO/REDOを契約単位に行うものとし、契約番号をUNDO/REDOのキーとする。また、ここでは、ウェブサービスの依頼時に受け渡されたGBPIDをそのままログIDとしても用いるものとする。
図8(a)は、ログDB21及び最新ログIDDB22の構造例を示した図である。
まず、最新ログIDDB22は、契約者IDと契約番号の組み合わせごとに、最後に成立したログIDだけを保管している。例えば、契約者ID「c#1」、契約番号「p#1」に対しては、ログID「1342」が最後に成立しており、契約者ID「c#1」、契約番号「p#2」に対しては、ログID「1928」が最後に成立したことが記録されている。但し、顧客DBについては、契約者IDごとに、最後に成立したログIDを保管する。
また、ログDB21は、業務DBの更新ごとのログであるログデータを記録する。ここで、ログデータは、ログIDをキーとして、入出力メッセージ、DB更新前イメージ、DB更新後イメージ等を保管する。また、ログDB21は、契約者IDと契約番号の組み合わせに対する1つの前のDB更新に関するログIDも保持する。これが逆方向ポインタとして機能し、全てのログデータを逆順に辿ることができる。尚、現在のログIDの1つ前のログIDは、最新ログIDDB22から入手できる。
例えば、契約者ID「c#1」、契約番号「p#1」のレコードは、最後にログID「1342」のログデータに示されるように更新されており、その前にログID「1344」のログデータに示されるように更新されており、その前にログID「1001」のログデータに示されるように更新されている。このように、処理順序は、最新ログIDDB22からの逆方向チェインによって保証される。
但し、上述したログID「1342」ログID「1344」の関係のように、ログIDは逆転することもある。つまり、あるレコードの更新が、あるログIDのログデータとして記録された後に、それよりも小さなログIDのログデータとして記録されることが起こり得る。
図8(b)に、このときの状況について示す。
図において、上段はGBPID「1342」のライフサイクルを、下段はGBPID「1344」のライフサイクルを示す。この場合、GBPID「1344」で先に契約DBの契約番号「p#1」のレコードが更新されている。これにより、図中、太矢印で示す期間は、前述したGBPIDの排他制御機能により、契約DBの契約番号「p#1」のレコードが更新されないことが保証される。即ち、GBPID「1344」についてコミットされた後に、GBPID「1342」で契約DBの契約番号「p#1」のレコードが更新される。従って、GBPIDが逆転し、その結果、ログIDも逆転しているものの、逆方向チェインが正しい処理順序を示している。尚、ここでは、ログデータに1つ前のログIDを含めたが、1つ後のログIDを含めるようにしてもよい。
ところで、上記説明では、プロバイダ20がリクエスタ10からGBPIDを受け取った時点で、GBPIDとログIDが同じになるように、ログIDを決めるものとした。この場合、GBPIDが大きくなると、ログIDも大きくなる。これに対し、ログDB21を更新する時点でログIDを採番するような構成も考えられる。この場合、GBPID「1342」に対応するログIDは、GBPID「1344」に対応するログIDよりも後で採番されるため大きくなる。つまり、ログIDは逆転していないことになるので、上記の「ログIDは逆転することもある」というのは、一般的には、「ログDB21を更新する順序はGBPIDの昇順にならないこともある」ということを意味している。尚、このように、ログIDとしてGBPIDと異なる値を用いても、GBPIDがDB更新後イメージに含まれているため、各プロバイダ20はログDB21から、DB更新を行った業務プロセスのGBPIDを容易に把握できる。
また、ログDB21には、バッチ処理の場合も、ログデータを記録する必要がある。但し、バッチ処理に対しては、GBPIDは取得されていない。従って、REDOを行えるように、入力データを入力メッセージの代わりにログデータに含める必要がある。
以下、本実施の形態における業務プロセス実行制御装置100について更に詳細に説明する。尚、以降の説明では、UNDO/REDOの対象を「オブジェクト」と称し、オブジェクトを一意に識別する識別情報を「オブジェクトID」と称する。つまり、図7、8における契約番号は、この「オブジェクトID」の一例である。
まず、本実施の形態における業務プロセス実行制御装置100の機能構成について説明する。
図9は、リクエスタ10及びプロバイダ20の機能構成例を示したブロック図である。
図示するように、まず、リクエスタ10は、業務プロセス履歴DB11と、最新GBPIDDB12と、履歴管理部13と、制御部14と、プロバイダ特定部15とを備える。また、UNDO情報生成部17と、REDO情報生成部18と、送信部41と、受信部42とを備える。
業務プロセス履歴DB11は、図7(a)で説明したように、業務プロセスの実行ごとの履歴である業務プロセス履歴を記録したデータベースである。本実施の形態では、処理の要求先のプロバイダを示す第1の履歴情報の一例として、業務プロセス履歴を用い、第1の履歴情報を記憶する第1の記憶部の一例として、業務プロセス履歴DB11を設けている。
最新GBPIDDB12は、図7(a)で説明したように、オブジェクトごとに、そのオブジェクトを最後に更新した業務プロセスのGBPIDを記録したデータベースである。
履歴管理部13は、業務プロセス履歴DB11及び最新GBPIDDB12を管理する。
制御部14は、リクエスタ10の全体動作を制御する。
プロバイダ特定部15は、ウェブサービスを依頼するに当たり、ウェブサービスを依頼すべきプロバイダ20を業務プロセス定義に基づいて特定する。また、UNDO/REDOに当たり、ウェブサービスを依頼したプロバイダ20を業務プロセス履歴に基づいて特定する。本実施の形態では、処理の要求先のプロバイダを特定する特定部の一例として、プロバイダ特定部15を設けている。
UNDO情報生成部17は、UNDOに必要となる情報を生成する。本実施の形態では、処理の取消しを指示する取消し指示部の一例として、UNDO情報生成部17を設けている。
REDO情報生成部18は、REDOに必要となる情報を生成する。本実施の形態では、処理の再実行を指示する再実行指示部の一例として、REDO情報生成部18を設けている。
送信部41は、ウェブサービスやUNDO/REDOの依頼をプロバイダ20に送信する。また、GBPIDの採番や状態の変更の要求をGBPIDサーバ30に送信する。本実施の形態では、処理の要求を第3の識別情報と共に送信する送信部の一例として、送信部41を設けている。
受信部42は、ウェブサービスが成功したかどうかをプロバイダ20から受信する。また、採番されたGBPIDをGBPIDサーバ30から受信する。本実施の形態では、第3の識別情報を取得する取得部の一例として、受信部42を設けている。
また、プロバイダ20は、ログDB21と、最新ログIDDB22と、履歴管理部23と、制御部24と、ログID取得部25と、DB更新部26とを備える。また、UNDO処理部27と、REDO処理部28と、送信部51と、受信部52とを備える。
ログDB21は、図8(a)で説明したように、業務DBの更新ごとのログであるログデータを記録したデータベースである。本実施の形態では、処理を行う前の状態を示す第2の履歴情報の一例として、ログデータを用い、第2の履歴情報を記憶する第2の記憶部の一例として、ログDB21を設けている。
最新ログIDDB22は、図8(a)で説明したように、オブジェクトごとに、そのオブジェクトの最後の更新を記録したログデータのログIDを記録したデータベースである。
履歴管理部23は、ログDB21及び最新ログIDDB22を管理する。
制御部24は、プロバイダ20の全体動作を制御する。
ログID取得部25は、業務DBの更新を記録するログデータの識別情報であるログIDを取得する。
DB更新部26は、リクエスタ10からのウェブサービスの依頼に応じて業務DBを更新する。その際、更新対象のDBレコードにGBPIDを埋め込む。本実施の形態では、他のトランザクションを識別する第4の識別情報が処理の対象に関連付けて記憶され、他のトランザクションが処理を完了した旨が第4の識別情報に関連付けて記憶されている場合に、処理を行い、第3の識別情報を処理の対象に関連付けて記憶し、処理が終了すると、一のトランザクションが処理を完了した旨を第3の識別情報に関連付けて記憶する処理部の一例として、DB更新部26を設けている。
UNDO処理部27は、リクエスタ10からの要求に応じてUNDOを実行する。本実施の形態では、処理を取り消す取消し部の一例として、UNDO処理部27を設けている。
REDO処理部28は、リクエスタ10からの要求に応じてREDOを実行する。本実施の形態では、処理を再実行する再実行部の一例として、REDO処理部28を設けている。
送信部51は、ウェブサービスが成功したかどうかをリクエスタ10に送信する。また、GBPIDの状態の問い合わせメッセージをGBPIDサーバ30に送信する。
受信部52は、ウェブサービスやUNDO/REDOの依頼をリクエスタ10から受信する。また、GBPIDの状態の問い合わせ結果をGBPIDサーバ30から受信する。本実施の形態では、処理の要求を第3の識別情報と共に受信する受信部の一例として、受信部52を設けている。
次に、本実施の形態における業務プロセス実行制御装置100の動作について説明する。尚、この動作の説明においては、ログIDとして、GBPIDと異なる値を用いるものとする。
まず、業務プロセスの要求を処理するときのリクエスタ10の動作について説明する。
図10は、このときのリクエスタ10の動作例を示したフローチャートである。
リクエスタ10では、まず、受信部42が、エンドユーザからのオブジェクトIDを指定した業務プロセスの実行要求を、例えば、図示しないHTTPサーバを介して受信し、制御部14に伝える(ステップ101)。そして、制御部14は、GBPIDの取得要求の送信を送信部41に指示する。すると、送信部41は、GBPIDを採番してその状態を「実行中」とする旨の要求をGBPIDサーバ30に送信する(ステップ102)。これにより、GBPIDサーバ30は、GBPIDを採番し、同期点管理DB31にそのGBPIDの状態情報として「実行中」を記録する。一方、受信部42は、GBPIDサーバ30からGBPIDを受信して制御部14に受け渡す(ステップ103)。
次に、制御部14は、プロバイダ特定部15に対して、ウェブサービスの依頼先のプロバイダ20を特定するよう指示する。すると、プロバイダ特定部15は、業務プロセス定義に基づいて、ウェブサービスの依頼先のプロバイダ20を特定し、プロバイダ名を制御部14に受け渡す(ステップ104)。そして、制御部14は、受信部42から受け取ったGBPIDと、先に受信部42から受け取ったオブジェクトIDと、プロバイダ特定部15から受け取ったプロバイダ名と、ウェブサービスの依頼内容である入力メッセージとを送信部41に伝えて、ウェブサービスの依頼の送信を指示する。すると、送信部41は、GBPIDとオブジェクトIDと入力メッセージとを含むウェブサービスの依頼を、指定されたプロバイダ名のプロバイダ20に送信する(ステップ105)。
その後、リクエスタ10では、受信部42がプロバイダ20からの情報を受信し、これを制御部14に伝える。そして、制御部14は、その情報がウェブサービスの成功を示すものかどうかを判定する(ステップ106)。
ここで、情報がウェブサービスの成功を示すものであれば、制御部14は、履歴管理部13に対して、業務プロセス履歴DB11及び最新GBPIDDB12の更新を指示する。このとき、制御部14は、履歴管理部13に対して、受信部42がステップ103で受信したGBPIDと、ウェブサービスの対象のオブジェクトIDと、プロバイダ20との間で交換した入力/出力メッセージと、プロバイダ特定部15がステップ104で取得したプロバイダ名とを受け渡しておく。すると、履歴管理部13は、次のような動作を行う。
即ち、まず、履歴管理部13は、最新GBPIDDB12を参照して、オブジェクトIDに対応付けられたGBPIDを取得する(ステップ107)。尚、ステップ103で取得したGBPIDが最新のGBPIDなので、このステップ107で取得されるGBPIDは1つ前のGBPIDということになる。
次に、履歴管理部13は、制御部14から渡されたGBPIDと、同じく制御部14から渡されたオブジェクトIDと、ステップ107で取得した1つ前のGBPIDと、入力/出力メッセージと、制御部14から渡されたプロバイダ名とを対応付けて、業務プロセス履歴DB11に記録する(ステップ108)。そして、制御部14に制御を戻す。
その後、制御部14は、業務プロセス定義に基づいて、依頼すべきウェブサービスが他にあるかどうかを判定する(ステップ109)。そして、他にあると判定されれば、ステップ104に戻って、同様の処理を繰り返す。また、他にないと判定されれば、依頼したウェブサービスが全て成功したことになるので、履歴管理部13にGBPIDを渡して最新GBPIDDB12の更新を指示する。すると、履歴管理部13は、制御部14から渡されたGBPIDを、1つ前のGBPIDに代えて、最新GBPIDDB12に記録する(ステップ110)。そして、制御部14は、GBPIDのコミット状態への変更指示の送信を送信部41に指示する。すると、送信部41は、GBPIDをコミット状態にする旨の指示をGBPIDサーバ30に送信する(ステップ113)。
一方、ステップ106で、情報がウェブサービスの失敗を示すものであれば、制御部14は、GBPIDのロールバック状態への変更指示及び更新取消の送信を送信部41に指示する。すると、送信部41は、GBPIDをロールバック状態にする旨の指示を、GBPIDサーバ30に指示する(ステップ111)。そして、このGBPIDに関してこれまでに行った更新を取り消すよう、該当するプロバイダ20に指示する(ステップ112)。
次に、業務プロセスの要求を処理するときのプロバイダ20の動作について説明する。
図11は、このときのプロバイダ20の動作例を示したフローチャートである。
プロバイダ20では、まず、受信部52が、リクエスタ10から、GBPIDとオブジェクトIDとを伴うウェブサービスの依頼を受信し、制御部24に伝える(ステップ201)。そして、制御部24は、ログID取得部25に対してログIDの取得を指示し、ログID取得部25が、プロバイダ20内で一意に採番されたログIDを取得して制御部24に受け渡す(ステップ202)。
次に、制御部24は、DBを更新する場合は、更新対象の業務DBのレコードに埋め込まれたGBPIDの状態の判定指示の送信を送信部51に指示する。すると、送信部51は、業務DBのレコードに埋め込まれたGBPIDの状態をGBPIDサーバ30に問い合わせ、問い合わせ結果を制御部24に伝える(ステップ203)。そして、制御部24は、送信部51から受け取った問い合わせ結果に基づいて、GBPIDがコミット状態であるかどうかを判定する(ステップ204)。
ここで、GBPIDがコミット状態であると判定されれば、業務DBのレコードは更新可能なので、制御部24は、受信部52から受け取ったGBPIDをDB更新部26に渡して、業務DBのレコードの更新を指示する。すると、DB更新部26は、次のような動作を行う。
即ち、まず、DB更新部26は、業務DBのレコードをロックする(ステップ205)。次に、受信部52から渡されたGBPIDをそのレコードに埋め込んで、ウェブサービスの実行に基づく業務DBの更新を行う(ステップ206)。そして、制御部24に業務DBの更新前イメージ/更新後イメージを返す。
その後、制御部24は、履歴管理部23に対して、ログDB21及び最新ログIDDB22の更新を指示する。このとき、制御部24は、履歴管理部23に対して、ログID取得部25がステップ202で取得したログIDと、受信部52から渡されたオブジェクトIDと、同じく受信部52から渡されたGBPIDと、DB更新部26から渡された更新前/更新後イメージとを受け渡しておく。すると、履歴管理部23は、次のような動作を行う。
即ち、まず、履歴管理部23は、最新ログIDDB22を参照して、オブジェクトIDに対応付けられたGBPIDを取得する(ステップ207)。尚、ステップ202で取得したログIDが最新のログIDなので、このステップ207で取得されるログIDは1つ前のログIDということになる。
次に、履歴管理部23は、制御部24から渡されたログIDと、同じく制御部24から渡されたGBPIDと、同じく制御部24から渡されたオブジェクトIDと、ステップ207で取得した1つ前のGBPIDと、制御部24から渡された更新前/更新後イメージとを対応付けて、ログDB21に記録する(ステップ208)。そして、制御部24に制御を戻す。
その後、制御部24は、ウェブサービスの内容に基づいて、更新すべき業務DBが他にあるかどうかを判定する(ステップ209)。そして、他にあると判定されれば、ステップ203に戻って、同様の処理を繰り返す。また、他にないと判定されれば、更新すべき業務DBを全て更新したことになるので、履歴管理部23にログIDを渡して最新ログIDDB22の更新を指示する。すると、履歴管理部23は、制御部24から渡されたログIDを、1つ前のログIDに代えて、最新ログIDDB22に記録する(ステップ210)。そして、制御部24は、ウェブサービスをコミットし、業務DBのレコードにかけていたロックを開放する(ステップ211)。そして、制御部24は、ウェブサービスの正常終了通知の送信を送信部51に指示し、送信部51が、ウェブサービスの正常終了をリクエスタ10に通知する(ステップ212)。
一方、ステップ204で、GBPIDがコミット状態でないと判定されれば、制御部24は、ウェブサービスの異常終了通知の送信を送信部51に指示し、送信部51が、ウェブサービスの異常終了をリクエスタ10に通知する(ステップ213)。
次いで、特定のGBPIDで実行された業務プロセスを修正REDOするときのリクエスタ10の動作について説明する。
図12は、このときのリクエスタ10の動作例を示したフローチャートである。
リクエスタ10では、まず、受信部42が、エンドユーザからのオブジェクトID、GBPID、修正REDO内容を伴う修正REDO要求を、例えば、図示しないHTTPサーバを介して受信し、制御部14に伝える(ステップ121)。そして、制御部14は、履歴管理部13にオブジェクトIDを伝えて、そのオブジェクトIDで特定されるオブジェクトに関して成立した最新のGBPIDの取得を指示する。すると、履歴管理部13は、最新GBPIDDB12を参照して、指定されたオブジェクトIDに対応する最新のGBPIDを特定する(ステップ122)。
次に、履歴管理部13は、ステップ122で特定したGBPIDを有する業務プロセス履歴を、業務プロセス履歴DB11から読み出し、制御部14に受け渡す(ステップ123)。すると、制御部14は、受け渡された業務プロセス履歴が、修正REDO要求で指定されたGBPIDを有するものかどうかを判定する(ステップ124)。
ここで、修正REDO要求で指定されたGBPIDを有するものでないと判定された場合、その業務プロセス履歴は、修正REDOすべきGBPIDの業務プロセスの後に実行された業務プロセスの履歴である。従って、制御部14は、読み出した業務プロセス履歴をUNDO情報生成部17及びREDO情報生成部18に渡して、UNDO情報生成部17にはUNDOを行うための情報の生成を指示し、REDO情報生成部18にはREDOを行うための情報の生成を指示する。すると、UNDO情報生成部17及びREDO情報生成部18は、次のような動作を行う。
即ち、まず、UNDO情報生成部17は、制御部14から渡された業務プロセス履歴からUNDOを依頼すべきプロバイダ20のプロバイダ名を取得し、UNDO配列に追加する(ステップ125)。また、REDO情報生成部18は、制御部14から渡された業務プロセス履歴からGBPID、オブジェクトID、入力メッセージを取得し、REDO配列の先頭に記憶する(ステップ126)。そして、制御部14に制御を戻す。
その後、制御部14は、業務プロセス履歴を参照して、1つ前のGBPIDを特定する(ステップ127)。そして、GBPIDが特定できたかどうかを判定する(ステップ128)。
その結果、1つ前のGBPIDを特定できたと判定された場合、ステップ123に戻り、その特定されたGBPIDについて、同様の処理を繰り返す。
一方、1つ前のGBPIDを特定できなかったと判定された場合、業務プロセス履歴DB11に記録されている最も古いGBPIDの業務プロセス履歴に達したことになるので、修正REDOを行えない旨の情報の送信を送信部41に指示し、送信部41が、その旨の情報を例えばHTTPサーバを介して、エンドユーザに送信する(ステップ129)。
また、ステップ124で、修正REDO要求で指定されたGBPIDを有するものであると判定された場合、その業務プロセス履歴は、修正REDOすべきGBPIDの業務プロセス履歴である。従って、制御部14は、読み出した業務プロセス履歴をUNDO情報生成部17に渡して、UNDOを行うための情報の生成を指示する。すると、UNDO情報生成部17は、制御部14から渡された業務プロセス履歴からUNDOを依頼すべきプロバイダ20のプロバイダ名を取得し、UNDO配列に追加する(ステップ130)。そして、制御部14に制御を戻す。
その後、制御部14は、UNDO配列にプロバイダ名が含まれる全てのプロバイダ20に対して、修正REDO対象のGBPIDと、オブジェクトIDとを指定して、UNDO依頼を行うよう、送信部41に指示する。すると、送信部41は、指示されたプロバイダ20に対して、修正対象のGBPIDと、オブジェクトIDとを指定して、UNDO依頼を送信する(ステップ131)。また、制御部14は、ステップ121で受信した修正REDO内容に基づく修正REDO依頼の送信を送信部41に指示する。すると、送信部41は、該当するプロバイダ20に修正REDO依頼を送信する(ステップ132)。また、制御部14は、REDO配列の先頭から順にプロバイダ20にREDOを依頼するよう、送信部41に指示する。すると、送信部41は、REDO配列に従い、該当するプロバイダ20にREDO依頼を送信する(ステップ133)。
次に、特定のGBPIDで実行された業務プロセスを修正REDOするときのプロバイダ20の動作について説明する。このときのプロバイダ20の動作は、UNDO依頼を受けた場合と、修正REDO依頼を受けた場合と、REDO依頼を受けた場合とで異なるので、これらを分けて説明する。
まず、リクエスタ10からUNDO依頼を受けた場合の動作について説明する。
図13は、UNDO依頼を受けたときのプロバイダ20の動作例を示したフローチャートである。
プロバイダ20では、まず、受信部52が、リクエスタ10から、修正REDO対象のGBPIDとオブジェクトIDとを伴うUNDO依頼を受信し、制御部24に伝える(ステップ221)。そして、制御部24は、履歴管理部23にオブジェクトIDを伝えて、そのオブジェクトIDで特定されるオブジェクトに関して成立した最新のログIDの取得を指示する。すると、履歴管理部23は、最新ログIDDB22を参照して、指定されたオブジェクトIDに対応する最新のログIDを特定する(ステップ222)。
次に、履歴管理部23は、ステップ222で特定したログIDを有するログデータを、ログDB21から読み出し、制御部24に受け渡す(ステップ223)。すると、制御部24は、受け渡されたログデータが、UNDO依頼で指定されたGBPIDを有するものかどうかを判定する(ステップ224)。
ここで、UNDO依頼で指定されたGBPIDを有するものでないと判定された場合、そのログデータは、修正REDOすべきGBPIDの業務プロセスの後に実行された業務プロセスに基づくログデータである。従って、制御部24は、読み出したログデータをUNDO処理部27に渡して、UNDO処理を指示する。すると、UNDO処理部27は、次のような動作を行う。
即ち、まず、制御部24から渡されたログデータから更新前イメージを取得し、指定されたオブジェクトIDで特定されるオブジェクト、つまり、更新対象の業務DBのレコードを更新前イメージで置き換える(ステップ225)。また、ログデータから入力メッセージを取得し、これを入力メッセージ配列の先頭に記憶する(ステップ226)。そして、制御部24に制御を戻す。
その後、制御部24は、ログデータを参照して、1つ前のログIDを特定する(ステップ227)。そして、ログIDが特定できたかどうかを判定する(ステップ228)。
その結果、1つ前のログIDを特定できたと判定された場合、ステップ223に戻り、その特定されたログIDについて、同様の処理を繰り返す。
一方、1つ前のログIDを特定できなかったと判定された場合、ログDB21に記録されている最も古いログIDのログデータに達したことになるので、UNDO処理を行えない旨の情報の送信を送信部51に指示し、送信部51が、その旨の情報をリクエスタ10に送信する(ステップ229)。
また、ステップ224で、UNDO依頼で指定されたGBPIDを有するものであると判定された場合、そのログデータは、修正REDOすべきGBPIDの業務プロセスに基づくログデータである。従って、制御部24は、読み出したログデータをUNDO処理部27に渡して、UNDO処理を指示する。すると、UNDO処理部27は、制御部24から渡されたログデータから更新前イメージを取得し、指定されたオブジェクトIDで特定されるオブジェクト、つまり、更新対象の業務DBのレコードを更新前イメージで置き換える(ステップ230)。但し、この場合、REDO処理は、リクエスタ10から別途送られてくる修正REDO依頼に応じて行うので、REDOのための準備処理は行わずに、処理を終了する。
次に、リクエスタ10から修正REDO依頼を受けた場合であるが、この場合のプロバイダ20の動作は、通常のウェブサービス依頼に応じて行われる動作と変わらないので、ここでの詳細な説明は省略する。但し、修正REDOは、現在の日付ではなく、過去の日付で実行する必要がある。
次いで、リクエスタ10からREDO依頼を受けた場合の動作について説明する。
図14は、REDO依頼を受けたときのプロバイダ20の動作例を示したフローチャートである。
プロバイダ20では、まず、受信部52が、リクエスタ10から、GBPID、オブジェクトID、入力メッセージを伴うREDO依頼を受信し、制御部24に伝える(ステップ241)。そして、制御部24は、図13に示したUNDO処理において生成した入力メッセージ配列を先頭から参照する(ステップ242)。但し、入力メッセージ配列に含まれるメッセージのうち、既にREDO処理に用いられたものは、入力メッセージ配列から削除されているものとする。この状態で、制御部24は、入力メッセージ配列の先頭に、ステップ241で受信した入力メッセージよりも古いGBPIDの入力メッセージがあるかどうかを判定する(ステップ243)。
その結果、古いGBPIDの入力メッセージがなければ、制御部24は、REDO依頼に含まれる入力メッセージをREDO処理部28に渡してREDO処理を指示する。すると、REDO処理部28は、制御部24から渡された入力メッセージを用いてREDO処理を行う(ステップ245)。
一方、古いGBPIDの入力メッセージがあれば、まず、制御部24は、入力メッセージ配列に含まれる入力メッセージをREDO処理部28に渡してREDO処理を指示する。すると、REDO処理部28は、制御部24から渡された入力メッセージを用いてREDO処理を行う(ステップ244)。その後、制御部24は、REDO依頼に含まれる入力メッセージをREDO処理部28に渡してREDO処理を指示する。すると、REDO処理部28は、制御部24から渡された入力メッセージを用いてREDO処理を行う(ステップ245)。
尚、上記説明では、ログDB21及び最新ログIDDB22を更新する際、各DBのレコードにGBPIDを埋め込むかどうかには言及しなかったが、ログDB21のレコードにGBPIDを埋め込む必要はない。但し、最新ログIDDB22のレコードには、他の業務DBと同様に、GBPIDを埋め込むようにしてもよい。
また、本実施の形態を実装するに当たっては、REDOの処理がプロバイダ20内に閉じて、他の(プロバイダ20の)処理を起動しないようなアプリケーションの構造をとる必要がある。
ところで、本実施の形態では、各プロバイダ20が提供する処理として、DB更新を想定した。しかしながら、各プロバイダ20が提供する処理をDB更新以外にまで拡張しても、本実施の形態は実現可能である。
以上述べたように、本実施の形態では、リクエスタが、業務プロセス履歴を記録し、各プロバイダが、DB更新のログデータを記録し、各プロバイダが、ログデータに基づいてUNDOを実行し、リクエスタが、業務プロセス履歴に基づいて順次業務プロセスのREDOを実行するようにした。これにより、複数のDB更新を含むウェブサービスを組み合わせて1つの業務プロセスを実現するアプリケーションにおいて、UNDO/REDOの実装が容易になった。
最後に、本実施の形態を適用するのに好適なコンピュータのハードウェア構成について説明する。図15は、このようなコンピュータのハードウェア構成の一例を示した図である。図示するように、コンピュータは、演算手段であるCPU(Central Processing Unit)90aと、M/B(マザーボード)チップセット90bを介してCPU90aに接続されたメインメモリ90cと、同じくM/Bチップセット90bを介してCPU90aに接続された表示機構90dとを備える。また、M/Bチップセット90bには、ブリッジ回路90eを介して、ネットワークインターフェイス90fと、磁気ディスク装置(HDD)90gと、音声機構90hと、キーボード/マウス90iと、フレキシブルディスクドライブ90jとが接続されている。
尚、図15において、各構成要素は、バスを介して接続される。例えば、CPU90aとM/Bチップセット90bの間や、M/Bチップセット90bとメインメモリ90cの間は、CPUバスを介して接続される。また、M/Bチップセット90bと表示機構90dとの間は、AGP(Accelerated Graphics Port)を介して接続されてもよいが、表示機構90dがPCI Express対応のビデオカードを含む場合、M/Bチップセット90bとこのビデオカードの間は、PCI Express(PCIe)バスを介して接続される。また、ブリッジ回路90eと接続する場合、ネットワークインターフェイス90fについては、例えば、PCI Expressを用いることができる。また、磁気ディスク装置90gについては、例えば、シリアルATA(AT Attachment)、パラレル転送のATA、PCI(Peripheral Components Interconnect)を用いることができる。更に、キーボード/マウス90i、及び、フレキシブルディスクドライブ90jについては、USB(Universal Serial Bus)を用いることができる。
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム(装置又は機器)、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ(CD−ROM)、コンパクトディスク−リード/ライト(CD−R/W)及びDVDが含まれる。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
本発明の実施の形態における業務プロセス実行制御装置の概略構成を示した図である。 本発明の実施の形態の業務プロセス実行制御装置における業務プロセス実行時の概略動作を示した図である。 本発明の実施の形態の業務プロセス実行制御装置における業務プロセス実行時の概略動作を示した図である。 本発明の実施の形態の業務プロセス実行制御装置における業務プロセス実行時の概略動作を示した図である。 本発明の実施の形態で用いる保険契約の例について説明するための図である。 本発明の実施の形態のUNDO/REDO時の概略動作を示した図である。 本発明の実施の形態におけるリクエスタが保持するDBの例を示した図である。 本発明の実施の形態におけるプロバイダが保持するDBの例を示した図である。 本発明の実施の形態におけるリクエスタ及びプロバイダの機能構成例を示したブロック図である。 本発明の実施の形態におけるリクエスタの業務プロセス実行時の動作例を示したフローチャートである。 本発明の実施の形態におけるプロバイダの業務プロセス実行時の動作例を示したフローチャートである。 本発明の実施の形態におけるリクエスタの修正REDO時の動作例を示したフローチャートである。 本発明の実施の形態におけるプロバイダのUNDO時の動作例を示したフローチャートである。 本発明の実施の形態におけるプロバイダのREDO時の動作例を示したフローチャートである。 本発明の実施の形態を適用可能なコンピュータのハードウェア構成を示した図である。
符号の説明
10…リクエスタ、20a,20b,20c…プロバイダ、30…GBPIDサーバ

Claims (9)

  1. 複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置であって、
    前記リクエスタは、
    前記複数のトランザクションの各々における処理の要求先のプロバイダを示す第1の履歴情報を記憶する第1の記憶部と、
    前記複数のトランザクションのうちの特定の対象について実行された特定のトランザクションの再実行の要求があると、前記第1の履歴情報に基づいて、当該特定のトランザクションよりも後に当該特定の対象について実行されたトランザクションの各々における処理の要求先のプロバイダを特定する特定部と、
    前記特定部により特定された前記要求先のプロバイダに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の取消しを指示する取消し指示部と
    前記特定部により特定された前記要求先のプロバイダに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の再実行を指示する再実行指示部と
    を備え、
    前記複数のプロバイダの各々は、
    前記複数のトランザクションの各々における前記リクエスタの要求に応じて処理を行う前の状態を示す第2の履歴情報を記憶する第2の記憶部と、
    前記取消し指示部により前記取消しが指示されると、前記第2の履歴情報に基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における処理を取り消す取消し部と
    前記再実行指示部により前記再実行が指示されると、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における前記リクエスタの要求に応じて行った処理と、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における当該処理以外の処理とを、これらの処理の間の順序関係が損なわれないように再実行する再実行部と
    を備えた、装置。
  2. 前記第1の記憶部は、前記複数のトランザクションの各トランザクションに関する前記第1の履歴情報を、当該各トランザクションを識別する第1の識別情報と、当該各トランザクションの前及び後の何れかに同じ対象について実行されたトランザクションを識別する第2の識別情報とに関連付けて記憶し、
    前記特定部は、前記第1の識別情報と前記第2の識別情報とに基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションを特定する、請求項1の装置。
  3. 前記リクエスタは、
    前記複数のトランザクションのうちの一のトランザクションを識別する第3の識別情報を取得する取得部と、
    前記一のトランザクションにおける処理の要求を前記第3の識別情報と共に前記要求先のプロバイダに送信する送信部と
    を更に備え、
    前記複数のプロバイダの各々は、
    前記処理の要求を前記第3の識別情報と共に前記リクエスタから受信する受信部と、
    他のトランザクションを識別する第4の識別情報が前記処理の対象に関連付けて記憶され、当該他のトランザクションが当該処理を完了した旨が当該第4の識別情報に関連付けて記憶されている場合に、当該処理を行い、前記第3の識別情報を当該処理の対象に関連付けて記憶し、当該処理が終了すると、前記一のトランザクションが当該処理を完了した旨を当該第3の識別情報に関連付けて記憶する処理部と
    を更に備えた、請求項2の装置。
  4. 前記第1の記憶部は、前記複数のトランザクションの各トランザクションに関する前記第1の履歴情報を、当該各トランザクションを識別し、かつ、当該各トランザクションの同じ対象についての順序を特定可能な識別情報に関連付けて記憶し、
    前記特定部は、前記識別情報に基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションを特定する、請求項1の装置。
  5. 前記第2の記憶部は、前記複数のトランザクションの各トランザクションに関する前記第2の履歴情報を、当該各トランザクションを識別する第1の識別情報と、当該各トランザクションの前及び後の何れかに同じ対象について実行されたトランザクションを識別する第2の識別情報とに関連付けて記憶し、
    前記再実行部は、前記第1の識別情報と前記第2の識別情報とに基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における前記リクエスタの要求に応じて行った処理と、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における当該処理以外の処理との間の順序関係を特定する、請求項1の装置。
  6. 前記第2の記憶部は、前記複数のトランザクションの各トランザクションに関する前記第2の履歴情報を、当該各トランザクションを識別し、かつ、当該各トランザクションの同じ対象についての順序を特定可能な識別情報に関連付けて記憶し、
    前記再実行部は、前記識別情報に基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における前記リクエスタの要求に応じて行った処理と、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における当該処理以外の処理との間の順序関係を特定する、請求項1の装置。
  7. 前記処理は、前記複数のプロバイダの各々が保持するデータベースを更新する処理であり、
    前記第2の履歴情報は、前記データベースの更新前イメージを含む、請求項1の装置。
  8. 複数のプロバイダとして機能する複数のプロバイダコンピュータにより提供される処理をリクエスタとして機能するリクエスタコンピュータの要求に応じて行う複数のトランザクションの実行を制御する方法であって、
    前記リクエスタコンピュータには、前記複数のトランザクションの各々における処理の要求先のプロバイダコンピュータを示す第1の履歴情報が記憶されており、
    前記複数のプロバイダコンピュータの各々には、前記複数のトランザクションの各々における前記リクエスタコンピュータの要求に応じて処理を行う前の状態を示す第2の履歴情報が記憶されており、
    前記リクエスタコンピュータが、前記複数のトランザクションのうちの特定の対象について実行された特定のトランザクションの再実行の要求があると、前記第1の履歴情報に基づいて、当該特定のトランザクションよりも後に当該特定の対象について実行されたトランザクションの各々における処理の要求先のプロバイダコンピュータを特定するステップと、
    前記リクエスタコンピュータが、特定した前記要求先のプロバイダコンピュータに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の取消しを指示するステップと、
    前記リクエスタコンピュータが、特定した前記要求先のプロバイダコンピュータに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の再実行を指示するステップと、
    前記複数のプロバイダコンピュータの各々が、前記取消しが指示されると、前記第2の履歴情報に基づいて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における処理を取り消すステップと
    前記複数のプロバイダコンピュータの各々が、前記再実行が指示されると、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における前記リクエスタコンピュータの要求に応じて行った処理と、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における当該処理以外の処理とを、これらの処理の間の順序関係が損なわれないように再実行するステップと
    を含む、方法。
  9. 複数のプロバイダにより提供される処理をリクエスタの要求に応じて行う複数のトランザクションの実行を制御する装置であって、
    前記リクエスタは、
    前記複数のトランザクションの各トランザクションの第1のトランザクションIDと、当該各トランザクションの直前に同じ対象について実行されたトランザクションの第2のトランザクションIDと、当該各トランザクションにおける処理の要求先のプロバイダのプロバイダIDとを含む履歴情報を記憶する第1の履歴情報記憶部と、
    同じ対象について最新に実行されたトランザクションの最新トランザクションIDを管理する管理情報を記憶する第1の管理情報記憶部と、
    前記複数のトランザクションのうちの特定の対象について実行された特定のトランザクションの再実行の要求があると、当該特定の対象についての前記最新トランザクションIDを前記第1のトランザクションIDとして含む履歴情報を出発点として、当該特定の対象についての前記第2のトランザクションIDを前記第1のトランザクションIDとして含む履歴情報を、当該特定のトランザクションのトランザクションIDを前記第1のトランザクションIDとして含む履歴情報まで辿りながら、当該特定のトランザクションよりも後に当該特定の対象について実行されたトランザクションの各々における処理の要求先のプロバイダのプロバイダIDを特定する特定部と、
    前記特定部により特定された前記プロバイダIDのプロバイダに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の取消しを指示する取消し指示部と、
    前記特定部により特定された前記プロバイダIDのプロバイダに対して、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々において要求した処理の再実行を指示する再実行指示部と
    を備え、
    前記複数のプロバイダの各々は、
    前記複数のトランザクションの各トランザクションにおける前記リクエスタの要求に応じた処理のログの第1のログIDと、当該処理の直前の同じ対象についての処理のログの第2のログIDと、当該処理を行ったトランザクションの第3のトランザクションIDと、当該処理を行う前の状態を示す状態情報とを含む履歴情報を記憶する第2の履歴情報記憶部と、
    同じ対象についての最新のログの最新ログIDを管理する管理情報を記憶する第2の管理情報記憶部と、
    前記取消し指示部により前記取消しが指示されると、前記特定の対象についての前記最新ログIDを前記第1のログIDとして含む履歴情報を出発点として、前記特定の対象についての前記第2のログIDを前記第1のログIDとして含む履歴情報を、前記特定のトランザクションのトランザクションIDを前記第3のトランザクションIDとして含む履歴情報まで辿りながら、前記状態情報を用いて、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における処理を取り消す取消し部と、
    前記再実行指示部により前記再実行が指示されると、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における前記リクエスタの要求に応じて行った処理と、前記特定のトランザクションよりも後に前記特定の対象について実行されたトランザクションの各々における当該処理以外の処理とを、これらの処理の間の順序関係が損なわれないように再実行する再実行部と
    を備えた、装置。
JP2008107466A 2008-04-17 2008-04-17 トランザクションの実行を制御する装置及び方法 Expired - Fee Related JP5385545B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008107466A JP5385545B2 (ja) 2008-04-17 2008-04-17 トランザクションの実行を制御する装置及び方法
US12/336,485 US8161016B2 (en) 2008-04-17 2008-12-16 Controlling execution of transactions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008107466A JP5385545B2 (ja) 2008-04-17 2008-04-17 トランザクションの実行を制御する装置及び方法

Publications (2)

Publication Number Publication Date
JP2009259009A JP2009259009A (ja) 2009-11-05
JP5385545B2 true JP5385545B2 (ja) 2014-01-08

Family

ID=40564562

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008107466A Expired - Fee Related JP5385545B2 (ja) 2008-04-17 2008-04-17 トランザクションの実行を制御する装置及び方法

Country Status (2)

Country Link
US (1) US8161016B2 (ja)
JP (1) JP5385545B2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8250146B2 (en) * 2008-05-15 2012-08-21 Sap Ag Service adaptation machine
US8924398B2 (en) * 2011-03-23 2014-12-30 Bmc Software, Inc. Log-based DDL generation
JP5721056B2 (ja) * 2011-05-10 2015-05-20 日本電気株式会社 トランザクション処理装置、トランザクション処理方法およびトランザクション処理プログラム
US8484166B2 (en) * 2011-11-03 2013-07-09 Oracle International Corporation Oracle rewind: metadata-driven undo
US9436477B2 (en) 2012-06-15 2016-09-06 International Business Machines Corporation Transaction abort instruction
US9772854B2 (en) * 2012-06-15 2017-09-26 International Business Machines Corporation Selectively controlling instruction execution in transactional processing
US9740549B2 (en) 2012-06-15 2017-08-22 International Business Machines Corporation Facilitating transaction completion subsequent to repeated aborts of the transaction
US8682877B2 (en) 2012-06-15 2014-03-25 International Business Machines Corporation Constrained transaction execution
US8880959B2 (en) 2012-06-15 2014-11-04 International Business Machines Corporation Transaction diagnostic block
US9442737B2 (en) 2012-06-15 2016-09-13 International Business Machines Corporation Restricting processing within a processor to facilitate transaction completion
US10437602B2 (en) 2012-06-15 2019-10-08 International Business Machines Corporation Program interruption filtering in transactional execution
US9384004B2 (en) 2012-06-15 2016-07-05 International Business Machines Corporation Randomized testing within transactional execution
US9361115B2 (en) 2012-06-15 2016-06-07 International Business Machines Corporation Saving/restoring selected registers in transactional processing
US20130339680A1 (en) 2012-06-15 2013-12-19 International Business Machines Corporation Nontransactional store instruction
US9448796B2 (en) 2012-06-15 2016-09-20 International Business Machines Corporation Restricted instructions in transactional execution
US8688661B2 (en) 2012-06-15 2014-04-01 International Business Machines Corporation Transactional processing
US9317460B2 (en) 2012-06-15 2016-04-19 International Business Machines Corporation Program event recording within a transactional environment
US9336046B2 (en) 2012-06-15 2016-05-10 International Business Machines Corporation Transaction abort processing
US9348642B2 (en) 2012-06-15 2016-05-24 International Business Machines Corporation Transaction begin/end instructions
US8966324B2 (en) 2012-06-15 2015-02-24 International Business Machines Corporation Transactional execution branch indications
US9367323B2 (en) 2012-06-15 2016-06-14 International Business Machines Corporation Processor assist facility
CN103226499B (zh) * 2013-04-22 2016-02-24 华为技术有限公司 一种恢复内部存储器中的异常数据的方法及装置
US9588872B2 (en) * 2015-02-20 2017-03-07 Vmware, Inc. Discovery of code paths
US9922074B1 (en) 2015-12-07 2018-03-20 Gravic, Inc. Method of ensuring real-time transaction integrity in the indestructible scalable computing cloud
US10394798B1 (en) 2015-12-07 2019-08-27 Gravic, Inc. Method of ensuring transactional integrity of a system that includes a first subsystem and a second subsystem
US9734190B1 (en) * 2015-12-07 2017-08-15 Gravic, Inc. Method of ensuring real-time transaction integrity
US10452648B1 (en) 2015-12-07 2019-10-22 Gravic, Inc. Method of ensuring transactional integrity of a system that includes a plurality of subsystems, one of which takes an action upon a loss of transactional integrity
US9760598B1 (en) 2015-12-07 2017-09-12 Gravic, Inc. Method of ensuring real-time transaction integrity in the cloud
US11188336B2 (en) * 2015-12-28 2021-11-30 Qualcomm Incorporated Replay of partially executed instruction blocks in a processor-based system employing a block-atomic execution model
JP2021022041A (ja) 2019-07-25 2021-02-18 株式会社リコー 通信端末、通信システム、表示制御方法およびプログラム
US20210357240A1 (en) * 2020-05-15 2021-11-18 Unisys Corporation Virtual processor system and method utilizing discrete component elements

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4878167A (en) * 1986-06-30 1989-10-31 International Business Machines Corporation Method for managing reuse of hard log space by mapping log data during state changes and discarding the log data
JPH0827755B2 (ja) * 1991-02-15 1996-03-21 インターナショナル・ビジネス・マシーンズ・コーポレイション データの単位を高速度でアクセスする方法
JPH06223007A (ja) * 1993-01-22 1994-08-12 Hitachi Ltd 2フェーズコミット制御方法
JP3516362B2 (ja) * 1995-03-01 2004-04-05 富士通株式会社 共有データ処理装置及び共有データ処理システム
JPH09204338A (ja) 1996-01-23 1997-08-05 Tandem Comput Inc 改良された回復方法
JP3672208B2 (ja) * 1996-07-02 2005-07-20 インターナショナル・ビジネス・マシーンズ・コーポレーション 階層化トランザクション処理方法
US6014673A (en) * 1996-12-05 2000-01-11 Hewlett-Packard Company Simultaneous use of database and durable store in work flow and process flow systems
JP2002099510A (ja) * 2000-09-25 2002-04-05 Hitachi Ltd 複数トランザクション処理システム
US20030145103A1 (en) * 2002-01-30 2003-07-31 Jim Pruyne Method and system for providing exactly-once semantics for web-based transaction processing
JP2004110620A (ja) * 2002-09-20 2004-04-08 Hitachi Software Eng Co Ltd Webサービスの動的統合方法およびシステム
JP4286786B2 (ja) 2002-12-18 2009-07-01 富士通株式会社 分散トランザクション処理装置、分散トランザクション処理プログラムおよび分散トランザクション処理方法
JP4254264B2 (ja) * 2003-02-17 2009-04-15 日本電信電話株式会社 Webサービス利用時におけるネットワーク提供方法、システム及びサーバ
US7207034B2 (en) * 2003-06-23 2007-04-17 Microsoft Corporation Undo infrastructure
JP2005078339A (ja) * 2003-08-29 2005-03-24 Nri & Ncc Co Ltd Wsdl文書生成装置および方法
JP4403065B2 (ja) * 2004-12-27 2010-01-20 株式会社C−Grip 情報処理方法及び装置
GB0619644D0 (en) * 2006-10-05 2006-11-15 Ibm Data processing system and method of handling requests

Also Published As

Publication number Publication date
US8161016B2 (en) 2012-04-17
US20090106329A1 (en) 2009-04-23
JP2009259009A (ja) 2009-11-05

Similar Documents

Publication Publication Date Title
JP5385545B2 (ja) トランザクションの実行を制御する装置及び方法
US20230315758A1 (en) Synchronous replication in a distributed storage environment
US9251021B2 (en) Asynchronous replication in a distributed storage environment
US8135986B2 (en) Computer system, managing computer and recovery management method
US7392335B2 (en) Anticipatory changes to resources managed by locks
US8424009B2 (en) Lock resolution for distributed durable instances
CN108021338B (zh) 用于实现两层提交协议的***和方法
US7430740B1 (en) Process group resource manager
JP5012628B2 (ja) メモリデータベース、メモリデータベースシステム及びメモリデータベース更新方法
US11449241B2 (en) Customizable lock management for distributed resources
US20210096957A1 (en) Retention rule compliance of record deletion based on deletion log
US7870557B2 (en) Apparatus, system, and method for autonomously maintaining a single system image in a parallel systems complex
US7418478B1 (en) System and method for application discovery in a computing environment
US10303676B2 (en) Transaction processing apparatus, transaction processing method, and computer-readable recording medium
US9386073B2 (en) Techniques for performing processing for database
US6092084A (en) One system of a multisystem environment taking over log entries owned by another system
US6076095A (en) Method of one system of a multisystem environment taking over log entries owned by another system
Weissman et al. Fault tolerant scheduling in distributed networks
JP2006350411A (ja) 分散データベースリカバリ方法及び同リカバリシステム及び同リカバリプログラム
CN111274221A (zh) 一种大规模集群组件服务版本变更测试***
WO2018056267A1 (ja) データベース管理装置、データベース管理方法、及びコンピュータ読み取り可能な記録媒体
US20230316191A1 (en) Workflow consistency ensuring device, workflow consistency ensuring method, and workflow consistency ensuring program
US7543017B1 (en) Cluster file system node failure file recovery by reconstructing file state
US20210191830A1 (en) Handling failures in distributed data system

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20110117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120904

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121120

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130319

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130627

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20130704

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130910

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20130910

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131004

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees