(57)【要約】【課題】複数のコンピュータシステムでメッセージをやり取りするシステムにおいて、未処理のメッセージの喪失を防止し、アプリケーションプログラムがメッセージを再送する機能を有していなくても未処理のメッセージを送信先コンピュータシステムに再送することができるようにする。【解決手段】冗長化されているコンピュータマシンの各々に、メッセージ中継プログラムを備える。また、冗長化されているコンピュータマシンに対する共有記憶域を用意する。メッセージ中継プログラムは、アプリケーションプログラムから受けたメッセージを共有記憶域に格納して該メッセージを送信する。再送が必要なケースを検出した場合には、共有記憶域から、再送対象のメッセージを読出し、該読み出したメッセージを再送する。【選択図】図１
2008129628.tif 000002
【特許請求の範囲】
【請求項１】
複数のコンピュータシステムでメッセージをやり取りするシステムにおける少なくとも一つのコンピュータシステムで、コンピュータマシンが冗長化されており、冗長化されているコンピュータマシンの各々で実行可能なコンピュータプログラムであって、
メッセージと、該メッセージの送信先とするコンピュータシステムの識別子である送信先システム識別子の指定とを、前記コンピュータプログラムを実行するコンピュータマシン内で実行されるアプリケーションプログラムから受けるステップと、
前記受けたメッセージを、前記冗長化されているコンピュータマシンの共有記憶域に格納するステップと、
前記受けたメッセージを、前記指定された送信先システム識別子に対応する送信先コンピュータシステム内のコンピュータマシンに送信する第一メッセージ送信ステップと、
前記送信したメッセージの再送が必要なケースを検出するステップと、
前記再送が必要なケースを検出した場合に、前記共有記憶域から、再送対象のメッセージを読出し、該読み出したメッセージを、前記送信先コンピュータシステム内のコンピュータマシンに送信する第二メッセージ送信ステップと
をコンピュータマシンに実行させるメッセージ中継プログラム。
【請求項２】
前記複数のコンピュータシステムのうちの送信元コンピュータシステムのコンピュータマシンからメッセージを受信するステップと、
前記受信したメッセージを前記共有記憶域に格納するステップと、
前記受信したメッセージを前記アプリケーションプログラムに渡すメッセージステップと、
前記アプリケーションプログラムに渡したメッセージを前記共有記憶域から削除するステップと、
フェイルオーバが実行されることにより前記コンピュータシステムにおける他のコンピュータマシンからの引継ぎを受けた場合に、前記共有記憶域を参照し、該他のコンピュータマシンが受信したメッセージが前記共有記憶域に残っているならば、該メッセージを読み出して、前記アプリケーションに渡すステップと
をコンピュータマシンに更に実行させる請求項１記載のメッセージ中継プログラム。
【請求項３】
前記送信先コンピュータシステムのコンピュータマシンから、前記送信したメッセージの受信応答を受信するステップと、
前記受信応答を受信した場合に、前記送信したメッセージを前記共有記憶域から削除するステップと
をコンピュータマシンに更に実行させる請求項１記載のメッセージ中継プログラム。
【請求項４】
前記検出するステップでは、前記メッセージが送信されてから一定時間内に受信応答を受信しないことを、前記再送が必要なケースとして検出し、
前記第二メッセージ送信ステップでは、前記送信先コンピュータシステムにおいて冗長化されているコンピュータマシンのうち、前記第一メッセージ送信ステップでの送信先のコンピュータマシンとは別のコンピュータマシンを送信先として前記読み出したメッセージを送信する、
請求項３記載のメッセージ中継プログラム。
【請求項５】
フェイルオーバが実行されることにより前記コンピュータシステムにおける他のコンピュータマシンからの引継ぎを受けるようになっており、
前記検出するステップでは、該引継ぎを受けた場合に、前記共有記憶域を参照することにより、前記他のコンピュータマシンが送信したメッセージが前記共有記憶域に残っていることを、前記再送が必要なケースとして検出する、
請求項３記載のメッセージ中継プログラム。
【請求項６】
前記共有記憶域に、前記送信されるメッセージの通し番号が記憶され、
前記送信するステップでは、前記共有記憶域に記憶されている通し番号と所定値とを用いて算出された値である管理通番を、前記メッセージに付加して送信し、
前記格納するステップでは、前記管理通番が付加されたメッセージを格納し、
前記送信先コンピュータシステムのコンピュータマシンから、前記送信したメッセージの受信応答を受信するステップと、
前記受信応答を受信した場合に、前記共有記憶域に登録されている通し番号を更新するステップと
をコンピュータマシンに更に実行させ、
前記送信したメッセージの再送が必要なケースを検出した場合に実行されるメッセージの読出しでは、前記共有記憶域に記憶されている通し番号と所定値とを用いて算出された値が管理通番として付加されているメッセージを前記共有記憶域から読み出す、
請求項１記載のメッセージ中継プログラム。
【請求項７】
複数のコンピュータシステムでメッセージをやり取りすることによって所定の業務を処理するシステムでの通信方式であって、
前記複数のコンピュータシステムの少なくとも一つのコンピュータシステムで、コンピュータマシンが冗長化されており、
冗長化されているコンピュータマシンの各々が、
アプリケーションプログラムと、
メッセージと、該メッセージの送信先とするコンピュータシステムの識別子である送信先システム識別子の指定とを、前記アプリケーションプログラムから受けるメッセージ中継プログラムと
を備え、
前記冗長化されているコンピュータマシンのうちの第一のコンピュータマシンにおいて、前記メッセージ中継プログラムが、前記アプリケーションプログラムから受けたメッセージを、前記冗長化されているコンピュータマシンの共有記憶域に格納し、前記受けたメッセージを、前記アプリケーションプログラムから指定された送信先システム識別子に対応する送信先コンピュータシステム内のコンピュータマシンに送信し、
フェイルオーバが実行されることにより前記第一のコンピュータマシンから前記冗長化されているコンピュータシステムのうちの第二のコンピュータマシンへの引継ぎが行われた場合に、前記第二のコンピュータマシンにおいて、前記メッセージ中継プログラムが、前記共有記憶域を参照することにより、前記第一のコンピュータマシンのメッセージ中継プログラムが送信したメッセージが前記共有記憶域に残っていることを、メッセージの再送が必要なケースとして検出し、その場合に、前記共有記憶域から、再送対象のメッセージを読出し、該読み出したメッセージを、前記送信先コンピュータシステム内のコンピュータマシンに送信する、
通信方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコンピュータシステムでのメッセージの送受信に関する。
【背景技術】
【０００２】
例えば、特許文献１には、サーバコンピュータ及び待機用サーバコンピュータとクライアントコンピュータとで構成されるサーバクライアントシステムが開示されている。この特許文献１には、サーバコンピュータから待機用サーバコンピュータへの切り替わりがあっても、サーバコンピュータで既に処理したことのある要求を待機用サーバコンピュータで再度処理することを回避するための技術が開示されている。
【０００３】
【非特許文献１】特開２０００−２０７３４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
例えば、複数のコンピュータシステムでメッセージをやり取りすることによって相互に連携しながら所定の業務を処理するシステム（以下、便宜上、「業務処理システム」と言う）がある。業務処理システムの一例として、金融機関における電子送金、株式・債権売買の発注処理など、重要度が高くリアルタイム性が求められるメッセージ処理が必要とされるシステムが考えられる。
【０００５】
業務処理システムにおけるコンピュータシステムとしては、信頼性の向上のために、冗長化されたサーバマシンで構成されたものが採用される。
【０００６】
このため、この種のシステムにおいて、コンピュータシステムでサーバマシンの切り替えが行われても未処理のメッセージから処理を再開できるようにするために、上記特許文献１に開示の技術を適用する方法が考えられるかもしれない。
【０００７】
しかし、特許文献１に開示の技術を単純に業務処理システムに適用することはできない。その理由は幾つかがあるが、代表的には、例えば以下の第一及び第二の理由が考えられる。
【０００８】
第一の理由：業務処理システムは、単なるクライアントサーバシステムではなく、高い信頼性が要求される。このため、例えば、サーバマシンの障害に伴って未処理のメッセージが喪失してしまうことを防ぐ必要がある。未処理のメッセージの喪失に関する記載は、特許文献１には全く無い。特許文献１では、送信元は単一のクライアントコンピュータであり、該クライアントコンピュータで障害が生じてしまうと、未処理のメッセージが喪失してしまうおそれがある。
【０００９】
第二の理由：メッセージを送信する主体を、コンピュータマシンという単位ではなく、コンピュータマシンの構成要素というより細かい粒度でみると、コンピュータマシン内で実行される複数種類のコンピュータプログラムのうち、アプリケーションプログラムであることが多いと考えられる。このため、特許文献１の技術をそのまま適用した場合には、アプリケーションプログラムが、未処理のメッセージを再送する機能を有する必要がでる。
【００１０】
以上のような問題点は、業務処理システムに関わらず、複数のコンピュータシステムでメッセージをやり取りする他種のシステムにも存在し得る。
【００１１】
従って、本発明の目的は、複数のコンピュータシステムでメッセージをやり取りするシステムにおいて、未処理のメッセージの喪失を防止し、アプリケーションプログラムがメッセージを再送する機能を有していなくても未処理のメッセージを送信先コンピュータシステムに再送することができるようにすることにある。
【課題を解決するための手段】
【００１２】
複数のコンピュータシステムのうちの少なくとも一つのコンピュータシステムにおいて、コンピュータマシンが冗長化されている。冗長化されているコンピュータマシンの各々に、メッセージ中継プログラムを備える。また、冗長化されているコンピュータマシンに対する共有記憶域を用意する。
【００１３】
メッセージ中継プログラムは、少なくとも以下の（１）乃至（５）のステップ、
（１）メッセージと、該メッセージの送信先とするコンピュータシステムの識別子である送信先システム識別子の指定とを、このメッセージ中継プログラムを実行するコンピュータマシン内で実行されるアプリケーションプログラムから受けるステップ、
（２）上記受けたメッセージを上記共有記憶域に格納するステップ、
（３）上記受けたメッセージを、上記指定された送信先システム識別子に対応する送信先コンピュータシステム内のコンピュータマシンに送信するステップ、
（４）送信したメッセージの再送が必要なケースを検出するステップ、
（５）再送が必要なケースを検出した場合に、共有記憶域から、再送対象のメッセージを読出し、該読み出したメッセージを、上記送信先コンピュータシステム内のコンピュータマシンに送信するステップ、
を、自分を備えるコンピュータマシンに実行させることができるように構成されている。これにより、例えば、フェイルオーバが実行されることにより第一から第二のコンピュータシステムに引継ぎが行われた場合、第二のコンピュータマシンにおいて、メッセージ中継プログラムが、上記共有記憶域を参照することにより、第一のコンピュータマシンのメッセージ中継プログラムが送信したメッセージが共有記憶域に残っていることを、メッセージの再送が必要なケースとして検出し、その場合に、共有記憶域から、再送対象のメッセージを読出し、該読み出したメッセージを、送信先コンピュータシステム内のコンピュータマシンに送信することができる。
【００１４】
送信するメッセージが、冗長化されているコンピュータマシンの共有記憶域に格納される。このため、仮に、送信先コンピュータシステムのコンピュータマシンで未処理のメッセージがあり、送信元コンピュータシステムのいずれのコンピュータマシンに障害が生じても、未処理のメッセージが喪失してしまうことを防ぐことができる。また、メッセージ中継プログラムが共有記憶域からメッセージを読み出して再送するので、アプリケーションプログラムがメッセージを再送する機能を有していなくても未処理のメッセージを送信先コンピュータシステムに再送することができる。
【発明を実施するための最良の形態】
【００１５】
以下、図面を参照し、本発明の一実施形態に係る通信方式が適用された業務処理システムを説明する。
【００１６】
図１Ａは、本発明の一実施形態に係る業務処理システムの構成を示す。
【００１７】
通信ネットワーク（例えばＬＡＮ（Local Area Network））１０２に、複数のコンピュータシステム１０４が通信可能に接続されている。図１Ａには、第一のコンピュータシステム１０４Ａと、第二のコンピュータシステム１０４Ｃとの２つのコンピュータシステムを示している。コンピュータシステム１０４の数は２つに限らず３以上であっても良い。
【００１８】
各コンピュータシステム１０４では、サーバマシン１０１が冗長化（換言すればｎ重化（ｎは２以上の整数））されている。そのため、サーバマシン１０１内の構成要素も冗長化されている。以下、参照番号の付与の仕方として、第一のコンピュータシステム１０４Ａにおいては、冗長化されている要素には、親番号（例えば１０１）に加えてＡ、Ｂという子符号を付加し、冗長化されていない要素には、親番号（例えば１０３）にＡという子符号を付加する。第二のコンピュータシステム１０４Ｃにおいては、冗長化されている要素には、親番号に加えてＣ、Ｄという子符号を付加し、冗長化されていない要素には、親番号にＣという子符号を付加する。
【００１９】
各コンピュータシステム１０４は、実質的には同じ構成なので、第一のコンピュータシステム１０４Ａを例に採り説明する。第一のコンピュータシステム１０４Ａには、冗長化されているサーバマシン１０１Ａ、１０１Ｂと、それらのサーバマシン１０１Ａ、１０１Ｂがアクセス可能な記憶装置１０３Ａがある。この記憶装置１０３Ａは、一又は複数のハードディスクドライブを備えた記憶装置（外付け式のＨＤＤであっても良いし、ＲＡＩＤ（Redundant Array of Independent (or Inexpensive) Disks）構成となった大規模なストレージシステムであっても良い）であるため、以下、「共有ディスク」と呼ぶ。図１Ａの例では、共有ディスク１０３Ａは、サーバマシン１０１Ａ、１０１Ｂの両方からアクセス可能になっているものの、通信ネットワーク１０２には接続されていないが、通信ネットワーク１０２に接続されても良い。また、共有ディスク１０３Ａが、第二のコンピュータシステム１０４Ｃにおけるサーバマシン１０１Ｃ、１０１Ｄに共用されても良い。共有ディスク１０３Ａは、サーバマシン１０１Ａ、１０１Ｂの障害に伴ってアクセス不可能にならないように備えられていれば良い（例えば、サーバマシン１０１Ａ及び１０１Ｂの外部に備えられる）。
【００２０】
サーバマシン１０１Ａが、例えば正系（例えば現用）のサーバマシンであって、サーバマシン１０１Ｂが、例えば副系（例えば待機用）のサーバマシンである。
【００２１】
各サーバマシン１０１について、サーバマシン１０１Ａを代表的に例に採り説明する。サーバマシン１０１Ａは、コンピュータマシンの一種であり、例えば図１Ｂに例示するように、ＣＰＵ（Central Processing Unit）１１３Ａ、記憶資源１１１Ａ（例えばメモリ）、ディスクＩ／Ｆ１１５Ａ、ネットワークＩ／Ｆ１１７Ａを備える。記憶資源１１１Ａには、複数種類のコンピュータプログラムとして、例えば、アプリケーションプログラム（以下、「アプリケーション」と略記）１０５Ａや、後述する通信ミドルウェア１０７Ａが記憶されている。ＣＰＵ１１３Ａにより、それらのコンピュータプログラムが実行される。以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するＣＰＵによって処理が行われるものとする。ディスクＩ／Ｆ１１５Ａは、共有ディスク１０３Ａに対する通信インタフェース装置であり、このＩ／Ｆ１１５Ａを経由して、共有ディスク１０３Ａへのアクセスが行われる。ネットワークＩ／Ｆ１１７Ａは、通信ネットワーク１０２に対する通信インタフェース装置であり、このＩ／Ｆ１１７Ａを経由して、メッセージ送受信が行われる。
【００２２】
サーバマシン１０１Ａには、メッセージを送受信するアプリケーション１０５Ａの他に、アプリケーション１０５Ａとそれの通信相手（図１Ａでは、アプリケーション１０５Ｃ又は１０５Ｄ）との間でやり取りされるメッセージを中継するメッセージ中継プログラムが備えられる。メッセージ中継プログラムは、本実施形態では、アプリケーション１０５Ａの下位に備えられたミドルウェアである。そのため、以下の説明では、メッセージ中継プログラムを「通信ミドルウェア」と呼ぶ。
【００２３】
アプリケーション１０５Ａからアプリケーション１０５Ｃにメッセージが送信される場合、図１Ａで矢印に示すように、通信ミドルウェア１０７Ａは、アプリケーション１０５Ａからメッセージを受け、受けたメッセージを、アプリケーション１０５Ｃを有するサーバマシン１０１Ｃに送信する。サーバマシン１０１Ｃでは、図１Ａで矢印に示すように、通信ミドルウェア１０７Ｃが、メッセージを受信し、受信したメッセージを、アプリケーション１０５Ｃに渡す。図１Ａで矢印に示すように、アプリケーション１０５Ｂからメッセージが送信される場合や、アプリケーション１０５Ｄがメッセージを受信する場合も、同様の流れとなる。なお、矢印には示していないが、アプリケーション１０５Ｃや１０５Ｄが送信元となり、アプリケーション１０５Ａや１０５Ｂが送信先となる場合には、矢印の向きは逆となる。
【００２４】
コンピュータシステム１０４Ａでは、通信ミドルウェア１０７Ａ、１０７Ｂが、共有ディスク１０３Ａに、送受信するメッセージの通し番号（以下、「通番」と略記する）を更新したり、送信する或いは受信したメッセージを一時記憶したりする。
【００２５】
図２Ａは、共有ディスク１０３Ａに記憶される情報や、共有ディスク１０３Ａに設けられる記憶域を示す。
【００２６】
共有ディスク１０３Ａに記憶される情報としては、送信先管理表１２１Ａと、送信通番管理表１２３Ａと、受信通番管理表１２５Ａとがある。また、共有ディスク１０３Ａに設けられる記憶域としては、送信一時記憶域１２７Ａと、受信一時記憶域１２９Ａとがある。
【００２７】
送信先管理表１２１Ａには、各他のコンピュータシステム１０４に関する情報が登録される。具体的には、例えば、この表１２１Ａには、アプリケーション１０５Ａの通信相手となり得る各他のアプリケーショ毎に、送信先システムコード、優先順位、ＩＰアドレスが記録される。
【００２８】
送信先システムコードとは、送信先候補の他のコンピュータシステム１０４の識別コードである。例えば、第二のコンピュータシステム１０４Ｃには、２つのアプリケーション１０５Ｃ、１０５Ｄが存在するため、一つのコンピュータシステム１０４Ｃにつき２行設けられ、各行には、第二のコンピュータシステム１０４の識別コード（例えば“システムＹ”）が記録される。なお、“システムＺ”は、図示しない第三のコンピュータシステムの識別コードである。すなわち、本実施形態の説明では、コンピュータシステム１０４の数を２つとしているが、前述したように、２つに限定する必要がないことを意味する。
【００２９】
優先順位とは、同一の他のコンピュータシステム１０４に存在する複数のアプリケーションのうちのどれをメッセージの送信先とするかを表す。送信先が第二のコンピュータシステム１０４Ｃの場合、通信ミドルウェア１０７Ａ或いは１０７Ｂは、優先順位“１”のアプリケーション１０５Ｃをメッセージの送信先として選択し、そのアプリケーション１０５Ｃとの通信に成功しない場合に、次の優先順位“２”のアプリケーション１０５Ｄをメッセージの送信先として選択することができる。優先順位のカラムに代えて、フラグのカラムが採用されても良い。例えば、フラグがカラムにセットされたアプリケーション１０５Ｃを送信先とし、そのアプリケーション１０５Ｃとの通信に成功しない場合に、フラグがセットされていないアプリケーション１０５Ｄが送信先とされてもよい（もしそのようなアプリケーションが複数個ある場合には任意に選択されてもよい）。
【００３０】
ＩＰアドレスは、各他のコンピュータシステム１０４に存在する各サーバマシン１０１のＩＰアドレスである。通信ミドルウェア１０７Ａ、１０７Ｂは、送信先として選択したアプリケーション１０５Ｃにメッセージを送信する場合には、そのアプリケーション１０５Ｃに対応したＩＰアドレス（サーバマシン１０１ＣのＩＰアドレス）を指定して、メッセージを送信する。
【００３１】
送信通番管理表１２３Ａには、各他のコンピュータシステム１０４毎に、送信先システムコードと、送信済通番とが記録される。送信済通番とは、第一のコンピュータシステム１０４Ａから他のコンピュータシステム１０４に送信されたメッセージの通番である。具体的には、例えば、第二のコンピュータシステム１０４Ｃに対応した送信済通番は、第二のコンピュータシステム１０４Ｃに送信されたメッセージの通番である。
【００３２】
受信通番管理表１２５Ａには、各他のコンピュータシステム１０４毎に、送信元システムコードと、受信済通番とが記録される。送信元システムコードとは、メッセージの送信元のコンピュータシステム１０４の識別コードである。受信済通番とは、第一のコンピュータシステム１０４Ａが他のコンピュータシステム１０４から受信したメッセージの通番である。具体的には、例えば、第二のコンピュータシステム１０４Ｃに対応した受信済通番は、第二のコンピュータシステム１０４Ｃから受信したメッセージの通番である。
【００３３】
送信一時記憶域１２７Ａは、第一のコンピュータシステム１０４Ａから送信されるメッセージが一時的に記憶される記憶域である。この記憶域１２７Ａに記憶されたメッセージは、通信ミドルウェア１０７Ａ又は１０７Ｂが受信応答を受信した場合に、通信ミドルウェア１０７Ａ又は１０７Ｂにより削除される。
【００３４】
受信一時記憶域１２９Ａは、第一のコンピュータシステム１０４Ａが受信したメッセージが一時的に記憶される記憶域である。この記憶域１２９Ａに記憶されたメッセージは、通信ミドルウェア１０７Ａ又は１０７Ｂが受信応答を送信した場合に、通信ミドルウェア１０７Ａ又は１０７Ｂにより削除される。
【００３５】
以下、通信ミドルウェア１０７Ａが別の通信ミドルウェア１０７Ｃ或いは１０７Ｄと送受信する情報の構成について説明する。なお、これ以降の説明では、混同を防ぐために、アプリケーション１０５と通信ミドルウェア１０７との間でやり取りされるものを「メッセージ」と言い、通信ミドルウェア１０７間でやり取りされるものを「メッセージセット」と区別する。なお、「メッセージ」は、通信ミドルウェア１０７無しでアプリケーション１０５同士で直接やり取りされるものと全く同じ形式であってよい。
【００３６】
図２Ｂは、メッセージセットの構成を示す。
【００３７】
メッセージセット１３５は、例えば、管理用ヘッダ１３１と、メッセージ１３３とで構成される。言い換えれば、通信ミドルウェア１０７Ａは、アプリケーション１０５Ａから受けたメッセージ１３３に、管理用ヘッダ１３１が付加されることにより、メッセージセット１３５を生成して送信することができる。また、通信ミドルウェア１０７Ａは、メッセージセット１３５を受信した場合には、そのメッセージセット１３５から管理用ヘッダ１３１を除去することにより得られるメッセージ１３３をアプリケーション１０５Ａに送ることができる。管理用ヘッダ１３１は、通信ミドルウェア１０７で解釈される情報であり、例えば、送信先システムコード、送信元システムコード及び管理通番が記録される。管理通番は、メッセージセット１３５の送信元の通信ミドルウェアに付与された通番である。
【００３８】
以上が、メッセージセット１３５の構成である。なお、例えば、トランスポート層以下の通信プロトコルはTCP/IP、Ethernet（登録商標）が想定され、その場合、通信ネットワーク１０２に流れるパケットには、通信ミドルウェア１０７Ａよりも下位レイヤであるTCP、IP、Ethernetのヘッダが付与される。
【００３９】
以下、この業務処理システムで行われるメッセージ送受信の流れを説明する。その際、説明を分かり易くするために、まず、障害が発生しない正常ケースでの流れを説明し、その後で、幾つかの障害ケースでのそれぞれの流れを説明する。なお、正常ケースでは、アプリケーション１０５Ａからアプリケーション１０５Ｃにメッセージが送信されるものとする。
【００４０】
図３は、正常ケースでのメッセージ送受信の流れを示す。なお、図では、ステップを「Ｓ」と略記している。
【００４１】
ステップ１０１では、アプリケーション１０５Ａが、送信対象のメッセージ１３３を、第二のコンピュータシステム１０４Ｃの識別コード（送信先システムコード“システムＹ”）を指定して通信ミドルウェア１０７Ａに渡す。
【００４２】
ステップ１０２では、通信ミドルウェア１０７Ａが、送信先管理表１２１Ａを参照し、アプリケーション１０５Ａから渡された送信先システムコード“システムＹ”
に対応するＩＰアドレス（送信先ＩＰアドレス）を、送信先システムコード“システムＹ”
に対応する優先順位に従って決定する。ここでは、優先順位“１”に対応したＩＰアドレス“YYY.YYY.YYY.1”（つまり、アプリケーション１０５Ｃを有するサーバマシン１０１Ｃ）が決定される。
【００４３】
ステップ１０３では、通信ミドルウェア１０７Ａが、送信通番管理表１２３Ａを参照し、送信先システムコード“システムＹ”に対応する送信済通番に１を加算し、その加算により算出された値を管理通番として含む管理用ヘッダ１３１を生成する。管理用ヘッダ１３１には、管理通番に加えて、送信先システムコード（アプリケーション１０５Ａから渡されたもの）“システムＹ”と、送信元システムコード（第一のコンピュータシステム１０４Ａの識別コード）“システムＸ”とが含まれる。
【００４４】
ステップ１０４では、通信ミドルウェア１０７Ａは、アプリケーション１０５Ａから渡されたメッセージ１３３に、上記生成した管理用ヘッダ１３１を付加することで、メッセージセット１３５を生成する。そして、そのメッセージセット１３５を、送信一時記憶域１２７Ａに格納する。
【００４５】
ステップ１０５では、通信ミドルウェア１０７Ａは、上記生成したメッセージセット１３５を、ステップ１０２で決定したＩＰアドレスを指定して送信する。それにより、そのメッセージセット１３５は、第二のコンピュータシステム１０４Ｃにおけるサーバマシン１０１Ｃに送られる。
【００４６】
ステップ１０６では、通信ミドルウェア１０７Ａは、受信応答待ちとなる。具体的には、例えば、通信ミドルウェア１０７Ａは、メッセージセット１３５を送信してから受信応答が無いまま一定時間が経過したか否かを監視する。
【００４７】
ステップ１０７では、サーバマシン１０１Ｃにおいて、通信ミドルウェア１０７Ｃが、メッセージセット１３５を受信する。
【００４８】
ステップ１０８では、通信ミドルウェア１０７Ｃが、受信したメッセージセット１３５を、受信一時記憶域１２９Ｃに格納する。なお、この１２９Ｃという参照番号は、どの図面にも示されていないが、前述した、参照番号の付与の仕方に従って付与したものである。つまり、この１２９Ｃという参照番号は、メッセージセット１３５の格納先である受信一時記憶域が、共有ディスク１０３Ｃ（図１参照）内にあることを意味する。
【００４９】
ステップ１０９では、通信ミドルウェア１０７Ｃが、メッセージセット１３５中の管理用ヘッダ１３１に含まれている送信元システムコード“システムＸ”を用いて、受信通番管理表１２５Ｃを参照する。それにより、その送信元システムコード“システムＸ”に対応した受信済通番を取得する。そして、その受信済通番に１を加算し、その加算により算出された値と、上記受信したメッセージセット１３５中の管理用ヘッダ１３１に含まれている管理通番とを比較する。この結果、ここでは正常ケースのため、（受信済通番＋１）と、管理通番とが一致する。
【００５０】
ステップ１１０では、その一致が検知される。
【００５１】
ステップ１１１では、通信ミドルウェア１０７Ｃが、メッセージセット１３５から管理用ヘッダ１３１を除いたメッセージ１３３を、アプリケーション１０５Ｃに渡す。
【００５２】
ステップ１１２では、通信ミドルウェア１０７Ｃが、送信元システムコード“システムＸ”に対応した、受信通番管理表１２５Ｃにおける受信済通番を、更新する。具体的には、その受信済通番を、現在の受信済通番に１を加算した値に更新する。
【００５３】
ステップ１１３では、通信ミドルウェア１０７Ｃが、受信応答を、サーバマシン１０１Ａの通信ミドルウェア１０７Ａに送信する。
【００５４】
ステップ１１４では、通信ミドルウェア１０７Ｃが、受信応答の送信を契機に、ステップ１０８で一時格納したメッセージセット１３５を、受信一時記憶域１２９Ｃから削除する。
【００５５】
ステップ１１５では、通信ミドルウェア１０７Ａが、通信ミドルウェア１０７Ｃから受信応答を受信する。この受信は、正常ケースの場合には、ステップ１０５でメッセージセット１３５が送信されてから一定時間経過する前に行われる。
【００５６】
ステップ１１６では、通信ミドルウェア１０７Ａが、受信応答の受信を契機に、送信先システムコード“システムＹ”に対応した、送信通番管理表１２３Ａにおける送信済通番を、更新する。具体的には、その送信済通番を、現在の送信済通番に１を加算した値に更新する。
【００５７】
ステップ１１７では、通信ミドルウェア１０７Ａが、ステップ１０４で一時格納したメッセージセット１３５を、送信一時記憶域１２７Ａから削除する。
【００５８】
以上が、正常ケースでのメッセージ送受信の流れの一例である。この実施形態では、生じ得る障害ケースとして、例えば以下の５つの障害ケース、
（第一の障害ケース）ステップ１０５で送信されたメッセージセット１３５がサーバマシン１０１Ｃに到達する前に、サーバマシン１０１Ｃに障害が発生するケース、
（第二の障害ケース）通信ミドルウェア１０１Ｃでメッセージセット１３５を受信し一時格納まで行われたがそのメッセージセット１３５中のメッセージ１３３がアプリケーション１０５Ｃに渡される前にサーバマシン１０１Ｃで障害が発生するケース、
（第三の障害ケース）通信ミドルウェア１０７Ｃで受信応答を送信できない、或いは、受信応答が送信されたが通信ミドルウェア１０７Ａに到達しないケース、
（第四の障害ケース）送信されるメッセージセット１３５が一時格納されたが実際に送信される前にサーバマシン１０１Ａで障害が発生するケース、
（第五の障害ケース）通信ミドルウェア１０７Ａに受信応答が届いたが一時格納されたメッセージセット１３５が削除される前にサーバマシン１０１Ａに障害が発生するケース、
が考えられる。以下、各障害ケースでのメッセージ送受信の流れの一例を説明する。
【００５９】
図４は、第一の障害ケースでのメッセージ送受信の流れの一例を示す。
【００６０】
サーバマシン１０１Ｃで障害が発生した場合、フェイルオーバ、すなわち、サーバマシン１０１Ｃからサーバマシン１０１Ｄへの引継ぎが行われる。これは、既存の技術で実現できるため、詳細な説明は省略する。
【００６１】
通信ミドルウェア１０７Ａが、ステップ１０５でメッセージセット１３５をサーバマシン１０１Ｃの通信ミドルウェア１０７Ｃに送信しても、その前にサーバマシン１０１Ｄへのフェイルオーバが行われていると、通信ミドルウェア１０７Ｃから受信応答を受けることはない。そのため、ステップ１０６での受信応答待ちにおいては、やがて、ステップ１２１で示すように、メッセージセット１３５を送信してから一定時間経っても受信応答を受信しないことが通信ミドルウェア１０７Ａにより検出される。
【００６２】
この場合、ステップ１２２で、通信ミドルウェア１０７Ａは、送信先管理表１２１Ａを参照し、ステップ１０２で決定したＩＰアドレスに対応する優先順位“１”の次の優先順位のＩＰアドレス“YYY.YYY.YYY.2”（つまり、アプリケーション１０５Ｄを有するサーバマシン１０１Ｄ）を取得する。そして、送信一時記憶域１２７Ａから、ステップ１０５で送信したメッセージセット１３５を取得し、取得したメッセージセット１３５を、上記取得したＩＰアドレスを指定して送信する。これにより、サーバマシン１０１Ｃに送信されたが処理されなかったメッセージセット１３５が、サーバマシン１０１Ｄに送信される。なお、このステップ１２２において、送信先管理表１２１Ａの参照の際には、送信先システムコード“システムＹ”に対応する優先順位の中から優先順位が選択される。また、メッセージセット１３５の取得では、例えば、送信先システムコード“システムＹ”に対応する送信済通番に１を加算した値を管理通番とし、該管理通番を検索キーとして、メッセージセット１３５を取得することができる。
【００６３】
ステップ１２２で送信されたメッセージセット１３５が、サーバマシン１０１Ｄの通信ミドルウェア１０７Ｄにより受信される。そして、通信ミドルウェア１０７Ｄにより、図３のステップ１０７〜ステップ１１３が行われる。このため、受信応答が、通信ミドルウェア１０７Ｄから通信ミドルウェア１０７Ａに送信される。
【００６４】
ステップ１２３で、通信ミドルウェア１０７Ａは、受信応答待ちとなっており、ステップ１２４で、受信応答を受信する。
【００６５】
ステップ１２５では、通信ミドルウェア１０７Ａは、送信先管理表１２１Ａにおいて、受信応答を受信できなかったＩＰアドレス“YYY.YYY.YYY.1”の優先順位と、受信応答を受信できたＩＰアドレス“YYY.YYY.YYY.2”の優先順位とを入れ替える。これにより、以後、新たなメッセージセット１３５が送信される場合、その送信先は、サーバマシン１０１Ｄとなる。
【００６６】
その後、図３のステップ１１６〜ステップ１１７が行われる。
【００６７】
以上が、第一の障害ケースでのメッセージ送受信の流れである。
【００６８】
図５は、第二の障害ケースでのメッセージ送受信の流れの一例を示す。
【００６９】
この第二の障害ケースは、図３のステップ１０８が行われた後、ステップ１１１が行われる前に障害が発生するケースである。この場合、ステップ１３２で、サーバマシン１０１Ｃからサーバマシン１０１Ｄへのフェイルオーバが行われる。
【００７０】
ステップ１３３で、通信ミドルウェア１０７Ｄが、受信一時記憶域１２９Ｃを参照し、該記憶域１２９Ｃが一定時間更新されていないことを検知し、メッセージセット１３５を取得する。ここで取得されるメッセージセット１３５は、フェイルオーバ前のサーバマシン１０１Ｃのアプリケーション１０５Ｃに渡されていない未処理のメッセージ１３３を含んだメッセージセット１３５である。受信一時記憶域１２９Ｃが一定時間更新されていないことを検知するための方法としては、例えば、メッセージセット１３５の一時格納と共に格納した時刻も受信一時記憶域１２９Ｃに格納し、該時刻と現在の時刻との差が一定時間を超えたかどうかを判断する方法が考えられる。なお、このステップ１３３では、例えば、フェイルオーバによる引継ぎを受けた場合に、受信一時記憶域１２９Ｃを参照し、削除されずに残ったままになっているメッセージセット１３５の取得が行われても良い。また、その際、そのメッセージセット１３５中の管理通番と、受信済通番に１を加算した値との比較を行い、そのメッセージセット１３５中のメッセージ１３３をアプリケーション１０５Ｄに渡すべきか否かの判断が行われても良い。
【００７１】
この後、図３のステップ１０９〜ステップ１１４が実行される。すなわち、取得されたメッセージセット１３５中のメッセージがアプリケーション１０５Ｄに渡され、受信応答が通信ミドルウェア１０５Ａに送信され、受信済通番が更新され、該取得されたメッセージセット１３５が受信一時記憶域１２９Ｃから削除される。
【００７２】
ステップ１０５で、通信ミドルウェア１０７Ａは、受信応答を通信ミドルウェア１０５Ｄ、すなわち、メッセージセット１３５の送信先サーバマシン１０１Ｃとは異なるサーバマシン１０１Ｄから受信応答を受信する。
【００７３】
ステップ１４１で、通信ミドルウェア１０７Ａは、例えば受信応答の送信元のＩＰアドレスから、受信応答の送信元が、メッセージセット１３５の送信先とは異なることを検知する。この場合、ステップ１４２で、通信ミドルウェア１０７Ａは、送信先管理表１２１Ａにおいて、メッセージセット１３５の送信先のＩＰアドレス“YYY.YYY.YYY.1”の優先順位と、受信応答の受信元のＩＰアドレス“YYY.YYY.YYY.2”の優先順位とを入れ替える。
【００７４】
その後、図３のステップ１１６〜Ｓ１１７が行われる。
【００７５】
以上が、第二の障害ケースでのメッセージ送受信の流れである。
【００７６】
図６は、第三の障害ケースでのメッセージ送受信の流れの一例を示す。
【００７７】
この第三の障害ケースは、通信ミドルウェア１０７Ｃにおいて、図３のステップ１０７〜１１２まで行われたものの、ステップ１１３（受信応答送信）が行われない、或いは、ステップ１１３が行われたものの受信応答が通信ミドルウェア１０７Ａに届かないケースである。このケースでは、通信ミドルウェア１０７Ａにおいて、メッセージセット１３５が送信されてから一定時間が経過しても受信応答を受信しないことが検知される（ステップ１５１）。この場合、通信ミドルウェア１０７は、図４のステップ１２２と同じ処理を実行する。すなわち、すなわち、送信先管理表１２１Ａを参照し、次の優先順位のＩＰアドレスを取得し、送信一時記憶域１２７Ａから、ステップ１０５で送信したメッセージセット１３５を取得し、取得したメッセージセット１３５を、上記取得したＩＰアドレスを指定して送信する。
【００７８】
通信ミドルウェア１０７Ｄは、図３のステップ１０７〜１０９を行う。ステップ１０９では、現在の受信済通番に１を加算した値と、メッセージセット１３５中の管理通番との比較が行われるが、比較の結果、不一致が検知される（ステップ１５２）。不一致が生じるのは、この第三の障害ケースでは、通信ミドルウェア１０７Ｃにより図３のステップ１１２（受信済通番の更新処理）が既に実行されてしまっているためである。
【００７９】
この場合、ステップ１５３で、通信ミドルウェア１０７Ｄは、通信ミドルウェア１０７Ａから受信したメッセージセット１３５を捨てる（破棄する）。なぜなら、そのメッセージセット１３５中のメッセージ１３３は、サーバマシン１０１Ｃのアプリケーション１０５Ｃに渡され処理済みであるからである。
【００８０】
ステップ１５４で、通信ミドルウェア１０７Ｄは、受信応答を通信ミドルウェア１０７Ａに送信する。つまり、受信したメッセージセット１３５中のメッセージ１３３をアプリケーション１０５Ｄに渡すことなく受信応答を送信する。
【００８１】
ステップ１５５で、通信ミドルウェア１０７Ｄは、削除されずに残っているメッセージセット１３５（ステップ１５３で捨てたメッセージセット１３５と同じメッセージ）を受信一時記憶域１２９Ｃから削除する。
【００８２】
通信ミドルウェア１０５Ａは、通信ミドルウェア１０５Ｄから受信応答を受信し、その後、図５のステップ１４１及び１４２と、図３のステップ１１６及び１１７とを実行する。
【００８３】
以上が、第三の障害ケースでのメッセージ送受信の流れである。
【００８４】
図７は、第四の障害ケースでのメッセージ送受信の流れの一例を示す。
【００８５】
第四の障害ケースは、送信されるメッセージセット１３５が送信一時記憶域１２７Ａに一時格納されたが、実際に送信される前にサーバマシン１０１Ａで障害が発生するケースである。この場合、サーバマシン１０１Ａからサーバマシン１０１Ｂへのフェイルオーバが実行される（ステップ１７２）。
【００８６】
ステップ１８１で、通信ミドルウェア１０７Ｂは、送信一時記憶域１２７Ａを参照し、該記憶域１２７Ａが一定時間更新されていないことを検知し、メッセージセット１３５を取得する。ここで取得されるメッセージセット１３５は、未送信のメッセージセット１３５である。送信一時記憶域１２７Ａが一定時間更新されていないことを検知するための方法としては、例えば、メッセージセット１３５の一時格納と共に格納した時刻も送信一時記憶域１２７Ａに格納し、該時刻と現在の時刻との差が一定時間を超えたかどうかを判断する方法が考えられる。なお、このステップ１８１では、例えば、一時格納されたメッセージセット１３５が一定時間削除されずに残ったままになっているかどうかを判断し、残ったままになっていると判断した場合に、該メッセージセット１３５の取得が行われても良い。
【００８７】
ステップ１８２で、通信ミドルウェア１０７Ｂは、取得したメッセージセット１３５を通信ミドルウェア１０７Ｃに送信する。なお、このステップ１８２において、メッセージセット１３５の送信先とするＩＰアドレスは、ステップ１７２でのフェイルオーバにより、サーバマシン１０１Ａから引き継がれたＩＰアドレス（つまり、通信ミドルウェア１０７Ａにより決定されたＩＰアドレス）とすることができる。それに代えて、図３のステップ１０２からの処理が行われても良い。
【００８８】
この後、通信ミドルウェア１０７Ｃにより、図３のステップ１０７〜１１４が行われる。通信ミドルウェア１０７Ｂにより、図３のステップ１０６及びステップ１１５〜１１７が行われる。
【００８９】
以上が、第四の障害ケースでのメッセージ送受信の流れである。
【００９０】
図８は、第五の障害ケースでのメッセージ送受信の流れの一例を示す。
【００９１】
第五の障害ケースは、通信ミドルウェア１０７Ａに受信応答が届いたが一時格納されたメッセージセット１３５が削除される前にサーバマシン１０１Ａに障害が発生するケースである。この場合、サーバマシン１０１Ａからサーバマシン１０１Ｂへのフェイルオーバが実行される（ステップ１９２）。
【００９２】
ステップ２０１で、通信ミドルウェア１０７Ｂは、送信一時記憶域１２７Ａから、通信ミドルウェア１０７Ａにより一度送信されたメッセージセット１３５を取得する。このメッセージセット１３５は、例えば、現在の送信済通番に１を加算した値を管理通番としたものを検索キーとすることにより取得することができる。
【００９３】
ステップ２０２で、通信ミドルウェア１０７Ｂは、取得したメッセージセット１３５を通信ミドルウェア１０７Ｃに送信する。
【００９４】
この後、通信ミドルウェア１０７Ｃにより、図３のステップ１０７〜１０９、及び、図６のステップ１５２〜１５４が行われる。なお、通番の不一致が検知される（図６のステップ１５２となる）のは、既にメッセージセットが通信ミドルウェア１０７Ｃに送信済みで、通信ミドルウェア１０７Ｃにより図３のステップ１０７〜１１４が実行されているためである。通信ミドルウェア１０７Ｂにより、図３のステップ１０６及びステップ１１５〜１１７が行われる。
【００９５】
以上が、第五の障害ケースでのメッセージ送受信の流れの説明である。
【００９６】
上述した実施形態によれば、冗長化されているサーバマシン１０１の各々に、アプリケーション１０５のメッセージ１３３の送受信を中継する通信ミドルウェア１０７が備えられる。例えば通信ミドルウェア１０７Ａは、送信されるメッセージセット１３５を、共有ディスク１０３Ａ内の送信一時記憶域１２７Ａに格納する。未処理のメッセージ１３３をサーバマシン１０１Ｃ或いは１０１Ｄに再送する必要が生じた場合には、通信ミドルウェア１０７Ａは、未処理のメッセージ１３３を含んだメッセージセット１３５を送信一時記憶域１２７Ａから取得して再送する。これにより、未処理のメッセージ１３３の再生や再送をアプリケーション１０５Ａに行わせることなく（つまりアプリケーション１０５Ａがメッセージ１３３の二重送信をすることなく）、未処理のメッセージ１３３を含んだメッセージセット１３５を再送することができる。
【００９７】
また、上述した実施形態によれば、未処理のメッセージ１３３を含んだメッセージセット１３５が、共有ディスク１０３Ｃ内の受信一時記憶域１２９Ｃに格納される。未処理のメッセージ１３３を通信ミドルウェア１０７Ｃがアプリケーション１０５Ｃに渡す前にサーバマシン１０１Ｃに障害が発生した場合には、通信ミドルウェア１０７Ｄが、未処理のメッセージ１３３を含んだメッセージセット１３５を受信一時記憶域１２７Ｃから取得して渡す。これにより、未処理のメッセージ１３３の二重送信を送信元アプリケーション１０５Ａに行わせることなく、未処理のメッセージ１３３を含んだメッセージセット１３５を再送することができる。なお、代替方法として、例えば、通信ミドルウェア１０５Ｄが、メッセージセット１３５の送信元コンピュータシステム１０４Ａにおける通信ミドルウェア１０５Ａ或いは１０５Ｂに、該送信元のシステムコードに対応した受信済通番を送って、該受信済通番に１を加算した値を管理通番として含んだメッセージセット１３５を再送することを要求する方法も考えられる。しかし、上記のように、受信一時記憶域１２９Ｃからメッセージセット１３５を取得する方が、高速に対処することができる。
【００９８】
また、上述した実施形態によれば、未処理のメッセージ１３３を含んだメッセージセット１３５が、共有ディスク１０３内の少なくとも送信一時記憶域１２７に格納される。このため、サーバマシン１０１に障害が生じても、未処理のメッセージ１３３が喪失してしまうことを防ぐことができる。
【００９９】
また、上述した実施形態によれば、通信ミドルウェア１０７によって、通番の管理が行われる。このため、アプリケーション１０５から、通番を管理する機能を不要とすることができる。これは、例えば、各サーバマシン１０１に、メッセージを送受するアプリケーション１０５が複数個存在する場合、各アプリケーション１０５にわざわざ通番管理機能を持たせなくても良い。各サーバマシン１０１に複数のアプリケーション１０５が存在する場合、一つの通信ミドルウェア１０７で複数のアプリケーション１０５のメッセージの送受を中継しても良いし、各アプリケーション毎に通信ミドルウェア１０７が用意されても良い。
【０１００】
以上、本発明の一実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲をこの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。例えば、送信済通番や受信済通番の更新では、現在の通番に１を加算することとしているが、それに限らず、所定値を用いた四則演算で更新されてもよい。これは、送信するメッセージセット１３５に含める管理通番を決定する場合や、受信したメッセージセット１３５中の管理通番との比較の場合でも同様である。
【図面の簡単な説明】
【０１０１】
【図１】図１Ａは、本発明の一実施形態に係る業務処理システムの構成例を示す。図１Ｂは、サーバマシン１０１Ａのハードウェア構成例を示す。
【図２】図２Ａは、共有ディスク１０３Ａに記憶される情報や、共有ディスク１０３Ａに設けられる記憶域を示す。図２Ｂは、通信ミドルウェア１０７Ａが送受信するメッセージの構成を示す。
【図３】正常ケースでのメッセージ送受信の流れを示す。
【図４】第一の障害ケースでのメッセージ送受信の流れの一例を示す。
【図５】第二の障害ケースでのメッセージ送受信の流れの一例を示す。
【図６】第三の障害ケースでのメッセージ送受信の流れの一例を示す。
【図７】第四の障害ケースでのメッセージ送受信の流れの一例を示す。
【図８】第五の障害ケースでのメッセージ送受信の流れの一例を示す。
【符号の説明】
【０１０２】
１０４Ａ、１０４Ｃ…コンピュータシステム  １０１Ａ、１０１Ｂ、１０１Ｃ、１０１Ｄ…サーバマシン  １０３Ａ、１０３Ｃ…共有ディスク  １０５Ａ、１０５Ｂ、１０５Ｃ、１０５Ｄ…アプリケーションプログラム  １０７Ａ、１０７Ｂ、１０７Ｃ、１０７Ｄ…通信ミドルウェア
【図１】
2008129628.tif 000003
【図２】
2008129628.tif 000004
【図３】
2008129628.tif 000005
【図４】
2008129628.tif 000006
【図５】
2008129628.tif 000007
【図６】
2008129628.tif 000008
【図７】
2008129628.tif 000009
【図８】
2008129628.tif 000010