(実施形態1)
以下に正常処理フローにおいて分岐したパス毎に回復処理を並列化する実施形態1のトランザクション処理システムについて説明する。
図1は本実施形態のワークフロー制御システムのソフトウェア構成を示す図である。本実施形態では、ワークフロー制御システム内のソフトウェアを構成する各コンポーネントをオブジェクトとして実装した場合について説明する。
図2は本実施形態のトランザクション処理システムのハードウェア構成を示す図である。本実施形態のシステムは、ワークフロー制御システム201と、このシステムにネットワーク215〜218で接続されたチャネル209及びサーバ210〜212とで構成される。
ワークフロー制御システム201は、チャネル209からの要求メッセージを解釈し、サーバ210〜212に対してトランザクションを要求しながら、チャネル209からの要求を満たす為の処理を行うシステムである。チャネル209は、ユーザからの要求に従ってワークフロー制御システム201に要求メッセージを送信するシステムである。サーバ210〜212は、ワークフロー制御システム201からの要求に従ってトランザクションを実行するシステムである。ここでは、サーバ210〜212がそれぞれ別のサービスを提供していると仮定する。本実施形態では、チャネルが1つとサーバが3つ接続された構成を示しているが、より多くのチャネル及びサーバを接続した構成としても良い。
ワークフロー制御システム201は、CPU202、メモリ203、ハードディスク装置204、ネットワーク・インタフェース・コントローラ205〜208、入力装置213、出力装置214で構成される。ハードディスク装置204には、ワークフローに従って処理を行う為のソフトウェア群が保存されており、これらのソフトウェアはメモリ203にロードされてCPU202により実行される。ネットワーク・インタフェース・コントローラ205〜208は、ネットワーク215〜218に対するインタフェースを制御し、チャネル209及びサーバ210〜212と接続する。
次に本実施形態のワークフロー制御システム201のソフトウェア構成について図1を用いて説明する。ワークフロー制御システム201は、オブジェクト・リクエスト・ブローカであるORB101と、トレーダ107と、アダプタ103〜106と、通番管理プログラム108と、ワークフロー実行プログラム102とで構成される。
ORB101は、オブジェクト間のリクエストと、その応答の送受信を可能にするメッセージング機構を提供する。ワークフロー制御システム201内の各コンポーネントは、ORB101を使用して他のコンポーネントとの間で通信を行う。
トレーダ107は、各コンポーネントのサービス内容からオブジェクトを検索する為の仕組みを提供する。アダプタ103〜106、ワークフロー実行プログラム102は、自分の提供するサービス内容をトレーダ107に登録する。また、メッセージ送信時にはトレーダ107によりサービスを検索して送信先のオブジェクト・リファレンスを受け取る。オブジェクト・リファレンスは、対象になるオブジェクトを一意に識別する為の情報を含んだデータである。各オブジェクトは、オブジェクト・リファレンスを使用して対象となるオブジェクトへのメッセージの送信をORBに要求する。
アダプタ103〜106は、チャネル209及びサーバ210〜212と、ワークフロー実行プログラム102との間でのメッセージの転送を行うコンポーネントである。アダプタ103〜106は、それぞれ異なるプロトコルでチャネル209やサーバ210〜212と接続されており、ネットワーク215〜218を介してチャネル209やサーバ210〜212と接続する為のプロトコルの制御及びメッセージフォーマットの変換を行う。
通番管理プログラム108は、ワークフロー制御システム201内で転送されるメッセージに固有の番号を与える為のコンポーネントである。通番管理プログラム108では、シーケンシャルに番号を管理しており、各コンポーネントからの要求を受けてワークフロー制御システム201内で一意な番号を返す。各コンポーネントは、通番管理プログラム108から受け取った通番でメッセージに番号を付ける。
ワークフロー実行プログラム102は、チャネル209から要求メッセージを受信し、ワークフローに従ってサーバ210〜212にトランザクションの処理を依頼してチャネル209からの要求を処理するコンポーネントである。
ワークフロー実行プログラム102は、チャネル209からの要求を受け付ける要求受付プログラム109と、要求内容や処理の中間データを保存する為の業務DB110と、ワークフローに従ってトランザクションを起動するワークフロー制御プログラム111と、ワークフローを保存する為のワークフロー管理DB118と、ワークフロー制御プログラム111から起動され、サーバ210〜212に対して処理を要求するトランザクション要求処理プログラム112〜114と、ワークフロー制御プログラム111から起動され、チャネル209へ応答メッセージを送信する応答処理プログラム115と、ワークフロー管理DB118にワークフローを登録する為のワークフロー登録処理プログラム117と、ワークフローの実行中に障害が発生した場合に回復処理を行う回復処理プログラム116とで構成される。
図3は本実施形態の要求処理プログラム112〜114及び応答処理プログラム115の概略構成を示す図である。図3に示す様に本実施形態のワークフロー制御システム201は、正常処理部302と、補償処理部303とを有している。
正常処理部302は、トランザクション実行中に障害が発生した場合の障害回復を行う補償処理をトランザクションの実行時に回復処理フロー120として登録する処理部である。補償処理部303は、トランザクション実行中に障害が発生した場合に前記登録した回復処理フロー120に従って一連の補償処理を並列に実行する処理部である。
ワークフロー制御システム201を正常処理部302及び補償処理部303として機能させる為のプログラムは、CD−ROM等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する媒体はCD−ROM以外の他の媒体でも良い。
図3の処理プログラム301に示す様にトランザクション要求処理プログラム112〜114及び応答処理プログラム115は、サーバ210〜212に対してトランザクションを要求する為の正常処理部302と、正常に実行されたトランザクションを取消す為の補償処理部303とで構成される。
ワークフロー管理DB118及び業務DB110は、ハードディスク装置204に保存される。ワークフロー管理DB118には、正常時のワークフローを記述した正常処理フロー119と、障害発生時に実行される回復処理フロー120とが保存される。業務DB110には図4に示す様な業務DBテーブルが保存される。
図4は本実施形態の業務DBテーブルの一例を示す図である。業務DBテーブル400の一つの行は、要求メッセージに付与された要求通番401と、要求内容402と、正常処理フロー119を識別する為の正常処理フローID403と、回復処理フロー120を識別する為の回復処理フローID404と、サーバ210〜212で各トランザクションに対して付けられる処理番号405,407及び409と、サーバ210〜212からの応答メッセージで得られたデータ406,408及び410と、チャネル209に対する応答番号411と、応答内容412とを格納する列を持つ。
ワークフロー制御システム201の運用者は、予め入力装置213から正常処理フロー119を登録する。ワークフロー登録処理プログラム117は、ワークフローを登録する為のコマンドやGUIを提供し、入力されたワークフローをワークフロー管理DB118の正常処理フロー119に登録する。ワークフローの登録時に運用者は、ワークフローを一意に識別する為の正常処理フローID403を付ける。このIDによりワークフロー制御プログラム111は、正常処理フロー119に登録された複数のワークフローを管理することができる。この様にして定義された正常処理フロー119の例を図5に示す。
図5は本実施形態の正常処理フロー119の一例を示す図である。ワークフロー中のトランザクションを記述したノード501,505,506及び512には、対応するトランザクションを実行する為のプログラムを定義する。
本実施形態では、各トランザクションに対応してトランザクション処理プログラム301を用意し、その正常処理部302をオブジェクトとして実装する。そして、これらのオブジェクトを各ノードで起動するオブジェクトとして定義する。回復処理ノード504,510,511及び514には、起動するオブジェクトとして回復処理プログラム116を定義しておく。回復処理ノードに定義する内容は、ワークフロー中のどの位置にあっても全て同一の内容を設定することができる。
以下では、チャネル209から要求メッセージを受信し、図5に示したワークフローに従って処理を行う場合の動作について説明する。アダプタ103は、チャネル209から要求メッセージを受信し、通番管理プログラム108により要求メッセージに対する通番を取得し、この通番をメッセージに付加する。次にトレーダ107により、要求受付プログラム109のオブジェクト・リファレンスを取得し、そのオブジェクト・リファレンスを使用して要求受付プログラム109へ要求メッセージを送信する。
要求受付プログラム109は、アダプタ103から要求メッセージを受信し、業務DBテーブル400に要求通番401及び要求内容402を登録する。そして、要求メッセージの内容を元に要求に対応する正常処理フロー119を決定し、その正常処理フロー119を識別する為の正常処理フローID403を登録する。また回復処理フロー120を識別する為の回復処理フローID404を生成して登録する。その後、正常処理フロー119の実行をワークフロー制御プログラム111に要求する。このとき要求受付プログラム109は、入力として要求通番401と正常処理フローID403をワークフロー制御プログラム111へ渡す。
ワークフロー制御プログラム111は、要求されたワークフローをワークフロー管理DB118から読み出し、図5の様な正常処理フロー119に記述された内容に従って処理を進める。ワークフロー制御プログラム111は、ワークフロー中に記述された順にトランザクションを実行し、判定を行い、分岐、待合せ処理を行う。ワークフロー中のトランザクションノードには、そのトランザクションで起動すべき正常処理部302が定義されており、ワークフロー制御プログラム111は、定義されている正常処理部302をトランザクションの実行時に起動する。
図5の正常処理フロー119に従って、ワークフロー制御プログラム111は、ワークフローの実行を開始し、トランザクション1を実行する為にトランザクション1要求処理プログラム112の正常処理部302を起動する(ノード501)。
図6は本実施形態のトランザクション要求処理プログラム112〜114の正常処理部302の処理手順を示すフローチャートである。正常処理部302は図6の手順に従って処理を行う。ここで図6を用いて正常処理部302の処理手順について説明する。
ワークフロー制御プログラム111は、入力として要求通番401を正常処理部302へ渡す。正常処理部302は、業務DBテーブル400の要求通番401に該当する行の内容を読み出し、要求された処理に必要なサービスへの要求メッセージを作成する。そして、必要なサービスを提供するサーバに接続しているアダプタのオブジェクト・リファレンスをトレーダ107により取得して、要求メッセージを送信する(ステップ701)。
例えばトランザクション1要求処理プログラム112の正常処理部302は、サーバ210に接続されたアダプタ104のオブジェクト・リファレンスを取得して要求メッセージを送信する。アダプタ104は、要求メッセージを受信すると、ネットワーク216を介してサーバ210にそのメッセージを送信する。サーバ210は、要求メッセージを受信し、要求された処理を行った後、サーバ210で付けた処理番号と処理結果のデータを含む応答メッセージをアダプタ104に送信する。アダプタ104は、サーバ210からの応答メッセージを受信し、トランザクション1要求処理プログラム112の正常処理部302に送信する。
正常処理部302は、アダプタ104から応答メッセージを受信し、業務DBテーブル400に処理番号405と応答メッセージに含まれるデータ406を保存する(ステップ702)。次に正常処理部302は、要求メッセージに対する処理が正常に終了したかどうかを判定する(ステップ703)。正常に終了している場合に正常処理部302は、自分が行った処理を取消す為の補償トランザクションを回復処理フロー120に登録する(ステップ704)。
ワークフロー登録処理プログラム117は、正常処理部302に対して回復処理フロー120を登録する為のインタフェースを提供している。正常処理部302は、このインタフェースを使用して回復処理フロー120へ補償トランザクションを登録する。このとき正常処理部302は、業務DBテーブル400の回復処理フローID404を読み出し、そのIDを指定して登録を要求する。
ワークフロー登録処理プログラム117は、登録要求を受け取り、指定されたIDで識別される回復処理フロー120が未だ存在しない場合には新たに生成し、補償トランザクションの実行を記述したノードを登録する。補償トランザクションは、補償処理部303を起動するという作業によって記述される。最後に正常処理部302は、正常終了をワークフロー制御プログラム111に報告して(ステップ705)、処理を終了する。
ステップ703で判定した結果、サーバ210に対する要求が正常に終了していなかった場合、正常処理部302は、異常終了をワークフロー制御プログラム111に報告して処理を終了する(ステップ706)。
図7は本実施形態の回復処理フロー120の例を示す図である。図7ではトランザクション1(ノード501)の処理が終了した時点で登録されている回復処理フロー120を表している。
ワークフロー登録処理プログラム117は、補償トランザクションの登録を要求されると、渡されたIDを持つ回復処理のフローを生成し、ワークフロー管理DB118の回復処理フロー120に登録する。開始ノード601及び正常終了ノード604は、ワークフロー登録処理プログラム117によって、最初に回復処理フロー120を登録するときに付加される。補償処理1(ノード602)は、図6のステップ704で登録要求された補償トランザクションである。またこの例では、正常処理部302が補償トランザクションと共に判定ノード603及び異常終了ノード605を付加する例を示している。
ここで図5の正常処理フロー119に戻って説明を続ける。トランザクション1(ノード501)の処理が上で説明した様に終了すると、ワークフロー制御プログラム111は、トランザクション処理プログラム301からの終了報告を判定し(ノード502)、正常終了の場合には分岐処理を行う(ノード503)。トランザクション処理プログラム301が異常終了している場合には回復処理(ノード504)を実行する。回復処理については後で説明する。
図8は本実施形態の回復処理フロー120の例を示す図である。図8に示す様に分岐処理においてワークフロー制御プログラム111は、回復処理フロー120に待合せノード609、分岐ノード606、NOP1(ノード607)、NOP2(ノード608)を登録する。NOP1及びNOP2は、何も処理を行わないことを示す。
ワークフロー制御プログラム111は、分岐後に並列実行されるパスの数を判断して、その数分のNOPノードを登録する。その後、ワークフロー制御プログラム111は、トランザクション2とトランザクション3を並列に実行する。
ワークフロー制御プログラム111は、トランザクション2(ノード505)においてトランザクション2要求処理プログラム113を起動し、トランザクション3(ノード506)においてトランザクション3要求処理プログラム114を起動する。両トランザクション要求処理プログラムは図6と同様の手順で処理を行う。トランザクション2要求処理プログラム113は、サーバ211が提供するサービスをアダプタ105経由で要求し、トランザクション3要求処理プログラム114は、サーバ212が提供するサービスをアダプタ106経由で要求する。
各トランザクションによる処理結果は、トランザクション1(ノード501)のときと同じ様に業務DBテーブル400中に保存される。トランザクション2の処理結果は処理番号407とデータ408に、トランザクション3の処理結果は処理番号409とデータ410に保存される。
図9は本実施形態の回復処理フロー120の例を示す図である。図9では両トランザクションが終了した時点での回復処理フロー120を表している。
ワークフロー登録処理プログラム117は、各トランザクションからの登録要求を受けると、登録を要求されたトランザクションでNOPノードを置き換える。図9において、補償処理2(ノード610)と補償処理3(ノード611)が、それぞれトランザクション2とトランザクション3の補償トランザクションである。また正常処理部302は補償トランザクションと共に判定ノード612及び614並びに異常終了ノード613及び615を付加している。
図5で両トランザクションの処理が終了すると、ワークフロー制御プログラム111はそれぞれのトランザクションに関して判定を行う(ノード507,508)。判定の結果、トランザクションが正常終了している場合には、待合せを行う(ノード509)。待合せ処理において、ワークフロー制御プログラム111は、二つの判定処理(ノード507,508)の両方が正常に終了したことを検出すると、次のトランザクションを処理する(ノード512)。トランザクション2またはトランザクション3が異常終了した場合については、後で説明する。
トランザクション4(ノード512)には、チャネル209への応答処理が定義されている。応答処理プログラム115は図3に示したトランザクション処理プログラム301と同様に、正常処理部302と補償処理部303とで構成される。但しトランザクション要求処理プログラムにおける正常処理部302及び補償処理部303とは動作が異なる。ワークフロー制御プログラム111は応答処理プログラム115における正常処理部302を起動する。
図10は本実施形態の応答処理プログラム115における正常処理部302の処理手順を示すフローチャートである。応答処理プログラム115における正常処理部302は、図10の手順に従って処理を行う。ここで図10を用いて応答処理プログラム115における正常処理部302の処理について説明する。
ワークフロー制御プログラム111は、入力として要求通番401を正常処理部302へ渡す。正常処理部302は、要求通番401に該当する業務DB110の内容を読み出し、それらのデータを元にチャネル209への応答メッセージを生成し、通番管理プログラム108に要求してメッセージに通番を付ける(ステップ801)。
次に正常処理部302は、生成した応答メッセージをアダプタ103に送信する(ステップ802)。アダプタ103はネットワーク215経由でチャネル209へ応答メッセージを送信する。
次に正常処理部302は、これらの処理が正常に終了したかどうかを判定する(ステップ803)。正常に終了した場合には、業務DBテーブル400に応答メッセージの応答番号411と応答内容412を保存し、正常処理部302で行った応答メッセージによる処理を取消す為の補償トランザクションを回復処理フロー120に登録する(ステップ804)。そして正常終了をワークフロー制御プログラム111に報告して(ステップ805)処理を終了する。ステップ803の判定で異常が発生していると判断した場合には、異常終了をワークフロー制御プログラム111に報告して(ステップ806)処理を終了する。
図5でトランザクション4の処理が終了すると、ワークフロー制御プログラム111は判定を行う(ノード513)。判定の結果、トランザクション4が正常終了している場合には、ワークフロー制御プログラム111は処理を終了する。トランザクション4で異常終了した場合の処理については後で説明する。
図11は本実施形態の回復処理フロー120の例を示す図である。図11ではトランザクション4(ノード512)が終了した時点での回復処理フロー120を表している。応答処理プログラム115は、補償処理4(ノード616)、判定ノード617及び異常終了ノード618を登録している。
次に、トランザクションが異常終了した場合の処理について説明する。判定ノード502,507,508及び513においてトランザクションの異常終了を検出した場合、ワークフロー制御プログラム111は、回復処理プログラム116を起動する(ノード504,510,511及び514)。
このとき、ワークフロー制御プログラム111は、入力として要求通番401を回復処理プログラム116に渡す。回復処理プログラム116は、業務DBテーブル400の入力で与えられた要求通番401に該当する行から回復処理フロー120のIDを読み出し、その回復処理フロー120の実行をワークフロー制御プログラム111に要求する。回復処理プログラム116は、入力として要求通番401と回復処理フローID404をワークフロー制御プログラム111へ渡す。
回復処理フロー120は、図7〜図9及び図11に示した様に、正常処理フロー119中のどの回復処理ノードで回復処理プログラム116が起動されたかによって異なる。ワークフロー制御プログラム111は、回復処理プログラム116からの要求を受け、入力で与えられた回復処理フローID404で識別される回復処理フロー120に従って、補償処理部303を起動しながら処理を行う。なお補償処理部303は、トランザクション要求処理プログラム112〜114と応答処理プログラム115とで処理手順が異なる。
図12は本実施形態のトランザクション要求処理プログラム112〜114の補償処理部303の処理手順を示すフローチャートである。ここでトランザクション要求処理プログラム112〜114における補償処理部303の処理手順について図12を用いて説明する。
ワークフロー制御プログラム111は、入力として要求通番401を補償処理部303へ渡す。補償処理部303は、与えられた要求通番401に該当する行の情報を業務DB110から読み出して処理を行う。
補償処理部303は、各トランザクションに対応する処理番号405,407及び409並びにサーバ210〜212からの応答メッセージに関するデータ406,408及び410を読み出し、トランザクションのキャンセルを要求する為のメッセージを生成してアダプタ104〜106に送信する(ステップ901)。
サーバ210〜212は、キャンセル要求メッセージに従って指定されたトランザクションをキャンセルし、応答メッセージをアダプタ104〜106に送信する。補償処理部303はサーバ210〜212からの応答メッセージを受信する(ステップ902)。そしてキャンセル処理が正常に終了したかどうかを判定する(ステップ903)。正常に終了している場合、正常終了をワークフロー制御プログラム111に報告する(ステップ904)。異常終了している場合、異常終了をワークフロー制御プログラム111に報告する(ステップ905)。
図13は本実施形態の応答処理プログラム115の補償処理部303の処理手順を示すフローチャートである。応答処理プログラム115において補償処理部303は、図13の手順に従って処理を行う。次に応答処理プログラム115における補償処理部303の処理手順について図13を用いて説明する。
トランザクション要求処理プログラム112〜114に関する補償処理部303のときと同様に、ワークフロー制御プログラム111は入力として要求通番401を補償処理部303へ渡す。補償処理部303は、業務DB110から与えられた要求通番401に該当する行の情報を読み出して処理を行う。補償処理部303は、業務DB110から応答メッセージの応答番号411及び応答内容412を読み出して、この応答メッセージのキャンセルを要求する為のメッセージを生成してアダプタ103へ送信する(ステップ1001)。
次に、送信処理が正常に終了したかどうかを判定する(ステップ1002)。正常に終了した場合、正常終了をワークフロー制御プログラム111に報告する(ステップ1003)。異常終了した場合は、ワークフロー制御プログラム111に異常終了を報告する(ステップ1004)。
ワークフロー制御プログラム111は、判定ノードにおいて異常終了したと判定すると異常終了処理を行う。異常終了処理でワークフロー制御プログラム111は、回復処理が異常終了したことを示すメッセージを出力装置214に表示する。
以上で説明した様に本実施形態では、正常処理フロー119の実行時に各トランザクションにおいて、その補償トランザクションを回復処理フロー120に登録しながら処理を進める。そして障害により何れかのトランザクションが異常終了した場合には、その時点までに行ったトランザクションを回復処理フロー120に従って回復する。
本実施形態では、回復処理フロー120において補償処理トランザクションが異常終了した場合には、その時点で回復処理を終了する様にしたが、補償処理トランザクションの正常/異常終了に関わらず、次の補償処理トランザクションを実行する様な回復処理フロー120を生成することもできる。この為には正常処理部302が補償トランザクションだけを回復処理フロー120に登録し、判定ノード及び異常終了ノードの登録を行わない様にすれば良い。
また運用者が入力装置213からワークフロー制御プログラム111に対して回復処理フロー120の実行を要求する様にして、チャネル209からの要求メッセージに対する処理が正常に終了した後の任意の時点で回復処理を実行できる様にすることもできる。
本実施形態によればワークフロー制御システム201は、並列に実行されるパスを含む様なワークフローの実行中に回復処理の為のワークフローを動的に生成することができる。またワークフロー制御プログラム111が、回復処理フロー120に分岐処理及び待合せ処理を登録でき、並列に実行されるパスを生成することができる。そして障害が発生した場合には、この回復処理フロー120に従ってパス毎に回復処理を並列に実行することができる。従って回復処理に要する時間を短縮することができる。
更にワークフロー制御システム201が、要求通番401と回復処理フローID404との対応をデータベースにより管理しているので、チャネル209からの要求メッセージ毎に対応する回復処理フロー120を管理でき、複数のチャネルから同時に要求を受け付けて処理する場合にも障害が発生した要求メッセージに対応する回復処理を実行することができる。
以上説明した様に本実施形態のトランザクション処理システムによれば、正常処理フローの分岐により生じたパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
また本実施形態のトランザクション処理システムによれば、各要求メッセージと回復処理に関する情報を対応付けて管理するので、トランザクション処理システムが複数のチャネルから同時に要求メッセージを受信して処理を行う場合にも効率的な回復処理を行うことが可能である。
(実施形態2)
以下に履歴情報中に登録された各パス毎に回復処理を並列化する実施形態2のトランザクション処理システムについて説明する。
本実施形態の目的は、第1の実施形態と同様に回復処理の効率を向上する為に、正常処理フロー119の分岐により生じる複数のパス毎に回復処理を並列化することにある。第1の実施形態においては、トランザクション処理システムが回復処理フロー120を生成し、これを用いて回復処理を行ったが、本実施形態では、トランザクション処理システムが履歴情報をキューに保存し、これを用いて回復処理を並列に実行する。本実施形態におけるハードウェア構成は図2に示した構成と同一である。
図14は本実施形態のトランザクション処理システムのソフトウェア構成を示す図である。本実施形態ではワークフロー実行プログラム102に履歴情報保存キュー1101を設けた。また本実施形態では回復処理において回復処理フロー120を使用しない為、ワークフロー管理DB118内には正常処理フロー119だけを示している。
図15は本実施形態の業務DBテーブルの一例を示す図である。業務DB110内には、図15の様な業務DBテーブル1300が保存される。
業務DBテーブル1300は、要求通番1302と、要求内容1303と、正常処理フローID1304と、キューID1301を保存する為の列を含んでいる。キューID1301は、履歴情報保存キュー1101を識別する為のIDである。
本実施形態において、チャネル209、サーバ210〜212、ORB101、アダプタ103〜106、通番管理プログラム108、トレーダ107は第1の実施形態と同様の処理を行う。以下、第1の実施形態の説明で用いた図5と同様の正常処理フロー119がワークフロー管理DB118に登録されている場合について説明する。
チャネル209からの要求メッセージは、アダプタ103により第1の実施形態と同様の手順で処理され、要求受付プログラム1103に対して要求メッセージが送信される。
要求受付プログラム1103は、アダプタ103から要求メッセージを受信し、業務DBテーブル1300に要求通番1302及び要求内容1303を登録する。そして要求メッセージの内容を元に要求に対応する正常処理フロー119を決定し、その正常処理フロー119を識別する正常処理フローID1304を登録する。また履歴情報保存キュー1101を識別する為のキューID1301を生成して登録する。そして正常処理フロー119の実行をワークフロー制御プログラム1108に要求する。このとき要求受付プログラム1103は、入力として要求通番1302と正常処理フローID1304をワークフロー制御プログラム1108へ渡す。
ワークフロー制御プログラム1108は、正常処理フローID1304で識別されるワークフローをワークフロー管理DB118の正常処理フロー119から読み出し、これに従って処理を進める。
図16は本実施形態のトランザクション要求処理プログラム1104〜1106及び応答処理プログラム1107の概略構成を示す図である。図16に示す様に本実施形態のワークフロー制御システム201は、正常処理部1202と、補償処理部1203とを有している。
正常処理部1202は、実行したトランザクションの内容を示す履歴情報をトランザクションの実行時に登録する処理部である。補償処理部1203は、トランザクション実行中に障害が発生した場合に前記履歴情報を取出し、前記履歴情報中に登録されたトランザクションの内容毎に補償トランザクションを並列に実行する処理部である。
ワークフロー制御システム201を正常処理部1202及び補償処理部1203として機能させる為のプログラムは、CD−ROM等の記録媒体に記録され磁気ディスク等に格納された後、メモリにロードされて実行されるものとする。なお前記プログラムを記録する媒体はCD−ROM以外の他の媒体でも良い。
図16の処理プログラム1201で示す様に、トランザクション要求処理プログラム1104〜1106及び応答処理プログラム1107は、正常処理部1202と補償処理部1203とで構成される。
ワークフロー制御プログラム1108は、定義に従ってトランザクション要求処理プログラム1104〜1106及び応答処理プログラム1107の正常処理部1202を起動する。またワークフロー制御プログラム1108は、ワークフロー中のノードの並びにIDを付ける。例えば、図5に示すワークフローでは、トランザクション1を含むパスのパスID=A、トランザクション2を含むパスのパスID=B、トランザクション3を含むパスのパスID=C、トランザクション4を含むパスのパスID=D、として管理している。そしてワークフロー制御プログラム1108は、正常処理部1202を起動するときに前記パスIDを起動時の入力パラメータとして渡す。正常処理部1202は、その渡されたパスIDを履歴情報の一部として保存する。なお正常処理部1202の処理手順はトランザクション要求処理プログラム1104〜1106と応答処理プログラム1107とで異なっている。
図17は本実施形態のトランザクション要求処理プログラム1104〜1106の正常処理部1202の処理手順を示すフローチャートである。トランザクション要求処理プログラム1104〜1106内の正常処理部1202は図17の手順に従って処理を行う。以下、トランザクション要求処理プログラム1104〜1106における正常処理部1202の処理手順について図17を用いて説明する。
ワークフロー制御プログラム1108は、入力として要求通番1302及びパスIDを正常処理部1202に与える。トランザクション要求処理プログラム1104〜1106における正常処理部1202は、第1の実施形態と同様の手順で要求メッセージをアダプタ103〜106へ送信する(ステップ1401)。サーバ210〜212でのトランザクションが終了すると、正常処理部1202は、アダプタから応答メッセージを受信する(ステップ1402)。
次に正常処理部1202は、要求メッセージに対する処理が正常に終了したかどうかを判定する(ステップ1403)。正常に終了している場合に正常処理部1202は、トランザクションに関する履歴情報を履歴情報保存キュー1101に登録する(ステップ1404)。そして、正常終了をワークフロー制御プログラム1108に報告して(ステップ1405)処理を終了する。要求が正常に終了しなかった場合に正常処理部1202は、異常終了をワークフロー制御プログラム1108に報告して処理を終了する(ステップ1406)。
図18は本実施形態の応答処理プログラム1107内の正常処理部1202の処理手順を示すフローチャートである。応答処理プログラム1107内の正常処理部1202は、図18の手順に従って処理を行う。次に応答処理プログラム1107における正常処理部1202の処理手順について図18を用いて説明する。
ワークフロー制御プログラム1108は、入力として要求通番1302及びパスIDを正常処理部1202に与える。応答処理プログラム1107における正常処理部1202は、業務DB110の要求通番1302に該当する行の内容を読み出す。そして、それらのデータを元にチャネル209への応答メッセージを生成し、通番管理プログラム108に要求してメッセージに応答通番を付ける(ステップ1501)。次に正常処理部1202は、アダプタ103に生成した応答メッセージを送信する(ステップ1502)。
そして正常処理部1202は、これらの処理が正常に終了したかどうかを判定する(ステップ1503)。次に、履歴情報保存キュー1101に応答処理に関する履歴情報を保存する(ステップ1504)。そして正常終了をワークフロー制御プログラム1108に報告して(ステップ1505)処理を終了する。異常が発生していると判断した場合には、異常終了をワークフロー制御プログラム1108に報告して(ステップ1506)処理を終了する。
図19は本実施形態の履歴情報保存キュー1101の内容例を示す図である。図19では正常処理フロー119の実行が正常に終了した時点での履歴情報保存キュー1101の内容を表している。履歴情報保存キュー1101は、First In Last Out型のキューである。
トランザクション要求処理プログラム1104〜1106によって保存された履歴情報は、図19の履歴情報1601,1603及び1604である。また応答処理プログラム1107によって保存された履歴情報は履歴情報1606である。履歴情報1602及び1605はワークフロー制御プログラム1108によって保存された履歴情報である。なおトランザクション2とトランザクション3は並列に実行される為、トランザクション2に関する履歴情報1603とトランザクション3に関する履歴情報1604の順番は、各トランザクションに関する正常処理が終了したタイミングによって異なる。
トランザクション要求処理プログラム1104〜1106は、図17のステップ1404において、各トランザクション要求処理を識別する為の処理IDと、要求メッセージを送信したサーバを識別する為の送信先IDと、サーバ210〜212において各トランザクションに付けられた処理番号と、各トランザクション要求処理が実行されたパスを識別する為のパスIDと、各サーバからの応答内容に関するデータから構成される履歴情報を保存する。
また応答処理プログラム1107は、図18のステップ1504において、応答処理を識別する為の処理IDと、応答メッセージを送信したチャネル209を識別する為の送信先IDと、応答メッセージに付けた応答通番と、応答処理が実行されたパスを識別する為のパスIDと、応答メッセージの内容に関するデータから構成される履歴情報を保存する。
更にワークフロー制御プログラム1108は、分岐、待合せ処理を行うときに、履歴情報保存キュー1101に履歴情報を保存する。分岐処理の履歴情報は、履歴情報1602に示す様に、分岐処理を識別する為の処理IDと、分岐する前のパスを識別する為の分岐元パスIDと、分岐した後のパスを識別する為の分岐先パスIDから構成される。待合せ処理の履歴情報は、履歴情報1605に示す様に、待合せ処理を識別する為の処理IDと、待合せの対象となるパスを識別する為の待合せパスIDと、待合せ処理後のパスを識別する為の待合せ後パスIDから構成される。
障害発生時には、この様にして保存された履歴情報を利用して回復処理を行う。ワークフロー制御プログラム1108は、障害発生時に回復処理プログラム1102を起動する(図5のノード504,510,511及び514)。このときワークフロー制御プログラム1108は、業務DBテーブル1300に保存されているキューID1301を回復処理プログラム1102へ入力として渡す。回復処理プログラム1102は、キューID1301で識別される履歴情報保存キュー1101内の履歴情報を取出しながら、図20に示す処理手順に従って処理を行う。
図20は本実施形態の回復処理プログラム1102の処理手順を示すフローチャートである。以下、回復処理プログラム1102の処理について図20を用いて説明する。
回復処理プログラム1102は、キューID1301で識別される履歴情報保存キュー1101内に履歴情報があるかどうかを判定する(ステップ1701)。履歴情報が履歴情報保存キュー1101に存在しない場合には処理を終了し、履歴情報が存在する場合には履歴情報を取出す(ステップ1702)。
取出した履歴情報が待合せ処理に関する情報であるかどうかを判定する(ステップ1703)。待合せ処理でない場合、分岐処理に関する情報であるかどうかを判定する(ステップ1704)。分岐処理でもない場合、すなわちトランザクション要求処理または応答処理に関する情報である場合、処理IDで識別される処理の補償処理部1203を起動する(ステップ1705)。
次に補償処理が正常に終了したかどうかを判定する(ステップ1706)。正常に終了している場合には、ステップ1701に戻り、処理を続行する。異常終了した場合には、ワークフロー制御プログラム1108に報告し、処理を終了する(ステップ1707)。
履歴情報保存キュー1101から取出した履歴情報が待合せ処理に関する情報であった場合、待合せパスID毎に回復処理を並列化して処理を実行する(ステップ1708)。これは例えば、新たにスレッドを生成して同一の履歴情報保存キュー1101から複数のスレッドにより履歴情報を取出して処理を行うことにより実現する。また、取出した履歴情報が分岐処理に関するものであった場合、分岐先パス毎に並列に行われている回復処理の終了を待つ(ステップ1709)。これは例えば複数起動したスレッドの終了を待つことによって実現する。
以上で説明した回復処理プログラム1102の処理によって起動される補償処理部1203の処理手順を図21及び図22に示す。補償処理部1203は、トランザクション要求処理プログラム1104〜1106と応答処理プログラム1107とで処理手順が異なる。
図21は本実施形態のトランザクション要求処理プログラム1104〜1106の補償処理部1203の処理手順を示すフローチャートである。先ずトランザクション要求処理プログラム1104〜1106における補償処理部1203の処理手順について図21を用いて説明する。
回復処理プログラム1102は、履歴情報保存キュー1101から取出した履歴情報を補償処理部1203に入力として渡す。補償処理部1203は、履歴情報を元に処理番号に対応する処理をキャンセルする為のメッセージを生成し、送信先IDで識別されるサーバ210〜212に接続されているアダプタ104〜106へキャンセル要求メッセージを送信する(ステップ1801)。
次に、そのアダプタ104〜106から、サーバ210〜212で行われたキャンセル処理に関する応答メッセージを受信する(ステップ1802)。そしてキャンセル処理が正常に終了したかどうかを判定する(ステップ1803)。正常に終了している場合、回復処理プログラム1102に報告して終了する(ステップ1804)。キャンセル処理が正常に終了しなかった場合、異常終了を回復処理プログラム1102に報告して処理を終了する(ステップ1805)。
図22は本実施形態の応答処理プログラム1107の補償処理部1203の処理手順を示すフローチャートである。次に応答処理プログラム1107における補償処理部1203の処理について図22を用いて説明する。
回復処理プログラム1102は、履歴情報保存キュー1101から取出した履歴情報を補償処理部1203へ入力として渡す。補償処理部1203は、履歴情報を元に処理番号に対応する処理をキャンセルする為のメッセージを生成し、送信先IDで識別されるチャネル209に接続されているアダプタ103へキャンセル要求メッセージを送信する(ステップ1901)。
次に、キャンセル要求メッセージの送信処理が正常に終了したかどうかを判定する(ステップ1902)。正常に終了している場合、回復処理プログラム1102に報告して終了する(ステップ1903)。正常に終了しなかった場合、異常終了を回復処理プログラム1102に報告して処理を終了する(ステップ1904)。
以上で説明した様に本実施形態によれば、正常処理部1202によりパスIDを含む履歴情報を履歴情報保存キュー1101に登録し、またワークフロー制御プログラム1108により履歴情報保存キュー1101に分岐処理及び待合せ処理に関する履歴情報を登録できる。そして障害が発生した場合には、ワークフロー制御システム201は、履歴情報保存キュー1101に保存した履歴情報を用いて、パス毎に回復処理を並列に実行することができる。従って回復処理に要する時間を短縮することができる。
更にワークフロー制御システム201が、要求通番1302と履歴情報保存キュー1101との対応をデータベースにより管理しているので、チャネル209からの要求メッセージ毎に対応するキューを管理でき、複数のチャネルから同時に要求を受け付けて処理する場合にも、障害が発生した要求メッセージに対応する回復処理を実行することができる。
本実施形態では履歴情報保存キュー1101を業務DB110とは別に設ける構成としたが、業務DB110内に履歴情報保存用のテーブルを設け、それを利用する形態としても良い。また運用者が入力装置213から回復処理プログラム1102を起動して、チャネル209からの要求メッセージに対する処理が正常に終了した後の任意の時点で回復処理を実行できる様にすることもできる。
以上説明した様に本実施形態のトランザクション処理システムによれば、ワークフロー制御システムが正常処理を行ったワークフロー上のパス毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
(実施形態3)
以下に履歴情報中に登録されたトランザクションの内容毎に回復処理を並列化する実施形態3のトランザクション処理システムについて説明する。
第2の実施形態では、回復処理の効率を向上する為に正常処理フロー119において並列に実行されるパス毎に回復処理を並列化した。そして、各パスにおいては、各トランザクションについて正常実行時と逆順に回復処理を行った。しかし、トランザクション処理システムが扱う業務によっては、回復時にトランザクションの順番を全く意識する必要がない場合も有り得る。本実施形態では、その様なトランザクション処理システムにおける回復処理の効率を向上する為に、履歴情報中に登録されたトランザクションの内容毎に並列に回復処理を行う。なお本実施形態におけるハードウェア構成及びソフトウェア構成は、第2の実施形態に示した構成と同一であるものとする。
図23は本実施形態の履歴情報保存キュー1101の内容例を示す図である。本実施形態におけるワークフロー制御プログラム1108は、分岐処理及び待合せ処理において履歴情報保存キュー1101への履歴情報の保存を行わない。また、各トランザクション要求処理プログラム1104〜1106及び応答処理プログラム1107内の正常処理部1202は、履歴情報を保存する際にパスIDを保存する必要がない。
図24は本実施形態の回復処理プログラム1102の処理手順を示すフローチャートである。次に本実施形態における回復処理プログラム1102の処理手順について図24を用いて説明する。
ワークフロー制御プログラム1108は、業務DBテーブル1300に保存されているキューID1301を回復処理プログラム1102へ入力として渡す。回復処理プログラム1102は、ワークフロー制御プログラム1108から起動されると、履歴情報保存キュー1101に履歴情報があるかどうかを判定する(ステップ2101)。履歴情報がある場合、履歴情報を取出す(ステップ2102)。
次に、取出した履歴情報を処理する為のスレッドを生成して補償処理を並列化する(ステップ2103)。そして、新しく生成したスレッドにおいて補償処理部1203を起動する(ステップ2104)。履歴情報が履歴情報保存キュー1101内に存在する間は、以上の処理を繰り返し、履歴情報が存在しなくなると、並列化したスレッドの終了を待つ(ステップ2105)。
次に、全ての補償処理が正常に終了したかどうかを判定する(ステップ2106)。全ての補償処理が正常に終了した場合、ワークフロー制御プログラム1108に正常終了を報告して処理を終了する(ステップ2107)。何れかの補償処理が異常終了した場合には、ワークフロー制御プログラム1108に異常を報告して処理を終了する(ステップ2108)。
本実施形態によれば、履歴情報中に登録されたトランザクションの内容毎に並列に補償処理を行うことができる。ステップ2103においてスレッドを生成するときに生成したスレッド数を覚えておいて、一定数以上のスレッドを生成しない様に制御する様にしても良い。
以上説明した様に本実施形態のトランザクション処理システムによれば、履歴情報中に登録されたトランザクションの内容毎に並列に回復処理を行うので、回復処理の効率を向上させることが可能である。
(実施形態4)
以下に履歴情報中に登録されたメッセージの送信先毎に回復処理を並列化する実施形態4のトランザクション処理システムについて説明する。
本実施形態では、回復処理の効率を向上する為にワークフロー制御システム201からのメッセージの送信先毎に回復処理を並列化する。その為に回復処理プログラム1102において送信先IDを判定し、送信先ID毎に回復処理を並列実行する様にした。
本実施形態のハードウェア構成及びソフトウェア構成は、第2の実施形態及び第3の実施形態と同一である。また、本実施形態において履歴情報保存キュー1101内に保存される履歴情報の内容は第3の実施形態と同一である。
図25は本実施形態の回復処理プログラム1102の処理手順を示すフローチャートである。本実施形態における回復処理プログラム1102の処理手順について図25を用いて説明する。
ワークフロー制御プログラム1108は、業務DBテーブル1300に保存されているキューID1301を回復処理プログラム1102へ入力として渡す。回復処理プログラム1102は、履歴情報保存キュー1101内に履歴情報があるかどうかを判定する(ステップ2201)。履歴情報がある場合には、履歴情報を取出す(ステップ2202)。
次に、送信先IDに対応する回復処理を実行中かどうかを判定する(ステップ2203)。実行中でない場合には、送信先IDに対応する回復処理を実行する為のスレッドを生成し、新たに生成したスレッドにおいて、以後その送信先IDに関する回復処理を実行する(ステップ2204)。
取出した履歴情報内の送信先IDに対応する回復処理が実行中である場合にはステップ2201に戻って次の履歴情報に関する処理を行う。ステップ2201において、履歴情報保存キュー1101内に次の履歴情報がない場合、スレッドの終了を待ち(ステップ2207)、次に全ての回復処理が正常に終了したかどうかを判定する(ステップ2208)。全ての回復処理が正常に終了した場合、ワークフロー制御プログラム1108に正常終了を報告して処理を終了する(ステップ2209)。何れかの回復処理が異常終了した場合には、ワークフロー制御プログラム1108に異常を報告して処理を終了する(ステップ2210)。
図26は本実施形態のステップ2204において生成されるスレッドの処理手順を示すフローチャートである。ステップ2204において生成された各スレッドの処理手順について図26を用いて説明する。
各スレッドは、履歴情報保存キュー1101内に履歴情報があるかどうかを判定する(ステップ2601)。履歴情報がある場合には、履歴情報を取出す(ステップ2602)。取出した履歴情報内の送信先IDに対応する回復処理が、自分の処理している送信先IDと一致するかを判定する(ステップ2603)。一致する場合には補償処理部1203を実行する(ステップ2604)。一致しない場合にはステップ2601に戻って次の履歴情報に関する処理を行う。
補償処理部1203の実行終了後、当該処理が正常に終了したかどうかを確認する(ステップ2605)。正常に終了している場合、ステップ2601に戻って次の履歴情報に関する処理を行う。異常終了した場合、回復処理プログラム1102に異常終了を報告して処理を終了する(ステップ2606)。ステップ2601において、履歴情報保存キュー1101内に次の履歴情報がない場合、回復処理プログラム1102に正常終了を報告して終了する(ステップ2607)。
本実施形態によれば、正常処理において要求メッセージを送信したときの送信先サーバ及び応答メッセージを送信したチャネル毎に並列に回復処理を行うことができる。
以上説明した様に本実施形態のトランザクション処理システムによれば、ワークフロー制御システムが正常処理において送信したメッセージの送信先毎に回復処理を並列化するので、回復処理の効率を向上させることが可能である。
101…ORB、102…ワークフロー実行プログラム、103〜106…アダプタ、107…トレーダ、108…通番管理プログラム、109…要求受付プログラム、110…業務DB、111…ワークフロー制御プログラム、112〜114…要求処理プログラム、115…応答処理プログラム、116…回復処理プログラム、117…ワークフロー登録処理プログラム、118…ワークフロー管理DB、119…正常処理フロー、120…回復処理フロー、201…ワークフロー制御システム、202…CPU、203…メモリ、204…ハードディスク装置、205〜208…ネットワーク・インタフェース・コントローラ、209…チャネル、210〜212…サーバ、213…入力装置、214…出力装置、215〜218…ネットワーク、301…処理プログラム、302…正常処理部、303…補償処理部、400…業務DBテーブル、401…要求通番、402…要求内容、403…正常処理フローID、404…回復処理フローID、405,407及び409…処理番号、406,408及び410…データ、411…応答番号、412…応答内容、501〜514…ノード、601〜605…ノード、606〜609…ノード、610〜615…ノード、616〜618…ノード、1101…履歴情報保存キュー、1102…回復処理プログラム、1103…要求受付プログラム、1104〜1106…要求処理プログラム、1107…応答処理プログラム、1108…ワークフロー制御プログラム、1300…業務DBテーブル、1301…キューID、1302…要求通番、1303…要求内容、1304…正常処理フローID、1201…処理プログラム、1202…正常処理部、1203…補償処理部、1601〜1606…履歴情報。