(57)【要約】  ジャーナル出力装置１００は、処理が進行している処理定義の処理定義ＩＤが記述される、アプリケーション３００での処理の進行状況を示すジャーナルを生成し、生成したジャーナル６００をジャーナルファイル４００（５００）に書込む。ジャーナル出力装置１００は、処理定義ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、ジャーナルに書出先変更通知を記述する。復旧装置２００は、書出先変更通知が記述されているジャーナルの処理定義ＩＤを書出先変更発生ＩＤとして他の処理定義ＩＤから区別し、共通する書出先変更発生ＩＤの２つ以上のジャーナル列を連結して順序保証する。復旧装置２００は、書出先変更発生ＩＤの場合は、順序保証後のジャーナル列を解析し、その他の処理定義ＩＤの場合は、順序保証なしにジャーナル列を解析する。
2013008327.tif 000002
【特許請求の範囲】
【請求項１】
複数種の処理手順が含まれるアプリケーションプログラムでの処理の進行状況を示すデータであって、処理が進行している処理手順の処理手順ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）が記述されるデータをジャーナルとして生成するジャーナル生成部と、
生成されたジャーナルごとに、ジャーナルの書出先となる書出先ジャーナルファイルを複数のジャーナルファイルの中から決定する書出先決定部と、
処理手順ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイルの変更を通知する書出先変更通知を、書出先ジャーナルファイル変更前のいずれかのジャーナルと書出先ジャーナルファイル変更後のいずれかのジャーナルに記述する書出先変更通知部と、
前記書出先決定部により決定された書出先ジャーナルファイルにジャーナルを書き出す書出部と、
それぞれが、いずれかのジャーナルファイルに対応付けられ、対応付けられているジャーナルファイルからジャーナルを読み込み、読み込んだジャーナルを処理手順ＩＤに従って分類し、処理手順ＩＤごとに、分類された１つ以上のジャーナルからジャーナル列を生成し、読み込んだジャーナルの中に書出先変更通知が記述されているジャーナルがある場合に、書出先変更通知が記述されているジャーナルに記述されている処理手順ＩＤを書出先変更発生ＩＤとして他の処理手順ＩＤから区別する複数のジャーナル読込分類部と、
書出先変更発生ＩＤに対して生成されたジャーナル列を少なくともいずれかのジャーナル読込分類部から入力し、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結するジャーナル連結部とを有することを特徴とするジャーナル管理システム。
【請求項２】
前記ジャーナル管理システムは、更に、
書出先変更発生ＩＤ以外の処理手順ＩＤに対して生成されたジャーナル列をいずれかのジャーナル読込分類部から入力し、入力したジャーナル列を解析し、
書出先変更発生ＩＤに対して生成された連結後のジャーナル列を前記ジャーナル連結部から入力し、入力した連結後のジャーナル列を解析するジャーナル解析部を有することを特徴とする請求項１に記載のジャーナル管理システム。
【請求項３】
前記書出先変更通知部は、
処理手順ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、
書出先ジャーナルファイル変更前の最後尾のジャーナルに、書出先ジャーナルファイル変更前の最後尾のジャーナルであることを通知する変更前最後尾データ通知を、前記書出先変更通知として記述し、
書出先ジャーナルファイル変更後の先頭のジャーナルに、書出先ジャーナルファイル変更後の先頭のジャーナルであることを通知する変更後先頭データ通知を、前記書出先変更通知として記述し、
前記ジャーナル管理システムは、更に、
先頭のジャーナルに変更後先頭データ通知が記述され、最後尾のジャーナルに変更前最後尾データ通知が記述されていないというジャーナル列のパターンを、特殊ジャーナル列パターンとして記憶する記憶部を有し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、他のジャーナル列との連結の対象とすることなく、入力したジャーナル列の一部を前記ジャーナル解析部に出力することを特徴とする請求項２に記載のジャーナル管理システム。
【請求項４】
前記ジャーナル管理システムは、
前記アプリケーションプログラムにおいて発生する同じ処理手順の複数の処理インスタンスに、処理インスタンスの発生順序を表す処理インスタンスＩＤを設定し、
前記ジャーナル生成部は、
処理手順ＩＤと、処理インスタンスＩＤとが記述されるジャーナルを生成し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、入力したジャーナル列を解析して、処理手順が完了している処理インスタンスが存在するか否かを判断し、
入力したジャーナル列を解析した結果、処理手順が完了している処理インスタンスが存在する場合に、処理手順が完了している処理インスタンスよりも後の発生順序を表す処理インスタンスＩＤが記述されている１つ以上のジャーナルを、入力したジャーナル列から抽出し、
抽出したジャーナルを、他のジャーナル列との連結の対象とすることなく、前記ジャーナル解析部に出力することを特徴とする請求項３に記載のジャーナル管理システム。
【請求項５】
前記ジャーナル生成部は、
ｍ（ｍ≧２）個の分岐が存在する処理手順に対して、各分岐での最後の工程が完了したことを示すｍ個の完了ジャーナルを、処理インスタンスごとに生成し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、入力したジャーナル列に、共通の処理インスタンスＩＤが記述されるｍ個の完了ジャーナルが存在する場合に、当該処理インスタンスＩＤに対応する処理インスタンスにおいて処理手順が完了していると判断することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項６】
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当し、入力したジャーナル列を解析した結果、処理手順が完了している処理インスタンスが存在しない場合に、
入力したジャーナル列を、共通する書出先変更発生ＩＤに対して生成された他のジャーナル列と連結し、連結後のジャーナル列を前記ジャーナル解析部に出力することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項７】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが存在し、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、前記ｘ番目の発生順序を表す処理インスタンスＩＤが記述される完了ジャーナルが、処理手順内の分岐数分存在する
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項８】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤが記述される完了ジャーナルが、処理手順内の分岐数分存在し、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、（ｘ＋１）番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが、先頭のジャーナルと前記ｘ番目の発生順序を表す処理インスタンスＩＤの最後尾の完了ジャーナルとの間又は当該最後尾の完了ジャーナルの直後に存在している
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項９】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤ及び（ｘ−１）番目の発生順序を表す処理インスタンスＩＤのいずれかが記述される完了ジャーナルが、処理手順内の分岐数分存在し、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、（ｘ＋１）番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが、先頭のジャーナルと前記ｘ番目の発生順序を表す処理インスタンスＩＤの最後尾の完了ジャーナルとの間又は当該最後尾の完了ジャーナルの直後に存在している
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラム（以下、単にアプリケーションともいう）での処理の進行状況を示すジャーナルを管理する技術に関する。
【背景技術】
【０００２】
アプリケーションプログラムの信頼性を向上するために、異常終了により中断した処理を再開するジャーナル方式がある。
図２７及び図２８は、ジャーナル方式を説明する図である。
図２７は正常時の動作例を示し、図２８は故障・復旧時の動作例を示す。【０００３】
ジャーナル方式では、図２７に示すように、複数の処理から構成されるアプリケーション８０２がサーバ装置８０５において実行されている場合に、ある処理が完了するとその時点のアプリケーションの状態とその処理が完了したことをジャーナル８０３としてディスクに保存（保存先のファイルをジャーナルファイルと呼ぶ）する。
図２８に示すように、アプリケーションが異常終了し、クラスタミドルウェア等により系が切り替わり、予備サーバ装置８０６においてアプリケーションが再起動した際には、ディスクに保存されているジャーナル８０３から異常終了する直前に完了していた処理の識別子とその時のアプリケーションの状態が読込まれ、異常終了の直前に完了していた処理の次の処理からアプリケーションが再開する。
このような動作により、中断した処理の再開を実現する。【０００４】
ジャーナル方式では、アプリケーションの処理の進捗とディスク上のジャーナルが整合している必要があるため、アプリケーションはジャーナルがディスクに完全に書き込まれてから次の処理を実行するように動作する。
そのため、ジャーナルの書きこみ性能がアプリケーションの性能へ大きく影響する。
また、復旧時にはディスクから書き出したジャーナルを読み込み、読み込んだジャーナルを解析し、異常終了の直前に完了していた処理を抽出し、異常終了の直前に完了していた処理の次の処理から再開する。
一般に、処理の順序を保つために、中断処理を再開してから新規処理を実行する必要があるため、中断処理の再開が完了してから復旧が完了となる。
そのため、ディスクからのジャーナル読込み時間やジャーナルの解析時間が復旧時間に大きく影響する。
以上のことから、ジャーナル方式ではアプリケーションの性能への影響を最小化しつつ信頼性を向上させる（復旧時間を短縮）するために、ジャーナルの書出し性能の向上、ジャーナルファイルからの読み込み及び復旧準備までの処理時間の短縮が課題となる。【０００５】
特許文献１では、図２９のように、ジャーナルファイルを複数用意して書出し性能の向上、読込み時間を短縮する方式が開示されている。
特許文献１では、アプリケーションの処理手順を複数の処理種別（図２９では、Ａ、Ｂ、Ｃ）に分類し、処理種別ごとに決まったジャーナルファイルへ書き出すことで、ディスク書出しを並列化し、ジャーナル書出し性能を向上している。
また、特許文献１では、処理種別ごとに独立して復旧できるように処理種別を決定し、ある処理種別のジャーナルが決まったジャーナルファイルにのみ存在するように書出先を決定している。
つまり、書出先決定部８１１が、処理種別Ａのジャーナル及び処理種別Ｂのジャーナルは、ジャーナルファイル８１２ａを書出先として決定し、処理種別Ｃのジャーナルは、ジャーナルファイル８１２ｂを書出先として決定する。
そして、読込部８１３ａが処理種別Ａのジャーナル及び処理種別Ｂのジャーナルをジャーナルファイル８１２ａから読み込み、復旧部８１４ａが処理種別Ａ及び処理種別Ｂについての処理の復旧を行い、読込部８１３ｂが処理種別Ｃのジャーナルをジャーナルファイル８１２ｂから読み込み、復旧部８１４ｂが処理種別Ｃについての処理の復旧を行う。
これにより、あるジャーナルファイルを読み込めばそこに含まれる処理種別のジャーナルが揃い、その処理種別の処理を再開できるようにしている。
この結果、読み込んだジャーナルファイルに含まれる処理種別の処理から順次再開することで、復旧手順を並列化し復旧時間を短縮している。【０００６】
しかし、特許文献１の方式では、処理種別ごとに書き出すジャーナルファイルを固定するため、処理種別と書込み先ジャーナルファイルとの関係を変更することができない。
例えば、処理種別ごとに処理の性質が異なり、処理種別Ａ、Ｂは処理単位が小さく処理数が多いトランザクション系、処理種別Ｃは処理単位が大きく処理数が少ないバッチ系であるとする。
トランザクション系の処理のジャーナルはサイズが小さく、ディスクへの書出し時間が短い。
バッチ系の処理のジャーナルはサイズが大きく、ディスクへの書出時間が長い。
処理種別Ａ、Ｂのジャーナルが一つのジャーナルファイルに書き出され、処理種別Ｃのジャーナルが一つのジャーナルファイルに書き出されるという構成の時、処理種別Ａがある期間バッチ系の処理になった場合、処理種別Ａのジャーナルの書出し性能に処理種別Ｂのジャーナルの書出し性能が引き摺られ遅くなる。
このような場合には、処理種別Ａのジャーナルを同じくバッチ系の処理である処理種別Ｃの書出先ジャーナルファイルへ切り替え、全体の書出し性能のバランスを最適化する必要がある。
しかし、特許文献１の方式では、処理種別とジャーナルファイルが固定されており、このようなジャーナルファイルの切り替えには対応できないという課題がある。【０００７】
一方、特許文献２では、図３０のように処理種別ごとにジャーナルファイルを特定せず、複数のジャーナルファイルに書出しを振り分け、順序保証部８１５がジャーナルファイル８１２ａ及びジャーナルファイル８１２ｂに格納されているジャーナルを処理種別ごとに分類して順序保証を行う方式が開示されている。
しかし、この方式では、ジャーナル書出し性能の向上とジャーナルファイルの変更が実現できるが、ジャーナルが全てのジャーナルファイルに分散して書き込まれているため、復旧時には全てのジャーナルファイルを読み込む必要があり、ジャーナルファイルの読込みを並列化して読込み時間を短縮することができないという課題がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平５−２２５０２４号公報
【特許文献２】特開平１０−２２８４０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
このように、特許文献１及び特許文献２では、ジャーナルファイルを複数用意することによる書出し性能の向上、読み込み及び復旧処理時間の短縮、書出先ジャーナルファイルの変更を全て満たすことができないという課題がある。【００１０】
本発明は、このような課題に鑑みてなされたものであり、ジャーナルの書出し性能の向上、読み込み及び復旧処理時間の短縮、書出先ジャーナルファイルの変更の全てを実現することを主な目的とする。
【課題を解決するための手段】
【００１１】
本発明に係るジャーナル管理システムは、
複数種の処理手順が含まれるアプリケーションプログラムでの処理の進行状況を示すデータであって、処理が進行している処理手順の処理手順ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）が記述されるデータをジャーナルとして生成するジャーナル生成部と、
生成されたジャーナルごとに、ジャーナルの書出先となる書出先ジャーナルファイルを複数のジャーナルファイルの中から決定する書出先決定部と、
処理手順ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイルの変更を通知する書出先変更通知を、書出先ジャーナルファイル変更前のいずれかのジャーナルと書出先ジャーナルファイル変更後のいずれかのジャーナルに記述する書出先変更通知部と、
前記書出先決定部により決定された書出先ジャーナルファイルにジャーナルを書き出す書出部と、
それぞれが、いずれかのジャーナルファイルに対応付けられ、対応付けられているジャーナルファイルからジャーナルを読み込み、読み込んだジャーナルを処理手順ＩＤに従って分類し、処理手順ＩＤごとに、分類された１つ以上のジャーナルからジャーナル列を生成し、読み込んだジャーナルの中に書出先変更通知が記述されているジャーナルがある場合に、書出先変更通知が記述されているジャーナルに記述されている処理手順ＩＤを書出先変更発生ＩＤとして他の処理手順ＩＤから区別する複数のジャーナル読込分類部と、
書出先変更発生ＩＤに対して生成されたジャーナル列を少なくともいずれかのジャーナル読込分類部から入力し、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結するジャーナル連結部とを有することを特徴とする。
【発明の効果】
【００１２】
本発明では、書出先ジャーナルファイルが変更になる場合にジャーナルに書出先変更通知を記述し、書出先変更通知が記述されているジャーナルの処理手順ＩＤを書出先変更発生ＩＤとして他の処理手順ＩＤから区別し、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結する。
このため、ジャーナルファイルを固定する必要がなく、ジャーナルファイルの変更が可能であり、ジャーナルの書出し性能の向上が図られる。
また、書出先ジャーナルファイルの変更があったジャーナルは書出先変更通知により検知できるので、ジャーナルファイルの読込みの並列化が可能であり、読込み時間を短縮することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係るジャーナル管理システムの構成例を説明する図。
【図２】実施の形態１に係るジャーナルの構成例を説明する図。
【図３】実施の形態１に係る書出先決定テーブルの構成例を説明する図。
【図４】実施の形態１に係る書出先保持テーブルの構成例を説明する図。
【図５】実施の形態１に係る正常時フローを説明するフローチャート図。
【図６】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図７】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図８】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図９】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図１０】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図１１】実施の形態１に係る復旧時フローを説明するフローチャート図。
【図１２】実施の形態１に係るジャーナル列の生成処理を説明する図。
【図１３】実施の形態２に係るジャーナル管理システムの構成例を説明する図。
【図１４】実施の形態２に係るジャーナル列パターンを説明する図。
【図１５】実施の形態２に係る正常時フローを説明するフローチャート図。
【図１６】実施の形態２に係る書出先変更通知を説明する図。
【図１７】実施の形態２に係るジャーナル列パターンが複数生成される例を説明する図。
【図１８】実施の形態２に係る復旧時フローを説明するフローチャート図。
【図１９】実施の形態２に係る復旧時フローを説明するフローチャート図。
【図２０】実施の形態２に係る復旧時フローを説明するフローチャート図。
【図２１】実施の形態３に係るジャーナル管理システムの構成例を説明する図。
【図２２】実施の形態３に係る順序待合せ除外パターンを説明する図。
【図２３】実施の形態３に係る順序待合せ除外パターン１の例を説明する図。
【図２４】実施の形態３に係る順序待合せ除外パターン２の例を説明する図。
【図２５】実施の形態３に係る順序待合せ除外パターン３の例を説明する図。
【図２６】実施の形態３に係る復旧時フローを説明するフローチャート図。
【図２７】ジャーナル方式を説明する図。
【図２８】ジャーナル方式を説明する図。
【図２９】関連技術を説明する図。
【図３０】関連技術を説明する図。
【図３１】ジャーナルの構成例を説明する図。
【図３２】処理定義を説明する図。
【図３３】処理ＩＤを説明する図。
【図３４】処理ステージを説明する図。
【図３５】処理ブランチを説明する図。
【図３６】アプリケーションの構成例を説明する図。
【図３７】アプリケーションへ適用した場合のジャーナルファイルの構成例を説明する図。
【図３８】実施の形態１〜３に係るジャーナル出力装置及び復旧装置のハードウェア構成例を説明する図。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１は、本実施の形態に係るジャーナル管理システムの構成例を示す。
【００１５】
ジャーナル管理システムには、ジャーナル出力装置１００及び復旧装置２００が含まれる。
ジャーナル出力装置１００は、図２７及び図２８に示したサーバ装置８０５に相当する。
つまり、ジャーナル出力装置１００は、正常時にアプリケーション３００を実行するとともに、アプリケーション３００での処理の進行状況を示すデータであるジャーナル６００を生成し、生成したジャーナル６００をジャーナルファイル４００及びジャーナルファイル５００に書き出す。
復旧装置２００は、図２８に示した予備サーバ装置８０６に相当する。
つまり、復旧装置２００は、アプリケーション３００が異常終了した際に、ジャーナルファイル４００及びジャーナルファイル５００からジャーナル６００を読み出し、読み出したジャーナル６００を解析して、アプリケーション３００を異常終了により中断した工程の次の工程から再開させる。
なお、アプリケーション３００は、ジャーナル出力装置１００及び復旧装置２００の各々の記憶領域に格納されていてもよいし、ジャーナル出力装置１００及び復旧装置２００が共有する共用サーバ装置等に格納されていてもよい。
【００１６】
図１の例では、ジャーナル出力装置１００は、処理種別Ａの処理の実行において生成されたジャーナル６００と処理種別Ｂの処理の実行において生成されたジャーナル６００をジャーナルファイル４００に書き出し、処理種別Ｃの処理の実行において生成されたジャーナル６００をジャーナルファイル５００に書き出すことになっている。
しかし、後述するように、ジャーナル６００の書出先のジャーナルファイルは変更になることがある。
ジャーナルファイル４００とジャーナルファイル５００は、ジャーナル出力装置１００と復旧装置２００がともにアクセス可能な記憶領域（磁気ディスク等）である。
【００１７】
ジャーナル出力装置１００において、ジャーナル生成部１０１は、ジャーナル６００を生成する。
ジャーナル６００の詳細は後述する。
【００１８】
書出先決定部１０２は、ジャーナル生成部１０１により生成されたジャーナル６００の書出先となるジャーナルファイルを決定する。
なお、書出先決定部１０２によりジャーナル６００の書出先として決定されたジャーナルファイルを書出先ジャーナルファイルという。
【００１９】
書出先変更通知部１０３は、処理定義ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）が共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイルの変更を通知する書出先変更通知を、書出先ジャーナルファイル変更前の最後尾のジャーナル６００と書出先ジャーナルファイル変更後の先頭のジャーナル６００に記述する。
なお、処理定義ＩＤ、書出先変更通知の詳細は後述する。
【００２０】
書出部１０４は、書出先決定部１０２により決定された書出先ジャーナルファイルにジャーナル６００を書き出す。
【００２１】
テーブル記憶部１０５は、書出先決定テーブル１０６及び書出先保持テーブル１０７を記憶する。
書出先決定テーブル１０６は、ジャーナル６００の書出先ジャーナルファイルとして指定されたジャーナルファイルを示す情報である。
書出先保持テーブル１０７は、実際にジャーナル６００を書き出しているジャーナルファイルを示す情報である。
書出先決定テーブル１０６及び書出先保持テーブル１０７の詳細は、後述する。
【００２２】
復旧装置２００において、読込部２０１ａは、ジャーナルファイル４００に対応付けられ、ジャーナルファイル４００からジャーナル６００を読み込む。
読込部２０１ｂは、ジャーナルファイル５００に対応付けられ、ジャーナルファイル５００からジャーナル６００を読み込む。
なお、読込部２０１ａと読込部２０１ｂを区別する必要がないときは、読込部２０１と表記する。
【００２３】
書出先変更検知部２０２ａは、読込部２０１ａがジャーナルファイル４００から読み込んだジャーナル６００を処理定義ＩＤに従って分類し、処理定義ＩＤごとに、分類された１つ以上のジャーナルからジャーナル列を生成する。
また、書出先変更検知部２０２ａは、読み込んだジャーナル６００の中に書出先変更通知が記述されているジャーナル６００がある場合に、書出先変更通知が記述されているジャーナル６００に記述されている処理定義ＩＤを書出先変更発生ＩＤとして他の処理定義ＩＤから区別する。
更に、書出先変更検知部２０２ａは、書出先変更発生ＩＤに対して生成されたジャーナル列は順序保証部２０４に出力し、書出先変更発生ＩＤ以外の処理定義ＩＤに対して生成されたジャーナル列は復旧部２０３ａに出力する。
書出先変更検知部２０２ｂは、読込部２０１ｂがジャーナルファイル５００から読み込んだジャーナル６００を処理定義ＩＤに従って分類し、処理定義ＩＤごとに、分類された１つ以上のジャーナル６００からジャーナル列を生成する。
また、書出先変更検知部２０２ｂは、読み込んだジャーナル６００の中に書出先変更通知が記述されているジャーナル６００がある場合に、書出先変更通知が記述されているジャーナル６００に記述されている処理定義ＩＤを書出先変更発生ＩＤとして他の処理定義ＩＤから区別する。
更に、書出先変更検知部２０２ｂは、書出先変更発生ＩＤに対して生成されたジャーナル列は順序保証部２０４に出力し、書出先変更発生ＩＤ以外の処理定義ＩＤに対して生成されたジャーナル列は復旧部２０３ｂに出力する。
なお、書出先変更検知部２０２ａと書出先変更検知部２０２ｂを区別する必要がないときは、書出先変更検知部２０２と表記する。
【００２４】
読込部２０１ａと書出先変更検知部２０２ａ、読込部２０１ｂと書出先変更検知部２０２ｂとは、それぞれ、ジャーナル読込分類部の例に相当する。
【００２５】
復旧部２０３ａは、書出先変更検知部２０２ａから書出先変更発生ＩＤ以外の処理定義ＩＤに対して生成されたジャーナル列を入力し、入力したジャーナル列に対してアプリケーション３００を復旧するための解析を行う。
復旧部２０３ｂは、書出先変更検知部２０２ｂから書出先変更発生ＩＤ以外の処理定義ＩＤに対して生成されたジャーナル列を入力し、入力したジャーナル列に対してアプリケーション３００を復旧するための解析を行う。
復旧部２０３ｃは、書出先変更発生ＩＤに対して生成されたジャーナル列であって順序保証部２０４によって連結された後のジャーナル列を、順序保証部２０４から入力し、入力したジャーナル列に対してアプリケーション３００を復旧するための解析を行う。
復旧部２０３ａ、復旧部２０３ｂ及び復旧部２０３ｃは、それぞれ、ジャーナル解析部の例に相当する。
なお、復旧部２０３ａ、復旧部２０３ｂ、復旧部２０３ｃを区別する必要がないときは、復旧部２０３と表記する。
【００２６】
順序保証部２０４は、順序待合せ部２０５を有し、順序待合せ部２０５を管理する。
順序保証部２０４は、書出先変更検知部２０２ａ及び書出先変更検知部２０２ｂの少なくともいずれかから、書出先変更発生ＩＤに対して生成されたジャーナル列を入力し、入力したジャーナル列を順序待合せ部２０５に渡す。
順序待合せ部２０５は、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結する。
順序待合せ部２０５は、処理定義ＩＤごとに設けられている。
順序待合せ部２０５を含む順序保証部２０４は、ジャーナル連結部の例に相当する。
【００２７】
図２は、ジャーナル６００の構成例を示す。
【００２８】
ジャーナル６００は、ヘッダとボディから構成される。
ヘッダは、処理定義ＩＤ、処理ＩＤ、処理ステージＩＤ、処理ブランチＩＤ、処理ブランチ数、処理状態、書出先変更通知領域から構成される。
ボディは、処理データから構成される。
書出先変更通知領域は、書出先ジャーナルファイルの変更を通知する書出先変更通知が記述される領域である。
なお、処理定義ＩＤ、処理ＩＤ、処理ステージＩＤ、処理ブランチＩＤ、処理ブランチ数、処理状態及び処理データの詳細は後述する。
【００２９】
また、本実施の形態では、ジャーナル６００は図３１のようにも表記する。
図３１の表記方式では、符号８２１で示す要素で「処理定義ＩＤ」を表し、符号８２２で示す要素で「処理ＩＤ」を表し、符号８２３で示す要素で「処理ステージＩＤ」を表し、符号８２４で示す要素で「処理ブランチＩＤ」を表し、符号８２５で示す要素で「処理状態」を表し、符号８２６で示す要素で「処理データ」を表す。
つまり、図３１の処理定義ＩＤ８２１、処理ＩＤ８２２、処理ステージＩＤ８２３、処理ブランチＩＤ８２４、処理状態８２５及び処理データ８２６は、図２の処理定義ＩＤ、処理ＩＤ、処理ステージＩＤ、処理ブランチＩＤ、処理状態及び処理データに対応する。
図３１の表記方式では、処理ブランチ数及び書出先変更通知領域は省略される。
以降では、図２の表記方式及び図３１の表記方式を用いて、ジャーナル６００を表記する。
【００３０】
図３２に示すように、アプリケーションプログラムの入力から出力までの一連の処理を処理定義と呼ぶ。
処理定義が実行されることにより、アプリケーションプログラムに備わっている所定の機能が実現される。
つまり、処理定義は、アプリケーションプログラムに備わっている機能を実現するための処理手順である。
各処理定義を識別するための識別子を処理定義ＩＤ８２１と呼ぶ。
換言すると、処理定義ＩＤは、処理手順を識別するための識別子であり、処理手順ＩＤの例に相当する。
各処理定義は、複数の内部処理（処理手順内の工程）で構成される。
なお、処理定義は、特許文献１及び特許文献２の説明において言及した「処理種別」と同義である。
【００３１】
アプリケーションプログラムにおいて、各処理定義は繰り返し実行可能である。
つまり、同じ処理定義に対して複数のインスタンス（処理インスタンスと呼ぶ）を発生させることができる。
各処理インスタンスを識別するための識別子を処理ＩＤ８２２又は処理インスタンスＩＤと呼ぶ。
図３３に示すように、処理ＩＤ８２２（処理インスタンスＩＤ）は、処理定義ごとの連番である。
処理ＩＤ８２２（処理インスタンスＩＤ）は、外部からの処理要求ごとに増加する。
【００３２】
各処理定義は、内部処理の集合であるが、図３４のように、各内部処理の段階を処理ステージと呼ぶ。
つまり、処理定義は、複数の処理ステージから構成される。
各処理ステージを識別するための識別子を処理ステージＩＤ８２３と呼ぶ。
【００３３】
図３５のように、処理の並列化などにより同じ処理ステージ内で複数に処理（工程）が分割される場合の１つの処理（工程）を処理ブランチという。
各処理ブランチを識別するための識別子を処理ブランチＩＤ８２４と呼ぶ。
処理ブランチの数を処理ブランチ数と呼ぶ。
【００３４】
処理状態８２５は、完了や未完了などの処理の状態を示す。
処理状態８２５を識別するための識別子を状態ＩＤともいう。
【００３５】
処理データ８２６は、処理で必要とするデータである。
処理データ８２６は、現在の処理ステージまたは次の処理ステージを再開するのに十分な情報量を持つデータとする必要がある。
【００３６】
アプリケーション３００は、図３６のように、外部から入力データ８０１を入力し、入力データ８０１に対して複数の内部処理を実行する。
そして、分岐後の最終工程である内部処理Ｐｎ＿１〜Ｐｎ＿ｍがすべて完了すると、アプリケーション３００の処理が終了となる。
アプリケーション３００と内部処理と入力データ８０１との間には、以下の関係がある。
（１）アプリケーション３００は、複数の内部処理から構成され、最終処理は複数存在する。
（２）入力データが幾つかの種別に分類され（図３６では、種別Ａ、Ｂ、Ｃ）、種別間で内部処理が異なる。
（３）同じ種別の入力データ８０１でも流量は一定では無く、振れ幅が大きい（トランザクション系の処理とバッチ系の処理が混在する）。
【００３７】
以上の説明を前提にして、アプリケーション３００にジャーナル方式を適用した場合のジャーナルファイルの構成を図３７に示す。
この例では、処理ブランチの数を２としている。
図３７において、「Ａ１」は「処理定義ＩＤ：Ａ」及び「処理ＩＤ：１」を表し、「Ａ２」は「処理定義ＩＤ：Ａ」及び「処理ＩＤ：２」を表し、「Ｂ３」は「処理定義ＩＤ：Ｂ」及び「処理ＩＤ：３」を表している。
また、「ｐ１」は「処理ステージＩＤ：１」を表し（処理ブランチはない）、「ｐ２  １」は「処理ステージＩＤ：２」及び「処理ブランチＩＤ：１」を表し、「ｐｎ  １」は「処理ステージＩＤ：ｎ」及び「処理ブランチＩＤ：１」を表し、「ｐｎ  ２」は「処理ステージＩＤ：ｎ」及び「処理ブランチＩＤ：２」を表している。
なお、図３７では、図３１に示した処理状態８２５及び処理データ８２６の図示は省略している。
【００３８】
「Ａ１」、「Ｂ３」のように、１つのジャーナルファイルには、複数種の処理定義のジャーナル６００が格納されていることがある。
また、Ａ１ｐ１、Ａ２ｐ１．．．Ａ１ｐｎ＿１となっているように、同じ処理定義の同じ処理ステージでは、処理ＩＤ順に順序が保証されるため、Ａ２ｐ１は必ずＡ１ｐ１の後に出現する。
各処理ステージでは外部から要求された内部処理を順次実行するため、必ずしも処理ＩＤの順序通りにはならず、Ａ１ｐｎ＿１の前にＡ２ｐ１が出力されることがある。
図３７の例では、処理ブランチ数が２のため、Ａ１の処理インスタンスは、最初の工程（処理ステージ）の完了を示すジャーナルＡ１ｐ１と最後の工程（処理ステージ）の完了を示すジャーナルＡ１ｐｎ＿１、Ａ１ｐｎ＿２が揃っていれば、完了している。
この時、Ａ１ｐ１のように、最初の処理ステージＩＤを持つジャーナルを開始ジャーナル、Ａ１ｐｎ＿１、Ａ１ｐｎ＿２のように最後の処理ステージＩＤを持つジャーナルを完了ジャーナルと呼ぶ。
【００３９】
図３は、テーブル記憶部１０５に記憶される書出先決定テーブル１０６の例を示す。
書出先決定テーブル１０６は、処理定義ＩＤと書出先ジャーナルファイルを対応付ける表である。
書出先ジャーナルファイルを変更する場合にはこの書出先決定テーブル１０６の値を変更する。
例えば、アプリケーション３００、または、アプリケーション３００を管理するＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）からの指示に基づき、書出先決定部１０２は、書出先決定テーブル１０６の値を変更する。
【００４０】
図４は、テーブル記憶部１０５に記憶される書出先保持テーブル１０７の例を示す。
書出先保持テーブル１０７は、処理定義ＩＤと現在書き出している書出先ジャーナルファイルを対応付ける表である。
書出先変更通知部１０３は、書出先決定テーブル１０６の値と書出先保持テーブル１０７の値を比較して、書出先ジャーナルファイルの変更を検知する。
【００４１】
本実施の形態のジャーナル管理システムでは、ジャーナルファイルを複数用意し、処理種別ごとに決定されたジャーナルファイルにジャーナルを書き込むとともに、書出先ジャーナルファイルが変更された場合には、書出先のジャーナルファイルが変更されたことをジャーナルにセットする。
そして、復旧時には、ジャーナルファイルごとに読込／復旧を行い、復旧時に、書出先ジャーナルファイルが変更されたジャーナルを持つ種別のみ、順序保証を行うようにする。
このようにすることで、複数のジャーナルファイルによる書出し性能の向上、読み込み及び復旧処理時間の短縮、書出先ジャーナルファイルの変更を全て実現する。
【００４２】
次に、本実施の形態に係るジャーナル管理システムの動作を説明する。
【００４３】
正常時の動作を図５のフローで説明する。
【００４４】
まず、ステップ１００において、アプリケーション３００が、処理定義ＩＤ、処理ＩＤ、処理ステージＩＤ、処理ブランチＩＤ、処理ブランチ数、処理データを決定し、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を介してジャーナル出力装置１００を呼び出し、処理定義ＩＤ、処理ＩＤ、処理ステージＩＤ、処理ブランチＩＤ、処理ブランチ数、処理データを引数としてジャーナル出力装置１００に与え、ステップ２００へ進む。
処理データは、アプリケーション３００が次の処理ステージから処理を開始するために必要なデータとする。
【００４５】
ステップ２００において、ジャーナル生成部１０１は、引数で与えられた処理定義ＩＤ、処理ＩＤ、ステージＩＤ、処理ブランチＩＤ、処理ブランチ数からヘッダを、処理データからボディを作成し、ステップ３００へ進む。
ヘッダとボディを合せてジャーナル６００と呼ぶ。
【００４６】
ステップ３００では、書出先決定部１０２が、ステップ２００で生成されたジャーナル６００の処理定義ＩＤと、書出先決定テーブル１０６（図３）とを照合し、ステップ２００で生成されたジャーナル６００の書出先ジャーナルファイルを決定し、ステップ４００へ進む。
例えば、ステップ２００で生成されたジャーナル６００の処理定義ＩＤが「Ａ」であれば、図３に示す書出先決定テーブル１０６に従って、書出先決定部１０２は、書出先ジャーナルファイルとしてジャーナルファイル「１」を指定する。
また、書出先決定部１０２は、ステップ３００において、次のジャーナル６００（処理定義ＩＤが同一の次のジャーナル６００）の書出先ジャーナルファイルを変更するか否かを判断し、書出先ジャーナルファイルを変更する場合は、書出先決定部１０２は、書出先決定テーブル１０６の値を変更する。
但し、変更後の書出先ジャーナルファイルが適用されるのは、次のジャーナル６００からである。
例えば、図３７に示す順序でジャーナル６００が生成される場合を想定する。
この場合に、ジャーナルＡ１ｐ１に対するステップ３００開始時の書出先決定テーブル１０６の値が図３に示す通りであれば、ジャーナルＡ１ｐ１の書出先ジャーナルファイルはジャーナルファイル「１」となる。
ここで、書出先決定部１０２が書出先決定テーブル１０６を変更して「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルを「ジャーナルファイル：２」とすれば、同じ処理定義ＩＤの次のジャーナルＡ２ｐ１に対するステップ３００において、書出先決定部１０２は、書出先ジャーナルファイルをジャーナルファイル「２」とする。
【００４７】
ステップ４００において、書出先変更通知部１０３が、ステップ２００で生成されたジャーナル６００の処理定義ＩＤと、書出先保持テーブル１０７（図４）から、これまでジャーナル６００が書き込まれていた書出先ジャーナルファイルの値を取得する。
また、書出先保持テーブル１０７から取得した書出先ジャーナルファイルの値と、書出先決定テーブル１０６（図３）の書出先ジャーナルファイルの値とを比較し、ステップ４１０へ進む。
【００４８】
ステップ４１０では、書出先ジャーナルファイルが変更されている場合（書出先保持テーブル１０７の書出先ジャーナルファイルの値と、書出先決定テーブル１０６の書出先ジャーナルファイルの値が異なる場合）は、ステップ４５０へ進み、変更されていない場合はステップ４３０へ進む。
【００４９】
ステップ４３０では、書出先変更通知部１０３は、ジャーナルヘッダの書出先変更通知領域に「変更無し」を設定し、ステップ５００へ進む。
【００５０】
ステップ４５０では、書出先変更通知部１０３は、ジャーナルヘッダの書出先変更通知領域に「変更有り」を設定する。
また、ステップ４１０における「ＹＥＳ」判定（書出先ジャーナルファイルが変更されているとの判定）が１度目であれば、ステップ５００に進む。
一方、ステップ４１０における「ＹＥＳ」判定（書出先ジャーナルファイルが変更されているとの判定）が２度目であれば、書出先変更通知部１０３は、ステップ４６０において、書出先保持テーブル１０７に書出先決定テーブル１０６の書出先ジャーナルファイルの値を書き込み、書出先保持テーブル１０７を更新し、ステップ５００へ進む。
【００５１】
ステップ５００では、書出部１０４が、書出先保持テーブル１０７に記述されている書出先ジャーナルファイルへジャーナル６００を書き出す。
書出部１０４は、書出しが完了するとアプリケーション３００へ処理を返す。
【００５２】
例えば、図３７に示す順序でジャーナル６００が生成される場合を想定する。
ステップ３００において、図３の書出先決定テーブル１０６に従って、ジャーナルＡ１ｐ１の書出先ジャーナルファイルとしてジャーナルファイル「１」が決定された後に、書出先決定部１０２により書出先ジャーナルファイルが変更されて、「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルが「ジャーナルファイル：２」になったとする。
なお、このときの書出先保持テーブル１０７では、「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルは「ジャーナルファイル：１」である。
そして、ジャーナルＡ１ｐ１に対するステップ４１０では、書出先決定テーブル１０６の値と書出先保持テーブル１０７の値が異なるので（ステップ４１０でＹＥＳ）、ステップ４５０において、ジャーナルＡ１ｐ１の書出先変更通知領域には「変更有り」が記述される。
但し、この時点では、ステップ４１０における「ＹＥＳ」判定は１度目なので、書出先保持テーブル１０７は変更されず、ステップ５００において、ジャーナルＡ１ｐ１はジャーナルファイル「１」に書出される。
次のジャーナルＡ２ｐ１に対するステップ３００において、図３の書出先決定テーブル１０６に従って、ジャーナルＡ２ｐ１の書出先ジャーナルファイルとしてジャーナルファイル「２」が決定される。
ここでは、「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルは変更されないものとする。
また、このときの書出先保持テーブル１０７では、「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルは「ジャーナルファイル：１」である。
ジャーナルＡ２ｐ１に対するステップ４１０では、書出先決定テーブル１０６の値と書出先保持テーブル１０７の値が異なるので（ステップ４１０でＹＥＳ）、ステップ４５０において、ジャーナルＡ２ｐ１の書出先変更通知領域には「変更有り」が記述される。
そして、ステップ４１０における「ＹＥＳ」判定は２度目なので、書出先保持テーブル１０７において「処理定義ＩＤ：Ａ」の書出先ジャーナルファイルが「ジャーナルファイル：２」変更され、ステップ５００において、ジャーナルＡ２ｐ１はジャーナルファイル「２」に書出される。
【００５３】
このように、処理定義ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合には、書出先ジャーナルファイルの変更を通知する書出先変更通知（「変更有り」との通知）が、書出先ジャーナルファイル変更前の最後尾のジャーナル（前出のジャーナルＡ１ｐ１）と、書出先ジャーナルファイル変更後の先頭のジャーナル（前出のジャーナルＡ２ｐ１）とに記述される。
【００５４】
次に、復旧時の動作を図６、図７、図８、図９、図１０、図１１を参照して説明する。
【００５５】
図６は、復旧装置２００のフローである。
【００５６】
ステップ１００では、復旧装置２００は、予め指定されたディレクトリにあるジャーナルファイルを全て読込み、ジャーナルファイルごとに読込部２０１を起動する。
読込部２０１の起動が完了すると、図６のフローは終了する。
【００５７】
図７及び図８は、読込部２０１及び書出先変更検知部２０２のフローである。
【００５８】
ステップ１００では、読込部２０１が、対応付けられているジャーナルファイル４００（５００）を開き、ジャーナル６００を一つずつ取り出し、ステップ１１０へ進む。
【００５９】
ステップ１１０では、読込部２０１は、ジャーナルヘッダから処理定義ＩＤと書出先変更通知領域の値を取得し、ステップ１２０へ進む。
【００６０】
ステップ１２０では、読込部２０１は、ステップ１１０で取得した処理定義ＩＤ用のジャーナル列格納領域（例えば、ワークメモリ内の領域）があるかどうかをチェックし、ジャーナル列格納領域が無ければジャーナル列格納領域を作成し、ステップ１３０へ進む。
【００６１】
ステップ１３０では、読込部２０１は、ステップ１１０で取得した書出先変更通知領域の値をチェックし、「変更有り」の場合にはステップ１４０へ進み、「変更無し」の場合にはステップ１５０へ進む。
【００６２】
ステップ１４０では、読込部２０１は、この処理定義ＩＤ用の書出先変更有無格納領域（例えば、ワークメモリ内の領域）を新しく作成し、この処理定義ＩＤで書出先ジャーナルファイルが変更されていることを書出先変更有無格納領域に格納し、ステップ１５０へ進む。
前述したように、ステップ１４０で書出先変更有無格納領域に書出先ジャーナルファイルが変更されていることが格納された処理定義ＩＤ、つまり、書出先変更通知領域に「変更有り」が記述されているジャーナル６００に記述されている処理定義ＩＤを、書出先変更発生ＩＤという。
【００６３】
ステップ１５０では、読込部２０１は、該当する処理定義ＩＤのジャーナル列格納領域へジャーナル６００を追加し、ステップ１６０へ進む。
【００６４】
ステップ１６０では、読込部２０１は、ジャーナルファイルのジャーナル６００を全て読み込んだ場合、ステップ２００へ進む。
全て読み込んで無い場合には、ステップ１００へ進み、ジャーナル６００の読込みを続ける。
【００６５】
ステップ２００では、書出先変更検知部２０２が、処理定義ＩＤごとにジャーナル列格納領域に格納された１つ以上のジャーナル（ジャーナル列と呼ぶ）を取り出し、ステップ２１０へ進む。
【００６６】
ステップ２１０では、書出先変更検知部２０２は、該当する処理定義ＩＤ用の書出先変更有無格納領域を参照して書出先ジャーナルファイルが変更されているかどうかをチェックし、書出先ジャーナルファイルが変更されていない場合にはステップ２２０へ進み、変更されている場合にはステップ２３０へ進む。
【００６７】
ステップ２２０では、書出先変更検知部２０２は、ジャーナル列を復旧部２０３へ渡し、ステップ２４０へ進む。
つまり、書出先変更検知部２０２は、書出先変更発生ＩＤ以外の処理定義ＩＤに対して生成されたジャーナル列は復旧部２０３に出力する。
【００６８】
一方、ステップ２３０では、書出先変更検知部２０２は、ジャーナル列を順序保証部２０４へ渡し、ステップ２４０へ進む。
つまり、書出先変更検知部２０２は、書出先変更発生ＩＤに対して生成されたジャーナル列は順序保証部２０４に出力する。
【００６９】
ステップ２４０では、書出先変更検知部２０２は、全ての処理定義ＩＤのジャーナル列を処理している場合には、動作を終了する。
一方、未処理の処理定義ＩＤがある場合には、ステップ２００へ進み、ジャーナル列の処理を続ける。
【００７０】
図１２は、ジャーナル列の生成イメージを示している。
説明を簡明にするために、図１２のジャーナル６００では、「処理定義ＩＤ」と「処理ＩＤ」のみを図示している。
ジャーナルファイル４００（５００）には、複数の処理定義ＩＤのジャーナル６００が含まれているが、読込部２０１が、処理定義ＩＤに従ってジャーナル６００を分類し、同じ処理定義ＩＤを持つジャーナル６００をまとめたものがジャーナル列である。
図１２では、処理定義Ａ、Ｂ、Ｃのジャーナル６００が混在しているジャーナルファイル４００（５００）から、処理定義Ａのジャーナル６００のみを抽出して、処理定義Ａのジャーナル列を生成している状況が示されている。
【００７１】
図９は、順序保証部２０４の動作フローである。
【００７２】
ステップ１００では、順序保証部２０４が、書出先変更検知部２０２から渡されたジャーナル列の集合からジャーナル列を１つ取り出し、ステップ１１０へ進む。
【００７３】
ステップ１１０では、順序保証部２０４は、ステップ１００で取り出したジャーナル列から処理定義ＩＤを取得し、ステップ１２０へ進む。
ステップ１２０では、順序保証部２０４は、処理定義ＩＤに対応する順序待合せ部２０５が起動されているかを検査し、順序待合せ部２０５が起動されている場合にはステップ１４０へ進み、起動されていない場合にはステップ１３０へ進む。
【００７４】
ステップ１３０では、順序保証部２０４は、処理定義ＩＤに対応する順序待合せ部２０５を起動して、ステップ１４０へ進む。
【００７５】
ステップ１４０では、順序保証部２０４は、ジャーナル列を処理定義ＩＤに対応する順序待合せ部２０５へ渡して、ステップ１５０へ進む。
【００７６】
ステップ１５０では、順序保証部２０４は、書出先変更検知部２０２から渡された全てのジャーナル列を処理したかを検査し、処理していればステップ１６０へ進む。
未処理のジャーナル列がある場合は、ステップ１００へ進み、ジャーナル列の処理を続ける。
【００７７】
ステップ１６０では、順序保証部２０４は、全ての順序待合せ部２０５へジャーナル列受取完了を通知し、動作を終了する。
【００７８】
図１０は、順序待合せ部２０５の動作フローである。
【００７９】
ステップ１００では、順序待合せ部２０５は、順序保証部２０４からジャーナル列を受け取り、ステップ１１０へ進む。
【００８０】
ステップ１１０では、順序待合せ部２０５は、受け取ったジャーナル列を処理ＩＤ順に一つのジャーナル列に再構成し、ステップ１２０へ進む。
つまり、順序待合せ部２０５は、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結する。
【００８１】
ステップ１２０では、順序待合せ部２０５は、順序保証部２０４がジャーナル列受取完了通知を出しているかをチェックし、ジャーナル列受取完了通知を出している場合は、ステップ１３０へ進む。
ジャーナル列受取完了通知を出していない場合はステップ１００へ進み、ジャーナル列の受け取りを続ける。
【００８２】
ステップ１３０では、順序待合せ部２０５は、繋ぎ合わせたジャーナル列を復旧部２０３ｃへ渡す。
【００８３】
図１１は、復旧部２０３の動作フローである。
【００８４】
ステップ１００では、復旧部２０３は、渡されたジャーナル列から処理定義ＩＤの小さい順に、ある処理ＩＤを持つ複数のジャーナルを取り出し、ステップ１１０へ進む。
【００８５】
ステップ１１０では、復旧部２０３は、取り出したジャーナルを検査し、その処理ＩＤに対して、全ての処理ステージと処理ブランチが揃っているかを検査する。
全ての処理ステージと処理ブランチが揃っていれば、復旧部２０３は、ステップ１２０へ進む。
揃っていなければステップ１３０へ進む。
【００８６】
ステップ１２０では、復旧部２０３は、この処理ＩＤのジャーナル列が完了していることを記憶し、ステップ１４０へ進む。
【００８７】
ステップ１３０では、復旧部２０３は、この処理ＩＤのジャーナル列が未完了であることを記憶し、ステップ１４０へ進む。
【００８８】
ステップ１４０では、復旧部２０３は、ジャーナル列に含まれる全ての処理ＩＤに対して処理したかを検査する。
全ての処理ＩＤに対して処理していれば、動作を終了する。
処理していなければステップ１００へ進み、処理を継続する。
【００８９】
復旧部２０３はジャーナル列を解析し、ある処理定義ＩＤのどの処理ＩＤが完了していて、どの処理ＩＤが未完了なのかを判定する。
アプリケーション３００は内部処理の完了状況を取得し、完了していない内部処理があればアプリケーション３００が再開処理を行うことで、異常終了により中断された内部処理を再開させることができる。
【００９０】
以上のように、本実施の形態では、書出先変更検知部で、書出先ジャーナルファイルが変更された（順序保証が必要となる）処理定義のジャーナル列のみを順序保証対象とすることで、順序保証処理による遅延を最小化し、アプリケーション全体の復旧処理を高速化することができる。
【００９１】
また、本実施の形態では、書出先ジャーナルファイルが変更になる場合にジャーナルに書出先変更通知を記述し、書出先変更通知が記述されているジャーナルの処理手順ＩＤを書出先変更発生ＩＤとして他の処理定義ＩＤから区別し、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結する。
このため、ジャーナルファイルを固定する必要がなく、ジャーナルファイルの変更が可能であり、ジャーナルの書出し性能の向上が図られる。
また、書出先ジャーナルファイルの変更があったジャーナルは書出先変更通知により検知できるので、ジャーナルファイルの読込みの並列化が可能であり、読込み時間を短縮することができる。
【００９２】
実施の形態２．
以上の実施の形態１では、書出先変更通知がセットされた処理定義ＩＤのジャーナル列を全て順序保証部２０４へ渡すようにしている。
これに対し、実施の形態２では、書出先変更通知がセットされたジャーナル列でも、あるパターンにマッチするジャーナル列は順序保証部２０４へ渡さないようにすることで、順序保証による遅延を最小化し、アプリケーション全体の復旧処理を高速化する。
【００９３】
実施の形態２に係るジャーナル管理システムの構成例を図１３に示す。
【００９４】
実施の形態２では、実施の形態１の構成に加えて、ジャーナル出力装置１００に順序保証除外部２０６ａ、順序保証除外部２０６ｂ及び順序保証除外パターン記憶部２０７を備える。
なお、順序保証除外部２０６ａ、順序保証除外部２０６ｂを区別する必要がないときは、順序保証除外部２０６と表記する。
また、実施の形態２では、ジャーナル６００の書出先変更通知は、書出先変更通知（ＯＵＴ）と書出先変更通知（ＩＮ）に区別される。
【００９５】
書出先変更通知（ＯＵＴ）は、書出先ジャーナルファイル変更前の最後尾のジャーナルであることを通知する情報であり、変更前最後尾データ通知の例に相当する。
また、書出先変更通知（ＩＮ）は、書出先ジャーナルファイル変更後の先頭のジャーナルであることを通知する情報であり、変更後先頭データ通知の例に相当する。
つまり、本実施の形態では、書出先変更通知部１０３は、処理定義ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイル変更前の最後尾のジャーナルの書出先変更通知領域に書出先変更通知（ＯＵＴ）を記述する。
また、書出先変更通知部１０３は、処理定義ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイル変更後の先頭のジャーナルの書出先変更通知領域に書出先変更通知（ＩＮ）を記述する。
【００９６】
順序保証除外パターン記憶部２０７は、順序保証除外パターンを記憶する。
順序保証除外パターンは、後述するように、先頭のジャーナルに書出先変更通知（ＩＮ）が記述され、最後尾のジャーナルに書出先変更通知（ＯＵＴ）が記述されていないというジャーナル列のパターンである。
順序保証除外パターンは、後述する図１４のパターン２であり、特殊ジャーナル列パターンの例に相当する。
また、順序保証除外パターン記憶部２０７は、記憶部の例に相当する。
【００９７】
順序保証除外部２０６は、書出先変更検知部２０２から入力したジャーナル列が順序保証除外パターンに該当するか否かを判断し、入力したジャーナル列が順序保証除外パターンに該当する場合に、他のジャーナル列との連結の対象とすることなく、入力したジャーナル列の一部を復旧部２０３に出力する。
より具体的には、順序保証除外部２０６は、入力したジャーナル列が順序保証除外パターンに該当する場合に、入力したジャーナル列を解析して、処理手順が完了している処理インスタンスが存在するか否かを判断する。
そして、順序保証除外部２０６は、処理手順が完了している処理インスタンスが存在する場合に、処理手順が完了している処理インスタンスよりも後の発生順序を表す処理ＩＤが記述されている１つ以上のジャーナルを、入力したジャーナル列から抽出する。
更に、順序保証除外部２０６は、抽出したジャーナルを、他のジャーナル列との連結の対象とすることなく、復旧部２０３に出力する。
なお、順序保証除外部２０６は、順序保証部２０４とともに、ジャーナル連結部の例に相当する。
【００９８】
なお、図１３の構成において、書出先変更通知部１０３、順序保証除外部２０６及び順序保証除外パターン記憶部２０７以外の要素は、図１に示したものと同様なので説明を省略する。
【００９９】
次に、順序保証除外パターンを図１４を参照して説明する。
【０１００】
図１４は、ジャーナル列のパターンを示している。
つまり、図１４は、１つのジャーナルファイルに含まれるジャーナルを処理定義ＩＤごとに分類し、図１７のように書出先変更通知の出現を区切りとして分割して得られるジャーナル列のパターンを示している。
図１７の例では、１つのジャーナルファイルから、同じ処理定義ＩＤが記述されている３つのジャーナル列が生成される（書出先ジャーナルファイルが２回変更になった）ことを示している。
【０１０１】
図１４に示すように、ジャーナル列のパターンは次の４つとなる。
なお、（２）〜（４）のパターンが出現する場合は、図１７のように１つの処理定義ＩＤに対して２つ以上のジャーナル列が抽出される。
また、（１）のパターンの場合は、１つの処理定義ＩＤに対して必ず１つのジャーナル列が抽出される。
【０１０２】
（１）パターン１は、書出先変更通知が無いジャーナル列である。
（２）パターン２は、先頭のジャーナルに書出先変更通知（ＩＮ）が記述され、それ以降最後尾のジャーナルまで書出先変更通知が無いジャーナル列である。
（３）パターン３は、最後尾のジャーナルのみに書出先変更通知（ＯＵＴ）が記述されているジャーナル列である。
（４）パターン４は、先頭のジャーナルに書出先変更通知（ＩＮ）が記述され、さらに最後尾のジャーナルに書出先変更通知（ＯＵＴ）が記述されているジャーナル列である。
上記の（２）パターン２が、順序保証除外パターンである。
【０１０３】
次に、本実施の形態に係るジャーナル管理システムの動作を説明する。
【０１０４】
正常時の動作を図１５のフローで説明する。
【０１０５】
ステップ１００〜４００までは、実施の形態１と同じため説明を省略する。
ステップ４１０では、書出先変更通知部１０３が、実施の形態１と同様の判断手順にて書出先ジャーナルファイルが変更されているか否かを判断し、書出先ジャーナルファイルが変更されている場合は、ステップ４２０へ進み、変更されていない場合はステップ４３０へ進む。
【０１０６】
ステップ４３０では、書出先変更通知部１０３は、ジャーナルヘッダの書出先変更通知領域に「変更無し」を設定し、ステップ５００へ進む。
【０１０７】
ステップ４２０では、書出先変更通知部１０３は、書出先ジャーナルファイルが変更された直後の書出しかどうかを検査し、直後の書出しの場合はステップ４４０へ進み、２回目の書出しの場合は、ステップ４５２へ進む。
つまり、書出先変更通知部１０３は、ステップ４１０における「ＹＥＳ」判定（書出先ジャーナルファイルが変更されているとの判定）が１度目であるか２度目であるかを判断し、１度目であればステップ４４０へ進み、２度目の場合はステップ４５２へ進む。
【０１０８】
ステップ４４０では、書出先変更通知部１０３は、書出先変更通知領域に書出先変更通知（ＯＵＴ）として「変更有り（ＯＵＴ）」を設定し、ステップ５００へ進む。
【０１０９】
ステップ４５２では、書出先変更通知部１０３は、書出先変更通知領域に書出先変更通知（ＩＮ）として「変更有り（ＩＮ）」を設定し、ステップ４６０へ進む。
【０１１０】
ステップ４６０では、書出先変更通知部１０３は、書出先保持テーブル１０７に書出先決定テーブル１０６の書出先ジャーナルファイルの値を書き込み、書出先保持テーブル１０７を更新し、ステップ５００へ進む。
【０１１１】
ステップ５００では、書出部１０４が、書出先保持テーブル１０７に格納された書出先ジャーナルファイルへジャーナル６００を書き出す。
書出部１０４は、書出しが完了するとアプリケーションへ処理を返す。
【０１１２】
図１６は、書出先変更通知部１０３がジャーナル６００の書出先変更通知領域に「書出先変更通知（ＯＵＴ）」及び「書出先変更通知（ＩＮ）」を記述する動作を説明している。
【０１１３】
「処理定義ＩＤ：Ａ」、「処理ＩＤ：２」のジャーナル６００を書き出す際に書出先ジャーナルファイルが変更された場合、書出先変更通知部１０３は、「処理定義ＩＤ：Ａ」、「処理ＩＤ：２」のジャーナルの書出先変更通知領域には「書出先変更通知（ＯＵＴ）」として「変更有り（ＯＵＴ）」を格納し、当該ジャーナルを書出部１０４が変更前のジャーナルファイル４００へ書き出す。
また、書出先変更通知部１０３は、「処理定義ＩＤ：Ａ」、「処理ＩＤ：３」のジャーナル（２回目）の書出先変更通知領域には「書出先変更通知（ＩＮ）」として「変更有り（ＩＮ）」を格納し、当該ジャーナルを書出部１０４が変更後のジャーナルファイル５００へ書き出す。
【０１１４】
次に、復旧時の動作を図１８、図１９及び図２０を参照して説明する。
復旧装置２００のフローは実施の形態１と同様であるため省略する。
【０１１５】
図１８及び図１９は、読込部２０１及び書出先変更検知部２０２のフローである。
【０１１６】
ステップ１００では、読込部２０１は、対応付けられているジャーナルファイル４００（５００）を開き、ジャーナルを一つずつ取り出し、ステップ１１０へ進む。
【０１１７】
ステップ１１０では、読込部２０１は、ジャーナルヘッダから処理定義ＩＤと書出先変更通知領域の値を取得し、ステップ１２０へ進む。
【０１１８】
ステップ１２０では、読込部２０１は、ステップ１１０で取得した処理定義ＩＤ用のジャーナル列格納領域（例えば、ワークメモリ内の領域）があるかどうかをチェックし、ジャーナル列格納領域が無ければジャーナル列格納領域を作成し、ステップ１３０へ進む。
【０１１９】
ステップ１３０では、読込部２０１は、ステップ１１０で取得した書出先変更通知領域の値をチェックし、「変更有り」の場合にはステップ１３２へ、「変更無し」の場合にはステップ１５０へ進む。
【０１２０】
ステップ１３２では、読込部２０１は、書出先変更通知領域の値をチェック、「変更有り（ＩＮ）」の場合にはステップ１３４へ、「変更有り（ＯＵＴ）」の場合にはステップ１４０へ進む。
【０１２１】
ステップ１３４では、この処理定義ＩＤ用のジャーナル列格納領域を新しく作成し、ステップ１４０へ進む。
【０１２２】
ステップ１４０では、この処理定義ＩＤで書出先ジャーナルファイルが変更されていることを書出先変更有無格納領域に格納し、ステップ１５０へ進む。
【０１２３】
ステップ１５０では、読込部２０１は、この処理定義ＩＤ用のジャーナル列格納領域へジャーナル６００を追加し、ステップ１６０へ進む。
【０１２４】
ステップ１６０では、読込部２０１は、ジャーナルファイルのジャーナル６００を全て読み込んだ場合、ステップ２０２へ進む。
全て読み込んで無い場合には、ステップ１００へ進み、ジャーナル６００の読込みを続ける。
【０１２５】
ステップ２０２では、書出先変更検知部２０２が、処理定義ＩＤごとにジャーナル格納領域に格納された１つ以上のジャーナル（ジャーナル列と呼ぶ）を取り出し、ステップ２１０へ進む。
【０１２６】
ステップ２１０では、書出先変更検知部２０２は、該当する処理定義ＩＤ用の書出先変更有無格納領域を参照して書出先ジャーナルファイルが変更されているかどうかをチェックし、書出先ジャーナルファイルが変更されていない場合にはステップ２２０へ進み、変更されている場合にはステップ２３２へ進む。
【０１２７】
ステップ２２０では、書出先変更検知部２０２は、ジャーナル列を復旧部２０３へ渡し、ステップ２４０へ進む。
ステップ２２０で書出先変更検知部２０２から復旧部２０３に出力されるジャーナル列は、図１４のパターン１に該当するジャーナル列である。
【０１２８】
一方、ステップ２３２では、書出先変更検知部２０２は、ジャーナル列を順序保証除外部２０６へ渡し、ステップ２４０へ進む。
ステップ２３２で書出先変更検知部２０２から順序保証除外部２０６に出力されるジャーナル列は、図１４のパターン２〜４のいずれかに該当するジャーナル列である。
【０１２９】
ステップ２４０では、書出先変更検知部２０２は、全ての処理定義ＩＤのジャーナル列を処理している場合には、動作を終了する。
一方、未処理の処理定義ＩＤがある場合には、ステップ２０２へ進み、ジャーナル列の処理を続ける。
【０１３０】
図２０は、順序保証除外部２０６の動作フローである。
【０１３１】
ステップ１００では、順序保証除外部２０６は、書出先変更検知部２０２から渡されたジャーナル列から一つジャーナル列を取り出し、ステップ１１０へ進む。
【０１３２】
ステップ１１０では、順序保証除外部２０６は、取り出したジャーナル列を図１４のパターン２と照合し、ステップ１２０へ進む。
【０１３３】
ステップ１２０では、順序保証除外部２０６は、ジャーナル列がパターン２に該当する場合は、ステップ１３０へ進む。
ジャーナル列がパターン２以外のパターンに該当する場合には、ステップ１４０へ進む。
【０１３４】
ステップ１３０では、順序保証除外部２０６は、ジャーナル列内のジャーナルを処理ＩＤの小さい順番に処理ＩＤごとに検査し、完了している処理ＩＤがあるかどうかを検査し、完了している処理ＩＤがある場合にはステップ１６０へ進み、完了している処理ＩＤが一つも無い場合にはステップ１４０へ進む。
【０１３５】
ステップ１６０では、順序保証除外部２０６は、完了している処理ＩＤより後の処理ＩＤのジャーナルをジャーナル列として再構成し、再構成したジャーナル列を復旧部２０３へ渡して、動作を終了する。
この場合は、完了している処理ＩＤより後の処理ＩＤのジャーナルで構成されるジャーナル列は他のジャーナル列との連結の対象とせずに、復旧部２０３へ渡す。
【０１３６】
ステップ１４０では、順序保証除外部２０６は、渡されたジャーナル列を全て処理したかを検査し、処理していなければステップ１００へ進み、処理を継続する。
一方、全てを処理していればステップ１５０へ進む。
【０１３７】
ステップ１５０では、順序保証除外部２０６は、ジャーナル列を順序保証部２０４へ渡す。
【０１３８】
例えば、図３７に示されるジャーナル６００群から、「処理定義ＩＤ：Ａ」をもつジャーナル列（Ａ１ｐ１、Ａ２ｐ１、Ａ１ｐｎ＿１、Ａ１ｐｎ＿２）が生成され、当該ジャーナル列（Ａ１ｐ１、Ａ２ｐ１、Ａ１ｐｎ＿１、Ａ１ｐｎ＿２）が図１４のパターン２に該当すると想定する。
ここで、「処理ＩＤ：１」は、Ａ１ｐｎ＿１、Ａ１ｐｎ＿２の両者が揃っているので完了しており、順序保証除外部２０６は、「処理ＩＤ：１」よりも後の処理ＩＤである「処理ＩＤ：２」が記述されているジャーナルＡ２ｐ１を、ステップ１６０において、復旧部２０３へ出力する。
【０１３９】
順序保証部２０４、順序待合せ部２０５、復旧部２０３の動作は実施の形態１と同様であるため、説明を省略する。
【０１４０】
以上のように実施の形態２では、順序保証除外部により、書出先変更通知があるジャーナル列でもパターン２にマッチし、完了したジャーナルを含む場合には、このジャーナル列を、順序保証部へ渡さずに復旧部へ渡すようにしている。
このようなジャーナル列は、書出先ジャーナルファイルの変更があるため、共通の処理定義ＩＤが記述されているジャーナルが複数のジャーナルファイルに跨って存在し、本来なら順序保証部によりそれらジャーナルを繋ぎ合わせ完全な状態としてから解析し、復旧部へ渡す必要がある。
しかし、パターン２のように末尾まで書出先ジャーナルファイルの変更がされておらず、さらに途中で完了している処理ＩＤがある場合、その処理ＩＤまでの処理が完了していることが分かるため、復旧処理に関してそれ以前のジャーナルは必要ない。
このようなジャーナルは、順序保証部へ渡す必要はなく、これらを復旧部へ直接渡すことにより、必要のない順序保証をなくし、アプリケーション全体の復旧処理を高速化することができる。
【０１４１】
実施の形態３．
以上の実施の形態２では、書出先変更通知がセットされたジャーナル列でも順序保証除外パターンにマッチするジャーナル列は、順序保証部へ渡さないようにしている。
実施の形態３では、さらに順序保証部へ渡されたジャーナル列を分析して、順序待合せ対象から除外する。
【０１４２】
実施の形態３に係るジャーナル管理システムの構成例を図２１に示す。
【０１４３】
本実施の形態では、実施の形態２の構成に加えて、ジャーナル出力装置１００において、順序待合せ除外部２０８、順序待合せ除外パターン記憶部２０９を備える。
順序待合せ除外部２０８、順序待合せ除外パターン記憶部２０９以外の要素は、実施の形態２と同様なので説明を省略する。
【０１４４】
順序待合せ除外パターン記憶部２０９は、順序待合せ除外パターンを記憶する。
順序待合せ除外パターンの詳細は後述する。
順序待合せ除外パターンは、制限ジャーナル列パターンの例に相当する。
また、順序待合せ除外パターン記憶部２０９は、記憶部の例に相当する。
【０１４５】
順序待合せ除外部２０８は、順序保証除外部２０６により順序保証除外パターン（図１４のパターン２）に該当しないと判断されたジャーナル列、更には、図２０のステップ１３０により「完了しているジャーナルがない」と判定されたジャーナル列が、順序待合せ除外パターンに該当するか否かを判断する。
そして、ジャーナル列が順序待合せ除外パターンに該当する場合に、所定の処理ＩＤが記述されているジャーナル列を、他のジャーナル列との連結の対象から除外する。
順序待合せ除外部２０８は、順序保証部２０４及び順序保証除外部２０６とともに、ジャーナル連結部の例に相当する。
【０１４６】
次に、順序待合せ除外パターン記憶部２０９が記憶する順序待合せ除外パターンを説明する。
【０１４７】
あるジャーナル列が書出先変更通知（ＩＮ）を持つ場合、そのジャーナル列に含まれるジャーナルの開始ジャーナル（ある処理定義のある処理ＩＤの最初の処理ステージが完了したことを示すジャーナル）や開始ジャーナル以降のジャーナルが、それ以前のジャーナル列（他のジャーナルファイルに書き出されたジャーナルから生成されるジャーナル列）に含まれている可能性があるため、それ以前のジャーナル列の取得を待ち合わせ、共通の処理ＩＤが記述されているジャーナル列同士を連結してから復旧処理を行う必要がある。
しかし、あるジャーナル列が書出先変更通知（ＩＮ）を持つ場合でも、そのジャーナル列の中で、ある処理ＩＤの処理インスタンスが完了していることが分かる場合には、その処理ＩＤより後の処理インスタンスを再開すればよいため、その処理ＩＤが記述されているジャーナル及びその処理ＩＤより前の処理ＩＤが記述されているジャーナルは復旧処理で利用されない。
このため、ジャーナル列の待ち合わせをする必要は無い。
順序待合せ除外パターン記憶部２０９が記憶する順序待合せ除外パターンは、このようなジャーナル列を判別するためのパターンである。
順序待合せ除外パターンは、具体的には、図２２に示すパターン１〜パターン３である。
【０１４８】
パターン１は、次の条件を満たすジャーナル列のパターンである。
（１）先頭のジャーナルに書出先変更通知（ＩＮ）がある。
（２）ある処理ＩＤ：ｘの開始ジャーナルと全ての完了ジャーナルが揃っている。
ここで、「全ての完了ジャーナルが揃っている」とは、処理ブランチ数分、すなわち、処理手順内の分岐数分、完了ジャーナルが存在していることを意味する。
前述したように、開始ジャーナルとは、処理手順内の最初の工程（処理ステージ）が完了したことを示すジャーナルであり、完了ジャーナルとは、処理手順内の最後の工程（処理ステージ）が完了したことを示すジャーナルである。
パターン１に該当する場合は、処理ＩＤ：ｘの処理インスタンスと、処理ＩＤ：ｘの処理インスタンスよりも前の処理インスタンスは完了している。
もし、処理ＩＤ：ｘの処理インスタンスが、完了している最後の処理インスタンスであれば、処理ＩＤ：ｘの開始ジャーナルから末尾までのジャーナル（完了ジャーナル）を分析して復旧処理を開始することができる。
【０１４９】
パターン１の例を図２３に示す（処理ブランチ数は２）。
図２３では、先頭ジャーナルＡ１ｐｎ＿１に書出先変更通知（ＩＮ）があり、開始ジャーナルＡ２ｐ１に対して完了ジャーナルＡ２ｐｎ＿１、Ａ２ｐｎ＿２があり、完了ジャーナルが全て揃っている。
【０１５０】
パターン２は、次の条件を満たすジャーナル列のパターンである。
（１）先頭のジャーナルに書出先変更有り（ＩＮ）がある。
（２）ある処理ＩＤ：ｘの全ての完了ジャーナルが揃っている（処理ＩＤ：ｘの開始ジャーナルはない）。
（３）先頭のジャーナルから処理ＩＤ：ｘの最後の完了ジャーナルまでの間、または最後の完了ジャーナルの次のジャーナルに、処理ＩＤ：ｘの次の処理ＩＤ：ｘ＋１の開始ジャーナルがある。
パターン２に該当する場合、処理ＩＤ：ｘの開始ジャーナルが無くても、全ての完了ジャーナルが揃っており、処理ＩＤ：ｘの処理インスタンスは完了している。
さらに、処理ＩＤ：ｘより次の処理ＩＤ：ｘ＋１の開始ジャーナルがそのジャーナル列にあれば、処理ＩＤ：ｘの処理インスタンスと、処理ＩＤ：ｘの処理インスタンスよりも前の処理インスタンスは復旧に必要ない。
【０１５１】
パターン２の例を図２４に示す（処理ブランチ数は２）。
図２４では、先頭ジャーナルＡ３ｐ１に書出先変更通知（ＩＮ）があり、Ａ２の完了ジャーナルＡ２ｐｎ＿１、Ａ２ｐｎ＿２が揃っている。
Ａ２の開始ジャーナルは無いが、Ａ３の開始ジャーナルＡ３ｐ１があるためＡ２以降の処理インスタンスのジャーナルは全てこのジャーナル列にある。
このため、Ａ２以前のジャーナル列は復旧のために必要が無い。
【０１５２】
パターン３は、次の条件を満たすジャーナル列のパターンである。
（１）先頭のジャーナルに書出先変更有り（ＩＮ）がある。
（２）ある処理ＩＤ：ｘ、処理ＩＤ：ｘ−１の完了ジャーナルがあり、１つのジャーナルとして見た場合に完了ジャーナルが全て揃っている。
例えばＡ１（処理ＩＤ：１）、Ａ２（処理ＩＤ：２）があり、ブランチ数が４つの場合、完了ジャーナルＡ１ｐｎ＿１、Ａ２ｐｎ＿２、Ａ２ｐｎ＿３、Ａ２ｐｎ＿４が揃っている状態である。
ここでの「揃っている」とは、Ａ１のブランチＩＤ＝２、３、４の完了ジャーナルは無いが、Ａ２のブランチＩＤ＝２、３、４の完了ジャーナルがあることを指す。
（３）先頭のジャーナルから処理ＩＤ：ｘの最後の完了ジャーナルまでの間、または最後の完了ジャーナルの次のジャーナルに、処理ＩＤ：ｘの次の処理ＩＤ：ｘ＋１の開始ジャーナルがある。
【０１５３】
パターン３の例を図２５に示す（処理ブランチ数は２）。
図２５では、先頭ジャーナルＡ３ｐ１に書出先変更通知（ＩＮ）があり、Ａ２の完了ジャーナルＡ２ｐｎ＿２、Ａ３の完了ジャーナルＡ３ｐｎ＿１がある。
また、Ａ４の開始ジャーナルＡ３ｐ１が存在している。
Ａ２、Ａ３のどちらのジャーナルも完了するためには完了ジャーナルが不足しているが、両方では補完しあっている。
同じ処理ステージ内では追い越しが無いため、Ａ３ｐｎ＿２が存在することで、ジャーナル列には現れないがＡ２ｐｎ＿２がこのジャーナル列より前のジャーナル列（他のジャーナルファイルに書出されたジャーナルで構成されるジャーナル）に存在することが保証されるため、Ａ２の完了ジャーナルが揃っていると判断することができる。
【０１５４】
次に、本実施の形態に係るジャーナル管理システムの動作を説明する。
【０１５５】
正常時のフローは、実施の形態２と同様のため省略する。
復旧時のフローは、図２６の順序待合せ除外部２０８のフロー以外は実施の形態２と同様のため省略する。
図２６は、順序待合せ除外部２０８の動作フローである。
【０１５６】
ステップ１００で、順序待合せ除外部２０８は、順序保証部２０４からジャーナル列を受け取るとステップ２００へ進む。
順序待合せ除外部２０８が入力するジャーナル列は、図２０のステップ１２０においてパターン３又はパターン４に該当すると判定されたジャーナル列、または、図２０のステップ１３０により「完了しているジャーナルがない」と判定されたパターン２のジャーナル列である。
【０１５７】
ステップ２００では、順序待合せ除外部２０８は、取得したジャーナル列と順序保証除外パターンとを照合し、ステップ２１０へ進む。
【０１５８】
ステップ２１０では、順序待合せ除外部２０８は、取得したジャーナル列が、いずれかの順序保証除外パターンにマッチする場合には、ステップ２２０へ進み、いずれの順序保証除外パターンにもマッチしない場合には、ステップ２４０へ進む。
【０１５９】
ステップ２２０では、順序待合せ除外部２０８は、順序保証除外パターンとマッチしたジャーナル列の処理ＩＤを取得し、ステップ２３０へ進む。
すなわち、順序待合せ除外部２０８は、図２２の各パターンの説明で示している処理ＩＤ：ｘに相当する処理ＩＤをジャーナル列から抽出する。
【０１６０】
ステップ２３０では、順序待合せ除外部２０８は、処理ＩＤ格納領域（例えば、ワークメモリ内の領域）をチェックし、ステップ２２０で取得した処理ＩＤが処理ＩＤ格納領域に登録されていなければ、取得した処理ＩＤを処理ＩＤ格納領域に登録する。
ステップ２２０で取得した処理ＩＤが既に処理ＩＤ格納領域に登録されている場合は、登録されている処理ＩＤよりも取得した処理ＩＤの方が大きい場合には、順序待合せ除外部２０８は、取得した処理ＩＤを上書きして登録し、ステップ２４０へ進む。
【０１６１】
ステップ２４０では、順序待合せ除外部２０８は、処理ＩＤ格納領域をチェックし、ステップ１００で受け取ったジャーナル列の処理ＩＤが処理ＩＤ格納領域に登録されている場合は、ステップ２５０へ進み、登録されていない場合はステップ１１０へ進む。
【０１６２】
ステップ２５０では、順序待合せ除外部２０８は、ステップ１００で受け取ったジャーナル列と、これまで受け取り繋ぎ合わせたジャーナル列を検査し、処理ＩＤ格納領域にある処理ＩＤ以降のジャーナルが全て揃っているかどうかを検査する。
揃っている場合にはステップ２６０へ、揃っていない場合にはステップ１１０へ進む。
【０１６３】
ステップ２６０では、順序待合せ除外部２０８は、ステップ１００で受け取ったジャーナル列とこれまで受け取り繋ぎ合わせたジャーナル列を繋ぎ合わせ、処理ＩＤ格納領域にある処理ＩＤ以降のジャーナルを抽出してジャーナル列を作成し、作成したジャーナル列を復旧部２０３へ渡して、動作を終了する。
【０１６４】
ステップ１１０では、順序待合せ除外部２０８は、ステップ１００で受け取ったジャーナル列とこれまで受け取り繋ぎ合わせたジャーナル列を繋ぎ合わせ、ステップ１２０へ進む。
【０１６５】
ステップ１２０では、順序待合せ除外部２０８は、順序保証部２０４からジャーナル受取完了通知が来たかどうかを検査し、ジャーナル受取完了通知が来た場合には、ステップ１３０へ進む。
ジャーナル受取完了通知が来ていない場合には、ステップ１００へ進み、順序待合せ処理を継続する。
ステップ１３０では、順序待合せ除外部２０８は、繋ぎ合せたジャーナル列を復旧部２０３へ渡して、動作を終了する。
【０１６６】
以上のように、実施の形態３では、順序保証部へ渡されたジャーナル列でも、順序待合せ除外パターンにマッチするジャーナル列は、それ以前のジャーナル列の待ち合わせを行わないようにする。
つまり、実施の形態３に係る順序待合せ除外部２０８は、処理ＩＤ：ｘに相当する処理ＩＤよりも前の発生順序を表す処理ＩＤが記述されているジャーナル列を、連結の対象から除外する。
これにより、待ち合わせによる処理遅延を排除し、アプリケーション全体の復旧処理を高速化することができる。
【０１６７】
最後に、実施の形態１〜３に示したジャーナル出力装置１００及び復旧装置２００のハードウェア構成例について説明する。
図３８は、実施の形態１〜３に示すジャーナル出力装置１００及び復旧装置２００のハードウェア資源の一例を示す図である。
なお、図３８の構成は、あくまでもジャーナル出力装置１００及び復旧装置２００のハードウェア構成の一例を示すものであり、ジャーナル出力装置１００及び復旧装置２００のハードウェア構成は図３８に記載の構成に限らず、他の構成であってもよい。
【０１６８】
図３８において、ジャーナル出力装置１００及び復旧装置２００の各々は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７と接続していてもよい。また、磁気ディスク装置９２０の代わりに、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、光ディスク装置、メモリカード（登録商標）読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置の一例である。
実施の形態１〜３で説明した「〜記憶部」は、ＲＡＭ９１４、磁気ディスク装置９２０等により実現される。
通信ボード９１５、キーボード９０２、マウス９０３、スキャナ装置９０７などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【０１６９】
通信ボード９１５は、ネットワークに接続されている。
例えば、通信ボード９１５は、ＬＡＮ（ローカルエリアネットワーク）、インターネット、ＷＡＮ（ワイドエリアネットワーク）、ＳＡＮ（ストレージエリアネットワーク）などに接続されている。
【０１７０】
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。
プログラム群９２３のプログラムは、ＣＰＵ９１１がオペレーティングシステム９２１、ウィンドウシステム９２２を利用しながら実行する。
【０１７１】
また、ＲＡＭ９１４には、ＣＰＵ９１１に実行させるオペレーティングシステム９２１のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。
また、ＲＡＭ９１４には、ＣＰＵ９１１による処理に必要な各種データが格納される。
【０１７２】
また、ＲＯＭ９１３には、ＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ  Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）プログラムが格納され、磁気ディスク装置９２０にはブートプログラムが格納されている。
ジャーナル出力装置１００及び復旧装置２００の起動時には、ＲＯＭ９１３のＢＩＯＳプログラム及び磁気ディスク装置９２０のブートプログラムが実行され、ＢＩＯＳプログラム及びブートプログラムによりオペレーティングシステム９２１が起動される。
【０１７３】
上記プログラム群９２３には、実施の形態１〜３の説明において「〜部」（「〜記憶部」以外、以下同様）として説明している機能を実行するプログラムが記憶されている。
プログラムは、ＣＰＵ９１１により読み出され実行される。
【０１７４】
ファイル群９２４には、実施の形態１〜３の説明において、「〜の判断」、「〜の判定」、「〜の生成」、「〜の作成」、「〜の計算」、「〜の算出」、「〜の比較」、「〜の検査」、「〜の照合」、「〜の更新」、「〜の設定」、「〜の登録」、「〜の選択」、「〜の入力」、「〜の出力」、「〜の取得」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出される。
そして、読み出された情報やデータや信号値や変数値やパラメータは、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、実施の形態１〜３で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示す。
データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ等の記録媒体に記録される。
また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【０１７５】
また、実施の形態１〜３の説明において「〜部」として説明しているものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。
すなわち、実施の形態１〜３で説明したフローチャートに示すステップ、手順、処理により、ジャーナル出力装置１００及び復旧装置２００の処理をジャーナル管理方法として捉えることができる。
また、「〜部」として説明しているものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。
或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。
プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。
すなわち、プログラムは、実施の形態１〜３の「〜部」としてコンピュータを機能させるものである。あるいは、実施の形態１〜３の「〜部」の手順や方法をコンピュータに実行させるものである。
【０１７６】
このように、実施の形態１〜３に示すジャーナル出力装置１００及び復旧装置２００は、それぞれ、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータである。
そして、上記したように「〜部」として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【０１７７】
１００  ジャーナル出力装置、１０１  ジャーナル生成部、１０２  書出先決定部、１０３  書出先変更通知部、１０４  書出部、１０５  テーブル記憶部、１０６  書出先決定テーブル、１０７  書出先保持テーブル、２００  復旧装置、２０１  読込部、２０２  書出先変更検知部、２０３  復旧部、２０４  順序保証部、２０５  順序待合せ部、２０６  順序保証除外部、２０７  順序保証除外パターン記憶部、２０８  順序待合せ除外部、２０９  順序待合せ除外パターン記憶部、３００  アプリケーション、４００  ジャーナルファイル、５００  ジャーナルファイル、６００  ジャーナル。
【図１】
2013008327.tif 000003
【図２】
2013008327.tif 000004
【図３】
2013008327.tif 000005
【図４】
2013008327.tif 000006
【図５】
2013008327.tif 000007
【図６】
2013008327.tif 000008
【図７】
2013008327.tif 000009
【図８】
2013008327.tif 000010
【図９】
2013008327.tif 000011
【図１０】
2013008327.tif 000012
【図１１】
2013008327.tif 000013
【図１２】
2013008327.tif 000014
【図１３】
2013008327.tif 000015
【図１４】
2013008327.tif 000016
【図１５】
2013008327.tif 000017
【図１６】
2013008327.tif 000018
【図１７】
2013008327.tif 000019
【図１８】
2013008327.tif 000020
【図１９】
2013008327.tif 000021
【図２０】
2013008327.tif 000022
【図２１】
2013008327.tif 000023
【図２２】
2013008327.tif 000024
【図２３】
2013008327.tif 000025
【図２４】
2013008327.tif 000026
【図２５】
2013008327.tif 000027
【図２６】
2013008327.tif 000028
【図２７】
2013008327.tif 000029
【図２８】
2013008327.tif 000030
【図２９】
2013008327.tif 000031
【図３０】
2013008327.tif 000032
【図３１】
2013008327.tif 000033
【図３２】
2013008327.tif 000034
【図３３】
2013008327.tif 000035
【図３４】
2013008327.tif 000036
【図３５】
2013008327.tif 000037
【図３６】
2013008327.tif 000038
【図３７】
2013008327.tif 000039
【図３８】
2013008327.tif 000040
【手続補正書】
【提出日】平成25年1月30日(2013.1.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数種の処理手順が含まれるアプリケーションプログラムでの処理の進行状況を示すデータであって、処理が進行している処理手順の処理手順ＩＤ（Ｉｄｅｎｔｉｆｉｅｒ）が記述されるデータをジャーナルとして生成するジャーナル生成部と、
生成されたジャーナルごとに、複数のジャーナルファイルの中から決定されたジャーナルの書出先となる書出先ジャーナルファイルにジャーナルを書き出す書出し部と、
処理手順ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、書出先ジャーナルファイルの変更を通知する書出先変更通知を、書出先ジャーナルファイル変更前のいずれかのジャーナルと書出先ジャーナルファイル変更後のいずれかのジャーナルに記述する書出先変更通知部と、
ジャーナルファイルからジャーナルを読み込み、読み込んだジャーナルを処理手順ＩＤごとに１つ以上のジャーナルからジャーナル列を生成し、読み込んだジャーナルの中に書出先変更通知が記述されているジャーナルがある場合に、書出先変更通知が記述されているジャーナルに記述されている処理手順ＩＤを書出先変更発生ＩＤとする複数のジャーナル読込分類部と、
書出先変更発生ＩＤに対して生成されたジャーナル列をジャーナル読込分類部から入力し、共通する書出先変更発生ＩＤに対して生成された２つ以上のジャーナル列を連結するジャーナル連結部とを有することを特徴とするジャーナル管理システム。
【請求項２】
前記複数のジャーナル読込分類部は、
おのおの、いずれかのジャーナルファイルに対応付けられるものであり、
前記ジャーナル管理システムは、更に、
書出先変更発生ＩＤ以外の処理手順ＩＤに対して生成されたジャーナル列をいずれかのジャーナル読込分類部から入力し、入力したジャーナル列を解析し、
書出先変更発生ＩＤに対して生成された連結後のジャーナル列を前記ジャーナル連結部から入力し、入力した連結後のジャーナル列を解析するジャーナル解析部を有することを特徴とする請求項１に記載のジャーナル管理システム。
【請求項３】
前記書出先変更通知部は、
処理手順ＩＤが共通するジャーナルの間で書出先ジャーナルファイルが変更になる場合に、
書出先ジャーナルファイル変更前の最後尾のジャーナルに、書出先ジャーナルファイル変更前の最後尾のジャーナルであることを通知する変更前最後尾データ通知を、前記書出先変更通知として記述し、
書出先ジャーナルファイル変更後の先頭のジャーナルに、書出先ジャーナルファイル変更後の先頭のジャーナルであることを通知する変更後先頭データ通知を、前記書出先変更通知として記述し、
前記ジャーナル管理システムは、更に、
先頭のジャーナルに変更後先頭データ通知が記述され、最後尾のジャーナルに変更前最後尾データ通知が記述されていないというジャーナル列のパターンを、特殊ジャーナル列パターンとして記憶する記憶部を有し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、他のジャーナル列との連結の対象とすることなく、入力したジャーナル列の一部を前記ジャーナル解析部に出力することを特徴とする請求項２に記載のジャーナル管理システム。
【請求項４】
前記ジャーナル管理システムは、
前記アプリケーションプログラムにおいて発生する同じ処理手順の複数の処理インスタンスに、処理インスタンスの発生順序を表す処理インスタンスＩＤを設定し、
前記ジャーナル生成部は、
処理手順ＩＤと、処理インスタンスＩＤとが記述されるジャーナルを生成し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、入力したジャーナル列を解析して、処理手順が完了している処理インスタンスが存在するか否かを判断し、
入力したジャーナル列を解析した結果、処理手順が完了している処理インスタンスが存在する場合に、処理手順が完了している処理インスタンスよりも後の発生順序を表す処理インスタンスＩＤが記述されている１つ以上のジャーナルを、入力したジャーナル列から抽出し、
抽出したジャーナルを、他のジャーナル列との連結の対象とすることなく、前記ジャーナル解析部に出力することを特徴とする請求項３に記載のジャーナル管理システム。
【請求項５】
前記ジャーナル生成部は、
ｍ（ｍ≧２）個の分岐が存在する処理手順に対して、各分岐での最後の工程が完了したことを示すｍ個の完了ジャーナルを、処理インスタンスごとに生成し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当する場合に、入力したジャーナル列に、共通の処理インスタンスＩＤが記述されるｍ個の完了ジャーナルが存在する場合に、当該処理インスタンスＩＤに対応する処理インスタンスにおいて処理手順が完了していると判断することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項６】
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当し、入力したジャーナル列を解析した結果、処理手順が完了している処理インスタンスが存在しない場合に、
入力したジャーナル列を、共通する書出先変更発生ＩＤに対して生成された他のジャーナル列と連結し、連結後のジャーナル列を前記ジャーナル解析部に出力することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項７】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが存在し、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、前記ｘ番目の発生順序を表す処理インスタンスＩＤが記述される完了ジャーナルが、処理手順内の分岐数分存在する
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項８】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤが記述される完了ジャーナルが、処理手順内の分岐数分存在し、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、（ｘ＋１）番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが、先頭のジャーナルと前記ｘ番目の発生順序を表す処理インスタンスＩＤの最後尾の完了ジャーナルとの間又は当該最後尾の完了ジャーナルの直後に存在している
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【請求項９】
前記記憶部は、
先頭のジャーナルに変更後先頭データ通知が記述され、
処理手順内の最後の工程の処理が完了したことを示す完了ジャーナルであって、ｘ番目の発生順序を表す処理インスタンスＩＤ及び（ｘ−１）番目の発生順序を表す処理インスタンスＩＤのいずれかが記述される完了ジャーナルが、処理手順内の分岐数分存在し、
処理手順内の最初の工程の処理が完了したことを示す開始ジャーナルであって、（ｘ＋１）番目の発生順序を表す処理インスタンスＩＤが記述される開始ジャーナルが、先頭のジャーナルと前記ｘ番目の発生順序を表す処理インスタンスＩＤの最後尾の完了ジャーナルとの間又は当該最後尾の完了ジャーナルの直後に存在している
というジャーナル列のパターンを、制限ジャーナル列パターンとして記憶し、
前記ジャーナル連結部は、
入力したジャーナル列が前記特殊ジャーナル列パターンに該当しない場合に、入力したジャーナル列が前記制限ジャーナル列パターンに該当するか否かを判断し、入力したジャーナル列が前記制限ジャーナル列パターンに該当する場合に、
前記ｘ番目の発生順序を表す処理インスタンスＩＤに相当する処理インスタンスＩＤを入力したジャーナル列から抽出し、抽出した処理インスタンスＩＤよりも前の発生順序を表す処理インスタンスＩＤが記述されているジャーナル列を、連結の対象から除外することを特徴とする請求項４に記載のジャーナル管理システム。
【国際調査報告】
2013008327.tif 000041
2013008327.tif 000042