(57)【要約】【課題】連鎖する複数のファイル入出力プログラムの実行時にエラーが発生したとき、後続プログラムを実行する。【解決手段】所定の記憶領域に格納されたファイルにアクセスする複数のファイル入出力プログラムが連鎖する関係にあるとき、各プログラムがいずれのファイルにアクセスするかを検出して所定の記憶領域に記録する（Ｓ１０）。ファイル入出力プログラムの実行開始後に、エラーの発生を検出する（Ｓ１２）。実行中のファイル入出力プログラムに関連する全てのファイルのクローズを試みる（Ｓ１４）。ファイルのクローズが成功したか否かを示すフラグを所定の記憶領域に記録する（Ｓ１６）。実行中のファイル入出力プログラムの後続プログラムのアクセスするファイルがクローズされているか否かをフラグを参照して確認する（Ｓ１８）。後続プログラムのアクセスする全てのファイルがクローズされている場合、後続プログラムの実行を命令する（Ｓ２０）。【選択図】図６
2011209771.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムにおいて、所定の記憶領域に格納されたファイルにアクセスする複数のファイル入出力プログラムが連鎖する関係にあるとき、いずれかのプログラムにおけるエラー発生時の制御プログラムであって、
前記ファイル入出力プログラムのステートメントを参照し、各プログラムがいずれのファイルにアクセスするかを検出して所定の記憶領域に記録するステップと、
前記ファイル入出力プログラムの実行開始後に、エラーの発生を検出するステップと、
実行中のファイル入出力プログラムに関連する全てのファイルのクローズを試みるステップと、
前記ファイルのクローズが成功したか否かを示すフラグを前記所定の記憶領域に記録するステップと、
前記実行中のファイル入出力プログラムの後続プログラムがいずれのファイルにアクセスするかを前記所定の記憶領域を参照して確認し、それらのファイルがクローズされているか否かを前記フラグを参照して確認するステップと、
前記後続プログラムのアクセスする全てのファイルがクローズされている場合、該後続プログラムの実行を命令するステップと、
をコンピュータシステムに実行させることを特徴とするエラー発生時の制御プログラム。
【請求項２】
前記ファイル入出力プログラム実行開始前に各プログラムのステートメントを参照して、ファイルへの出力を最後に行うステートメントの直後にバッファフラッシュ命令を挿入するステップをさらに含むことを特徴とする請求項１に記載のエラー発生時の制御プログラム。
【請求項３】
前記ファイル入出力プログラム実行開始前に各ファイル入出力プログラムのステートメントを参照して、ファイルへの参照または出力を最後に行うステートメントの直後にファイルクローズ命令を移動するステップをさらに含むことを特徴とする請求項１または２に記載のエラー発生時の制御プログラム。
【請求項４】
コンピュータシステムにおいて、所定の記憶領域に格納されたファイルにアクセスする複数のファイル入出力プログラムが連鎖する関係にあるとき、いずれかのプログラムにおけるエラー発生時の制御プログラムであって、
前記ファイル入出力プログラムのステートメントを参照し、各プログラムがいずれのファイルにアクセスするかを検出して所定の記憶領域に記録するステップと、
前記ファイル入出力プログラムの実行開始後に、エラーの発生を検出するステップと、
前記実行中のファイル入出力プログラムがファイルに追加書き込み命令を実行している場合、後続プログラムによる前記ファイルの参照命令または前記ファイルのランダム位置への書き込み命令を実行させるステップと、
をコンピュータシステムに実行させることを特徴とするエラー発生時の制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイル入出力プログラムにおけるエラー発生時の制御技術に関する。
【背景技術】
【０００２】
コンピュータシステムにおいて、ファイル入出力のエラー発生時の処理を定めておくことが好ましい。例えば特許文献１には、Ｉ／Ｏエラーが発生した場合に、代替ファイルスペースを確保できなくても、暫定ファイルスペースを確保してバックアップを実行することが記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００７−２７２６５６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
複数のファイル入出力プログラムが連鎖する関係にあり、いずれかのプログラムの実行中にエラーが発生したとき、後続するプログラムをできるだけ実行することが望ましい。たとえば、複数の支店がある企業を考える場合、それぞれの支店の売上集計は独立している。仮に、Ａ、Ｂ、Ｃの３つの支店があり、同順に売上集計を行う場合、Ｂ支店の集計中にエラーが発生しても、Ａ支店の集計データは１つのファイルに出力が完了していることが期待され、Ａ支店に関して後続のプログラムを適用できる。
【０００５】
本発明はこうした状況に鑑みてなされたものであり、その目的は、連鎖する関係にある複数のファイル入出力プログラムの実行中にエラーが発生したとき、後続するプログラムの実行を可能にする技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のある態様は、コンピュータシステムにおいて、所定の記憶領域に格納されたファイルにアクセスする複数のファイル入出力プログラムが連鎖する関係にあるとき、いずれかのプログラムにおけるエラー発生時の制御プログラムである。この制御プログラムは、前記ファイル入出力プログラムのステートメントを参照し、各ファイル入出力プログラムがいずれのファイルにアクセスするかを検出して所定の記憶領域に記録するステップと、前記ファイル入出力プログラムの実行開始後に、エラーの発生を検出するステップと、実行中のファイル入出力プログラムに関連する全てのファイルのクローズを試みるステップと、前記ファイルのクローズが成功したか否かを示すフラグを前記所定の記憶領域に記録するステップと、前記実行中のファイル入出力プログラムの後続プログラムがいずれのファイルにアクセスするかを前記所定の記憶領域を参照して確認し、それらのファイルがクローズされているか否かを前記フラグを参照して確認するステップと、前記後続プログラムのアクセスする全てのファイルがクローズされている場合、該後続プログラムの実行を命令するステップと、をコンピュータシステムに実行させる。
【０００７】
この態様によると、連鎖するファイル入出力プログラムの実行時に何らかのエラーが発生した場合、制御プログラムは実行中のファイル入出力プログラムのアクセスするファイルのクローズ処理を試みる。これにより、ファイルクローズが完了したファイルのみにアクセスする後続のファイル入出力プログラムを実行することが可能になる。したがって、エラーによる影響を最小限にすることができる。
【０００８】
なお、以上の構成要素の任意の組合せ、本発明を方法、装置、システム、記録媒体、コンピュータプログラムにより表現したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、連鎖する関係にある複数のファイル入出力プログラムの実行時にエラーが発生したとき、後続するプログラムを実行することができる。
【図面の簡単な説明】
【００１０】
【図１】本発明の一実施形態に係るエラー時制御プログラムが実行される環境を示す図である。
【図２】実施形態に係る制御ミドルウェアと、その制御下で動作するファイル入出力プログラムの概念図である。
【図３】取引サイトを提供するサーバ内のメモリとデータフォルダの概要図である。
【図４】（ａ）、（ｂ）は、制御ミドルウェア専用記憶領域に記録されるデータを説明する図である。
【図５】ファイル入出力プログラムＰＧ１におけるファイル出力の様子の一例を示す図である。
【図６】実施形態に係るエラー発生時の制御ミドルウェアの動作プロセスを示すフローチャートである。
【図７】証券会社のサーバにおいて、顧客取引の月次集計を出力する実施例を示す図である。
【図８】入出力プログラムＰＧ１の疑似コードの例を示す図である。
【図９】一変形例に係る制御ミドルウェアが管理するポインタの例を表すテーブルである。
【発明を実施するための形態】
【００１１】
図１は、本発明の一実施形態に係るエラー時制御プログラムが実行される環境１０を示す図である。コンピュータ端末１２は、インターネット等のネットワーク１４を介してサーバ１６に接続されている。コンピュータ端末１２は、入出力機能、通信機能などの通常のコンピュータに備わっている機能を有しており、また任意のブラウザがインストールされているものとする。サーバ１６は、例えばインターネット取引サイトを提供しており、同時に多数のコンピュータ端末１２からアクセスされる。
【００１２】
インターネット取引サイトのように顧客数が大幅に変動するサービスでは、トランザクション処理、バッチ処理を問わずリソースが不足する状態に陥る。リソースのなかでもメモリ容量が不足すると、エラーが発生しやすくなる。
典型的には、バッチ処理でファイル入出力の連鎖が見られ、バッチ処理を構成するうちの１つの入出力プログラムでエラーが発生すると、それ以降のプログラムの実行も止まってしまう。エラーの原因がリソース不足、特にメモリ不足である場合、エラーを発生させたプログラムを再実行するより、処理対象データのボリュームを減らして後続処理を適用することで、リソース不足が解消される可能性がある。
【００１３】
そこで、本実施形態では、複数のファイル入出力プログラムが連鎖する処理を行っており、あるプログラムでエラーが発生したときに、ファイル入出力の関係に基づき、後続プログラムを適用する上位プログラムを提供する。
【００１４】
図２は、本実施形態に係る制御プログラムと、その制御下で動作するファイル入出力プログラムの概念図である。図示するように、ファイル入出力プログラムＰＧ１、ＰＧ２、ＰＧ３．．．は連鎖する関係にある。すなわち、プログラムＰＧ１が終了するとプログラムＰＧ２を実行し、プログラムＰＧ２が終了するとプログラムＰＧ３を実行するようになっている。本実施形態の制御プログラムはミドルウェアＭＷとして動作し、オペレーティングシステム（ＯＳ）とファイル入出力プログラムＰＧ１〜ＰＧ３の間に介在する。ファイル入出力プログラムＰＧ１〜ＰＧ３は、他のファイルの読み出し、書き込み、更新などのファイル入出力を伴うプログラムである。
【００１５】
制御ミドルウェアＭＷは、ファイル入出力を行わず、プログラムＰＧ１〜ＰＧ３の実行制御に特化する。制御ミドルウェアＭＷは、事前にファイル入出力プログラムＰＧ１〜ＰＧ３を検査し、各プログラムがデータフォルダ内のいずれのファイルにアクセスするかを特定し、制御ミドルウェアＭＷの専用記憶領域にそのデータを記録する。エラーの発生時、制御ミドルウェアＭＷは、データフォルダ内の各ファイルのオープン／クローズを確認した上で、ファイル入出力プログラムＰＧ１〜ＰＧ３の開始または終了を制御する。
【００１６】
図３は、サーバ１６内のメモリとデータフォルダの概要図である。メモリには、制御ミドルウェアＭＷ、実行中のファイル入出力プログラムＰＧ１およびＰＧ２、オペレーティングシステムＯＳの実行領域、ファイルが展開されるバッファ、および制御ミドルウェア専用の記憶領域が確保される。データフォルダ内には、入出力プログラムがアクセスする複数のファイルが保存されている。
【００１７】
図４（ａ）、（ｂ）は、制御ミドルウェア専用記憶領域に記録されるデータを説明する図である。図４（ａ）は、ファイル入出力プログラムのアクセスするファイルのオープン（ＯＰ）またはクローズ（ＣＬ）状態を表すフラグを示すフラグテーブル２０である。後述するが、制御ミドルウェアは、エラーの発生時に実行中のファイル入出力プログラムがアクセスする全てのファイルのクローズを試みる。そして、ファイルのクローズが成功したか、または既にファイルがクローズされている場合、ファイルがクローズしたことを示すフラグを立てる。ファイルのクローズが失敗した場合、ファイルがオープン状態であることを示すフラグを立てる。図４（ａ）では、ファイル入出力プログラムＰＧ１のアクセスするプログラムのうち、ファイル１とファイル３はクローズ状態にあり、ファイル２はオープン状態にあることを示している。なお、フラグＯＰとフラグＣＬを用いる代わりに、ファイルのオープン数を表すカウンターを用いてもよい。
【００１８】
図４（ｂ）は、各ファイル入出力プログラムがアクセスするファイルを示すファイルテーブル３０である。図示するように、ファイル入出力プログラムＰＧ１はファイル１〜ファイル３にアクセスし、ファイル入出力プログラムＰＧ２はファイル１とファイル３にアクセスし、ファイル入出力プログラムＰＧ３はファイル２とファイル３にアクセスすることを示している。上述したように、制御ミドルウェアＭＷがファイル入出力プログラムＰＧ１〜ＰＧ３を事前に検査し、各プログラムがアクセスするファイルを特定してファイルテーブル３０に記録する。
【００１９】
図５は、ファイル入出力プログラムＰＧ１におけるファイル出力の様子の一例を示す図である。この例では、プログラムＰＧ１が複数のステップ１〜ｎで構成されており、所定のステップでファイル１、ファイル２をそれぞれオープンし、他のステップの出力結果を書き込んだ上でファイルをクローズする様子を示している。ファイル１、ファイル２がオープンおよびクローズされるステップは、それぞれ異なる。
【００２０】
この前提において、図５に示す位置でエラーが発生したと仮定する。エラーの発生時点で、ファイル１については既にクローズ処理が行われているが、ファイル２についてはオープンなままである。したがって、仮に後続のファイル入出力プログラムＰＧ２が、ファイル１にはアクセスするがファイル２にはアクセスしないプログラムであった場合、プログラムＰＧ２についてはエラーの発生後もファイル１に適用することが可能である。
【００２１】
エラー時制御ミドルウェアＭＷは、このような処理を可能にする。そのために、制御ミドルウェアＭＷは、ファイル入出力プログラムＰＧ１〜３の実行前に、各プログラムのステートメントを参照して各プログラムがいずれのファイルにアクセスするかを示す上述のファイルテーブルを作成する。さらに、各プログラムのステートメントを参照して、各プログラムに対して以下のような事前編集を行う。
編集１，バッファフラッシュ命令を、ファイルへの出力を最後に行うステートメントの直後に挿入する。
編集２，ファイルクローズ命令を、ファイルへの参照または出力を最後に行うステートメントの直後に移動する。
編集１により、ファイルへの出力が行われた後にメモリ内のバッファをフラッシュしておくことで、エラー発生時に制御ミドルウェアＭＷによるファイルクローズが成功する確率が高まる。編集２により、ファイルへのアクセスが不要になったら即座にファイルをクローズすることで、やはりエラー発生時に制御ミドルウェアＭＷによるファイルクローズが成功する確率が高まる。
【００２２】
図６は、本実施形態に係るエラー発生時の制御ミドルウェアの動作プロセスを示すフローチャートである。
まず、制御ミドルウェアＭＷは、下位の連鎖するファイル入出力プログラムＰＧ１〜ＰＧ３のステートメントを参照し、各プログラムがデータフォルダ内のいずれのファイルにアクセスするかを検出してメモリ内のミドルウェア専用記憶領域に記録するとともに、各プログラムに対して上述の事前編集を行う（Ｓ１０）。入出力プログラムの実行後に、エラーの発生を検出すると（Ｓ１２）、制御ミドルウェアＭＷは、実行中の入出力プログラムに関連する全てのファイルのクローズを試みる（Ｓ１４）。続いて、ファイルのクローズが正常に成功したか、または既にクローズされていたかを示すフラグをメモリ内のミドルウェア専用記憶領域に記録する（Ｓ１６）。
【００２３】
続いて、制御ミドルウェアはＭＷは、後続プログラムがいずれのファイルにアクセスするかを上述のファイルテーブル３０を参照して確認し、それらのファイルがクローズされているか否かをフラグテーブル２０を参照して確認する（Ｓ１８）。そして、後続プログラムのアクセスする全てのファイルがクローズされている場合、制御ミドルウェアＭＷはその後続プログラムをファイル群に適用する（Ｓ２０）。
【００２４】
このように、連鎖するファイル入出力プログラムの実行時に何らかのエラーが発生した場合、制御ミドルウェアＭＷは、実行中のプログラムがアクセスするファイルのクローズ処理を試みる。これにより、ファイルクローズが成功したファイルのみにアクセスする後続のファイル入出力プログラムを実行することが可能になる。
【００２５】
図７は、証券会社のサーバにおいて、顧客取引の月次集計を出力する実施例を示す。この実施例では、二つの支店にそれぞれ二人の顧客がいる単純なケースを考える。すなわち、支店Ａには顧客Ａ１、Ａ２がおり、支店Ｂには顧客Ｂ１、Ｂ２がいるものとする、
【００２６】
ファイル入出力プログラムＰＧ１とＰＧ２は連鎖する処理である。ファイル入出力プログラムＰＧ１は、支店Ａの顧客毎の集計ファイル５４、５６を参照して、支店Ａの取引集計ファイル５２を集計結果として出力するとともに、支店Ｂの顧客毎の集計ファイル６４、６６を参照して、支店Ｂの取引集計ファイル６２を集計結果として出力する。ファイル入出力プログラムＰＧ２は、プログラムＰＧ１による支店別の取引集計ファイル５２、６２の出力後に、これらを予め定められた宛先に送信する処理を行うものとする。
【００２７】
図８は、ファイル入出力プログラムＰＧ１の疑似コードの例を示す図である。図７で説明したように、後続のファイル入出力プログラムＰＧ２は支店別集計ファイルのみにしかアクセスしない。したがって、図８において、支店別集計ファイルをクローズするｍ＿ｆｃｌｏｓｅ（ｆｐ）が実行された後にエラーが発生した場合には、制御ミドルウェアＭＷは後続のファイル入出力プログラムＰＧ２を実行させることができる。
【００２８】
以上説明したように、本実施形態によれば、連鎖する関係にある複数のファイル入出力プログラムの実行時に何らかのエラーが発生した場合、制御ミドルウェアＭＷが実行中のファイル入出力プログラムのアクセスするファイルのクローズ処理を試みる。これにより、ファイルクローズが成功したファイルのみにアクセスする後続のファイル入出力プログラムを実行することが可能になる。
【００２９】
以上、本発明をいくつかの実施の形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例がありうること、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００３０】
請求項に記載の各構成要件が果たすべき機能は、本実施例において示された各機能ブロックの単体もしくはそれらの連係によって実現されることも当業者には理解されるところである。
【００３１】
実施の形態では、連鎖する複数のファイル入出力プログラムの実行中にエラーが発生したとき、プログラムがアクセスするファイルのクローズが成功した後に後続プログラムを実行することを述べた。しかしながら、実行中プログラムのアクセスするファイルが、任意位置への追加や更新を許可しない順次ファイルである場合、制御ミドルウェアＭＷが各ファイル入出力プログラムによるファイルへのアクセス種類とオープン数を表すカウンター、ならびにアクセス位置を示すポインタを一元管理することで、ファイルのクローズ前に後続プログラムを開始することができる。
【００３２】
図９は、この変形例に係る制御ミドルウェアが管理するポインタの例を表すテーブル８０である。実施形態と同様に、制御ミドルウェアＭＷが各ファイル入出力プログラムのステートメントを事前に確認することで、ポインタテーブル８０を作成する。ポインタテーブル８０において、列８２はファイル入出力プログラムの名称、列８４は制御ミドルウェアＭＷが各ポインタに自動的に付与する識別子、列８６はファイル入出力プログラム中のファイル入出力に関連するステートメントの処理の種類、列８８は対応するステートメントが指し示すファイル内の位置を表すポインタである。
【００３３】
先行するファイル入出力プログラムＰＧ１の実行中にエラーが発生し、かつプログラムＰＧ１がファイルに追加書き込み命令を実行しているとする。エラーが発生すると、制御ミドルウェアＭＷはポインタテーブル８０を参照し、プログラムＰＧ１が追加書き込み中であることを確認すると、後続するプログラムＰＧ２によるファイル参照命令、およびプログラムＰＧ３によるランダム位置への書き込み命令の実行を指令する。このように、たとえファイルが正常にクローズしていない場合でも、先行するファイル入出力プログラムが追加書き込みを行っているときには、後続するファイル入出力プログラムによる参照またはランダム位置への書き込みを実行することができる。後続プログラムによる参照位置や書き込み位置は、エラーが発生した先行プログラムによる追加書き込み位置よりも前にある「正常処理された」部分であるので、先行プログラムによる処理の結果を活かすことができる。
【符号の説明】
【００３４】
１２  コンピュータ端末、  １６  サーバ、  ２０  フラグテーブル、  ３０  アクセスファイルテーブル、  ８０  ポインタテーブル、  ＭＷ  制御ミドルウェア、  ＰＧ１〜３  入出力プログラム。
【図１】
2011209771.tif 000003
【図２】
2011209771.tif 000004
【図３】
2011209771.tif 000005
【図４】
2011209771.tif 000006
【図５】
2011209771.tif 000007
【図６】
2011209771.tif 000008
【図７】
2011209771.tif 000009
【図８】
2011209771.tif 000010
【図９】
2011209771.tif 000011