(57)【要約】【課題】  回復処理の効率を向上させることが可能な技術を提供する。【解決手段】  ワークフローに従って一連のトランザクションを実行するトランザクション処理方法において、トランザクション実行中に障害が発生した場合の障害回復を行う補償処理をトランザクションの実行時に回復処理フローとして登録し、トランザクション実行中に障害が発生した場合に、前記登録した回復処理フローに従って一連の補償処理を並列に実行するものである。【選択図】        図１
2005317010.tif 000002
【特許請求の範囲】
【請求項１】
ワークフローに従って一連のトランザクションを実行するトランザクション処理方法において、
中央処理装置が、実行したトランザクションの内容を示す履歴情報をトランザクションの実行時に記憶装置に登録し、トランザクション実行中に障害が発生した場合に前記履歴情報を記憶装置から取出し、前記履歴情報中に登録されたトランザクションの内容毎に処理識別子で識別される補償トランザクションを複数の処理装置に指示して並列に実行することを特徴とするトランザクション処理方法。
【請求項２】
中央処理装置が、ワークフロー上のパスを識別する為の識別子と分岐及び待合せ対象のパスを識別する為の識別子とを含む履歴情報をトランザクションの実行時に記憶装置に保存し、トランザクション実行中に障害が発生した場合に前記履歴情報を記憶装置から取出し、前記履歴情報中に登録された各パス毎に回復処理を複数の処理装置に指示して並列に実行することを特徴とする請求項１に記載されたトランザクション処理方法。
【請求項３】
中央処理装置が、メッセージの送信先を識別する為の識別子を含む履歴情報をトランザクションの実行時に記憶装置に登録し、トランザクション実行中に障害が発生した場合に前記履歴情報を記憶装置から取出し、前記履歴情報中に登録されたメッセージの送信先毎に回復処理を複数の処理装置に指示して並列に実行することを特徴とする請求項１に記載されたトランザクション処理方法。
【請求項４】
中央処理装置が、クライアントからの要求メッセージに対して通番を付与し、該通番と履歴情報の識別子とを記憶装置に保存して要求メッセージに対応する履歴情報を管理することを特徴とする請求項１乃至請求項３のいずれか１項に記載されたトランザクション処理方法。
【請求項５】
ワークフローに従って一連のトランザクションを実行するトランザクション処理装置において、
実行したトランザクションの内容を示す履歴情報をトランザクションの実行時に登録する正常処理部と、トランザクション実行中に障害が発生した場合に前記履歴情報を取出し、前記履歴情報中に登録されたトランザクションの内容毎に処理識別子で識別される補償トランザクションを複数の処理装置に指示して並列に実行する補償処理部とを備えることを特徴とするトランザクション処理装置。
【請求項６】
ワークフローに従って一連のトランザクションを実行するトランザクション処理装置としてコンピュータを機能させる為のプログラムを記録した媒体において、
実行したトランザクションの内容を示す履歴情報をトランザクションの実行時に登録する正常処理部と、トランザクション実行中に障害が発生した場合に前記履歴情報を取出し、前記履歴情報中に登録されたトランザクションの内容毎に処理識別子で識別される補償トランザクションを複数の処理装置に指示して並列に実行する補償処理部としてコンピュータを機能させる為のプログラムを記録したことを特徴とする媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はワークフローに従って一連のトランザクション処理を実行するトランザクション処理システムに関し、特にトランザクション実行中に障害が発生した場合に回復処理を行うトランザクション処理システムに適用して有効な技術に関するものである。
【背景技術】
【０００２】
ホテルと航空券の予約が必要な旅行予約システムや、複数の銀行の口座間で送金をする様なシステムにおいては、チャネルからの要求に対して複数のサーバにアクセスしてトランザクション処理を行う必要がある。トランザクション処理とは、原子性、一貫性、隔離性、耐久性という性質を持つプログラムを実行することである。トランザクション処理については、例えば、「トランザクション処理システム入門」（フィリップ・Ａ・バーンスタイン、エリック・ニューカマー著、日経ＢＰ社）で紹介されている。また、本明細書においては、これ以降、ワークフロー制御システムに要求メッセージを送信するシステムを総称して「チャネル」と呼ぶことにする。
【０００３】
一連の処理を一つのトランザクションで実行しようとすると、各サーバにおいてトランザクションが終了するまでの期間、該当するデータをロックしておく必要がある。この為、他の処理が長時間待たされ、性能上問題となる場合がある。そこで一連の処理を各サーバへのアクセス毎のトランザクションに分割し、複数のトランザクションから成るワークフローとして実行することが一般的に行われる。
【０００４】
この様なシステムにおいては、ワークフローの実行中に障害が発生した場合、障害発生時点までに行った一連のトランザクション処理を取消す回復処理が必要である。この為従来は各トランザクションにおいて行った処理の内容を履歴としてキューに登録し、障害発生時にはこのキューの後尾から一つずつ順に履歴情報を取出して各トランザクションに対する補償処理を行っていた。この様なシステムは、例えば「トランザクション処理システム入門」（フィリップ・Ａ・バーンスタイン、エリック・ニューカマー著、日経ＢＰ社、１１１頁）で紹介されている。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
前記従来の方式において、補償処理によってトランザクションが取消されるまでの間に別のトランザクションが同じサーバに対して処理を行った場合、そのトランザクションは取消されるべきトランザクションの結果に影響を受けることになる。例えばホテルの予約を行うトランザクションでは、キャンセルにより空きが生じるまでの間、満室の為予約できない状態が続くことになる。従って、回復処理に要する時間はできるだけ短いほうが望ましい。
【０００６】
従来の方式によれば、分岐により並列に実行されたトランザクションを回復する場合にも、一つずつ補償トランザクションが実行される。従って、一連のトランザクションに関する回復処理を完了するまでに多くの時間を要するという問題があった。
【０００７】
本発明の目的は上記問題を解決し、回復処理の効率を向上させることが可能な技術を提供することにある。
本発明の他の目的はトランザクション処理システムが複数のチャネルから同時に要求メッセージを受信して処理を行う場合にも効率的な回復処理を行うことが可能な技術を提供することにある。
【課題を解決するための手段】
【０００８】
本発明は、ワークフローに従って一連のトランザクションを実行するトランザクション処理システムにおいて、障害回復を行う為の回復処理フローまたは実行した処理内容を示す履歴情報をトランザクション実行時に登録し、トランザクション実行中に障害が発生した場合に、前記登録した回復処理フローまたは履歴情報に従って一連の補償処理を並列に実行するものである。
【０００９】
本発明のトランザクション処理システムでは、ワークフローに従ってトランザクションを実行すると共に、トランザクション実行中に障害が発生した場合の障害回復を行う補償処理をトランザクションの実行時に回復処理フローとして登録しておく。
【００１０】
その際、ワークフローに従って分岐処理を行うときにはその分岐処理に対応させて待合せ処理を回復処理フローに登録し、ワークフローに従って待合せ処理を行うときにはその待合わせ処理に対応させて分岐処理を回復処理フローに登録しておく。
【００１１】
トランザクション実行中に障害が発生した場合には、前記登録しておいた回復処理フローに従って一連の補償処理を実行する。ワークフローの正常処理フローに対応して回復処理フローが生成されるので、トランザクション実行中に分岐処理により並列に実行された部分は補償処理でも並列に実行され、補償処理が高速に実行される。
【００１２】
また本発明のトランザクション処理システムでは、ワークフローに従ってトランザクションを実行すると共に、トランザクションの実行内容を示す履歴情報を登録しておく。
【００１３】
トランザクション実行中に障害が発生した場合には前記登録しておいた履歴情報を取出し、履歴情報中のトランザクションの内容毎に補償トランザクションを並列に実行する。このときワークフローのパスや送信先毎に補償トランザクションを並列化することとしても良い。前記の様に履歴情報に従って補償トランザクションが並列に実行されるので、補償処理が高速に実行される。
【００１４】
以上の様に本発明のトランザクション処理システムによれば、正常処理フローの分岐により生じたパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
【発明の効果】
【００１５】
本発明によれば正常処理フローの分岐により生じたパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
【発明を実施するための最良の形態】
【００１６】
（実施形態１）
以下に正常処理フローにおいて分岐したパス毎に回復処理を並列化する実施形態１のトランザクション処理システムについて説明する。
図１は本実施形態のワークフロー制御システムのソフトウェア構成を示す図である。本実施形態では、ワークフロー制御システム内のソフトウェアを構成する各コンポーネントをオブジェクトとして実装した場合について説明する。
【００１７】
図２は本実施形態のトランザクション処理システムのハードウェア構成を示す図である。本実施形態のシステムは、ワークフロー制御システム２０１と、このシステムにネットワーク２１５〜２１８で接続されたチャネル２０９及びサーバ２１０〜２１２とで構成される。
【００１８】
ワークフロー制御システム２０１は、チャネル２０９からの要求メッセージを解釈し、サーバ２１０〜２１２に対してトランザクションを要求しながら、チャネル２０９からの要求を満たす為の処理を行うシステムである。チャネル２０９は、ユーザからの要求に従ってワークフロー制御システム２０１に要求メッセージを送信するシステムである。サーバ２１０〜２１２は、ワークフロー制御システム２０１からの要求に従ってトランザクションを実行するシステムである。ここでは、サーバ２１０〜２１２がそれぞれ別のサービスを提供していると仮定する。本実施形態では、チャネルが１つとサーバが３つ接続された構成を示しているが、より多くのチャネル及びサーバを接続した構成としても良い。
【００１９】
ワークフロー制御システム２０１は、ＣＰＵ２０２、メモリ２０３、ハードディスク装置２０４、ネットワーク・インタフェース・コントローラ２０５〜２０８、入力装置２１３、出力装置２１４で構成される。ハードディスク装置２０４には、ワークフローに従って処理を行う為のソフトウェア群が保存されており、これらのソフトウェアはメモリ２０３にロードされてＣＰＵ２０２により実行される。ネットワーク・インタフェース・コントローラ２０５〜２０８は、ネットワーク２１５〜２１８に対するインタフェースを制御し、チャネル２０９及びサーバ２１０〜２１２と接続する。
【００２０】
次に本実施形態のワークフロー制御システム２０１のソフトウェア構成について図１を用いて説明する。ワークフロー制御システム２０１は、オブジェクト・リクエスト・ブローカであるＯＲＢ１０１と、トレーダ１０７と、アダプタ１０３〜１０６と、通番管理プログラム１０８と、ワークフロー実行プログラム１０２とで構成される。
【００２１】
ＯＲＢ１０１は、オブジェクト間のリクエストと、その応答の送受信を可能にするメッセージング機構を提供する。ワークフロー制御システム２０１内の各コンポーネントは、ＯＲＢ１０１を使用して他のコンポーネントとの間で通信を行う。
【００２２】
トレーダ１０７は、各コンポーネントのサービス内容からオブジェクトを検索する為の仕組みを提供する。アダプタ１０３〜１０６、ワークフロー実行プログラム１０２は、自分の提供するサービス内容をトレーダ１０７に登録する。また、メッセージ送信時にはトレーダ１０７によりサービスを検索して送信先のオブジェクト・リファレンスを受け取る。オブジェクト・リファレンスは、対象になるオブジェクトを一意に識別する為の情報を含んだデータである。各オブジェクトは、オブジェクト・リファレンスを使用して対象となるオブジェクトへのメッセージの送信をＯＲＢに要求する。
【００２３】
アダプタ１０３〜１０６は、チャネル２０９及びサーバ２１０〜２１２と、ワークフロー実行プログラム１０２との間でのメッセージの転送を行うコンポーネントである。アダプタ１０３〜１０６は、それぞれ異なるプロトコルでチャネル２０９やサーバ２１０〜２１２と接続されており、ネットワーク２１５〜２１８を介してチャネル２０９やサーバ２１０〜２１２と接続する為のプロトコルの制御及びメッセージフォーマットの変換を行う。
【００２４】
通番管理プログラム１０８は、ワークフロー制御システム２０１内で転送されるメッセージに固有の番号を与える為のコンポーネントである。通番管理プログラム１０８では、シーケンシャルに番号を管理しており、各コンポーネントからの要求を受けてワークフロー制御システム２０１内で一意な番号を返す。各コンポーネントは、通番管理プログラム１０８から受け取った通番でメッセージに番号を付ける。
【００２５】
ワークフロー実行プログラム１０２は、チャネル２０９から要求メッセージを受信し、ワークフローに従ってサーバ２１０〜２１２にトランザクションの処理を依頼してチャネル２０９からの要求を処理するコンポーネントである。
【００２６】
ワークフロー実行プログラム１０２は、チャネル２０９からの要求を受け付ける要求受付プログラム１０９と、要求内容や処理の中間データを保存する為の業務ＤＢ１１０と、ワークフローに従ってトランザクションを起動するワークフロー制御プログラム１１１と、ワークフローを保存する為のワークフロー管理ＤＢ１１８と、ワークフロー制御プログラム１１１から起動され、サーバ２１０〜２１２に対して処理を要求するトランザクション要求処理プログラム１１２〜１１４と、ワークフロー制御プログラム１１１から起動され、チャネル２０９へ応答メッセージを送信する応答処理プログラム１１５と、ワークフロー管理ＤＢ１１８にワークフローを登録する為のワークフロー登録処理プログラム１１７と、ワークフローの実行中に障害が発生した場合に回復処理を行う回復処理プログラム１１６とで構成される。
【００２７】
図３は本実施形態の要求処理プログラム１１２〜１１４及び応答処理プログラム１１５の概略構成を示す図である。図３に示す様に本実施形態のワークフロー制御システム２０１は、正常処理部３０２と、補償処理部３０３とを有している。
【００２８】
正常処理部３０２は、トランザクション実行中に障害が発生した場合の障害回復を行う補償処理をトランザクションの実行時に回復処理フロー１２０として登録する処理部である。補償処理部３０３は、トランザクション実行中に障害が発生した場合に前記登録した回復処理フロー１２０に従って一連の補償処理を並列に実行する処理部である。
【００２９】
ワークフロー制御システム２０１を正常処理部３０２及び補償処理部３０３として機能させる為のプログラムは、ＣＤ−ＲＯＭ等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する媒体はＣＤ−ＲＯＭ以外の他の媒体でも良い。
【００３０】
図３の処理プログラム３０１に示す様にトランザクション要求処理プログラム１１２〜１１４及び応答処理プログラム１１５は、サーバ２１０〜２１２に対してトランザクションを要求する為の正常処理部３０２と、正常に実行されたトランザクションを取消す為の補償処理部３０３とで構成される。
【００３１】
ワークフロー管理ＤＢ１１８及び業務ＤＢ１１０は、ハードディスク装置２０４に保存される。ワークフロー管理ＤＢ１１８には、正常時のワークフローを記述した正常処理フロー１１９と、障害発生時に実行される回復処理フロー１２０とが保存される。業務ＤＢ１１０には図４に示す様な業務ＤＢテーブルが保存される。
【００３２】
図４は本実施形態の業務ＤＢテーブルの一例を示す図である。業務ＤＢテーブル４００の一つの行は、要求メッセージに付与された要求通番４０１と、要求内容４０２と、正常処理フロー１１９を識別する為の正常処理フローＩＤ４０３と、回復処理フロー１２０を識別する為の回復処理フローＩＤ４０４と、サーバ２１０〜２１２で各トランザクションに対して付けられる処理番号４０５，４０７及び４０９と、サーバ２１０〜２１２からの応答メッセージで得られたデータ４０６，４０８及び４１０と、チャネル２０９に対する応答番号４１１と、応答内容４１２とを格納する列を持つ。
【００３３】
ワークフロー制御システム２０１の運用者は、予め入力装置２１３から正常処理フロー１１９を登録する。ワークフロー登録処理プログラム１１７は、ワークフローを登録する為のコマンドやＧＵＩを提供し、入力されたワークフローをワークフロー管理ＤＢ１１８の正常処理フロー１１９に登録する。ワークフローの登録時に運用者は、ワークフローを一意に識別する為の正常処理フローＩＤ４０３を付ける。このＩＤによりワークフロー制御プログラム１１１は、正常処理フロー１１９に登録された複数のワークフローを管理することができる。この様にして定義された正常処理フロー１１９の例を図５に示す。
【００３４】
図５は本実施形態の正常処理フロー１１９の一例を示す図である。ワークフロー中のトランザクションを記述したノード５０１，５０５，５０６及び５１２には、対応するトランザクションを実行する為のプログラムを定義する。
【００３５】
本実施形態では、各トランザクションに対応してトランザクション処理プログラム３０１を用意し、その正常処理部３０２をオブジェクトとして実装する。そして、これらのオブジェクトを各ノードで起動するオブジェクトとして定義する。回復処理ノード５０４，５１０，５１１及び５１４には、起動するオブジェクトとして回復処理プログラム１１６を定義しておく。回復処理ノードに定義する内容は、ワークフロー中のどの位置にあっても全て同一の内容を設定することができる。
【００３６】
以下では、チャネル２０９から要求メッセージを受信し、図５に示したワークフローに従って処理を行う場合の動作について説明する。アダプタ１０３は、チャネル２０９から要求メッセージを受信し、通番管理プログラム１０８により要求メッセージに対する通番を取得し、この通番をメッセージに付加する。次にトレーダ１０７により、要求受付プログラム１０９のオブジェクト・リファレンスを取得し、そのオブジェクト・リファレンスを使用して要求受付プログラム１０９へ要求メッセージを送信する。
【００３７】
要求受付プログラム１０９は、アダプタ１０３から要求メッセージを受信し、業務ＤＢテーブル４００に要求通番４０１及び要求内容４０２を登録する。そして、要求メッセージの内容を元に要求に対応する正常処理フロー１１９を決定し、その正常処理フロー１１９を識別する為の正常処理フローＩＤ４０３を登録する。また回復処理フロー１２０を識別する為の回復処理フローＩＤ４０４を生成して登録する。その後、正常処理フロー１１９の実行をワークフロー制御プログラム１１１に要求する。このとき要求受付プログラム１０９は、入力として要求通番４０１と正常処理フローＩＤ４０３をワークフロー制御プログラム１１１へ渡す。
【００３８】
ワークフロー制御プログラム１１１は、要求されたワークフローをワークフロー管理ＤＢ１１８から読み出し、図５の様な正常処理フロー１１９に記述された内容に従って処理を進める。ワークフロー制御プログラム１１１は、ワークフロー中に記述された順にトランザクションを実行し、判定を行い、分岐、待合せ処理を行う。ワークフロー中のトランザクションノードには、そのトランザクションで起動すべき正常処理部３０２が定義されており、ワークフロー制御プログラム１１１は、定義されている正常処理部３０２をトランザクションの実行時に起動する。
【００３９】
図５の正常処理フロー１１９に従って、ワークフロー制御プログラム１１１は、ワークフローの実行を開始し、トランザクション１を実行する為にトランザクション１要求処理プログラム１１２の正常処理部３０２を起動する（ノード５０１）。
【００４０】
図６は本実施形態のトランザクション要求処理プログラム１１２〜１１４の正常処理部３０２の処理手順を示すフローチャートである。正常処理部３０２は図６の手順に従って処理を行う。ここで図６を用いて正常処理部３０２の処理手順について説明する。
【００４１】
ワークフロー制御プログラム１１１は、入力として要求通番４０１を正常処理部３０２へ渡す。正常処理部３０２は、業務ＤＢテーブル４００の要求通番４０１に該当する行の内容を読み出し、要求された処理に必要なサービスへの要求メッセージを作成する。そして、必要なサービスを提供するサーバに接続しているアダプタのオブジェクト・リファレンスをトレーダ１０７により取得して、要求メッセージを送信する（ステップ７０１）。
【００４２】
例えばトランザクション１要求処理プログラム１１２の正常処理部３０２は、サーバ２１０に接続されたアダプタ１０４のオブジェクト・リファレンスを取得して要求メッセージを送信する。アダプタ１０４は、要求メッセージを受信すると、ネットワーク２１６を介してサーバ２１０にそのメッセージを送信する。サーバ２１０は、要求メッセージを受信し、要求された処理を行った後、サーバ２１０で付けた処理番号と処理結果のデータを含む応答メッセージをアダプタ１０４に送信する。アダプタ１０４は、サーバ２１０からの応答メッセージを受信し、トランザクション１要求処理プログラム１１２の正常処理部３０２に送信する。
【００４３】
正常処理部３０２は、アダプタ１０４から応答メッセージを受信し、業務ＤＢテーブル４００に処理番号４０５と応答メッセージに含まれるデータ４０６を保存する（ステップ７０２）。次に正常処理部３０２は、要求メッセージに対する処理が正常に終了したかどうかを判定する（ステップ７０３）。正常に終了している場合に正常処理部３０２は、自分が行った処理を取消す為の補償トランザクションを回復処理フロー１２０に登録する（ステップ７０４）。
【００４４】
ワークフロー登録処理プログラム１１７は、正常処理部３０２に対して回復処理フロー１２０を登録する為のインタフェースを提供している。正常処理部３０２は、このインタフェースを使用して回復処理フロー１２０へ補償トランザクションを登録する。このとき正常処理部３０２は、業務ＤＢテーブル４００の回復処理フローＩＤ４０４を読み出し、そのＩＤを指定して登録を要求する。
【００４５】
ワークフロー登録処理プログラム１１７は、登録要求を受け取り、指定されたＩＤで識別される回復処理フロー１２０が未だ存在しない場合には新たに生成し、補償トランザクションの実行を記述したノードを登録する。補償トランザクションは、補償処理部３０３を起動するという作業によって記述される。最後に正常処理部３０２は、正常終了をワークフロー制御プログラム１１１に報告して（ステップ７０５）、処理を終了する。
【００４６】
ステップ７０３で判定した結果、サーバ２１０に対する要求が正常に終了していなかった場合、正常処理部３０２は、異常終了をワークフロー制御プログラム１１１に報告して処理を終了する（ステップ７０６）。
【００４７】
図７は本実施形態の回復処理フロー１２０の例を示す図である。図７ではトランザクション１（ノード５０１）の処理が終了した時点で登録されている回復処理フロー１２０を表している。
【００４８】
ワークフロー登録処理プログラム１１７は、補償トランザクションの登録を要求されると、渡されたＩＤを持つ回復処理のフローを生成し、ワークフロー管理ＤＢ１１８の回復処理フロー１２０に登録する。開始ノード６０１及び正常終了ノード６０４は、ワークフロー登録処理プログラム１１７によって、最初に回復処理フロー１２０を登録するときに付加される。補償処理１（ノード６０２）は、図６のステップ７０４で登録要求された補償トランザクションである。またこの例では、正常処理部３０２が補償トランザクションと共に判定ノード６０３及び異常終了ノード６０５を付加する例を示している。
【００４９】
ここで図５の正常処理フロー１１９に戻って説明を続ける。トランザクション１（ノード５０１）の処理が上で説明した様に終了すると、ワークフロー制御プログラム１１１は、トランザクション処理プログラム３０１からの終了報告を判定し（ノード５０２）、正常終了の場合には分岐処理を行う（ノード５０３）。トランザクション処理プログラム３０１が異常終了している場合には回復処理（ノード５０４）を実行する。回復処理については後で説明する。
【００５０】
図８は本実施形態の回復処理フロー１２０の例を示す図である。図８に示す様に分岐処理においてワークフロー制御プログラム１１１は、回復処理フロー１２０に待合せノード６０９、分岐ノード６０６、ＮＯＰ１（ノード６０７）、ＮＯＰ２（ノード６０８）を登録する。ＮＯＰ１及びＮＯＰ２は、何も処理を行わないことを示す。
【００５１】
ワークフロー制御プログラム１１１は、分岐後に並列実行されるパスの数を判断して、その数分のＮＯＰノードを登録する。その後、ワークフロー制御プログラム１１１は、トランザクション２とトランザクション３を並列に実行する。
【００５２】
ワークフロー制御プログラム１１１は、トランザクション２（ノード５０５）においてトランザクション２要求処理プログラム１１３を起動し、トランザクション３（ノード５０６）においてトランザクション３要求処理プログラム１１４を起動する。両トランザクション要求処理プログラムは図６と同様の手順で処理を行う。トランザクション２要求処理プログラム１１３は、サーバ２１１が提供するサービスをアダプタ１０５経由で要求し、トランザクション３要求処理プログラム１１４は、サーバ２１２が提供するサービスをアダプタ１０６経由で要求する。
【００５３】
各トランザクションによる処理結果は、トランザクション１（ノード５０１）のときと同じ様に業務ＤＢテーブル４００中に保存される。トランザクション２の処理結果は処理番号４０７とデータ４０８に、トランザクション３の処理結果は処理番号４０９とデータ４１０に保存される。
【００５４】
図９は本実施形態の回復処理フロー１２０の例を示す図である。図９では両トランザクションが終了した時点での回復処理フロー１２０を表している。
ワークフロー登録処理プログラム１１７は、各トランザクションからの登録要求を受けると、登録を要求されたトランザクションでＮＯＰノードを置き換える。図９において、補償処理２（ノード６１０）と補償処理３（ノード６１１）が、それぞれトランザクション２とトランザクション３の補償トランザクションである。また正常処理部３０２は補償トランザクションと共に判定ノード６１２及び６１４並びに異常終了ノード６１３及び６１５を付加している。
【００５５】
図５で両トランザクションの処理が終了すると、ワークフロー制御プログラム１１１はそれぞれのトランザクションに関して判定を行う（ノード５０７，５０８）。判定の結果、トランザクションが正常終了している場合には、待合せを行う（ノード５０９）。待合せ処理において、ワークフロー制御プログラム１１１は、二つの判定処理（ノード５０７，５０８）の両方が正常に終了したことを検出すると、次のトランザクションを処理する（ノード５１２）。トランザクション２またはトランザクション３が異常終了した場合については、後で説明する。
【００５６】
トランザクション４（ノード５１２）には、チャネル２０９への応答処理が定義されている。応答処理プログラム１１５は図３に示したトランザクション処理プログラム３０１と同様に、正常処理部３０２と補償処理部３０３とで構成される。但しトランザクション要求処理プログラムにおける正常処理部３０２及び補償処理部３０３とは動作が異なる。ワークフロー制御プログラム１１１は応答処理プログラム１１５における正常処理部３０２を起動する。
【００５７】
図１０は本実施形態の応答処理プログラム１１５における正常処理部３０２の処理手順を示すフローチャートである。応答処理プログラム１１５における正常処理部３０２は、図１０の手順に従って処理を行う。ここで図１０を用いて応答処理プログラム１１５における正常処理部３０２の処理について説明する。
【００５８】
ワークフロー制御プログラム１１１は、入力として要求通番４０１を正常処理部３０２へ渡す。正常処理部３０２は、要求通番４０１に該当する業務ＤＢ１１０の内容を読み出し、それらのデータを元にチャネル２０９への応答メッセージを生成し、通番管理プログラム１０８に要求してメッセージに通番を付ける（ステップ８０１）。
【００５９】
次に正常処理部３０２は、生成した応答メッセージをアダプタ１０３に送信する（ステップ８０２）。アダプタ１０３はネットワーク２１５経由でチャネル２０９へ応答メッセージを送信する。
【００６０】
次に正常処理部３０２は、これらの処理が正常に終了したかどうかを判定する（ステップ８０３）。正常に終了した場合には、業務ＤＢテーブル４００に応答メッセージの応答番号４１１と応答内容４１２を保存し、正常処理部３０２で行った応答メッセージによる処理を取消す為の補償トランザクションを回復処理フロー１２０に登録する（ステップ８０４）。そして正常終了をワークフロー制御プログラム１１１に報告して（ステップ８０５）処理を終了する。ステップ８０３の判定で異常が発生していると判断した場合には、異常終了をワークフロー制御プログラム１１１に報告して（ステップ８０６）処理を終了する。
【００６１】
図５でトランザクション４の処理が終了すると、ワークフロー制御プログラム１１１は判定を行う（ノード５１３）。判定の結果、トランザクション４が正常終了している場合には、ワークフロー制御プログラム１１１は処理を終了する。トランザクション４で異常終了した場合の処理については後で説明する。
【００６２】
図１１は本実施形態の回復処理フロー１２０の例を示す図である。図１１ではトランザクション４（ノード５１２）が終了した時点での回復処理フロー１２０を表している。応答処理プログラム１１５は、補償処理４（ノード６１６）、判定ノード６１７及び異常終了ノード６１８を登録している。
【００６３】
次に、トランザクションが異常終了した場合の処理について説明する。判定ノード５０２，５０７，５０８及び５１３においてトランザクションの異常終了を検出した場合、ワークフロー制御プログラム１１１は、回復処理プログラム１１６を起動する（ノード５０４，５１０，５１１及び５１４）。
【００６４】
このとき、ワークフロー制御プログラム１１１は、入力として要求通番４０１を回復処理プログラム１１６に渡す。回復処理プログラム１１６は、業務ＤＢテーブル４００の入力で与えられた要求通番４０１に該当する行から回復処理フロー１２０のＩＤを読み出し、その回復処理フロー１２０の実行をワークフロー制御プログラム１１１に要求する。回復処理プログラム１１６は、入力として要求通番４０１と回復処理フローＩＤ４０４をワークフロー制御プログラム１１１へ渡す。
【００６５】
回復処理フロー１２０は、図７〜図９及び図１１に示した様に、正常処理フロー１１９中のどの回復処理ノードで回復処理プログラム１１６が起動されたかによって異なる。ワークフロー制御プログラム１１１は、回復処理プログラム１１６からの要求を受け、入力で与えられた回復処理フローＩＤ４０４で識別される回復処理フロー１２０に従って、補償処理部３０３を起動しながら処理を行う。なお補償処理部３０３は、トランザクション要求処理プログラム１１２〜１１４と応答処理プログラム１１５とで処理手順が異なる。
【００６６】
図１２は本実施形態のトランザクション要求処理プログラム１１２〜１１４の補償処理部３０３の処理手順を示すフローチャートである。ここでトランザクション要求処理プログラム１１２〜１１４における補償処理部３０３の処理手順について図１２を用いて説明する。
【００６７】
ワークフロー制御プログラム１１１は、入力として要求通番４０１を補償処理部３０３へ渡す。補償処理部３０３は、与えられた要求通番４０１に該当する行の情報を業務ＤＢ１１０から読み出して処理を行う。
【００６８】
補償処理部３０３は、各トランザクションに対応する処理番号４０５，４０７及び４０９並びにサーバ２１０〜２１２からの応答メッセージに関するデータ４０６，４０８及び４１０を読み出し、トランザクションのキャンセルを要求する為のメッセージを生成してアダプタ１０４〜１０６に送信する（ステップ９０１）。
【００６９】
サーバ２１０〜２１２は、キャンセル要求メッセージに従って指定されたトランザクションをキャンセルし、応答メッセージをアダプタ１０４〜１０６に送信する。補償処理部３０３はサーバ２１０〜２１２からの応答メッセージを受信する（ステップ９０２）。そしてキャンセル処理が正常に終了したかどうかを判定する（ステップ９０３）。正常に終了している場合、正常終了をワークフロー制御プログラム１１１に報告する（ステップ９０４）。異常終了している場合、異常終了をワークフロー制御プログラム１１１に報告する（ステップ９０５）。
【００７０】
図１３は本実施形態の応答処理プログラム１１５の補償処理部３０３の処理手順を示すフローチャートである。応答処理プログラム１１５において補償処理部３０３は、図１３の手順に従って処理を行う。次に応答処理プログラム１１５における補償処理部３０３の処理手順について図１３を用いて説明する。
【００７１】
トランザクション要求処理プログラム１１２〜１１４に関する補償処理部３０３のときと同様に、ワークフロー制御プログラム１１１は入力として要求通番４０１を補償処理部３０３へ渡す。補償処理部３０３は、業務ＤＢ１１０から与えられた要求通番４０１に該当する行の情報を読み出して処理を行う。補償処理部３０３は、業務ＤＢ１１０から応答メッセージの応答番号４１１及び応答内容４１２を読み出して、この応答メッセージのキャンセルを要求する為のメッセージを生成してアダプタ１０３へ送信する（ステップ１００１）。
【００７２】
次に、送信処理が正常に終了したかどうかを判定する（ステップ１００２）。正常に終了した場合、正常終了をワークフロー制御プログラム１１１に報告する（ステップ１００３）。異常終了した場合は、ワークフロー制御プログラム１１１に異常終了を報告する（ステップ１００４）。
【００７３】
ワークフロー制御プログラム１１１は、判定ノードにおいて異常終了したと判定すると異常終了処理を行う。異常終了処理でワークフロー制御プログラム１１１は、回復処理が異常終了したことを示すメッセージを出力装置２１４に表示する。
【００７４】
以上で説明した様に本実施形態では、正常処理フロー１１９の実行時に各トランザクションにおいて、その補償トランザクションを回復処理フロー１２０に登録しながら処理を進める。そして障害により何れかのトランザクションが異常終了した場合には、その時点までに行ったトランザクションを回復処理フロー１２０に従って回復する。
【００７５】
本実施形態では、回復処理フロー１２０において補償処理トランザクションが異常終了した場合には、その時点で回復処理を終了する様にしたが、補償処理トランザクションの正常／異常終了に関わらず、次の補償処理トランザクションを実行する様な回復処理フロー１２０を生成することもできる。この為には正常処理部３０２が補償トランザクションだけを回復処理フロー１２０に登録し、判定ノード及び異常終了ノードの登録を行わない様にすれば良い。
【００７６】
また運用者が入力装置２１３からワークフロー制御プログラム１１１に対して回復処理フロー１２０の実行を要求する様にして、チャネル２０９からの要求メッセージに対する処理が正常に終了した後の任意の時点で回復処理を実行できる様にすることもできる。
【００７７】
本実施形態によればワークフロー制御システム２０１は、並列に実行されるパスを含む様なワークフローの実行中に回復処理の為のワークフローを動的に生成することができる。またワークフロー制御プログラム１１１が、回復処理フロー１２０に分岐処理及び待合せ処理を登録でき、並列に実行されるパスを生成することができる。そして障害が発生した場合には、この回復処理フロー１２０に従ってパス毎に回復処理を並列に実行することができる。従って回復処理に要する時間を短縮することができる。
【００７８】
更にワークフロー制御システム２０１が、要求通番４０１と回復処理フローＩＤ４０４との対応をデータベースにより管理しているので、チャネル２０９からの要求メッセージ毎に対応する回復処理フロー１２０を管理でき、複数のチャネルから同時に要求を受け付けて処理する場合にも障害が発生した要求メッセージに対応する回復処理を実行することができる。
【００７９】
以上説明した様に本実施形態のトランザクション処理システムによれば、正常処理フローの分岐により生じたパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
【００８０】
また本実施形態のトランザクション処理システムによれば、各要求メッセージと回復処理に関する情報を対応付けて管理するので、トランザクション処理システムが複数のチャネルから同時に要求メッセージを受信して処理を行う場合にも効率的な回復処理を行うことが可能である。
【００８１】
（実施形態２）
以下に履歴情報中に登録された各パス毎に回復処理を並列化する実施形態２のトランザクション処理システムについて説明する。
本実施形態の目的は、第１の実施形態と同様に回復処理の効率を向上する為に、正常処理フロー１１９の分岐により生じる複数のパス毎に回復処理を並列化することにある。第１の実施形態においては、トランザクション処理システムが回復処理フロー１２０を生成し、これを用いて回復処理を行ったが、本実施形態では、トランザクション処理システムが履歴情報をキューに保存し、これを用いて回復処理を並列に実行する。本実施形態におけるハードウェア構成は図２に示した構成と同一である。
【００８２】
図１４は本実施形態のトランザクション処理システムのソフトウェア構成を示す図である。本実施形態ではワークフロー実行プログラム１０２に履歴情報保存キュー１１０１を設けた。また本実施形態では回復処理において回復処理フロー１２０を使用しない為、ワークフロー管理ＤＢ１１８内には正常処理フロー１１９だけを示している。
【００８３】
図１５は本実施形態の業務ＤＢテーブルの一例を示す図である。業務ＤＢ１１０内には、図１５の様な業務ＤＢテーブル１３００が保存される。
業務ＤＢテーブル１３００は、要求通番１３０２と、要求内容１３０３と、正常処理フローＩＤ１３０４と、キューＩＤ１３０１を保存する為の列を含んでいる。キューＩＤ１３０１は、履歴情報保存キュー１１０１を識別する為のＩＤである。
【００８４】
本実施形態において、チャネル２０９、サーバ２１０〜２１２、ＯＲＢ１０１、アダプタ１０３〜１０６、通番管理プログラム１０８、トレーダ１０７は第１の実施形態と同様の処理を行う。以下、第１の実施形態の説明で用いた図５と同様の正常処理フロー１１９がワークフロー管理ＤＢ１１８に登録されている場合について説明する。
【００８５】
チャネル２０９からの要求メッセージは、アダプタ１０３により第１の実施形態と同様の手順で処理され、要求受付プログラム１１０３に対して要求メッセージが送信される。
要求受付プログラム１１０３は、アダプタ１０３から要求メッセージを受信し、業務ＤＢテーブル１３００に要求通番１３０２及び要求内容１３０３を登録する。そして要求メッセージの内容を元に要求に対応する正常処理フロー１１９を決定し、その正常処理フロー１１９を識別する正常処理フローＩＤ１３０４を登録する。また履歴情報保存キュー１１０１を識別する為のキューＩＤ１３０１を生成して登録する。そして正常処理フロー１１９の実行をワークフロー制御プログラム１１０８に要求する。このとき要求受付プログラム１１０３は、入力として要求通番１３０２と正常処理フローＩＤ１３０４をワークフロー制御プログラム１１０８へ渡す。
【００８６】
ワークフロー制御プログラム１１０８は、正常処理フローＩＤ１３０４で識別されるワークフローをワークフロー管理ＤＢ１１８の正常処理フロー１１９から読み出し、これに従って処理を進める。
【００８７】
図１６は本実施形態のトランザクション要求処理プログラム１１０４〜１１０６及び応答処理プログラム１１０７の概略構成を示す図である。図１６に示す様に本実施形態のワークフロー制御システム２０１は、正常処理部１２０２と、補償処理部１２０３とを有している。
【００８８】
正常処理部１２０２は、実行したトランザクションの内容を示す履歴情報をトランザクションの実行時に登録する処理部である。補償処理部１２０３は、トランザクション実行中に障害が発生した場合に前記履歴情報を取出し、前記履歴情報中に登録されたトランザクションの内容毎に補償トランザクションを並列に実行する処理部である。
【００８９】
ワークフロー制御システム２０１を正常処理部１２０２及び補償処理部１２０３として機能させる為のプログラムは、ＣＤ−ＲＯＭ等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する媒体はＣＤ−ＲＯＭ以外の他の媒体でも良い。
【００９０】
図１６の処理プログラム１２０１で示す様に、トランザクション要求処理プログラム１１０４〜１１０６及び応答処理プログラム１１０７は、正常処理部１２０２と補償処理部１２０３とで構成される。
【００９１】
ワークフロー制御プログラム１１０８は、定義に従ってトランザクション要求処理プログラム１１０４〜１１０６及び応答処理プログラム１１０７の正常処理部１２０２を起動する。またワークフロー制御プログラム１１０８は、ワークフロー中のノードの並びにＩＤを付ける。例えば、図５に示すワークフローでは、トランザクション１を含むパスのパスＩＤ＝Ａ、トランザクション２を含むパスのパスＩＤ＝Ｂ、トランザクション３を含むパスのパスＩＤ＝Ｃ、トランザクション４を含むパスのパスＩＤ＝Ｄ、として管理している。そしてワークフロー制御プログラム１１０８は、正常処理部１２０２を起動するときに前記パスＩＤを起動時の入力パラメータとして渡す。正常処理部１２０２は、その渡されたパスＩＤを履歴情報の一部として保存する。なお正常処理部１２０２の処理手順はトランザクション要求処理プログラム１１０４〜１１０６と応答処理プログラム１１０７とで異なっている。
【００９２】
図１７は本実施形態のトランザクション要求処理プログラム１１０４〜１１０６の正常処理部１２０２の処理手順を示すフローチャートである。トランザクション要求処理プログラム１１０４〜１１０６内の正常処理部１２０２は図１７の手順に従って処理を行う。以下、トランザクション要求処理プログラム１１０４〜１１０６における正常処理部１２０２の処理手順について図１７を用いて説明する。
【００９３】
ワークフロー制御プログラム１１０８は、入力として要求通番１３０２及びパスＩＤを正常処理部１２０２に与える。トランザクション要求処理プログラム１１０４〜１１０６における正常処理部１２０２は、第１の実施形態と同様の手順で要求メッセージをアダプタ１０３〜１０６へ送信する（ステップ１４０１）。サーバ２１０〜２１２でのトランザクションが終了すると、正常処理部１２０２は、アダプタから応答メッセージを受信する（ステップ１４０２）。
【００９４】
次に正常処理部１２０２は、要求メッセージに対する処理が正常に終了したかどうかを判定する（ステップ１４０３）。正常に終了している場合に正常処理部１２０２は、トランザクションに関する履歴情報を履歴情報保存キュー１１０１に登録する（ステップ１４０４）。そして、正常終了をワークフロー制御プログラム１１０８に報告して（ステップ１４０５）処理を終了する。要求が正常に終了しなかった場合に正常処理部１２０２は、異常終了をワークフロー制御プログラム１１０８に報告して処理を終了する（ステップ１４０６）。
【００９５】
図１８は本実施形態の応答処理プログラム１１０７内の正常処理部１２０２の処理手順を示すフローチャートである。応答処理プログラム１１０７内の正常処理部１２０２は、図１８の手順に従って処理を行う。次に応答処理プログラム１１０７における正常処理部１２０２の処理手順について図１８を用いて説明する。
【００９６】
ワークフロー制御プログラム１１０８は、入力として要求通番１３０２及びパスＩＤを正常処理部１２０２に与える。応答処理プログラム１１０７における正常処理部１２０２は、業務ＤＢ１１０の要求通番１３０２に該当する行の内容を読み出す。そして、それらのデータを元にチャネル２０９への応答メッセージを生成し、通番管理プログラム１０８に要求してメッセージに応答通番を付ける（ステップ１５０１）。次に正常処理部１２０２は、アダプタ１０３に生成した応答メッセージを送信する（ステップ１５０２）。
【００９７】
そして正常処理部１２０２は、これらの処理が正常に終了したかどうかを判定する（ステップ１５０３）。次に、履歴情報保存キュー１１０１に応答処理に関する履歴情報を保存する（ステップ１５０４）。そして正常終了をワークフロー制御プログラム１１０８に報告して（ステップ１５０５）処理を終了する。異常が発生していると判断した場合には、異常終了をワークフロー制御プログラム１１０８に報告して（ステップ１５０６）処理を終了する。
【００９８】
図１９は本実施形態の履歴情報保存キュー１１０１の内容例を示す図である。図１９では正常処理フロー１１９の実行が正常に終了した時点での履歴情報保存キュー１１０１の内容を表している。履歴情報保存キュー１１０１は、Ｆｉｒｓｔ Ｉｎ Ｌａｓｔ Ｏｕｔ型のキューである。
【００９９】
トランザクション要求処理プログラム１１０４〜１１０６によって保存された履歴情報は、図１９の履歴情報１６０１，１６０３及び１６０４である。また応答処理プログラム１１０７によって保存された履歴情報は履歴情報１６０６である。履歴情報１６０２及び１６０５はワークフロー制御プログラム１１０８によって保存された履歴情報である。なおトランザクション２とトランザクション３は並列に実行される為、トランザクション２に関する履歴情報１６０３とトランザクション３に関する履歴情報１６０４の順番は、各トランザクションに関する正常処理が終了したタイミングによって異なる。
【０１００】
トランザクション要求処理プログラム１１０４〜１１０６は、図１７のステップ１４０４において、各トランザクション要求処理を識別する為の処理ＩＤと、要求メッセージを送信したサーバを識別する為の送信先ＩＤと、サーバ２１０〜２１２において各トランザクションに付けられた処理番号と、各トランザクション要求処理が実行されたパスを識別する為のパスＩＤと、各サーバからの応答内容に関するデータから構成される履歴情報を保存する。
【０１０１】
また応答処理プログラム１１０７は、図１８のステップ１５０４において、応答処理を識別する為の処理ＩＤと、応答メッセージを送信したチャネル２０９を識別する為の送信先ＩＤと、応答メッセージに付けた応答通番と、応答処理が実行されたパスを識別する為のパスＩＤと、応答メッセージの内容に関するデータから構成される履歴情報を保存する。
【０１０２】
更にワークフロー制御プログラム１１０８は、分岐、待合せ処理を行うときに、履歴情報保存キュー１１０１に履歴情報を保存する。分岐処理の履歴情報は、履歴情報１６０２に示す様に、分岐処理を識別する為の処理ＩＤと、分岐する前のパスを識別する為の分岐元パスＩＤと、分岐した後のパスを識別する為の分岐先パスＩＤから構成される。待合せ処理の履歴情報は、履歴情報１６０５に示す様に、待合せ処理を識別する為の処理ＩＤと、待合せの対象となるパスを識別する為の待合せパスＩＤと、待合せ処理後のパスを識別する為の待合せ後パスＩＤから構成される。
【０１０３】
障害発生時には、この様にして保存された履歴情報を利用して回復処理を行う。ワークフロー制御プログラム１１０８は、障害発生時に回復処理プログラム１１０２を起動する（図５のノード５０４，５１０，５１１及び５１４）。このときワークフロー制御プログラム１１０８は、業務ＤＢテーブル１３００に保存されているキューＩＤ１３０１を回復処理プログラム１１０２へ入力として渡す。回復処理プログラム１１０２は、キューＩＤ１３０１で識別される履歴情報保存キュー１１０１内の履歴情報を取出しながら、図２０に示す処理手順に従って処理を行う。
【０１０４】
図２０は本実施形態の回復処理プログラム１１０２の処理手順を示すフローチャートである。以下、回復処理プログラム１１０２の処理について図２０を用いて説明する。
回復処理プログラム１１０２は、キューＩＤ１３０１で識別される履歴情報保存キュー１１０１内に履歴情報があるかどうかを判定する（ステップ１７０１）。履歴情報が履歴情報保存キュー１１０１に存在しない場合には処理を終了し、履歴情報が存在する場合には履歴情報を取出す（ステップ１７０２）。
【０１０５】
取出した履歴情報が待合せ処理に関する情報であるかどうかを判定する（ステップ１７０３）。待合せ処理でない場合、分岐処理に関する情報であるかどうかを判定する（ステップ１７０４）。分岐処理でもない場合、すなわちトランザクション要求処理または応答処理に関する情報である場合、処理ＩＤで識別される処理の補償処理部１２０３を起動する（ステップ１７０５）。
【０１０６】
次に補償処理が正常に終了したかどうかを判定する（ステップ１７０６）。正常に終了している場合には、ステップ１７０１に戻り、処理を続行する。異常終了した場合には、ワークフロー制御プログラム１１０８に報告し、処理を終了する（ステップ１７０７）。
【０１０７】
履歴情報保存キュー１１０１から取出した履歴情報が待合せ処理に関する情報であった場合、待合せパスＩＤ毎に回復処理を並列化して処理を実行する（ステップ１７０８）。これは例えば、新たにスレッドを生成して同一の履歴情報保存キュー１１０１から複数のスレッドにより履歴情報を取出して処理を行うことにより実現する。また、取出した履歴情報が分岐処理に関するものであった場合、分岐先パス毎に並列に行われている回復処理の終了を待つ（ステップ１７０９）。これは例えば複数起動したスレッドの終了を待つことによって実現する。
【０１０８】
以上で説明した回復処理プログラム１１０２の処理によって起動される補償処理部１２０３の処理手順を図２１及び図２２に示す。補償処理部１２０３は、トランザクション要求処理プログラム１１０４〜１１０６と応答処理プログラム１１０７とで処理手順が異なる。
【０１０９】
図２１は本実施形態のトランザクション要求処理プログラム１１０４〜１１０６の補償処理部１２０３の処理手順を示すフローチャートである。先ずトランザクション要求処理プログラム１１０４〜１１０６における補償処理部１２０３の処理手順について図２１を用いて説明する。
【０１１０】
回復処理プログラム１１０２は、履歴情報保存キュー１１０１から取出した履歴情報を補償処理部１２０３に入力として渡す。補償処理部１２０３は、履歴情報を元に処理番号に対応する処理をキャンセルする為のメッセージを生成し、送信先ＩＤで識別されるサーバ２１０〜２１２に接続されているアダプタ１０４〜１０６へキャンセル要求メッセージを送信する（ステップ１８０１）。
【０１１１】
次に、そのアダプタ１０４〜１０６から、サーバ２１０〜２１２で行われたキャンセル処理に関する応答メッセージを受信する（ステップ１８０２）。そしてキャンセル処理が正常に終了したかどうかを判定する（ステップ１８０３）。正常に終了している場合、回復処理プログラム１１０２に報告して終了する（ステップ１８０４）。キャンセル処理が正常に終了しなかった場合、異常終了を回復処理プログラム１１０２に報告して処理を終了する（ステップ１８０５）。
【０１１２】
図２２は本実施形態の応答処理プログラム１１０７の補償処理部１２０３の処理手順を示すフローチャートである。次に応答処理プログラム１１０７における補償処理部１２０３の処理について図２２を用いて説明する。
【０１１３】
回復処理プログラム１１０２は、履歴情報保存キュー１１０１から取出した履歴情報を補償処理部１２０３へ入力として渡す。補償処理部１２０３は、履歴情報を元に処理番号に対応する処理をキャンセルする為のメッセージを生成し、送信先ＩＤで識別されるチャネル２０９に接続されているアダプタ１０３へキャンセル要求メッセージを送信する（ステップ１９０１）。
【０１１４】
次に、キャンセル要求メッセージの送信処理が正常に終了したかどうかを判定する（ステップ１９０２）。正常に終了している場合、回復処理プログラム１１０２に報告して終了する（ステップ１９０３）。正常に終了しなかった場合、異常終了を回復処理プログラム１１０２に報告して処理を終了する（ステップ１９０４）。
【０１１５】
以上で説明した様に本実施形態によれば、正常処理部１２０２によりパスＩＤを含む履歴情報を履歴情報保存キュー１１０１に登録し、またワークフロー制御プログラム１１０８により履歴情報保存キュー１１０１に分岐処理及び待合せ処理に関する履歴情報を登録できる。そして障害が発生した場合には、ワークフロー制御システム２０１は、履歴情報保存キュー１１０１に保存した履歴情報を用いて、パス毎に回復処理を並列に実行することができる。従って回復処理に要する時間を短縮することができる。
【０１１６】
更にワークフロー制御システム２０１が、要求通番１３０２と履歴情報保存キュー１１０１との対応をデータベースにより管理しているので、チャネル２０９からの要求メッセージ毎に対応するキューを管理でき、複数のチャネルから同時に要求を受け付けて処理する場合にも、障害が発生した要求メッセージに対応する回復処理を実行することができる。
【０１１７】
本実施形態では履歴情報保存キュー１１０１を業務ＤＢ１１０とは別に設ける構成としたが、業務ＤＢ１１０内に履歴情報保存用のテーブルを設け、それを利用する形態としても良い。また運用者が入力装置２１３から回復処理プログラム１１０２を起動して、チャネル２０９からの要求メッセージに対する処理が正常に終了した後の任意の時点で回復処理を実行できる様にすることもできる。
【０１１８】
以上説明した様に本実施形態のトランザクション処理システムによれば、ワークフロー制御システムが正常処理を行ったワークフロー上のパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
【０１１９】
（実施形態３）
以下に履歴情報中に登録されたトランザクションの内容毎に回復処理を並列化する実施形態３のトランザクション処理システムについて説明する。
第２の実施形態では、回復処理の効率を向上する為に正常処理フロー１１９において並列に実行されるパス毎に回復処理を並列化した。そして、各パスにおいては、各トランザクションについて正常実行時と逆順に回復処理を行った。しかし、トランザクション処理システムが扱う業務によっては、回復時にトランザクションの順番を全く意識する必要がない場合も有り得る。本実施形態では、その様なトランザクション処理システムにおける回復処理の効率を向上する為に、履歴情報中に登録されたトランザクションの内容毎に並列に回復処理を行う。なお本実施形態におけるハードウェア構成及びソフトウェア構成は、第２の実施形態に示した構成と同一であるものとする。
【０１２０】
図２３は本実施形態の履歴情報保存キュー１１０１の内容例を示す図である。本実施形態におけるワークフロー制御プログラム１１０８は、分岐処理及び待合せ処理において履歴情報保存キュー１１０１への履歴情報の保存を行わない。また、各トランザクション要求処理プログラム１１０４〜１１０６及び応答処理プログラム１１０７内の正常処理部１２０２は、履歴情報を保存する際にパスＩＤを保存する必要がない。
【０１２１】
図２４は本実施形態の回復処理プログラム１１０２の処理手順を示すフローチャートである。次に本実施形態における回復処理プログラム１１０２の処理手順について図２４を用いて説明する。
【０１２２】
ワークフロー制御プログラム１１０８は、業務ＤＢテーブル１３００に保存されているキューＩＤ１３０１を回復処理プログラム１１０２へ入力として渡す。回復処理プログラム１１０２は、ワークフロー制御プログラム１１０８から起動されると、履歴情報保存キュー１１０１に履歴情報があるかどうかを判定する（ステップ２１０１）。履歴情報がある場合、履歴情報を取出す（ステップ２１０２）。
【０１２３】
次に、取出した履歴情報を処理する為のスレッドを生成して補償処理を並列化する（ステップ２１０３）。そして、新しく生成したスレッドにおいて補償処理部１２０３を起動する（ステップ２１０４）。履歴情報が履歴情報保存キュー１１０１内に存在する間は、以上の処理を繰り返し、履歴情報が存在しなくなると、並列化したスレッドの終了を待つ（ステップ２１０５）。
【０１２４】
次に、全ての補償処理が正常に終了したかどうかを判定する（ステップ２１０６）。全ての補償処理が正常に終了した場合、ワークフロー制御プログラム１１０８に正常終了を報告して処理を終了する（ステップ２１０７）。何れかの補償処理が異常終了した場合には、ワークフロー制御プログラム１１０８に異常を報告して処理を終了する（ステップ２１０８）。
【０１２５】
本実施形態によれば、履歴情報中に登録されたトランザクションの内容毎に並列に補償処理を行うことができる。ステップ２１０３においてスレッドを生成するときに生成したスレッド数を覚えておいて、一定数以上のスレッドを生成しない様に制御する様にしても良い。
【０１２６】
以上説明した様に本実施形態のトランザクション処理システムによれば、履歴情報中に登録されたトランザクションの内容毎に並列に回復処理を行うので、回復処理の効率を向上させることが可能である。
【０１２７】
（実施形態４）
以下に履歴情報中に登録されたメッセージの送信先毎に回復処理を並列化する実施形態４のトランザクション処理システムについて説明する。
本実施形態では、回復処理の効率を向上する為にワークフロー制御システム２０１からのメッセージの送信先毎に回復処理を並列化する。その為に回復処理プログラム１１０２において送信先ＩＤを判定し、送信先ＩＤ毎に回復処理を並列実行する様にした。
本実施形態のハードウェア構成及びソフトウェア構成は、第２の実施形態及び第３の実施形態と同一である。また、本実施形態において履歴情報保存キュー１１０１内に保存される履歴情報の内容は第３の実施形態と同一である。
【０１２８】
図２５は本実施形態の回復処理プログラム１１０２の処理手順を示すフローチャートである。本実施形態における回復処理プログラム１１０２の処理手順について図２５を用いて説明する。
【０１２９】
ワークフロー制御プログラム１１０８は、業務ＤＢテーブル１３００に保存されているキューＩＤ１３０１を回復処理プログラム１１０２へ入力として渡す。回復処理プログラム１１０２は、履歴情報保存キュー１１０１内に履歴情報があるかどうかを判定する（ステップ２２０１）。履歴情報がある場合には、履歴情報を取出す（ステップ２２０２）。
【０１３０】
次に、送信先ＩＤに対応する回復処理を実行中かどうかを判定する（ステップ２２０３）。実行中でない場合には、送信先ＩＤに対応する回復処理を実行する為のスレッドを生成し、新たに生成したスレッドにおいて、以後その送信先ＩＤに関する回復処理を実行する（ステップ２２０４）。
【０１３１】
取出した履歴情報内の送信先ＩＤに対応する回復処理が実行中である場合にはステップ２２０１に戻って次の履歴情報に関する処理を行う。ステップ２２０１において、履歴情報保存キュー１１０１内に次の履歴情報がない場合、スレッドの終了を待ち（ステップ２２０７）、次に全ての回復処理が正常に終了したかどうかを判定する（ステップ２２０８）。全ての回復処理が正常に終了した場合、ワークフロー制御プログラム１１０８に正常終了を報告して処理を終了する（ステップ２２０９）。何れかの回復処理が異常終了した場合には、ワークフロー制御プログラム１１０８に異常を報告して処理を終了する（ステップ２２１０）。      
【０１３２】
図２６は本実施形態のステップ２２０４において生成されるスレッドの処理手順を示すフローチャートである。ステップ２２０４において生成された各スレッドの処理手順について図２６を用いて説明する。
【０１３３】
各スレッドは、履歴情報保存キュー１１０１内に履歴情報があるかどうかを判定する（ステップ２６０１）。履歴情報がある場合には、履歴情報を取出す（ステップ２６０２）。取出した履歴情報内の送信先ＩＤに対応する回復処理が、自分の処理している送信先ＩＤと一致するかを判定する（ステップ２６０３）。一致する場合には補償処理部１２０３を実行する（ステップ２６０４）。一致しない場合にはステップ２６０１に戻って次の履歴情報に関する処理を行う。
【０１３４】
補償処理部１２０３の実行終了後、当該処理が正常に終了したかどうかを確認する（ステップ２６０５）。正常に終了している場合、ステップ２６０１に戻って次の履歴情報に関する処理を行う。異常終了した場合、回復処理プログラム１１０２に異常終了を報告して処理を終了する（ステップ２６０６）。ステップ２６０１において、履歴情報保存キュー１１０１内に次の履歴情報がない場合、回復処理プログラム１１０２に正常終了を報告して終了する（ステップ２６０７）。
【０１３５】
本実施形態によれば、正常処理において要求メッセージを送信したときの送信先サーバ及び応答メッセージを送信したチャネル毎に並列に回復処理を行うことができる。
【０１３６】
以上説明した様に本実施形態のトランザクション処理システムによれば、ワークフロー制御システムが正常処理において送信したメッセージの送信先毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
【図面の簡単な説明】
【０１３７】
【図１】実施形態１のワークフロー制御システムのソフトウェア構成を示す図である。
【図２】実施形態１のトランザクション処理システムのハードウェア構成を示す図である。
【図３】実施形態１の要求処理プログラム１１２〜１１４及び応答処理プログラム１１５の概略構成を示す図である。
【図４】実施形態１の業務ＤＢテーブルの一例を示す図である。
【図５】実施形態１の正常処理フロー１１９の一例を示す図である。
【図６】実施形態１のトランザクション要求処理プログラム１１２〜１１４の正常処理部３０２の処理手順を示すフローチャートである。
【図７】実施形態１の回復処理フロー１２０の例を示す図である。
【図８】実施形態１の回復処理フロー１２０の例を示す図である。
【図９】実施形態１の回復処理フロー１２０の例を示す図である。
【図１０】実施形態１の応答処理プログラム１１５における正常処理部３０２の処理手順を示すフローチャートである。
【図１１】実施形態１の回復処理フロー１２０の例を示す図である。
【図１２】実施形態１のトランザクション要求処理プログラム１１２〜１１４の補償処理部３０３の処理手順を示すフローチャートである。
【図１３】実施形態１の応答処理プログラム１１５の補償処理部３０３の処理手順を示すフローチャートである。
【図１４】実施形態２のトランザクション処理システムのソフトウェア構成を示す図である。
【図１５】実施形態２の業務ＤＢテーブルの一例を示す図である。
【図１６】実施形態２のトランザクション要求処理プログラム１１０４〜１１０６及び応答処理プログラム１１０７の概略構成を示す図である。
【図１７】実施形態２のトランザクション要求処理プログラム１１０４〜１１０６の正常処理部１２０２の処理手順を示すフローチャートである。
【図１８】実施形態２の応答処理プログラム１１０７内の正常処理部１２０２の処理手順を示すフローチャートである。
【図１９】実施形態２の履歴情報保存キュー１１０１の内容例を示す図である。
【図２０】実施形態２の回復処理プログラム１１０２の処理手順を示すフローチャートである。
【図２１】実施形態２のトランザクション要求処理プログラム１１０４〜１１０６の補償処理部１２０３の処理手順を示すフローチャートである。
【図２２】実施形態２の応答処理プログラム１１０７の補償処理部１２０３の処理手順を示すフローチャートである。
【図２３】実施形態３の履歴情報保存キュー１１０１の内容例を示す図である。
【図２４】実施形態３の回復処理プログラム１１０２の処理手順を示すフローチャートである。
【図２５】実施形態４の回復処理プログラム１１０２の処理手順を示すフローチャートである。
【図２６】実施形態４のステップ２２０４において生成されるスレッドの処理手順を示すフローチャートである。
【符号の説明】
【０１３８】
１０１…ＯＲＢ、１０２…ワークフロー実行プログラム、１０３〜１０６…アダプタ、１０７…トレーダ、１０８…通番管理プログラム、１０９…要求受付プログラム、１１０…業務ＤＢ、１１１…ワークフロー制御プログラム、１１２〜１１４…要求処理プログラム、１１５…応答処理プログラム、１１６…回復処理プログラム、１１７…ワークフロー登録処理プログラム、１１８…ワークフロー管理ＤＢ、１１９…正常処理フロー、１２０…回復処理フロー、２０１…ワークフロー制御システム、２０２…ＣＰＵ、２０３…メモリ、２０４…ハードディスク装置、２０５〜２０８…ネットワーク・インタフェース・コントローラ、２０９…チャネル、２１０〜２１２…サーバ、２１３…入力装置、２１４…出力装置、２１５〜２１８…ネットワーク、３０１…処理プログラム、３０２…正常処理部、３０３…補償処理部、４００…業務ＤＢテーブル、４０１…要求通番、４０２…要求内容、４０３…正常処理フローＩＤ、４０４…回復処理フローＩＤ、４０５，４０７及び４０９…処理番号、４０６，４０８及び４１０…データ、４１１…応答番号、４１２…応答内容、５０１〜５１４…ノード、６０１〜６０５…ノード、６０６〜６０９…ノード、６１０〜６１５…ノード、６１６〜６１８…ノード、１１０１…履歴情報保存キュー、１１０２…回復処理プログラム、１１０３…要求受付プログラム、１１０４〜１１０６…要求処理プログラム、１１０７…応答処理プログラム、１１０８…ワークフロー制御プログラム、１３００…業務ＤＢテーブル、１３０１…キューＩＤ、１３０２…要求通番、１３０３…要求内容、１３０４…正常処理フローＩＤ、１２０１…処理プログラム、１２０２…正常処理部、１２０３…補償処理部、１６０１〜１６０６…履歴情報。
【図１】
2005317010.tif 000003
【図２】
2005317010.tif 000004
【図３】
2005317010.tif 000005
【図４】
2005317010.tif 000006
【図５】
2005317010.tif 000007
【図６】
2005317010.tif 000008
【図７】
2005317010.tif 000009
【図８】
2005317010.tif 000010
【図９】
2005317010.tif 000011
【図１０】
2005317010.tif 000012
【図１１】
2005317010.tif 000013
【図１２】
2005317010.tif 000014
【図１３】
2005317010.tif 000015
【図１４】
2005317010.tif 000016
【図１５】
2005317010.tif 000017
【図１６】
2005317010.tif 000018
【図１７】
2005317010.tif 000019
【図１８】
2005317010.tif 000020
【図１９】
2005317010.tif 000021
【図２０】
2005317010.tif 000022
【図２１】
2005317010.tif 000023
【図２２】
2005317010.tif 000024
【図２３】
2005317010.tif 000025
【図２４】
2005317010.tif 000026
【図２５】
2005317010.tif 000027
【図２６】
2005317010.tif 000028