(57)【特許請求の範囲】
【請求項１】
複数のデータ参照・更新処理から構成されるトランザクションを処理するトランザクション処理装置において、
前記トランザクション内の一処理を親処理とする複数の子処理群の実行履歴を参照するための情報を前記親処理の実行履歴要素として記録し、前記トランザクションの実行履歴を階層的に管理する履歴管理手段と、
前記トランザクション内の処理に予め対応付けられた打消処理を階層的に管理する打消処理管理手段と、
いずれかの処理において障害が発生したときに、その処理を含むトランザクション区間に対応する前記履歴管理手段により階層的に管理された実行履歴を最後尾から辿り、その実行履歴で示される各処理に対して前記打消処理管理手段で予め対応付けられた打消処理を逆順に実行する打消処理手段であって、当該実行された処理に親処理が存在し、かつ、当該親処理に予め対応づけられた打消処理が存在するかどうかを判断し、当該親処理が存在する場合には、当該打消処理により当該親処理の複数の子処理群を一括して打ち消し、当該親処理が存在しない場合には、当該実行された処理に予め対応付けられた打消処理により当該実行された処理を打ち消す打消処理手段と
を具備することを特徴とするトランザクション処理装置。
【請求項２】
前記履歴管理手段は、各処理の実行履歴要素として、各処理の要求メッセージおよび応答メッセージの少なくとも一方を記録することを特徴とする請求項１記載のトランザクション処理装置。
【請求項３】
複数のデータ参照・更新処理から構成されるトランザクションを処理するトランザクション処理装置のトランザクション処理方法において、
前記トランザクション処理装置が、前記トランザクション内の一処理を親処理とする複数の子処理群を参照するための情報を前記親処理の実行履歴要素として記録し、前記トランザクションの実行履歴を階層的に管理する履歴管理ステップと、
前記トランザクション内の処理に予め対応付けられた打消処理を階層的に管理する打消処理管理ステップと、
いずれかの処理において障害が発生したときに、その処理を含むトランザクション区間に対応する前記履歴管理ステップにより階層的に管理された実行履歴を最後尾から辿り、その実行履歴で示される各処理に対して前記打消処理管理ステップで予め対応付けられた打消処理を逆順に実行する打消処理ステップであって、当該実行された処理に親処理が存在し、かつ、当該親処理に予め対応づけられた打消処理が存在するかどうかを判断し、当該親処理が存在する場合には、当該打消処理により当該親処理の複数の子処理群を一括して打ち消し、当該親処理が存在しない場合には、当該実行された処理に予め対応付けられた打消処理により当該実行された処理を打ち消す打消処理ステップと
を具備することを特徴とするトランザクション処理方法。
【請求項４】
前記履歴管理ステップは、各処理の実行履歴要素として、各処理の要求メッセージおよび応答メッセージの少なくとも一方を記録することを特徴とする請求項３記載のトランザクション処理方法
【請求項５】
複数のデータ参照・更新処理から構成されるトランザクションを処理するトランザクション処理装置に適用されるプログラムであって、前記トランザクション処理装置を、
前記トランザクション内の一処理を親処理とする複数の子処理群の実行履歴を参照するための情報を前記親処理の実行履歴要素として記録し、前記トランザクションの実行履歴を階層的に管理する履歴管理手段と、
前記トランザクション内の処理に予め対応付けられた打消処理を階層的に管理する打消処理管理手段と
いずれかの処理において障害が発生したときに、その処理を含むトランザクション区間に対応する前記履歴管理手段により階層的に管理された実行履歴を最後尾から辿り、その実行履歴で示される各処理に対して前記打消処理管理手段で予め対応付けられた打消処理を逆順に実行する打消処理手段であって、当該実行された処理に親処理が存在し、かつ、当該親処理に予め対応づけられた打消処理が存在するかどうかを判断し、当該親処理が存在する場合には、当該打消処理により当該親処理の複数の子処理群を一括して打ち消し、当該親処理が存在しない場合には、当該実行された処理に予め対応付けられた打消処理により当該実行された処理を打ち消す打消処理手段
として機能させるためのプログラム。
【請求項６】
前記履歴管理手段に、各処理の実行履歴要素として、各処理の要求メッセージおよび応答メッセージの少なくとも一方を記録させることを特徴とする請求項 5 記載のプログラム。
【請求項７】
複数のデータ参照・更新処理から構成されるトランザクションを処理するトランザクション処理装置に適用されるプログラムであって、前記トランザクション処理装置を、
前記トランザクション内の一処理を親処理とする複数の子処理群の実行履歴を参照するための情報を前記親処理の実行履歴要素として記録し、前記トランザクションの実行履歴を階層的に管理する履歴管理手段と、
前記トランザクション内の処理に予め対応付けられた打消処理を階層的に管理する打消処理管理手段と
いずれかの処理において障害が発生したときに、その処理を含むトランザクション区間に対応する前記履歴管理手段により階層的に管理された実行履歴を最後尾から辿り、その実行履歴で示される各処理に対して前記打消処理管理手段で予め対応付けられた打消処理を逆順に実行する打消処理手段であって、当該実行された処理に親処理が存在し、かつ、当該親処理に予め対応づけられた打消処理が存在するかどうかを判断し、当該親処理が存在する場合には、当該打消処理により当該親処理の複数の子処理群を一括して打ち消し、当該親処理が存在しない場合には、当該実行された処理に予め対応付けられた打消処理により当該実行された処理を打ち消す打消処理手段
として機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項８】
前記プログラムは、前記履歴管理手段に、各処理の実行履歴要素として、各処理の要求メッセージおよび応答メッセージの少なくとも一方を記録させることを特徴とする請求項７記載のコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、処理手順を記述したシナリオに従って、一連の複数の処理から構成されるトランザクションを処理するトランザクション処理装置、同装置のトランザクション処理方法、トランザクション処理プログラムおよび同プログラムを記録したコンピュータ読み取り可能な記録媒体に係り、特に、たとえば業務レベル等でのデータの一貫性を確保するための打消処理を効率的に実行することを可能としたトランザクション処理装置、同装置のトランザクション処理方法、トランザクション処理プログラムおよび同プログラムを記録したコンピュータ読み取り可能な記録媒体に関する。
【０００２】
【従来の技術】
近年、コンピュータの処理能力の向上やネットワーク環境の整備等に伴い、様々な業種で数多くの業務処理が電算化されている。そして、この業務処理の電算化に関し、データの更新を伴う一連の不可分な処理を実行する技術として、ＡＣＩＤベースのトランザクションが広く知られている。
【０００３】
このＡＣＩＤトランザクションは、該当リソースに対するロックを基本とした同期的なトランザクション処理が適用領域である。したがって、処理効率の観点から見ると、非同期的な処理を含むトランザクションには適していない。なぜなら、本方式では、該当データにロックを行い、他のトランザクションからのアクセスを妨げてしまうからである。たとえば、「在庫管理システムから在庫を引き当て、この引き当てに成功した場合に、配送管理システムに対して配送要求を非同期的に要求し、この配送の予約結果が（非同期的に）返却された時点で、処理の成功とみなす。」といった例を考えてみる。
【０００４】
この例で言うと、本方式の場合、在庫管理システムへのアクセス開始から配送管理システムより非同期に到着する結果が来るまでの間、在庫情報はロックされることになる。そのため、ある在庫引当完了から配送の非同期の予約結果を待つ間、その在庫情報にアクセスする他のトランザクションが待たされることになってしまう。
【０００５】
つまり、ＡＣＩＤベースのトランザクションは、データの更新を伴う一連の不可分なトランザクション処理を実行する場合、処理の開始時点から終了時点まで該データに対してロックを取得し続ける必要があり、そのために、一連の処理手順中に非同期的な処理等を含む場合、そのトランザクションと同一データにアクセスを行う他のトランザクションに実行が妨げられ、処理効率が落ちるという問題があった。このように、本方式は、非同期的な処理などを含む長期間に渡る可能性のあるトランザクションに適していない。
【０００６】
一方、このような非同期処理を含む場合のトランザクション保証技術として、ＳＡＧＡが知られている（トランザクション処理技術入門（フィリップ・Ａ・バーンスタイン、エリック・ニューカマー著、日経ＢＰ社、ＩＳＢＮ  ４−８２２２−８０２６−８））。
【０００７】
このＳＡＧＡにおいては、トランザクションを構成する各処理（アクティビティ）の実行の時のみ更新対象のデータに対してロックをかけ、トランザクションの途中で処理が失敗した場合には、データを元の状態に戻す打消し処理を起動する。先の例で言うと、本方式の場合、在庫管理システムからロックをかけずに在庫引き当てる時に更新対象の在庫情報にロックをかけ、在庫引き当てに成功した場合、ロックを解除し、配送管理システムに対して同様に予約を行う。この場合、あるトランザクションが配送管理システムからの結果を待っている間、他のトランザクションは待たされることはなく、その処理効率はＡＣＩＤトランザクションに比べて向上していると言える。
【０００８】
また、そのために、このＳＡＧＡは、トランザクションを構成する各処理の実行履歴情報をリストとして管理する。そして、障害発生時には、この実行履歴情報のリストを実行順序の逆順に辿り、各処理を打ち消す補償処理を逐次実行していく。このように、本方式は、データをロックしないため、並行に動作している別のトランザクションが待たされるという問題は発生しない。
【０００９】
一方、たとえば在庫引当処理というトランザクションが複数実行されている状況において、あるトランザクションで障害が発生した場合、そのトランザクションの打消処理が実行されるまでの間、在庫は引き当てられたままになり、別のトランザクションでは、そのトランザクションによって引き当てられた在庫が利用できない状況が続くことになる。このため、障害が発生した場合、速やかに打消処理の実行が完了することが必要である。
【００１０】
【発明が解決しようとする課題】
ところで、このＳＡＧＡにおいては、リスト構造で管理された履歴に従って打消処理を実現していくが、一連の複数の処理を一括して消すことが可能である場合には、この履歴に従って一つずつ打消処理を実行する方法は効率が悪い。そして、このＳＡＧＡは、実行履歴を一次元のリスト構造により管理しており、たとえば図１２に示す在庫引当処理(21,22)や配送予約処理(31,32)等、まとまった処理の単位を管理する機構を持たない。そのため、履歴中のある部分を一括して効率的に打ち消すといったことを行うことができなかった。
【００１１】
この発明は、このような事情を考慮してなされたものであり、たとえば業務レベル等でのデータの一貫性を確保するための打消処理を効率的に実行することを可能としたトランザクション処理装置、同装置のトランザクション処理方法、トランザクション処理プログラムおよび同プログラムを記録したコンピュータ読み取り可能な記録媒体を提供することを目的とする。
【００１２】
【課題を解決するための手段】
前述した目的を達成するために、この発明は、複数のデータ参照・更新処理から構成されるトランザクションを処理するトランザクション処理装置において、前記トランザクション内の一処理を親処理とする複数の子処理群の実行履歴を参照するための情報を前記親処理の実行履歴要素として記録し、前記トランザクションの実行履歴を階層的に管理する履歴管理手段と、いずれかの処理において障害が発生したときに、その処理を含むトランザクション区間に対応する前記履歴管理手段により階層的に管理された実行履歴を最後尾から辿り、その実行履歴で示される各処理に予め対応づけられた打消処理を逆順に実行し、前記複数の子処理群を、当該複数の子処理群の親処理に予め対応づけられた一つの打消処理により一括して打ち消す打消処理手段とを具備することを特徴とする
【００１３】
また、この発明は、前記履歴管理手段が、各処理の実行履歴要素として、各処理の要求メッセージおよび応答メッセージの少なくとも一方を記録することを特徴とする。
【００１５】
この発明においては、あるトランザクション実行中に別のトランザクションを呼び出すことを可能とするために、トランザクションを構成する各アクティビティ毎の実行履歴情報の一要素として、各々の要求メッセージおよび応答メッセージと子履歴情報を参照するための情報とを保持する。
【００１６】
より具体的には、たとえばある（親）トランザクション実行中の処理（アクティビティ）として別のシナリオを呼び出し、（子）トランザクションを実現する場合、親の履歴情報の該アクティビティに対応する履歴要素として、要求メッセージ、応答メッセージ、子の履歴情報を参照するための情報を書き込む。
【００１７】
このように、この発明では、入れ子トランザクションにおける親と子のトランザクションの履歴情報を関連付けることにより、まず、親のトランザクションにおける障害時に、子のトランザクションまで遡って打消処理を実行することを可能とする。
【００１８】
そして、この発明は、これら履歴情報を階層的に管理することにより、トランザクション区間を階層的に設定可能とする。すなわち、このトランザクション区間に対して打消処理を関連付けることにより、一つの打消処理で一括して処理の打消しを行えるようにし、起動する打消処理の数を削減して、処理効率の向上を実現する。
【００１９】
【発明の実施の形態】
以下、図面を参照してこの発明の一実施形態を説明する。
図１は、この発明の実施形態に係るシナリオ制御システムの構成を示す図である。
【００２０】
この実施形態のシナリオ制御システムは、業務処理手順が記述されたシナリオに従って、一連の複数の処理から構成されるトランザクションを処理するものであり、図１に示すように、要求受付プログラム１０１、受信アダプタ１０２、メッセージ管理プログラム１０３、シナリオ制御プログラム１０４および送信アダプタ１０５の各処理部と、シナリオ管理用ＤＢＭＳ１２１およびシナリオリポジトリ１２２の各データ部とを有している。また、図中のサーバ１３０は、それぞれこのシナリオ制御システムにより連携を行う対象である既存のサーバシステムである。
【００２１】
要求受付プログラム１０１は、サーバ１３０から処理の要求メッセージを受け付け、この要求メッセージの中に含まれる識別子に応じて、適切な受信アダプタ１０２を選択し、その要求メッセージを選択した受信アダプタ１０２に渡すプログラムである。一般に、要求メッセージの中には、Service、Action等の識別子が埋め込まれており、要求受付プログラム１０１は、この識別子に応じた対応テーブル等により、受信アダプタ１０２を選択する。つまり、受信したメッセージの種別に応じて、適切な受信アダプタ１０２が選択、起動される。
【００２２】
受信アダプタ１０２は、サーバ１３０から送信されたメッセージを要求受付プログラム１０１より受け取り、プロトコル変換等の処理を行った後、シナリオの起動要求や実行要求をメッセージ管理プログラム１０３経由でシナリオ制御プログラム１０４に送信するプログラムである。この受信アダプタ１０２は、一般に複数存在し、要求受付プログラム１０１によって起動される。なお、ここでシナリオとは、前述した通り、業務処理の手順を記述した文書であり、シナリオは、名前により一意に特定することが可能である。
【００２３】
メッセージ管理プログラム１０３は、一般に、ＭＱ（Messaging Queue）として知られるプログラムであり、送信されたメッセージを一時的に蓄積し、ＦＩＦＯ（First In First Out）の順番で、指定された宛先に送信するプログラムである。
【００２４】
シナリオ制御プログラム１０４は、このシナリオ制御システム１００の中核を担うプログラムであり、シナリオ・リポジトリ１２２にアクセスしてシナリオの記述情報を取得し、シナリオ実行に際して、使用される作業エリアであるシナリオ・インスタンス情報（以下、インスタンス情報という）の管理やシナリオの起動、実行、終了処理を行う。また、このシナリオ制御プログラム１０４は、アクティビティ管理プログラム１０６、履歴管理プログラム１０７および打消処理制御プログラム１０８を有している。
【００２５】
アクティビティ管理プログラム１０６は、トランザクションを構成する各処理（以下、アクティビティという）を指し示す識別子と具体的に起動するプログラムの物理名との対応を保持するプログラムである。
【００２６】
履歴管理プログラム１０７は、アクティビティ毎の実行履歴情報を、後述するインスタンスＩＤと関連付けて保持するプログラムである。実行履歴情報は、アクティビティに対して送信する要求メッセージや結果として受け取った応答メッセージ、子履歴情報を参照するための情報、履歴通番、シナリオ上での実行位置（シナリオ名、状態名）から構成される。また、履歴通番とは、各アクティビティの実行順序を示す番号である。
【００２７】
打消処理制御プログラム１０８は、履歴管理プログラム１０７から取得した履歴情報を評価し、打消処理を実行していくプログラムである。
【００２８】
そして、送信アダプタ１０５は、サーバ１３０との間の通信を司るプログラムであり、一般に複数存在する。この送信アダプタ１０５は、サーバ１３０のプロトコルに合わせたプロトコル変換等を行い、該サーバ１３０に対して処理の依頼を行う。また、処理が同期型の場合、処理結果である応答メッセージを取得する処理も行う。
【００２９】
前述したように、従来のＳＡＧＡにおいては、実行履歴を一次元のリスト構造により管理しており、まとまった処理の単位を管理する機構を持たないため、履歴中のある部分を一括して効率的に打ち消すといったことを行うことができなかった。そこで、このシナリオ制御システム１００では、たとえば図２（Ａ）に示すように、処理手順を階層化する。また、これに合わせて、トランザクションも入れ子構成が可能となるよう、図２（Ｂ）に示すように、トランザクションを構成する各アクティビティに対する実行履歴要素として、該アクティビティに対する入力である要求メッセージ、出力である応答メッセージ、子シナリオの履歴情報を参照するための情報を持ち、実行履歴情報を階層的に管理する。そして、階層構造を構成する各トランザクション毎に一括打消処理（図２の2’,3’）を関連付けることにより、履歴に従わない一括した処理の打消を可能とする。
【００３０】
図３は、本実施形態において使用する業務処理手順を記述したシナリオの例である。
【００３１】
図中、各丸は状態を表す。この状態は、具体的なアクティビティと関連付けられる。また、状態の実行とは、状態に関連付けられたアクティビティの実行を意味する。シナリオは、複数の状態から構成され、シナリオ制御プログラム１０４により解釈、実行されていく。
【００３２】
シナリオには、業務処理における手順（順次、選択、反復）や、各アクティビティに対して送信される要求メッセージ、あるいは結果として受け取った応答メッセージの評価方法が記述される。そして、応答メッセージの評価の結果、次に実行するべき状態が決定し、これらの繰り返しにより、一連の業務処理手順が達成されていく。
【００３３】
この例では、はじめにシナリオＦ１の状態Ｓ１が実行される。状態Ｓ１は、シナリオＦ２を起動するアクティビティと結び付けられている。次に、シナリオＦ２が起動され、状態Ｓ２１，Ｓ２２，Ｓ２３の順に起動される。また、状態Ｓ２２は、シナリオＦ３を起動するアクティビティと関連づけられており、シナリオＦ３のＳ３１，Ｓ３２の順で実行される。その後、Ｓ２３が実行される。
【００３４】
また、シナリオでは、各状態に対応させて打消処理の定義が可能である。打消処理とは、処理の内容を取り消す処理である。例えば、入金処理に対する打消処理は出金処理であり、また、在庫引当処理に対する打消処理は在庫差し戻し処理である。そして、この例では、この打消処理自体も状態として与えられる。
【００３５】
さらに、各状態には、関連付けられたアクティビティを同期型で実行するか、非同期型で実行するかを示す属性が定義されている。ここでは、特に断らない限り、属性は全て「非同期」とする。
【００３６】
次に、処理の要求メッセージがサーバ１３０から到達した場合についての説明を行う。なお、特に注意がない場合を除き、各プログラム間の情報の伝達は、メッセージ管理プログラム１０３を経由して行われるものとする。
【００３７】
（１）要求受付
要求受付プログラム１０１は、サーバ１３０から処理の要求メッセージを受け付け、その要求メッセージの中に含まれる識別子に応じて、適切な受信アダプタ１０２を選択する。
【００３８】
（２）シナリオ起動要求
選択された受信アダプタ１０２は、シナリオ制御プログラム１０４に対して、シナリオ名を入力とし、シナリオ起動要求を行う。一方、シナリオ制御プログラム１０４は、そのシナリオを実行する際の作業領域であるインスタンス情報を確保する。この時、受信アダプタ１０２には、シナリオ起動要求の結果として、現在実行中のインスタンス情報に参照するための情報であるコンテキストＩＤが返却される。
【００３９】
（３）シナリオ起動
シナリオ制御プログラム１０４は、業務処理手順が記述してあるシナリオの解釈を行い、シナリオの起動、停止、実行等、シナリオの実行状態を管理する。シナリオ起動要求を受けた場合、シナリオ制御プログラム１０４は、シナリオを実行する際の作業領域であるインスタンス情報を確保する。このインスタンス情報は、図４に示すテーブル（インスタンス情報テーブル）に保持される。以下、このインスタンス情報テーブルにおける各列の意味を説明する。
【００４０】
インスタンスＩＤａ１は、インスタンスを一意に識別する識別子であり、シナリオ名ａ２、状態名ａ３は、この組で現在のシナリオの実行位置を示す。実行状態ａ４は、シナリオの状態を表す値として、「待機」、「実行中」のいずれかを取り、初期値として「待機」が設定される。正常異常種別ａ５は、現在インスタンスが正常処理実行中か、または、なんらかの障害が発生したため、異常処理実行中かを示し、初期値として「正常」が設定される。
【００４１】
また、このシナリオ制御システム１００では、図５に示すテーブル（カレント・インスタンス管理テーブル）に、コンテキストＩＤとインスタンスＩＤとの対応付けを保存する。ここに、各コンテキストは、現在実行中のインスタンスＩＤに参照するための情報を格納し、プロキシとして動作する。つまり、シナリオ制御プログラム１０４にアクセスするプログラムは、そのコンテキストＩＤをキーとしてアクセスすることで、常に現在実行中のインスタンス情報にアクセス可能となる。
【００４２】
シナリオ制御プログラム１０４は、シナリオ・リポジトリ１２２よりそのシナリオに関する情報を取得し、一番最初に実行する状態を取得する。その後、インスタンス情報テーブルにシナリオ名とその状態名を書き込む。図３の例の場合、シナリオ名としてＦ１、状態名としてＳ１が、それぞれインスタンス情報テーブルに書き込まれる。また、シナリオ制御プログラム１０４は、図６に示すテーブル（親子シナリオ管理テーブル）に、シナリオの親子関係を記述する。最上位のシナリオ生成時は、この処理は行わない。
【００４３】
また、シナリオ制御プログラム１０４は、履歴管理プログラム１０７にインスタンスＩＤを渡して本初期状態ＳＩに対する実行履歴要素の作成を要求し、結果として、実行履歴要素に付与された通番を取得する。この段階で、シナリオ制御プログラム１０４は、図７に示すテーブル（履歴管理テーブル）に、インスタンスＩＤ、通番のみを書き込む。また、図８に示すテーブル（カレント通番位置管理テーブル）は、最後に書き込んだ履歴通番を保持するテーブルであり、シナリオ制御プログラム１０４は、この段階で、インスタンスＩＤに対応させて通番１を書き込む。
【００４４】
（４）シナリオ実行
受信アダプタ１０２は、シナリオ実行要求として、コンテキストＩＤと、サーバ１３０の処理結果や要求を含むメッセージとをシナリオ制御プログラム１０４に送信する。
【００４５】
一方、このシナリオ実行要求を受けたシナリオ制御プログラム１０４は、カレント・インスタンス管理テーブルから、コンテキストＩＤをキーにして、現在実行中のインスタンスＩＤを取得する。また、シナリオ制御プログラム１０４は、このインスタンスＩＤをキーとして、今度は、インスタンス情報テーブルからシナリオ実行情報を取得し、現在の実行状態を調べる。実行状態が「待機」以外である場合、エラーを返却したり、その実行要求メッセージをキューの最後尾にまわす等の処理が考えられる。ここで、図９を参照して、実行状態が「待機」である場合のシナリオ制御プログラム１０４の動作を説明する。
【００４６】
ａ．まず、受信したメッセージが障害情報を含むものであるか判定する（ステップＡ１）。このメッセージが障害情報を含むものである場合は、処理の失敗を表し、トランザクションのロールバック契機となる。
【００４７】
ｂ．障害情報を含むものである場合（ステップＡ１のＹＥＳ）、インスタンス実行情報テーブルの正常異常種別を「異常」に書き換える（ステップＡ２）。
【００４８】
ｃ．インスタンス実行情報テーブルの正常異常種別が「異常」の場合（ステップＡ３のＮＯ）、打消処理を実行する（ステップＡ４）。この打消処理の詳細は後述する。
【００４９】
ｄ．カレント通番位置管理テーブルを参照し、現在のインスタンスＩＤに対応した通番Ｎを取得する。そして、履歴管理テーブルの現在のインスタンスＩＤ、通番＝Ｎの行にメッセージを書き込む（ステップＡ５）。
【００５０】
ｅ．シナリオリポジトリ１２２から該当するシナリオＦを取得し、そのシナリオＦの記述に従って、メッセージを評価し、条件分岐などの処理を行う。この結果、次に実行するべき状態名が決定する。そして、この状態名をインスタンス情報テーブルに書き込むと共に、現在の履歴通番位置に対し、シナリオ名、状態名を書き込む（ステップＡ６）。
【００５１】
ｆ．選択した次状態が、本シナリオの終了を示し、親シナリオへの復帰を表すものである場合（ステップＡ７のＹＥＳ）、親インスタンスに対し、フローの終了を通知する。この時、通知された親シナリオの実行情報テーブルの実行状態を「待機」に変更し、また、コンテキストＩＤに対応したインスタンスＩＤを親インスタンスＩＤのものに変更する。そして、コンテキストＩＤに対し、子シナリオからの処理結果を送信し、本処理を終了する（ステップＡ８）。ただし、本シナリオが最上位のシナリオである場合（親が存在しない場合）、この処理は行わない。
【００５２】
ｇ．履歴管理プログラム１０７に対し、インスタンスＩＤを渡し、本実行状態に対する実行履歴要素の作成を要求し、結果として、実行履歴要素に付与された通番を取得する（ステップＡ９）。この段階で、履歴管理テーブルには、インスタンスＩＤ、通番のみが書き込まれる。
【００５３】
ｈ．シナリオ実行情報テーブルをインスタンスＩＤをキーにして検索し、シナリオの名前Ｆ、状態名Ｓを取得する（ステップＡ１０）。
【００５４】
ｉ．シナリオの記述情報から該当するシナリオＦ内の状態名Ｓで指し示される状態に対応するプログラム識別子を取得する（ステップＡ１１）。
【００５５】
ｊ．インスタンスＩＤ、通番情報をキーとして、メッセージを実行履歴要素に書き込む（ステップＡ１２）。
【００５６】
ｋ．コンテキストＩＤ、インスタンスＩＤ、通番情報、プログラム識別子、メッセージを引数として、アクティビティ実行プログラムを起動する（ステップＡ１３）。
【００５７】
なお、履歴管理テーブルにおいて通番とは、アクティビティの実行順序を管理する番号であり、インスタンスＩＤに対して一意な番号であり、データには、上記要求メッセージや応答メッセージ、打消処理を実行するに際して必要な情報等が書き込まれる。
【００５８】
（５）アクティビティ実行
シナリオ制御プログラム１０４は、プログラム識別子をアクティビティ管理プログラム１０６に渡し、具体的なアクティビティ情報を取得する。
【００５９】
シナリオ制御プログラム１０４は、実行するプログラムが、「シナリオ起動」の場合、以下の処理を行う。
【００６０】
ａ．シナリオ起動処理で記述した処理を起動し、子シナリオのインスタンスＩＤを結果として取得する。
【００６１】
ｂ．インスタンスＩＤと、子シナリオのインスタンスＩＤの対応関係を親子シナリオ管理テーブルに書き込む。
【００６２】
ｃ．履歴管理プログラム１０７に、（親）インスタンスＩＤ、通番、子のインスタンスＩＤを入力として渡し、親の履歴情報要素に対し、子インスタンスＩＤを参照するための情報を書き込む。
【００６３】
ｄ．シナリオ制御プログラムに対し、実行要求を送信する。
【００６４】
なお、実行するプログラムが、送信アダプタ１０５の場合、送信アダプタ１０５を起動する。この場合、応答メッセージを取得する場合もある。
【００６５】
以上の処理の結果、図３に示すシナリオＦ２において、たとえばＳ２３実行中における履歴管理テーブルは、図１０に示す通りとなる。図示のように、処理の実行が完了していない（インスタンスＩＤ、通番）＝（１，１），（２，３）の実行履歴情報要素に対するシナリオ名、状態名は空値になっている。
【００６６】
（６）障害発生時の処理
次に、図３に示すシナリオＦ２の状態Ｓ２３に関連付けられたアクティビティ実行中、たとえば通信障害等の障害が発生した場合にシナリオ制御プログラム１０４が実行する打消処理の動作を図１１を用いて説明する。
【００６７】
なお、障害情報を含むメッセージは、サーバ１３０からメッセージとして、送信アダプタ１０５、受信アダプタ１０２に通知される。通信障害等の場合は、例外情報を含むメッセージをアダプタが生成する場合もある。アダプタは、シナリオ制御プログラム１０４に該障害情報を含むメッセージを送信する。以下、障害情報を含むメッセージを単に例外と呼ぶ。そして、例外は、トランザクション処理中の失敗を表し、トランザクション処理のロールバック契機となる。
【００６８】
前述したように、例外が通知された場合、シナリオ制御プログラム１０４は、インスタンス情報テーブルの正常異常種別を「異常」に変更し、打消処理を実行する（図９のステップＡ１〜Ａ４）。そして、この時、シナリオ制御プログラム１０４は、インスタンスＩＤ（Ｆｉｄ）の打消処理を行う打消処理制御プログラム１０８を起動する。
【００６９】
打消処理制御プログラム１０８は、履歴管理テーブルの該インスタンスＩＤに対応した通番を検索し、その最大値maxを取得する。また、履歴通番上の現在の実行位置を参照する情報として、カレント通番位置テーブルにインスタンスＩＤ７０１＝Ｆｉｄに対応する通番ｅ１としてmax＋１を書き込む。この場合、インスタンスＩＤ＝２においては、通番３が最大値であるので、４を通番に書き込む（ステップＢ１）。
【００７０】
次に、通番のＦｉｄに対応する通番から１を検索し、履歴管理テーブルのインスタンスＩＤ＝Ｆｉｄに対応するシナリオ名Ｆ、状態名Ｓを検索する（ステップｂ４）。ここでは、シナリオ名、状態名は共に定義されていない。
【００７１】
シナリオ名、状態名が所得できない場合、つまり空値の場合（ステップＢ６のＮＯ）、該状態に関連付けられたアクティビティは、現在実行中であることを示している。この場合、子シナリオに対する打消処理の起動を試みる。そこで、履歴管理テーブルにおいて、インスタンスＩＤ＝Ｆｉｄに対応した子インスタンスＩＤｄ５の取得を試みる。この例においては、定義されていない。
【００７２】
上記子インスタンスＩＤが定義されていない場合（ステップＢ７のＮＯ）、次に、履歴管理テーブルから、（インスタンスＩＤ，通番）＝（２，２）の行を取得する。該行におけるシナリオ名Ｆ（Ｆ２）、状態名Ｓ（Ｓ２２）を取得し、その状態に対する逆状態が定義されているかを調べる（ステップＢ６）。この例では状態Ｓ２２’が定義されている。もし、子インスタンスＩＤが取得できた場合には、再帰的にインスタンスＩＤ＝３の履歴情報に対し、履歴に基づく打消処理の実行を行う。
【００７３】
そこで、打消処理制御プログラム１０８は、子インスタンスに対する打消処理を履歴情報に基づかずに、逆状態Ｓ２２’に関連付けられたアクティビティＡ２２により、一括して処理の打消しを行う（ステップＢ８）。
【００７４】
以下、Ｓ２１の逆状態、Ｓ２１’に対応した打消処理Ａ２１が実行され、親のインスタンスＩＤを引数として、打消処理完了として例外を通知する。
【００７５】
例外が通知された親インスタンスは、図９に示すフローに従い、処理が継続される。なお、現在、該インスタンス実行情報の正常異常識別は「異常」に設定されているので、再び親インスタンスＩＤ＝２に対する打消処理が起動される。
【００７６】
このように、このシナリオ制御システム１００においては、従来のように、履歴情報に従い一つずつ打消処理を起動することに代え、一括してある処理群を束ねて、それらに対して一括打消処理を起動することが可能となる。もちろん、処理群の途中で障害が発生した場合には、従来と同様、履歴による打消し処理も可能である。
【００７７】
その理由は、従来のように、実行履歴の管理を一次元のリスト構造で管理するのではなく、入れ子トランザクションの実現のために、各処理の履歴情報に付いて、子履歴情報を参照するための情報を持たせることにより、履歴情報を階層的に管理することを可能とし、一連の処理群を束ねて管理できるようにして、一括打消しの範囲を管理できるようになったからである。
【００７８】
なお、本願発明は、前記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、前記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。たとえば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００７９】
【発明の効果】
以上のように、この発明によれば、入れ子トランザクションにおける親と子のトランザクションの履歴情報を関連付けることにより、まず、親のトランザクションにおける障害時に、子のトランザクションまで遡って打消処理を実行することを可能とする。
【００８０】
そして、この発明は、これら履歴情報を階層的に管理することにより、トランザクション区間を階層的に設定可能とする。すなわち、このトランザクション区間に対して打消処理を関連付けることにより、一括して処理の打消しを行えるようにし、起動する打消処理の数を削減して、処理効率の向上を実現する。
【図面の簡単な説明】
【図１】この発明の実施形態に係るシナリオ制御システムの構成を示す図。
【図２】同実施形態のシナリオ制御システムにおける一括した打消処理の概要を説明するための概念図。
【図３】同実施形態において使用する業務処理手順を記述したシナリオの例。
【図４】同実施形態のシナリオ制御システムが備えるインスタンス情報テーブルを示す図。
【図５】同実施形態のシナリオ制御システムが備えるカレント・インスタンス管理テーブルを示す図。
【図６】同実施形態のシナリオ制御システムが備える親子シナリオ管理テーブルを示す図。
【図７】同実施形態のシナリオ制御システムが備える履歴管理テーブルを示す図。
【図８】同実施形態のシナリオ制御システムが備えるカレント通番位置管理テーブルを示す図。
【図９】同実施形態のシナリオ制御システムにおいて実行状態が「待機」である場合のシナリオ制御プログラムの動作手順を示すフローチャート。
【図１０】図３に示すシナリオＦ２において、Ｓ２３実行中における履歴管理テーブルを示す図。
【図１１】図３に示すシナリオＦ２の状態Ｓ２３に関連付けられたアクティビティ実行中に障害が発生した場合にシナリオ制御プログラムが実行する打消処理の動作を説明するためのフローチャート。
【図１２】従来の打消処理の概要を説明するための概念図。
【符号の説明】
１００…シナリオ制御システム
１０１…要求受付プログラム
１０２…受信アダプタ
１０３…メッセージ管理プログラム
１０４…シナリオ制御プログラム
１０５…送信アダプタ
１２１…シナリオ管理用ＤＢＭＳ
１２２…シナリオリポジトリ
１３０…サーバ
【図１】
0004262932.tif 000002
【図２】
0004262932.tif 000003
【図３】
0004262932.tif 000004
【図４】
0004262932.tif 000005
【図５】
0004262932.tif 000006
【図６】
0004262932.tif 000007
【図７】
0004262932.tif 000008
【図８】
0004262932.tif 000009
【図９】
0004262932.tif 000010
【図１０】
0004262932.tif 000011
【図１１】
0004262932.tif 000012
【図１２】
0004262932.tif 000013