(57)【要約】データ格納要求があったときには、空き領域の先頭を指すポインタが示すアドレスにデータを格納する一方、データ取り出し要求があったときには、最古のインデックスが示すデータ格納領域からデータを取り出す。また、コンデンス要求があったときには、データ格納領域からデータを退避領域に一旦退避させた後、空き領域の先頭を指すポインタが示すアドレスから連続した領域に退避したデータを復元すると共に、空き領域の先頭を指すポインタをデータの復元に要するデータ格納領域のサイズ分だけ進める。このようにすることで、コンデンス処理中であっても、空き領域の先頭を指すポインタが示すアドレスにデータを格納することができる。
2004077297.tif 000002
【特許請求の範囲】
【請求項１】
空き領域の先頭及び終端を指すポインタによりデータ格納領域を循環使用しつつデータを直接的に格納又は取り出すと共に、データ格納アドレスを示すインデックスによりデータの格納順番を保証したＩＳＡＭファイルをキューとして用いた非同期通信プログラムであって、
データ格納要求があったときに、前記空き領域の先頭を指すポインタにより示されるアドレスにデータを格納すると共に、該空き領域の先頭を指すポインタを更新するデータ格納機能と、
データ取り出し要求があったときに、最古のインデックスが示すデータ格納アドレスからデータを取り出し、該インデックスを削除すると共に、前記空き領域の終端を指すポインタを必要に応じて更新するデータ取り出し機能と、
コンデンス要求があったときに、前記データ格納領域からデータを退避領域に一旦退避させた後、前記空き領域の先頭を指すポインタにより示されるアドレスから連続した領域に退避したデータを復元すると共に、該退避したデータの復元に要するデータ格納領域のサイズ分だけ、前記空き領域の先頭を指すポインタを進めるコンデンス処理機能と、
をコンピュータに実現させるための非同期通信プログラム。
【請求項２】
前記コンデンス処理機能は、前記データ格納領域からデータを退避領域に一旦退避するときに、復元に要するデータ格納領域のサイズを演算することを特徴とする請求の範囲第１項記載の非同期通信プログラム。
【請求項３】
前記データ取り出し機能は、前記インデックスを削除するときに、該インデックスが空き領域の終端の次のアドレスを示していれば、前記空き領域の終端を指すポインタを更新することを特徴とする請求の範囲第１項記載の非同期通信プログラム。
【請求項４】
前記データ取り出し機能は、前記空き領域の終端を指すポインタを更新するとき、該ポインタを最も近い使用中領域の直前まで進めることを特徴とする請求の範囲第３項記載の非同期通信プログラム。
【請求項５】
空き領域の先頭及び終端を指すポインタによりデータ格納領域を循環使用しつつデータを直接的に格納又は取り出すと共に、データ格納アドレスを示すインデックスによりデータの格納順番を保証したＩＳＡＭファイルをキューとして用いた非同期通信装置であって、
データ格納要求があったときに、前記空き領域の先頭を指すポインタにより示されるアドレスにデータを格納すると共に、該空き領域の先頭を指すポインタを更新するデータ格納手段と、
データ取り出し要求があったときに、最古のインデックスが示すデータ格納アドレスからデータを取り出し、該インデックスを削除すると共に、前記空き領域の終端を指すポインタを必要に応じて更新するデータ取り出し手段と、
コンデンス要求があったときに、前記データ格納領域からデータを退避領域に一旦退避させた後、前記空き領域の先頭を指すポインタにより示されるアドレスから連続した領域に退避したデータを復元すると共に、該退避したデータのサイズ分だけ、前記空き領域の先頭を指すポインタを進めるコンデンス処理手段と、
を含んで構成されたことを特徴とする非同期通信装置。
【請求項６】
空き領域の先頭及び終端を指すポインタによりデータ格納領域を循環使用しつつデータを直接的に格納又は取り出すと共に、データ格納アドレスを示すインデックスによりデータの格納順番を保証したＩＳＡＭファイルをキューとして用いた非同期通信方法であって、
データ格納要求があったときに、前記空き領域の先頭を指すポインタにより示されるアドレスにデータを格納すると共に、該空き領域の先頭を指すポインタを更新するデータ格納ステップと、
データ取り出し要求があったときに、最古のインデックスが示すデータ格納アドレスからデータを取り出し、該インデックスを削除すると共に、前記空き領域の終端を指すポインタを必要に応じて更新するデータ取り出しステップと、
コンデンス要求があったときに、前記データ格納領域からデータを退避領域に一旦退避させた後、前記空き領域の先頭を指すポインタにより示されるアドレスから連続した領域に退避したデータを復元すると共に、該退避したデータのサイズ分だけ、前記空き領域の先頭を指すポインタを進めるコンデンス処理ステップと、
を実行することを特徴とする非同期通信方法。
【発明の詳細な説明】
【技術分野】  本発明は、非同期通信技術において、特に、アプリケーション実行中のコンデンス処理を可能とする技術に関する。
【背景技術】  非同期通信では、送信先アプリケーションの状態にかからわず、データを送信すれば処理が完了するため、効率的なデータ通信が可能である。このため、非同期通信を行う基幹業務システムでは、各アプリケーションごとに、サービスリクエストなどのデータを格納する論理的なキューが備えられる。
キューとしては、各データの格納アドレスを示すインデックスを用いて、受信した順番にデータを格納可能な一方、格納された順番にデータを取り出し可能なＩＳＡＭ（Ｉｎｄｅｘｅｄ  Ｓｅｑｕｅｎｔｉａｌ  Ａｃｃｅｓｓ  Ｍｅｔｈｏｄ）ファイルが使用される。そして、空き領域の先頭及び終端を指すポインタを用いてＩＳＡＭファイルを循環使用することで、バッファに対するデータの格納及び取り出しを不要とし、データを高速にアクセスできるようになっている。即ち、空き領域の先頭を指すポインタを用いてデータを格納する一方、空き領域の終端からデータを取り出したときに、ポインタを更新することで、高速なアクセスを実現している。
ところで、アプリケーションに問題が発生し、ＩＳＡＭファイルからデータが取り出されないと、空き領域の終端を示すポインタが更新されないおそれがある。空き領域の終端を示すポインタが更新されないと、いわゆる「歯欠け状態」となり、空き領域があるにもかかわらずこれが利用できないため、空き領域が少なくなってしまう。このため、ＩＳＡＭファイルのデータを一旦退避させ、これを連続した領域に復元することで、空き領域を拡大させる「コンデンス処理」が適宜行われている。
しかしながら、コンデンス処理中にデータを格納すると、そのデータの後に退避したデータが復元されるため、データの格納順番を保証することができなくなってしまう。このため、特許文献１に示すように、フラグを用いて格納可能か否かを判定し、コンデンス処理中にはデータの格納を禁止する必要があった。データの格納禁止は、アプリケーションによるサービス停止を伴うため、サービス低下を招いていた。
そこで、本発明は以上のような従来の問題点に鑑み、退避したデータの復元方法を工夫することで、アプリケーション実行中であっても、ＩＳＡＭファイルのコンデンス処理が可能な非同期通信技術を提供することを目的とする。
【特許文献１】    特開昭６３−２５７８４９号公報
【発明の開示】
このため、本発明に係る非同期通信技術では、空き領域の先頭及び終端を指すポインタによりデータ格納領域を循環使用しつつデータを直接的に格納又は取り出すと共に、データ格納アドレスを示すインデックスによりデータ格納順番を保証したＩＳＡＭファイルをキューとして用いた非同期通信において、データ格納要求があったときに、空き領域の先頭を指すポインタにより示されるアドレスにデータを格納すると共に、空き領域の先頭を指すポインタを更新する。また、データ取り出し要求があったときに、最古のインデックスが示すデータ格納アドレスからデータを取り出し、インデックスを削除すると共に、空き領域の終端を指すポインタを必要に応じて更新する。さらに、コンデンス要求があったときに、データ格納領域からデータを退避領域に一旦退避させた後、空き領域の先頭を指すポインタにより示されるアドレスから連続した領域に退避したデータを復元すると共に、退避したデータの復元に要するデータ格納領域のサイズ分だけ、空き領域の先頭を示すポインタを進める。
かかる構成によれば、データ格納要求があったときには、空き領域の先頭を指すポインタが示すアドレスにデータを直接格納することができる。また、データ取り出し要求があったときには、最古のインデックスが示すデータ格納アドレスからデータを直接取り出すことができる。そして、空き領域の先頭を指すポインタを更新する一方、その終端を指すポインタを必要に応じて更新することで、バッファを介さずに、高速にデータを格納又は取り出すことができる。
コンデンス処理要求があったときには、データ格納領域からデータを退避領域に一旦退避させた後、空き領域の先頭を指すポインタにより示されるアドレスから連続した領域に退避したデータが復元される。また、空き領域の先頭を指すポインタは、退避したデータの復元に要するデータ格納領域のサイズ分だけ進められるので、コンデンス処理中にデータ格納要求があったときには、復元領域に続く領域にデータが格納される。このため、コンデンス処理中であっても、データ格納が可能となり、例えば、非同期通信を利用した基幹業務システムの２４時間運用が可能となる。
ここで、データ格納領域からデータを退避領域に一旦退避するときに、復元に要するデータ格納領域のサイズを演算することが望ましい。このようにすれば、データを退避するときには、そのサイズが自ずから既知となるため、これを順次積算するだけで復元に要するデータ格納領域のサイズを演算することができる。
また、インデックスを削除するときに、インデックスが空き領域の終端の次のアドレスを示していれば、空き領域の終端を指すポインタを更新することが望ましい。このとき、空き領域の終端を指すポインタは、最も近い使用中領域の直前まで進めることが望ましい。このようにすれば、空き領域を拡大することができる。
【図面の簡単な説明】  図１は、本発明に係る非同期通信装置の全体構成図である。
図２は、ＩＳＡＭファイルの説明図である。
図３は、データ格納処理を示すフローチャートである。
図４は、データ取り出し処理を示すフローチャートである。
図５は、終端ポインタの更新方法の説明図である。
図６は、コンデンス処理を示すフローチャートである。
図７は、コンデンス処理中のポインタ更新方法を示し、（Ａ）〜（Ｄ）は夫々ポインタが指すアドレスが変化する様子を示す説明図である。
図８は、コンデンス処理中のデータ格納方法の説明図である。
【発明を実施するための最良の形態】  以下、添付された図面を参照して本発明を詳述する。
図１は、少なくとも中央処理装置とメモリとを備えたコンピュータを用いて、本発明に係る非同期通信装置を構築した全体構成を示す。非同期通信装置１０は、メモリにロードされたプログラムにより動作し、ＩＳＡＭファイル２０と、ＩＳＡＭアクセス部３０と、コンデンス処理部４０と、を含んで構成される。
ＩＳＡＭファイル２０は、図２に示すように、非同期通信を行うアプリケーション全体で共用されるデータ格納部２２と、非同期通信の宛先たる各アプリケーションごとに専用されるインデックス部２４と、を含んで構成される。データ格納部２２では、データ格納領域の先頭を指す格納領域先頭ポインタ２６Ａ及び空き領域の終端を指す終端ポインタ２６Ｂを用いて、サービスリクエストなどのデータが高速に格納又は取り出される。即ち、データを格納するときには、格納領域先頭ポインタ２６Ａが示すアドレスにデータを直接書き込む一方、終端ポインタ２６Ｂが示すアドレスからデータが取り出されたときには、終端ポインタ２６Ｂを更新する。そして、データ格納領域を循環使用することで、バッファに対するデータ入出力を不要とし、高速アクセスが実現される。また、インデックス部２４では、データの格納順番を保証すべく、データ格納アドレスを示すインデックス２８がデータを受信した順番に管理される。
ＩＳＡＭアクセス部３０では、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）を介してアプリケーション５０からデータ格納要求又はデータ取り出し要求があったときに、後述するデータ格納処理又はデータ取り出し処理が夫々実行される。一方、コンデンス処理部４０では、例えば、図示しないコンソールからコンデンス要求があったときに、ＩＳＡＭアクセス部３０と協働して、後述するコンデンス処理が実行される。
図３は、ＩＳＡＭアクセス部３０で実行されるデータ格納処理を示す。なお、同図に示すデータ格納処理により、データ格納機能，データ格納手段及びデータ格納ステップが夫々実現される。
ステップ１（図では「Ｓ１」と略記する。以下同様）では、格納領域先頭ポインタ２６Ａが示すアドレスにデータを格納する。
ステップ２では、格納領域先頭ポインタ２６Ａを更新する。即ち、ＩＳＡＭファイル２０にデータを格納するときには、そのサイズが既知であるため、その分だけ格納領域先頭ポインタ２６Ａを進めて更新する。
ステップ３では、ＩＳＡＭファイル２０のインデックス部２４を更新する。即ち、インデックス部２４に、データを格納したアドレスを示すインデックス２８を追加登録する。
かかる処理によれば、データをＩＳＡＭファイル２０に格納するときには、バッファを介さずに、格納領域先頭ポインタ２６Ａが示すアドレスにデータを直接格納することで、高速にデータを格納することができる。このとき、データが実際に格納されたアドレスは、インデックス２８により管理されるので、図２に示すように、各アプリケーションのデータがデータ格納部２２で連続して格納されていなくとも、問題が発生しない。なお、同図において破線で示した三角形は、取り出し済みデータを示す。
図４は、ＩＳＡＭアクセス部３０で実行されるデータ取り出し処理を示す。なお、同図に示すデータ取り出し処理により、データ取り出し機能，データ取り出し手段及びデータ取り出しステップが夫々実現される。
ステップ１１では、ＩＳＡＭファイル２０のインデックス部２４から、最古のインデックスを１つ取り出す。
ステップ１２では、ＩＳＡＭファイル２０のインデックス部２４から、最古のインデックスを削除する。
ステップ１３では、インデックスが示すアドレスからデータを取り出す。
ステップ１４では、データを取り出したアドレスが、終端ポインタ２６Ｂにより示される空き領域の終端の次であるか否かを判定する。そして、アドレスが空き領域の終端の次であればステップ１５へと進み（Ｙｅｓ）、アドレスが空き領域の終端の次でなければ処理を終了する（Ｎｏ）。
ステップ１５では、終端ポインタ２６Ｂを最も近い使用中領域の直前まで進める。即ち、ＩＳＡＭファイル２０のデータ格納部２２では、図５に示すように、データがいわゆる「歯欠け状態」で格納されていることがあるため、未処理のデータが格納されている終端位置まで終端ポインタ２６Ｂを進める。
かかる処理によれば、データをＩＳＡＭファイル２０から取り出すときには、バッファを介さずに、インデックスが示すアドレスからデータを直接取り出すことで、高速にデータを取り出すことができる。また、データを取り出した後には、空き領域の終端を指す終端ポインタ２６Ｂが必要に応じて更新されるので、空き領域を拡大することができる。
図６は、ＩＳＡＭアクセス部３０及びコンデンス処理部４０が協働して実行されるコンデンス処理を示す。ここで、コンデンス処理においては、格納領域先頭ポインタ２６Ａ及び終端ポインタ２６Ｂに加え、コンデンス処理済みのデータを復元するアドレスを指す復元領域先頭ポインタ２６Ｃが使用される。なお、同図に示すコンデンス処理により、コンデンス処理機能，コンデンス処理手段及びコンデンス処理ステップが夫々実現される。
ステップ２１では、ＩＳＡＭファイル２０のデータ格納部２２から、コンデンス対象データを退避領域に退避する。このとき、退避したデータのサイズを順次積算することで、コンデンス対象データのサイズを併せて演算する。なお、退避領域としては、一般的なテンポラリファイルなどを使用すればよい。データ保証が必要な非同期通信の場合には、ＩＳＡＭファイル２０と同時にリカバリ可能なファイルを利用する。
ステップ２２では、格納領域先頭ポインタ２６Ａが指す格納領域の先頭からコンデンス処理済みのデータが復元されるようにすべく、図７（Ａ）に示すように、復元領域先頭ポインタ２６Ｃに、格納領域先頭ポインタ２６Ａが示すアドレスを設定する。
ステップ２３では、同図（Ｂ）に示すように、格納領域先頭ポインタ２６Ａをコンデンス対象データのサイズ分だけ進める。
ステップ２４では、同図（Ｃ）に示すように、復元領域先頭ポインタ２６Ｃが示すアドレスから、コンデンス処理済みのデータを連続して格納することで、コンデンスデータを復元する。
ステップ２５では、データの格納アドレスが変わったので、ＩＳＡＭファイル２０のインデックス部２４に登録された全インデックスを更新する。
ステップ２６では、同図（Ｄ）に示すように、終端ポインタ２６Ｂを復元領域先頭ポインタ２６Ｃが示すアドレスまで進めて更新する。
なお、ステップ２２及びステップ２３の処理は、復元領域先頭ポインタ２６Ｃに格納領域先頭ポインタ２６Ａが示すアドレスからコンデンス対象データのサイズ分だけ戻したアドレスを設定する処理に置き換えることも可能である。
かかる処理によれば、いわゆる「歯欠け状態」で格納されていたデータは、退避領域に一旦退避された後、空き領域の先頭から連続した領域に格納されるため、空き領域を拡大することができる。このとき、アプリケーションからデータ格納要求があれば、図３に示すデータ格納処理が実行され、図８に示すように、コンデンスデータの復元領域に続く領域、即ち、格納領域先頭ポインタ２６Ａが示すアドレスにデータが格納される。従って、コンデンス処理中であっても、アプリケーションによるデータ格納が可能となり、例えば、非同期通信を利用した基幹業務システムの２４時間運用が可能となる。
【産業上の利用可能性】  以上説明したように、本発明に係る非同期通信技術は、コンデンス処理中であっても、アプリケーションによるデータ格納が可能となり、極めて有用なものである。
【図１】
2004077297.tif 000003
【図２】
2004077297.tif 000004
【図３】
2004077297.tif 000005
【図４】
2004077297.tif 000006
【図５】
2004077297.tif 000007
【図６】
2004077297.tif 000008
【図７】
2004077297.tif 000009
【図８】
2004077297.tif 000010
【国際調査報告】
2004077297.tif 000011
2004077297.tif 000012