以下、本発明の一実施形態を図面を参照して説明する。図1は、本実施形態の全体構成を示す。
本システムは、プレゼンテーション層1、ビジネスロジック層2、及びデータサービス層3から構成されている。
プレゼンテーション層1は、ウェブ(World Wide Web)クライアント11、ウェブ(World Wide Web)サーバ12、又はVB(Visual Basic)クライアント13を含んでいる。
ビジネスロジック層2には、本発明の原理に従うフレームワークアークテクチャ(この明細書では「RtFA: Real Time Framework Architecture」という)が適用されたサーバコンピュータシステムであるRtFAサーバ14が設けられている。RtFAサーバ14は、メッセージングサービスを行うサーバコンピュータシステム(以下、簡単に「メッセージングサービス」という)15と、フレームワークサービスを行うサーバコンピュータシステム(以下、簡単に「フレームワークサービス」という)16とを備えている。典型的には、メッセージングサービス15とフレームワークサービス16は、それぞれ、別のコンピュータマシン又は別のコンピュータマシンのセットを用いて具現化される。しかし、必ずしもそうでなければならないわけではなく、同一のコンピュータマシン又はコンピュータマシンのセットを用いて、メッセージングサービス15とフレームワークサービス16の双方がインプレメントされることも可能である。
メッセージングサービス15は、クライアント11,13とRtFAサーバ14間のメッセージのやり取りを制御する。すなわち、メッセージングサービス15は、クライアント11,13から、或る処理のためのリクエストのメッセージを受信し、そのリクエストのメッセージを、リクエストされた処理を行なうことができるフレームワークサービス16に渡す。また、メッセージングサービス15は、フレームワークサービス16から、実行された処理の結果を示すリプライのメッセージを受信し、更に、場合によっては、後続の追加の処理のための追加のリクエストのメッセージも受信する。そして、メッセージングサービス15は、そのリプライのメッセージをクライアント11,13に送ったり、追加のリクエストのメッセージをフレームワークサービス16に再び渡したりする。
メッセージングサービス15によって取り扱われる全てのメッセージの各々には、そのメッセージのサブジェクト(例えば、仕入登録リクエスト、在庫更新リクエスト、買掛登録リクエストなど)を示す識別コードであるサブジェクトIDが含まれている。このサブジェクトIDは、後述するように、メッセージングサービス15又はフレームワークサービス16によって、そのメッセージの宛先を選択する目的に利用され、そのため、「宛先サブジェクトID」とも呼ばれる。
フレームワークサービス16は、様々な種類のメッセージをそれぞれ処理するための複数のビジネスロジック(例えば、仕入処理ビジネスロジック、在庫処理ビジネスロジック、買掛処理ビジネスロジック、メッセージ変換ビジネスロジックなど)を有している。フレームワークサービス16は、メッセージングサービス15から或るメッセージを受け取ると、そのメッセージのサブジェクトIDからそのメッセージを処理するためのビジネスロジックを選び、その選んだビジネスロジックを呼び出す。呼び出されたビジネスロジックは、そのメッセージの内容に応じた処理を行い、データサービス層9のデータを更新する。メッセージングサービス15及びフレームワークサービス16のためのコンピュータプログ
ラムは、例えば、JAVA言語(商標)によって記述されている。
データサービス層3は、データベースサーバ(DBサーバ)17を備えている。
ウェブクライアント11とウェブサーバ12の間にはHTTP又はソケットによる通信コネクションが確立され得る。ウェブクライアント11とRtFAサーバ14との間には、ソケットによる直接的な通信コネクションが確立され得る。VBクライアント13とRtFAサーバ14との間には、ソケットによる直接的な通信コネクションが確立され得る。また、ウェブサーバ12とRtFAサーバ14との間には、ソケットによる直接的な通信コネクションが確立され得る。更に、RtFAサーバ14とDBサーバ17との間にはJDBCによる通信コネクションが確立され得る。
図2は、RtFAサーバ14が取り扱うメッセージの構成を示す。
図2に示すように、メッセージ10は、複数のサーバ制御項目と業務データとから構成される。サーバ制御項目は、RtFAサーバ14を制御するための各種のデータであり、例えば、メッセージ種別、保証モード、優先順位、サブジェクトID(宛先サブジェクトID)及び送信元情報などが含まれている。
「メッセージ種別」は、そのメッセージがP to P(Point to Point)通信のメッセージであるか、P to M ( Point to Many)通信のメッセージであるかを区別する。ここで、P to P通信とは、或る1つのコンピュータシステムから別の1つのコンピュータシステムへとメッセージが送られる通信、つまり、1対1通信のことをいう。P to P 通信の一例は、或るクライアントからの仕入登録リクエストのメッセージを、仕入処理を実行する或る一つのフレームワークサービスへ送る場合である。一方、P to M通信とは、或る1つ又は複数のコンピュータシステムから別の複数のコンピュータシステムへとメッセージが送られる通信、つまり、1対複数又は複数対複数の通信のことをいう。P to M 通信の一例は、或る1つのフレームワークサービスからの在庫更新結果を示すメッセージを、フロントデスクの仕事を担う複数のクライアント端末へ送信する場合である。
「保証モード」は、メッセージ保証(すなわち、そのメッセージが確実に送信及び処理されることの保証)をする("G")か否か("N")を区別する。保証モードが"N"のメッセージを受信したとき、メッセージングサービス15は、そのメッセージを、揮発性の半導体メモリを用いたメッセージキュー(以下、「メモリキュー」という)に入れる。一方、保証モードが"G"のメッセージを受信したとき、メッセージングサービス15は、そのメッセージを、不揮発性のディスクストレージを用いたメッセージキュー(以下、「DB(データベース)キュー」という)に入れ、そのメッセージを送信した後も、そのメッセージをDBキューで保存しておく。従って、保証モードが"G"のメッセージについては、送信失敗やシステムダウンなどの問題が生じたとしても、後に再度、同じメッセージを送信することができる。
「優先順位」は、そのメッセージの処理の優先レベルを示す。例えば、ハイ("H")、ノーマル("N")及びロー("L")の3種類の優先順位がある。後述するように、メッセージングサービス15は、メッセージキュー内で複数のメッセージが待っているとき、それらのメッセージをメッセージキューから取り出す順序を、それらのメッセージのそれぞれの優先順位に応じて制御することができる。
「サブジェクトID(宛先サブジェクトID)」は、既に述べたとおり、そのメッセージのサブジェクトの種別を示す識別コードである。後述するように、メッセージングサービス15は、メッセージを受信すると、そのメッセージのサブジェクトIDに基づいて、そのメッセージの宛先となるべきコンピュータシステム(例えば、クライアント、フレームワークシステム、他のメッセージングサービスなど)を選択する。また、フレームワークサービス16は、メッセージを受信すると、そのメッセージのサブジェクトIDに基づいて、そのメッセージを処理するために呼び出すべきビジネスロジックを選択する。
「送信元情報」は、そのメッセージの送信元のサブジェクトやIPアドレスやコンピュータ名などを表す。
図3は、RtFAサーバ14の構成図である。
既に参照した図1では、1つのRtFAサーバ14しか示されていなかった。しかし、実際には、図3に示すように、複数のRtFAサーバ14を設けることができる。図3に示す例では、2つのRtFAサーバ14が設けられているが、もっと多くのRtFAサーバ14を設けることができる。
図3に示すように、各RtFAサーバ14には、一つのメッセージングサービス15と、1又は複数のフレームワークサービス16が設けられ、メッセージングサービス15とフレームワークサービス16は相互に通信可能に接続されている。メッセージングサービス15は、また、1又は複数のクライアント11,13とも通信可能に接続されている。メッセージングサービス15は、クライアント11,13及びフレームワークサービス16とそれぞれ通信する複数のスレッド171を並列に処理している。
複数のRtFAサーバ14が存在するので、メッセージングサービス15とフレームワークサービス16の組は複数組存在している。そして、複数のRtFAサーバ14のメッセージングサービス15は、相互に通信可能に接続されている。各RtFAサーバ−14のメッセージングサービス15は、他のRtFAサーバ14のメッセージングサービス15との通信を処理するスレッド171も備えている。各メッセージングサービス15が持つ複数の通信スレッド171は、それぞれキープアライブ機能を有し、この機能により、そのメッセージングサービス15にコネクションされたクライアント11,13、他のメッセージングサービス15、及びフレームワークサービス16と相互の正常な稼動を確認しあっている。
また、各メッセージングサービス15には、図4に例示するような管理テーブル18が関連付けられている。管理テーブル18には、そのメッセージングサービス15が伝達すべきメッセージの経路、換言すれば、そのメッセージングサービス15が取り扱う様々なメッセージの送り先、が管理される。図4に示すように、管理テーブル18には、そのメッセージングサービス15に接続された全てのコンピュータシステム(クライアント11,13、他のメッセージングサービス15、及びフレームワークサービス16)の各々について、種別、コンピュータID、IPアドレス、P to PサブジェクトID、P to MサブジェクトID及び処理中フラグなどが登録される。
「種別」は、そのコンピュータシステムの種別、例えば、フレームワークサービス(F)、メッセージングサービス(M)、クライアント端末ターミナル(T)の区別を示す。
「コンピュータID」及び「IPアドレス」は、そのコンピュータシステムの固有の識別コードとIPアドレスを示す。
「P to PサブジェクトID」は、そのコンピュータシステムが待ち受ける(つまり、そのコンピュータシステムが、そのメッセージの宛先になり得る)P to P 通信用のメッセージのサブジェクトID(宛先サブジェクトID)を示す。各コンピュータシステムごとに、複数のP to PサブジェクトIDを登録することができる。
「P to MサブジェクトID」は、そのコンピュータシステムが待ち受ける(つまり、そのコンピュータシステムが、そのメッセージの宛先になり得る)P to M 通信用のメッセージのサブジェクトID(宛先サブジェクトID)を示す。各コンピュータシステムごとに、複数のP to MサブジェクトIDを登録することができる。
「処理中フラグ」は、そのコンピュータシステムとの通信のためのスレッド171が、P to P 通信の処理中である(「1」)か否(「0」)かを示す。
図4に示した管理テーブル18の登録内容は、図3中の左側のメッセージングサービスMes1の場合の例であり、そこには、左側のメッセージングサービスMes1に接続された全てのコンピュータシステム、すなわち、2つのフレームワークサービスFrm1、Frm2、右側のメッセージングサービスMes2及び3つのクライアント端末PC1、Pc2及びPC3が登録されている。この例によれば、1番目のフレームワークサービスFrm1は、P to P 通信に関しては"A"、"B"、"C"及び"D"というサブジェクトIDをそれぞれもった4種類のメッセージを待ち受けており、また、P to M 通信に関しては"O"、"P"、"Q"及び"R"というサブジェクトIDをそれぞれもった4種類のメッセージを待ち受けている。また、図中右側のメッセージングサービスMes2は、左側のメッセージングサービスMes1からのP to P 通信のメッセージとして、"D"、"E"、"F"、"H"、"I"及び"J"というサブジェクトIDをそれぞれもった7種類のメッセージを待ち受けており、また、左側のメッセージングサービスMes1からのP to M 通信のメッセージとして"P"、"Q"、"R"、"S"、"T"及び"U"というサブジェクトIDをそれぞれもった6種類のメッセージを待ち受けている。
再び図3を参照して、各メッセージングサービス15は、メッセージを受信すると、そのメッセージがP to P 通信のものかP to M 通信のものかを判断する。P to P 通信のメッセージを受信したときは、メッセージングサービス15は、そのメッセージングサービス15に関連付けられている図4に例示したような管理テーブル18を参照して、その受信メッセージのサブジェクトIDとマッチするP to PサブジェクトIDのメッセージを待ち受けているコンピュータシステムを探し、見つかった1以上のコンピュータシステムの中から処理中フラグが"0"である1つのコンピュータシステムを選び、そして、選ばれた1つのコンピュータシステムにその受信メッセージを送信する。また、P to M 通信のメッセージを受信したときは、メッセージングサービス15は、そのメッセージングサービス15に関連付けられている図4に示したような管理テーブル18を参照して、その受信メッセージのサブジェクトIDとマッチするP to MサブジェクトIDのメッセージを待ち受けてるコンピュータシステムを全て選び、そして、選ばれた全てのコンピュータシステムにそのメッセージを送信する。
図5は、複数のRtFAサーバ間の接続構成図である。図6は、複数のRtFAサーバ内のメッセージングサービスとフレームワークサービスの接続構成図である。
図5の上段又は下段に示すように、各RtFAサーバ14は他の全てのRtFAサーバ14と相互に通信可能に接続されている。すなわち、図6に示すように、各RtFAサーバ14のメッセージングサービス15が、他の全てのRtFAサーバ14のメッセージングサービス15と相互に通信可能に接続されている。このように複数のコンポーネントの各々が他の全てのコンポーネントと通信可能に接続されることを「メッシュ接続」という。また、図6に示すように、各メッセージングサービス15に対しては複数のフレームワークサービス16を直接連絡させることも可能である。
このように複数のメッセージングサービス15のメッシュ接続の下で、各メッセージサービス15は、所定の時期、例えばその起動時に、上述したキープアライブ機能を実行する。すなわち、各メッセージングサービス15は、起動すると、自分の管理テーブル18に既に登録されている他のメッセージングサービスの全てと逐次に接続して、自分と接続されているフレームワークシステム16及びクライアント11,13が待ち受けるメッセージのサブジェクトIDを、接続された他のメッセージングサービスの全てに通知する。通知されたサブジェクトIDは、そのメッセージングサービス15が他のメッセージングサービスから待ち受けるメッセージのサブジェクトIDとして、他のメッセージングサービスの管理テーブルに登録される。また、各メッセージングサービス15は、他のメッセージングサービスと接続しようとしたときに接続できなかった場合には、その後に一定間隔で複数回接続をリトライする。また、各メッセージサービス15は、自分の管理テーブル18に未だ登録されていない他のメッセージングサービスから接続要求を受けたときには、その未登録のメッセージングサービスと接続して、未登録のメッセージングサービスとそれぞれが待ち受けるサブジェクトIDなどを交換し合い、そして、そのメッセージングサービスを自分の管理テーブル18に登録する。このようなキープアライブ機能のおかげで、特定のメッセージングシステム15が正常に稼動してない(例えば、システムダウンした)場合には、他の正常に稼動している各メッセージングサービス15は、その正常に稼動してない特定のメッセージングシステム15をメッセージの中継経路から除外し、自分の管理テーブル18を参照して、自動的に別の中継経路を選択することができる。
次に、図7乃至図9に基づいて、メッセージングサービス15が提供する通信サービスの種類を説明する。メッセージングサービス15が提供するデータ配信サービスには、P toM (1対多) 通信処理と、P to P (1対1) 通信処理の2種類がある。
P to M通信処理は、前述したように、図4に例示したような管理テーブル18に登録されている各コンピュータシステムのP to MサブジェクトIDに基づいて、メッセージングサービス15が、受信したP to Mメッセージを、それを待ち受ける全てのコンピュータシステムに配信する処理である。例えば、マーケット情報が更新される都度、更新されたマーケット情報のメッセージを、1乃至n個のRtFAサーバからn個のクライアントに配信する場合に、P to M通信処理が行われる。
一方、P to P通信処理は、前述したように、図4に例示したような管理テーブル18に登録されている各コンピュータシステムのP to PサブジェクトIDに基づいて、メッセージングサービス15が、受信したP to Pメッセージを、それを待ち受けるコンピュータシステムの中の一つに送信する処理である。例えば、クライアントからの或る処理のためのリクエストのメッセージを、その処理を行うビジネスロジックを有した一つのフレームワークサービスに送る場合に、P to P通信処理が行われる。
図7は、P to M通信処理のメッセージ中継方法の一例を示している。パブリッシャーとしての或るフレームワークサービス16から出力された或るP to Mメッセージは、そのメッセージを待ち受ける全てのメッセージングサービス15に配信され、そして、それらのメッセージングサービス15から、そのメッセージを待ち受ける全てのクライアント11、13に配信される。
図8は、P to M通信処理の一例を示すフローチャートである。まず、サブスクライバの一つであるクライアントT1は、所定のメッセージングサービスMes1との間で、ソケットによるコネクションを確立する。また、クライアントT1から当該メッセージングサービスMes1に対し自己が待ち受けるP to MメッセージのサブジェクトID"X"を登録する。当該メッセージングサービスMes1は、自己に関連付けられた管理テーブル18に、クライアントT1のP to MサブジェクトID"X"を追加する。一方、クライアントT1は、メッセージングサービスMes1からのメッセージの配信を待つ。その後、メッセージングサービスMes1に接続する他のメッセージングサービスMes2,Mes3が起動したとき、メッセージングサービスMes1の管理テーブル18に既に登録されたクライアントT1のP to MサブジェクトID"X"は、他のメッセージングサービスMes2及びMes3にも通知されて、それらの管理テーブル18に、メッセージングサービスMes1のP to MサブジェクトIDとして"X"が追加される。
ここで、パブリッシャーとしてのフレームワークサービスFrm3からサブジェクトID"X"をもつP to Mメッセージが配信されると、これを受けたメッセージングサービスMes3は、自己に関連付けられた管理テーブル18を参照し、サブジェクトID"X"を待ち受ける全てのメッセージングサービスMes1及びMes2をピックアップし、それらに当該メッセージを引き渡す。
クライアントT1とコネクトされたメッセージングサービスMes1は、当該メッセージを受信すると、自己に関連付けられた管理テーブル18からサブジェクトID"X"を待ち受けるクライアントT1をピックアップし、当該メッセージをそのクライアントT1に配信する。
図示してないが、各フレームワークサービスも、そのフレームワークサービスと直接連絡可能なメッセージングサービスへ、そのフレームワークサービスが待ち受けるP to MメッセージのサブジェクトIDを通知する。それにより、そのフレームワークサービスが待ち受けるP to M サブジェクトIDが、そのメッセージングサービスの管理テーブルに登録される。その後、そのメッセージングサービスは、その管理テーブルに登録されたフレームワークサービスのP to MサブジェクトIDを、そのメッセージングサービスが待ち受けるP to MサブジェクトIDとして、他の全てのメッセージングサービスに通知する。これにより、他の全てのメッセージングサービスの管理テーブルにも、そのフレームワークサービスが待ち受けるP to MサブジェクトIDが登録されることになる。結果として、そのフレームワークサービスは、P to MサブジェクトIDをもったメッセージを、いずれのメッセージングサービスからも受信できるようになる。
次に図9は、P to P通信処理を示すフローチャートである。
上述したP to M通信のサブジェクトIDの管理テーブルへの登録と同様に、各メッセージングサービスの管理テーブルには、そのメッセージングサービスが直接連絡可能なクライアント及びフレームワークサービスがそれぞれ待ち受けるP to PサブジェクトID、並びに、他の全てのメッセージングサービスがそれぞれ待ち受けるP to PサブジェクトIDが予め自動的に登録されている。
そのような状態において、図9に示すように、まず或るクライアントPC1は、所定のメッセージングサービスMes1とコネクションを確立する。
続いて、クライアントPC1から或るサブジェクトID"A"を持ったP to Pのリクエストメッセージが送信されると、これを受信したメッセージングサービスMes1は、自己の管理テーブル18を参照して、そのサブジェクトID"A"を待ち受けるコンピュータシステムの中の一つ、例えば、フレームワークサービスFrm1を選び、それに当該リクエストメッセージを引き渡す(矢印(1))。フレームワークサービスFrm1は、引き受けたリクエストメッセージのサブジェクトID"A"に対応したビジネスロジックを呼び出して、そのメッセージの処理を実行し、その実行結果を示すリプライメッセージをメッセージングサービスMes1に戻す(矢印(3))。そして、メッセージングサービスMes1は、そのリプライメッセージをクライアントPC1に返信する。そのリプライメッセージを取得したクライアントPC1は、メッセージングサービスMes1とのコネクションを開放する。
或いは、メッセージングサービスMes1は、クライアントPC1から受信したサブジェクトID"A"のリクエストメッセージを、上記の例のようにフレームワークサービスFrm1へ送る代わりに、サブジェクトID"A"を待ち受ける他のメッセージングサービスMes2へ送る(矢印(2))こともできる。例えば、フレームワークサービスFrm1が処理中であるが、メッセージングサービスMes2は処理中でないときには、そのようなことが行われる。その場合、メッセージングサービスMes2は、そのリクエストメッセージを受けると、自己の管理テーブル18を参照して、サブジェクトID"A"を待ち受ける一つのコンピュータシステム、例えば、フレームワークシステムFrm2を選んで、それに当該リクエストメッセージを送って処理させる(矢印(4))。フレームワークシステムFrm2から処理結果のリプライメッセージが返されると(矢印(5))、メッセージングサービスMes2は、そのリプライメッセージをメッセージングサービスMes1に返し(矢印(6))、そして、メッセージングサービスMes1は、そのリプライメッセージをクライアントPC1へ返す。
上述したように、メッセージングサービス15は、自己と直接連絡可能なフレームワークサービス16へメッセージを送るだけでなく、他のメッセージングサービスを経由して他のフレームワークサービスへメッセージを送ることも可能である。これにより、複数のRtFAサーバ14間のロードバランシング(負荷平衡)が可能である。
図10は、メッセージングサービスがもつロードバランシング機能の説明図である。
図10に示すように、各RtFAサーバ14において、各フレームワークサービス16は、メッセージングサービス15と連絡する複数のスレッド19を並列に処理している。また、各メッセージングサービス15は、クライアントから受信したメッセージを一時的に保持するメッセージキュー15aを備えている。
各メッセージングサービス15のキュー15aに蓄積された各メッセージは、そのメッセージングサービス15に関連付けられた管理テーブルに従って、そのメッセージのサブジェクトIDに対応する何れかのフレームワークサービス16に引き渡される。その場合、メッセージングサービス15は、自己に直接連絡可能で且つそのサブジェクトIDを待ち受ける特定のフレームワークサービス16に、そのメッセージを引き渡すことができる。しかし、その時、その特定のフレームワークサービス16のスレッド19に空きが無い(つまり、処理中である)場合、メッセージングサービス15は、その処理中のフレームワークサービス16ではなく、そのサブジェクトIDを待ち受ける他のメッセージングサービス15に、そのメッセージを引渡す。そのメッセージを受け取った当該他のメッセージングサービス15は、当該他のメッセージングサービス16が直接に連絡可能であり且つそのサブジェクトIDを待ち受ける特定のフレームワークサービス16に、そのメッセージを引き渡す。このようなメッセージ中継を可能にするために、各メッセージングサービス15は、自分のメッセージキュー15aを常時監視し、そのメッセージキュー15aに処理待ちのメッセージが溜まっている場合は、直ちにそのキューからメッセージを取り出し、自分の管理テーブルを参照してそのメッセージの送り先をてきぱきと決定して、そのメッセージを送り出す。これにより、複数のRtFAサーバのロードバランスが適正化される。結果として、どのメッセージも可能な限り早期に処理され、よって、従来は夜間にバッチ処理で行われていたバックオフィスの仕事が、リアルタイムに近い態様で早期に実行できる。
続いて、フレームワークサービス16の構成について説明する。
図11は、フレームワークサービス16の構成を示す。
フレームワークサービス16の実体は、複数のフレームワークスレッド25による並列処理で構成されている。各フレームワークスレッド25は、予め準備された一群のビジネスロジック20にアクセスし、そして、メッセージングサービス15から引き渡されたメッセージのサブジェクトIDに対応する特定のビジネスロジック22をロードして実行する。ここで、ビジネスロジックとは、例えばJAVAコードでプログラムされたプロセスであって、それぞれ固有のメッセージ処理を実行するものである。主要なビジネスロジックの多くは、データベースサーバ17に管理されるデータベース21に対し、メッセージの内容に応じた所定の操作を要求する。
図12は、フレームワークサービス16の動作説明図である。
フレームワークサービス16のビジネスロジックの動作方式には、大きく分けて同期方式と、非同期方式の2種類がある。フレームワークサービス16は、クライアントからの或るリクエストメッセージに応答して、ただ1つのビジネスロジックのみを実行する場合がある。また、フレームワークサービス16は、リクエストメッセージに直接的に応答して1つのビジネスロジックを実行し、それに連係して、後続の1以上のビジネスロジックを実行する場合もある。図12には、クライアント11,13からの仕入登録リクエストのメッセージに直接的に応答して仕入処理のビジネスロジックが実行され、これに連係して、在庫処理及び会計処理という2つの後続のビジネスロジックが実行される例が示されている。
クライアントからのリクエストメッセージに直接的に応答してただ一つのビジネスロジックのみを実行する場合、フレームワークサービス16は、その唯一のビジネスロジックを通常は同期方式で実行し、そして、その実行結果を示すリプライメッセージをクライアントへ返す。
一方、クライアントからのリクエストメッセージに直接的に応答して1つのビジネスロジックを実行した後、これに連係して、後続の1以上のビジネスロジックを実行する場合、フレームワークサービス16は、最初の一つのビジネスロジックは通常は同期方式で実行するが、2番目以降のビジネスロジックは同期方式で実行することもできるし、非同期方式で実行することもできる。図12には、最初の仕入処理のビジネスロジックのみが同期方式で実行され、後続の在庫処理と会計処理のビジネスロジックは非同期方式で実行される例が示されている。図12の例のように複数のビジネスロジックが実行される場合、フレームワークサービス16は、同期方式で実行したビジネスロジックの全てが完了すると、その実行結果を示すリプライメッセージをクライアントへ返す。非同期方式で実行されるべきビジネスロジックは、クライアントからは切り離されたバックグラウンドで(つまり、クライアントからはオフラインで)実行される。
図12に示すように、フレームワークサービス16は、フロー定義ファイル23を有しており、そこには、そのフレームワークサービス16によるビジネスロジックの実行スケジュール(最初に実行すべき1つのビジネスロジック名、連係する後続の1又はそれ以上のビジネスロジックがある場合にはその後続のビジネスロジックへ渡すメッセージのサブジェクトID及び連係方式(同期か非同期か)、など)が、様々なメッセージのサブジェクトIDごとに定義されている。フレームワークサービス16は、一つのメッセージを受け取ると、フロー定義ファイル23を参照して、その受信されたメッセージのサブジェクトIDに対応するビジネスロジック実行スケジュールを選択し、選択されたスケジュールに従って1以上のビジネスロジックを実行する。その選択されたスケジュールには、少なくとも、そのメッセージに応答して直接的に実行されるべき1つのビジネスロジックが記述されているから、フレームワークサービスは、まず、その1つのビジネスロジックをロードして実行する。もし、その選択されたスケジュールに、更に、連係する後続の1以上のビジネスと連係方式とが記述されていたなら、フレームワークサービスは、最初のビジネスロジックの実行後に、その後続のビジネスロジックを、その連係方式で(つまり、同期的に又は非同期的に)実行することになる。なお、先行のビジネスロジックと後続のビジネスロジックは、同一のフレームワークサービスによって実行される場合もあるが、上述したロードバランシングにより別のフレームワークサービスによって実行される場合もある。
図13は、フロー定義ファイル23の簡単な例を示す。
図13に示すように、フロー定義ファイル23には、サブジェクトIDごとにビジネスロジック実行スケジュールをそれぞれ記述した複数のセンテンス231、232、233、234が存在する。フロー定義ファイル23は、例えばテキストファイルであり、よって、定義センテンス231、232、233、234の追加、削除、変更などの編集は、テキストエディタなどを用いて簡単に行える。
図13の一番上の定義センテンス231内に説明されているように、各定義センテンスは、セミコロン";"で区切られた複数のサブセンテンスから構成される。最初のサブセンテンスには、入力サブジェクトID、ログキュー名、実行ビジネスロジック名などが含まれる。2番目以降の各サブセンテンスには、メッセージ変換ビジネスロジック名、出力サブジェクトID、連係モードなどが含まれる。最初のサブセンテンスは、メッセージに直接的に応答して実行されるべき1つのビジネスロジックに関するものであり、これは全ての定義センテンスに必ず記述される。2番目以降のサブセンテンスは、最初のビジネスロジックに連携して実行される後続の1以上のビジネスロジックに関するものであり、よって、後続のビジネスネスロジックがある場合にのみ記述される。
最初のサブセンテンスの項目の意味は次のとおりである。
ここで、「入力サブジェクトID」は、フレームワークシステムが受信したメッセージのサブジェクトIDである。
「ログキュー名」は、その受信したメッセージをログに書く場合に用いられるログキューの名称である。例えば、"@DEF"はデフォルトのログキューを用いることを意味し、"@NONE"はログに書かれないことを意味する。
「実行ビジネスロジック名」は、そのメッセージに直接応答して実行されるべきビジネスロジックの名称である。図示の定義センテンス232〜234の例では、入力サブジェクトIDと同じコードが用いられている。
2番目以降の各サブセンテンスの項目の意味は次のとおりである。
「メッセージ変換ビジネスロジック名」は、先行のビジネスロジックの処理結果データを後続のビジネスロジックに渡されるメッセージに変換するために実行されるメッセージ変換ビジネスロジックの名称である。メッセージ変換が不要な場合、ここには"@NONE"と書かれる。
「出力サブジェクトID」は、後続のビジネスロジックに渡されるメッセージのサブジェクトIDである。
「連係モード」は、後続のビジネスロジックを同期方式で実行するか非同期方式で実行するかを示す。例えば、"SYNC"は同期方式を意味し、"ASYNC"は非同期方式を意味する。
図13の2番目の定義センテンス232は次のスケジュール(1)を例示している。
(1) "BuySelBuy"というサブジェクトIDのメッセージ(例えば、仕入検索リクエスト)に応答して、"BuySelBuy"という名称のビジネスロジック(例えば、仕入検索処理)を実行する。
3番目の定義センテンス233は、次のスケジュール(1)〜(3)を例示している。
(1) "BuyUpdBuy"というサブジェクトIDのメッセージ(例えば、仕入更新リクエスト)に応答して、まず、"BuyUpdBuy"という名称のビジネスロジック(例えば、仕入更新処理)を実行する。
(2) 次に、"CnvBuyUpdBuy"という名称の変換ビジネスロジックを用いて、先行する"BuyUpdBuy"ビジネスロジックの出力データのフォーマットを変換して、"InvUpdInv"というサブジェクトIDをもったメッセージ(例えば、在庫更新リクエスト)を作成してメッセージサービスへ出力する。
(3) 出力された"InvUpdInv"というメッセージを処理することになる後続のビジネスロジック(例えば、在庫更新処理)は、同期的に実行される。
さらに、4番目の定義センテンス234は、次のスケジュール(1)〜(5)を例示している。
(1) "BuyInsBuy"というサブジェクトIDのメッセージ(例えば、仕入検品更新リクエスト)に応答して、まず、"BuyInsBuy"という名称のビジネスロジック(例えば、仕入検品更新処理)を実行する。
(2) 次に、"CnvBuyInsBuy1"という名称の変換ビジネスロジックを用いて、先行する"BuyInsBuy "ビジネスロジックの出力データのフォーマットを変換して、"InvUpdInv"というサブジェクトIDをもったメッセージ(例えば、在庫更新リクエスト)を作成してメッセージサービスへ出力する。
(3) 出力された"InvUpdInv"というメッセージを処理することになる後続のビジネスロジック(例えば、在庫更新処理)は、非同期的に実行される。
(4) また、"CnvBuyInsBuy2"という名称の変換ビジネスロジックを用いて、先行する"BuyInsBuy "ビジネスロジックの出力データのフォーマットを変換して、"AccDbtBuy"というサブジェクトIDをもったメッセージ(例えば、買掛金登録リクエスト)を作成してメッセージサービスへ出力する。
(5) 出力された"AccDbtBuy"というメッセージを受け取る後続のビジネスロジック(例えば、買掛金登録処理)は、非同期的に実行される。
再び図12を参照する。各フレームワークサービス16は、それに関連付けられたフロー定義ファイル23を参照することにより、処理対象のメッセージに対応するビジネスロジック22を選択し実行することができ、また、後続処理の必要性を判断し、必要であれば、後続処理のためのリクエストメッセージを作成してメッセージングサービス15へ戻すことができる。
ここで、一のフレームワークスレッドによる処理の後続処理として、他のフレームワークスレッドによる処理を非同期的に行わせる場合、フレームワークサービス16は、先行のフレームワークスレッドでのビジネスロジックによる処理のリザルト(後続処理のためのリクエストメッセージ)を一度メッセージングサービス15のキュー15aにインプットし、その後、他のフレームワークスレッドがメッセージングサービス15のキュー15aからそのリクエストメッセージをゲットすることによって、後続処理を行う。ここで、先行の処理を行うフレームワークシステム16と、後続の処理を行なうフレームワークシステム16は、同じ場合もあるし、異なる場合もある。各種の処理をどのフレームワークシステム16に割り当てるかということは、既に説明したメッセージングサービスのロードバランシング機能によって制御される。
各フレームワークサービス16は、メッセージドリブンの構成を採っている。即ち、メッセージングサービス15からのメッセージの引渡しをトリガーとしてビジネスロジックのロード及びビジネスロジックによる処理を実行するようになっている。
以上説明した本実施形態によると、フレームワークサービスのビジネスロジックの連係方法に同期方式と非同期方式を用意し、随時に簡単に書き換え可能なフロー定義ファイルの記述によってビジネスロジックの実行スケジュールを制御できるので、複雑なビジネスロジックフローを定義し、また必要に応じて変更することが容易である。
また、上記実施形態では、メッセージングサービスをメッシュ接続すると共に、キープアライブ機能によって、メッセージングサービス相互間、メッセージングサービスとクライアントとの間、及びメッセージングサービスとフレームワークサービスとの間で、相互にステータス(待ち受けるメッセージのサブジェクトID、処理中か否か、など)を通知し合う。そして、各メッセージングサービスは、周囲のクライアント、フレームワークサービス及び他のメッセージングサービスの現在のステータスを、管理テーブルに記憶している。それにより、いずれのRtFAサーバがダウンした場合でも、各メッセージングサービスは、正常に使えるメッセージの中継経路を自動的に選択し、メッセージを正しいシステムへ伝えることができる。結果として、フォルトトレラント性が向上し、システムの稼動の信頼性が向上し、システムの拡張が容易になり、更に、システムメンテナンスも容易に行うことができる。
また、メッセージングサービスは、P to P通信とPtoM通信のような複数種類のデータ配信方法を備え、管理テーブルに登録されているステータスに応じて、どのメッセージをどのコンピュータシステムにどのデータ配信方法で送るかというメッセージングスケジュールを自動的に選択することができる。その結果、柔軟なメッセージングサービスを提供することができる。
また、メッセージングサービスのロードバランシング機能により、複数のRtFAサーバの負荷バランスを自動的に調整することができ、高いパフォーマンスを提供することができる。
ここで、本発明の範囲は、本実施形態に限られない。例えば、JAVAベース以外のプラットフォームを用いることによっても同等のシステムの実現は可能である。また、メッセージングサービスの上述した特徴と、フレームワークサービスの上述した特徴とは、上述した実施形態のように組み合わされている必要は、必ずしも無い。
以下、上記実施形態に具備される幾つかの詳細な機能を説明する。
図14は、フロー定義ファイル23の更新システムを示すブロック図である。
フレームワークサービス16は、定義ファイル23を更新するためのプログラムモジュールである定義ファイル更新モジュール101を備え、この更新モジュール101は、外部からリロードコマンド111を受付けると、フレームワークサービス16のメインメモリ103内にロードされている現在使用中の定義ファイル23を、そこに矢印113で示すように外部記憶装置(例えば、ディスクストレージ107に記憶されている新しい定義ファイル109を上書きすることで、更新する。ディスクストレージ107内の新しい定義ファイル109は、テキストエディタ105などを用いて容易に編集することができる。所望の時に、上述したリロードコマンド111を入力することで、メインメモリ103内の定義ファイル23が、編集された新しい定義ファイル109と同じ内容に更新される。これにより、フレームワークサービス16の稼動中であっても所望の時に、定義ファイル23の内容を書き換えて、これをフレームワークサービス16の以後の動作に反映させることができる。従って、実行するビジネスロジック22の種類の変更や、後続の処理を行なうか否か、又は、複数のビジネスロジックの連係した動作を同期的に行うか、非同期的に行うか、といった処理スケジュール変更を、システムを稼動させたままの状態で行うことができる。
図15は、フレームワークサービスのメッセージ変換処理機能を示す。
フレームワークサービス16のためのコンピュータプログラムは例えばJAVA言語で構築される。図15に示すように、フレームワークサービス16は、入力メッセージのフォーマット変換を行うための入力変換機能102と、出力メッセージのフォーマット変換を行うための出力変換機能103とを備えている。入力変換機能102は、メッセージングサービス15からの例えばXMLファイルの形式の入力メッセージを、JAVAのオブジェクトの形式に変換する。出力変換機能103は、メッセージングサービス15に出力するJAVAのオブジェクトの形式のメッセージを、XML形式に変換する。入力変換機能102は、XMLのDTD(文書型定義)の記述に基づいてJAVAクラスのメンバ変数を取得し、これをインスタンス化することによってJAVAオブジェクト化したメッセージを得る。また、出力変換機能103は、JAVAクラスのメンバ変数に基づいてXMLのDTDを形成し、XML化したメッセージを得る。
図16は、メッセージングサービスのメッセージキューの構成を示す。
上述の説明では、メッセージキュー15aを単一のキューであるかのごとくに説明した。しかし、実際には、図16に示すように、メッセージキュー15aには3種類のキュー、すなわち、メモリキュー153とリングバッファ154とDB(データベース)キュー155が含まれている。メモリキュー153とリングバッファ154は、RAM151のような高速アクセスが可能な記憶装置に設けられる。DBキュー155は、ハードディスク(HDD)のよう不揮発性の大容量の記憶装置に設けられる。
メモリキュー153は、メッセージングサービスがクライアントから受信したP to Pのリクエストメッセージのように、そのメッセージを処理した結果を受け取る相手が存在し、メッセージの保証が不要であるというメッセージを、一時的に待たせるために使用される。一方、DBキュー155は、メッセージングサービスがフレームワークサービスから受信した非同期の後続処理のためのリクエストメッセージのように、メッセージの保証が必要なメッセージを、一時的に待たせるために使用される。メッセージの保証が必要か否かは、図2に示したメッセージ10の構成中の「保証モード」で判断される。
リングバッファ154は、P to M通信のメッセージを一時的に待たせるために使用される。各コンピュータシステムは、リンクバッファ154を巡回しながらリングバッファ154から自分の待ち受けるメッセージを見つけ出して取っていくことができる。図16では、リングバッファ154は一つのバッファのごとくに示されているが、実際には、"H"、"N"及び"L"の3種類の優先順位にそれぞれ対応した3つのリングバッファのセットである。
DBキュー155は、メッセージングサービスがフレームワークサービスから受信した後続処理のためのリクエストメッセージのように、メッセージの保証が必要なメッセージを、一時的に待たせるために使用される。
メッセージグサービスは、上述したキュー153、154、155に対するメッセージの書き込みと読み出しを制御するメッセージキュー管理機能104を有する。メッセージキュー管理機能104は、メモリキュー153をDBキュー155より優先して調べ、メモリキュー153にP to Pメッセージが有れば、そのメッセージをメモリキュー153から取り出して、それを待ち受ける一つのコンピュータシステムへそのメッセージを送る。また、もしメモリキュー153にP to Pメッセージが1つも無ければ、メッセージキュー管理機能104は、DBキュー155を調べ、DBキュー155内にP to Pメッセージが有れば、そのメッセージをDBキュー155から読み、それを待ち受ける一つのコンピュータシステムへそのメッセージを送る。
メッセージキュー管理機能104は、図16に示すように、DBキュー155内のメッセージMに対しては、そのメッセージの処理状態を示すステータス情報Sを付加し、そのメッセージが処理されればステータス情報Sを「未処理」から「処理済」へと書き換える。また、そのメッセージの処理に関してエラーが生じれば、ステータス情報Sを「エラー」とする。エラーの原因としては、データ不整合、プログラムロジックのミスなどがある。DBキュー155に一旦入れられたメッセージは、システムダウンやエラーなどの問題が発生したとしても、消されずにDBキュー155内に保存される。
メッセージキュー管理機能104は、「エラー」のステータス情報Sを「未処理」に書き換える機能を有する。そして、システムダウンやエラーなどの問題が発生した場合、後に、メッセージキュー管理機能104は、ステータス情報Sが「未処理」のメッセージを再度読み出して再送信する。それにより、メッセージの確実な処理が保証される。また、エラーになったメッセージのステータス情報Sを追うことにより、エラーの原因究明も可能である。
また、メッセージキューの管理機能104は、外部コマンドに応じて、「エラー」のステータス情報Sを「処理済」に書き換える機能も備えていている。例えば、システムの状況によっては、エラーステータスのメッセージを未処理ステータスに変更して再出力することが適切でない場合がある。また、メッセージに生じたエラーの程度によっては、フレームワークサービスに再出力して処理させるよりも、コマンド入力により当該メッセージに修正を加えた方が適切な場合もある。このような場合、「エラー」のステータス情報Sを「処理済」に書き換える機能が利用される。上述した「エラー」のステータス情報Sを「未処理」に書き換える機能と、「処理済」に書き換える機能とは、任意に選択することができる。
さらに、メッセージキュー管理機能104は、管理テーブル18(図4)に登録されている全てのコンピュータシステムの各々ごとに、リングバッファ155の読みしアドレスポインタを有し、各コンピュータシステム用の読み出しアドレスポインタでリングバッファ155中を巡回しながら、そのコンピュータシステムが待ち受けるP to Mメッセージをリングバッファ155から見つけ出し、その見つかったP to Mメッセージを読んで、そのコンピュータシステムへ送る。
図17及び図18は、メッセージキュー管理機能104がメッセージキューにメッセージを格納する動作フローを示す。
図17に示すように、メッセージキュー管理機能104は、クライアントからメッセージを受信すると(161)、まず、そのメッセージに関して、クライアントから非トランザクションモード(NON-TRANモード)とトランザクションモード(TRANモード)の何れが指定されているかを判断する(163)。ここで、NON-TRANモードが指定されている場合、メッセージキュー管理機能104は、メッセージを受信すれば直ちに、そのメッセージをメッセージキューに格納する(つまり、そのメッセージの処理を進める)。一方、TRANモードが指定されている場合、メッセージキュー管理機能104は、メッセージを受信しても、直ちにはそのメッセージをメッセージキューには格納せず、別の一時キューに溜めておき、クライアントからCOMMIT(実行)コマンドが送られると、そのときにはじめて、そのメッセージをメッセージキューに格納する(つまり、そのメッセージの処理を進める)。クライアントは、TRANモードを指定してリクエストメッセージを発した場合、COMMITコマンドを発しない限り、そのリクエストメッセージを後で撤回したり修正したりすることが可能である。
図17のステップ163の判断の結果がNON-TRANモードである場合、メッセージキュー管理機能104は、その受信したメッセージがP to P通信のものかP to M通信のものかを判断する(165)。その判断の結果がP to P通信である場合、メッセージキュー管理機能104は、その受信したメッセージをキューに入れる(167)。キューに入れられたメッセージは、すぐに読み出されてフレームワークサービスへ送られてそこで処理される。その処理の結果として、フレームワークサービスから後続処理のリクエストメッセージが返された場合、メッセージキュー管理機能104は、その後続処理のリクエストメッセージをDBキューに入れる(169)。そして、メッセージキュー管理機能104は、その受信メッセージの処理結果を示す成功メッセージをクライアントへ返す(171)。
ステップ165の判断の結果がP to M通信である場合、メッセージキュー管理機能104は、その受信したメッセージの優先順位(図2)が"H"、"N"又は"L"の何れであるか判別し(173)、そして、判別された優先順位に対応したリングバッファに、その受信メッセージを格納する(175、177又は179)。リングバッファに入れられたP to Mメッセージは、それを待ち受ける全てコンピュータシステムに送信されることになる。そして、メッセージキュー管理機能104は、その受信メッセージについて成功メッセージをクライアントへ返す(181)。
ステップ163の判断結果がNON-TRANモードであった場合、処理は図8に示すステップ181へ進む。ステップ181で、メッセージキュー管理機能104は、その受信メッセージを上述したメッセージキューとは別の一時キューに格納する.その後、クライアントから、その受信メッセージに関してCOMMITコマンドを受信すると、メッセージキュー管理機能104は、一時キューからそのメッセージを取り出して、そのメッセージについてステップ185以降の処理を行う。ステップ185以降の処理は、既に説明した図7中のステップ165以降の処理と同じである。
図19は、メッセージキュー管理機能104のメッセージ読出機能を示す。
図19に示すように、メッセージングサービス15のメッセージキュー管理機能104は、クライアント及びフレームワークサービス16からそれぞれ受信したメッセージを、上述したような構成をもつメッセージキュー15aに蓄積する。メッセージキュー管理機能104は、メッセージキュー15aのうち特に図16に示したメモリキュー153及びDBキュー155からメッセージを取り出す動作に関して、優先モード104aとシーケンス保証モード104bの2種類の機能を有している。優先モード104aは、メッセージの優先順位に基づいてメッセージキューからのメッセージの取り出し順序を制御する。一方、シーケンス保証モード104bは、メッセージキューから先に取り出されたメッセージの処理がフレームワークサービスにおいて完了するまで、当該メッセージキューに蓄積されている後続のメッセージの取り出しを禁止することにより、複数メッセージの一定の処理順序を保証する。各メッセージのサブジェクトID)に応じて、又は予め設定された各メッセージキューのモード設定に応じて、各メッセージキューについて優先モード104aを実行するか、シーケンス保証モード104bを実行するか、が選択される。シーケンス保証モード104bは、例えば、複数のクライアントからそれぞれ売上処理のリクエストメッセージが来たとき、先にリクエストされた売上処理が完了した後に後から来た売上処理のリクエストを実行するというような一定の処理順序を保証したい場合に、適用される。
図20は、優先モード104aのための記憶域の構成を示す。図21は、優先モード104aの動作の流れを示す。
図20に示すように、優先モード104aは、ソータブルスタック211とシンプルタック213という2つのスタックメモリと、"H"、"N"及び"L"という3つの優先順位にそれぞれ対応した例えば3つのエントリ215H、215N及び215Lとを使用する。なお、エントリの数をもっと多くすることもできる。例えば、図示の3つのエントリの他に、"H"に対応したエントリをもう一つ追加するというようにである。
初期的に、各エントリ215H、215N及び215Lには、それぞれ、インデックスとして、例えば図示のような"5"、"3"及び"1"という数値が設定される。インデックスの初期値が大きいほど、優先的レベルが高いことを意味する。
そして、初期的に、全てのエントリ215H、215N及び215Lが、図示のようにソータブルスタック211に積まれ、一方、シンプルスタック213は空である。
ソータブルスタック211は、そこに積まれている複数のインデックスの配列を、インデックスの大きい順に、最も大きいインデックスをもったエントリが一番上に、最も小さいインデックスをもったエントリが一番下になるように、自動的に並べ替える。従って、ソータブルスタック211からは、インデックスのより大きいエントリほど、より先に取り出される。
シンプルスタック213は、単純に、後から入れられたエントリを先に入れられたエントリの上に積む。従って、シンプルスタック213からは、入れられた時がより後のエントリほど、より先に取り出される。
優先モード104aは、図21に示すフローに従って、ソータブルスタック211とシンプルスタック213との間でのエントリの移動と、エントリのインデックスの操作を行なうことにより、メッセージキュー(メモリキュー153又はDBキュー155)からメッセージを取り出す順序を制御する。
以下、図21に示す流れを説明する。まず、優先モード104aは、ソータブルスタック211から、一番上の(つまり、インデックスが最も大きい)1つのエントリを取り出し(221)、そのエントリをシンプルスタック213に積む(223)。次に、優先モード104aは、シンプルスタック213の一番上のエントリの優先順位とマッチするメッセージがメッセージキューに有るか否かをチェックする(225)。その結果、マッチするメッセージが無ければ、処理はステップ221へ進む。また、上記チェックの結果、マッチするメッセージが有れば、優先モード104aは、そのマッチしたメッセージをメッセージキューから取り出す(227)。取り出されたメッセージは、何れかのフレームワークシステムにて処理されることになる。その後、優先モード104aは、シンプルスタック213内のエントリ数が1つか否かをチェックする(229)。その結果、シンプルスタック213内のエントリ数が2つ以上であれば、シンプルスタック213から全てのエントリを順に取り出してソータブルスタック211に積む(237)。そして、優先モード104aは、ステップ227でメッセージキューから取り出したメッセージについて、フレームワークシステムからの処理結果を示すリプライメッセージをクライアントへ返す(239)。
ステップ229でのチェックの結果、シンプルスタック213内のエントリ数が1つである場合、優先モード104aは、シンプルスタック213内のエントリのインデックスを1だけ減らす(231)。そして、優先モード104aは、その減らされたインデックスが"−1"であるかどうかチェックし(233)、"−1"でなければ、処理をステップ237へ進め、一方、"−1"であれば、そのインデックスを初期値に戻して(235)から、処理をステップ237へ進める。
以上の操作により、メッセージキュー内のメッセージの並び順序をそれらのメッセージの優先順位を考慮して修正した順序で、メッセージキューからメッセージの取り出されることになる。すなわち、メッセージキューに入っているメッセージの順序が、優先順位において、例えば図20に示すような"H"、"H"、"L"、"H"、"H"、"H"、"N"であった場合、そのメッセージキューから取り出されるメッセージの順序は、優先順位において、"H"、"H"、"N"、"H"、"H"、"H"、"L"となる。
図22は、シーケンス保証モード104bの動作の流れを示す。
図22に示すように、シーケンス保証モード104bは、メッセージの取り出し要求が生じると(241)、まず、メッセージキューをロックして(243、245、257)、メッセージキューからの他のメッセージ取り出しを禁止する。次に、シーケンス保証モード104bは、メッセージキューから1つのメッセージを読出す(247、249)。読み出されたメッセージは、何れかのフレームワークシステムで処理され(251)、その処理により然るべきデータベースの更新のコミット(又は処理失敗の場合にはロールバック)が行われる(253)。その後、シーケンス保証モード104bは、メッセージキューのロックを解除する(255)。
上記の操作により、先行するメッセージの処理が完了した後に、次のメッセージの処理が実行されるため、メッセージの一定の処理順序が保証される。
図23は、フレームワークサービス16のメッセージ判別機能を示す。
図23に示すように、フレームワークサービス16は、メッセージ判別ビジネスロジック106を有し、メッセージングサービス15からメッセージを受け取ると、メッセージ判別ビジネスロジック106を実行する。メッセージ判別ビジネスロジック106は、その受信メッセージのサブジェクトIDにマッチするサブジェクトIDが書かれた定義センテンスを、そのフレームワークシステム16に関連付けられたフロー定義ファイル23から探す。マッチした定義センテンスが見つかれば、次に、その定義センテンスに記述されている実行ビジネスロジック22が実行されることになる。しかし、マッチした定義センテンスが見つからなければ、メッセージ判別ビジネスロジック106は、処理できない旨のエラーのリプライメッセージをメッセージングサービス15へ返信し、そのリプライメッセージはクライアントへ送られる。既に説明したように、メッセージングサービス15は、管理テーブル18(図4)に基づいて、各メッセージをそのメッセージを待ち受けるコンピュータシステムにのみ送信するから、原則的には、或るメッセージが誤ったフレームワークシステムに送られることはない。しかし、万が一、クライアントからの或るメッセージが誤ったフレームワークサービスに送られることが発生したとしても、クライアントは直ちに処理できない旨のエラーのリプライメッセージを受け取れるので、長々と待たされること無く、速やかに次の行動に移ることができる。
また、フレームワークサービス16は、予め登録された識別情報を有するメッセージに限ってフレームワークサービスでの処理を許可するサービス停止中モードを備え、当該モードが設定されている場合に予め登録されていない識別情報を有するメッセージをクライアントから受信した場合は、当該メッセージを受け付けない旨のメッセージをクライアントに返信する。
図24は、フレームワークサービスがもつメッセージ変換ビジネスロジックを示す。
図24に示すように、フレームワークサービス16は、1又はそれ以上のメッセージ変換ビジネスロジック105を有している。それらのメッセージ変換ビジネスロジック105は、例えば、図13に示したフロー定義ファイル23の定義センテンス233及び234に記述された"CnvBuyUpdBuy"、"CnvBuyInsBuy1"及び"CnvBuyInsBuy2"などである。各メッセージ変換ビジネスロジック105は、予め定められた1つのビジネスロジックBL1に対応していうる。或る定義センテンスに従って或るビジネスロジックBL1が実行されると、引き続いて、これに対応したメッセージ変換ビジネスロジック105が実行される。メッセージ変換ビジネスロジック105は、先行のビジネスロジックBL1から出力される処理結果のメッセージの形式を、後続のビジネスロジックBL2への入力メッセージの形式に適合させるフォーマット変換機能と、先行のビジネスロジックBL1から出力されたメッセージのパラメータに応じて、このメッセージを後続ビジネスロジックBL2に入力するか否かを判定するメッセージフィルタリング機能とを備えている。例えば、先行のビジネスロジックBL1が扱うメッセージのパラメータ配置と、後続ビジネスロジックBL2が扱うメッセージのパラメータ配置が異なる場合、メッセージ変換ビジネスロジック105は、前者のパラメータ配置を後者のパラメータ配置に変換する。また、先行ビジネスロジックBL1の出力メッセージの内容が特別のもの(例えば、リクエストの拒否、データベースの更新失敗、トランザクションのロールバックなど)であり、そのため、後続のビジネスロジックBL2の実行が無意味であるという場合がある。そのような場合、メッセージ変換ビジネスロジック105は、メッセージフィルタリング機能により、後続ビジネスモデルBL2への入力メッセージの生成をオミットする。ここで、先行ビジネスロジックBL1とメッセージ変換ビジネスロジック105との間、又はメッセージ変換ビジネスロジック105と後続のビジネスロジックBL2との間には、メッセージを一時保持するメッセージキューを介在させてもよい。
以上の説明は、本発明の説明のための例示にすぎない。本発明は、上述した実施形態のみに限らず、他の多くのシステム構成のバリエーションにおいても実施することができる。