(57)【特許請求の範囲】
【請求項１】
処理ユニットとメモリを有し、オブジェクト指向メッセージフィルタリングユニットと、クライアントタスクと、サーバタスクとが存するオブジェクト指向メッセージフィルタリングシステムのメッセージフィルタリング方法であって、
ポートオブジェクトを生成する段階と、
上記クライアントタスクにより発行された送信メッセージ要求によって指定されたメッセージの宛先としての機能を行うターゲットメッセージオブジェクトを生成する段階と、
メッセージ前処理サービス又はメッセージ後処理サービスの群からの一つが、送信メッセージ要求により始められたメッセージトランザクションの間に必要とされるかどうかを選択的に示すフィルタオブジェクトを生成する段階とからなる方法。
【請求項２】
上記メッセージトランザクションの間にメッセージ前処理サービスが必要とされるかどうかを判定する段階と、
メッセージ前処理サービスが必要とされる場合に、上記メッセージを上記サーバタスクに伝達する段階とを更に有する請求項１記載の方法。
【請求項３】
上記メッセージトランザクションの間にメッセージ後処理が必要とされるかどうかを判定する段階と、
メッセージ後処理サービスが必要とされる場合に、上記メッセージを上記サーバタスクに伝達する段階とを更に有する請求項１記載の方法。
【請求項４】
上記ポートオブジェクトへの参照を上記ターゲットオブジェクトメッセージに格納する段階と、
上記ターゲットメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項１記載の方法。
【請求項５】
プリプロセッサメッセージオブジェクトを生成する段階と、
上記プリプロセッサメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項１記載の方法。
【請求項６】
ポストプロセッサメッセージオブジェクトを生成する段階と、
上記ポストプロセッサメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項１記載の方法。
【請求項７】
上記送信メッセージ要求により始められた上記メッセージトランザクションに対応する上記固有のメッセージ識別信号を発生する段階と、
発生された上記メッセージ識別信号に対応する送信メッセージ制御ブロックを生成する段階を更に有する請求項１記載の方法。
【請求項８】
プリプロセッサメッセージオブジェクトが上記フィルタオブジェクトに関係するかどうかを判定する段階と、
上記フィルタオブジェクトが関係のあるプリプロセッサメッセージオブジェクトを有する場合に、上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階とを更に有する請求項７記載の方法。
【請求項９】
上記サーバスタからの受信メッセージ要求が上記送信メッセージ制御ブロックと一致するかどうかを判定する段階と、
上記受信メッセージ要求が上記送信メッセージ制御ブロックと一致するならば、上記プリプロセッサメッセージオブジェクトに対応するメッセージ前処理サービスを始めるため上記サーバタスクに信号を発行する段階とを更に有する請求項８記載の方法。
【請求項１０】
次のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係するかどうかを判定する段階を更に有する請求項９記載の方法。
【請求項１１】
次のフィルタオブジェクトが次のターゲットメッセージオブジェクトと関係する場合に、
プリプロセッサメッセージオブジェクトが上記次のフィルタオブジェクトと関係するかどうかを判定し、
上記次のフィルタオブジェクトが関係のあるプリプロセッサメッセージオブジェクトを有する場合に、上記次のフィルタオブジェクトに関係した上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を実行する請求項１０記載の方法。
【請求項１２】
上記フィルタオブジェクトに関係したポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項９記載の方法。
【請求項１３】
上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項９記載の方法。
【請求項１４】
次のターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項１３記載の方法。
【請求項１５】
元のターゲットメッセージオブジェクトと関係した上記フィルタオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項１４記載の方法。
【請求項１６】
ポストプロセッサメッセージオブジェクトが上記フィルタオブジェクトと関係するかどうかを判定する段階と、
上記フィルタオブジェクトが関係のあるポストプロセッサメッセージオブジェクトを有する場合に、上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階とを更に有する請求項７記載の方法。
【請求項１７】
前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係するかどうかを判定する段階を更に有する請求項１６記載の方法。
【請求項１８】
前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係する場合に、
ポストプロセッサメッセージオブジェクトが上記前のフィルタオブジェクトと関係するかどうかを判定し、
上記前のフィルタオブジェクトが関係のあるポストプロセッサメッセージオブジェクトを有する場合に、上記前のフィルタオブジェクトと関係のある上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を実行する請求項１７記載の方法。
【請求項１９】
前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係しない場合に、上記クライアントタスクに最終応答を発行する段階を更に有する請求項１７記載の方法。
【請求項２０】
ポートオブジェクトを生成する手段と、
上記ポートオブジェクトと関係したターゲットメッセージオブジェクトを生成する手段と、
上記ターゲットメッセージオブジェクトと関係したフィルタオブジェクトを生成する手段とからなるオブジェクト指向メッセージフィルタリング装置であって、
上記フィルタオブジェクトは、メッセージ前処理サービス又はメッセージ後処理サービスの群からの一つが、送信メッセージ要求により始められたメッセージトランザクションの間に、必要とされるかどうかを、選択的に示すオブジェクト指向メッセージフィルタリング装置。
【請求項２１】
プリプロセッサメッセージオブジェクトを生成する手段を更に有する請求項２０記載のオブジェクト指向メッセージフィルタリング装置。
【請求項２２】
ポストプロセッサメッセージオブジェクトを生成する手段を更に有する請求項２０記載のオブジェクト指向メッセージフィルタリング装置。
【請求項２３】
クライアントタスクからの送信メッセージ要求により始められたメッセージトランザクションに対応する固有のメッセージ識別信号を発生する手段と、
発生された上記メッセージ識別信号に対応する送信メッセージ制御ブロックを生成する手段とを更に有する請求項２０記載のオブジェクト指向メッセージフィルタリング装置。
【請求項２４】
プリプロセッサメッセージオブジェクト、ポストプロセッサメッセージオブジェクト、又は、ターゲットメッセージオブジェクトよりなる群からの一つのオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する手段を更に有する請求項２０記載のオブジェクト指向メッセージフィルタリング装置。
【請求項２５】
サーバタスクにより発行された受信メッセージ要求が上記送信メッセージ制御ブロックに一致するかどうかを判定する手段を更に有する請求項２０記載のオブジェクト指向メッセージフィルタリング装置。
【請求項２６】
クライアントタスクからのメッセージを少なくとも一つのサーバタスクに供給するオブジェクト指向メッセージフィルタリングシステムであって、
入力及び出力を有し、ポートオブジェクトと、ターゲットメッセージオブジェクトと、フィルタオブジェクトと、プリプロセッサメッセージオブジェクトとを生成するオブジェクト管理ユニットと、上記ポートオブジェクトと、上記ターゲットメッセージオブジェクトと、上記フィルタオブジェクトと、上記プリプロセッサメッセージオブジェクトとを格納するオブジェクトデータベースと、送信メッセージ要求に応答して送信メッセージ制御ブロックを生成し、上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納し、上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納するメッセージトランザクションユニットとを含むデータ及び命令を格納するメモリと、
上記メモリの上記出力に接続された入力と、上記メモリの上記入力に接続された出力とを有し、上記メモリの管理下でデータ及び命令を処理する処理ユニットとからなるシステム。
【請求項２７】
クライアントタスクからのメッセージを少なくとも一つのサーバタスクに供給するオブジェクト指向メッセージフィルタリングシステムであって、
入力及び出力を有し、ポートオブジェクトと、ターゲットメッセージオブジェクトと、フィルタオブジェクトと、ポストプロセッサメッセージオブジェクトとを生成するオブジェクト管理ユニットと、上記ポートオブジェクトと、上記ターゲットメッセージオブジェクトと、上記フィルタオブジェクトと、上記ポストプロセッサメッセージオブジェクトとを格納するオブジェクトデータベースと、送信メッセージ要求に応答して送信メッセージ制御ブロックを生成し、上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納し、上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納するメッセージトランザクションユニットとを含むデータ及び命令を格納するメモリと、
上記メモリの上記出力に接続された入力と、上記メモリの上記入力に接続された出力とを有し、上記メモリの管理下でデータ及び命令を処理する処理ユニットとからなるシステム。
【発明の詳細な説明】
関連出願への参照
本発明は、1994年3月30日に出願された「オブジェクト指向メッセージ受け渡しシステム及び方法」と題される米国特許出願番号08/220,043号に関連し、これを参照することによってその内容をここに含むものとする。
発明の背景
１．発明の分野
本発明は、一般にコンピュータ内通信のシステム及び方法に関し、詳しくはメッセージに基づくクライアント・サーバ通信のシステム及び方法に関する。更に詳しくは、本発明は、オブジェクト指向メッセージフィルタリングのシステム及び方法である。
２．背景技術の説明
コンピュータ内通信に於て、クライアントタスクは、サーバタスクが提供するサービスを必要とする。例えばクライアントタスクは、ウィンドウの生成或いはファイル削除等のサービスを必要とする。クライアントタスクが必要とする特定のサービスは、ウィンドウマネージャー或いはファイルシステム等の適当なサーバタスクによって実行される。クライアント及びサーバの間の通信の単位はメッセージである。従って、サーバに特定のサービスが要求されていることを知らせるために、クライアントタスクは適切なメッセージを送信或いは発行する。発行されたメッセージを受け取ると、サーバータスクは要求された動作を実行する。米国特許出願番号08/220,043号に記載されているように、メッセージ受け渡しシステム及び方法は、クライアントタスクが発行したメッセージをサーバタスクに渡す方法について規定する。
従来技術に於て、クライアントタスクは、サービスを必要とする度にメッセージを送らなければならない。ある特定のサービスを実行するためには、しばしば、関連した別の付加的サービスを実行する必要がある。例えば、ディスクファイルにデータを書き込むサービスを実行するためには、第１の関連サービスとしてデータを暗号化し、第２の関連サービスとしてデータを圧縮する必要があるかも知れない。従って、この例において必要な暗号化、圧縮、及びデータのデータファイルへの書き込みを実行するためには、合計３つのメッセージを送信する必要がある。各メッセージを送信する毎に、そのメッセージを適当な処理用のサーバタスクに渡す必要があり、そのためのメモリの間接的なコスト（オーバーヘッド）が増加する。更に、各メッセージは適切な順番で送信されサービスを受ける必要があり、またクライアントタスクは、関連するサービスが必要なときには、メッセージの送信先である全てのサーバタスクを監視し続ける必要がある。上述の問題は、クライアントタスク及びサーバタスクをより複雑にするものである。
必要とされるのは、メモリオーバーヘッドを最小化するメッセージ転送手段であり、またメッセージに応じて複数のサーバタスクが動作実行するときに、クライアントタスク及びサーバタスクを不要な複雑さから解放するメッセージ転送手段である。
発明の概要
本発明は、オブジェクト指向メッセージフィルタリングのシステム及び方法である。本発明に於て、クライアントタスクが送信したメッセージは、前処理、処理、及び後処理のためのサーバタスクに、選択的かつ自動的に転送される。本発明のシステムは、処理ユニットと、オブジェクト指向メッセージフィルタリングユニットが存在するメモリとを含む。オブジェクト指向メッセージフィルタリングユニットは、ポートオブジェクト及びターゲットメッセージオブジェクトを生成して管理する。各ターゲットメッセージオブジェクトに対して、オブジェクト指向メッセージフィルタリングユニットは、関連フィルタオブジェクトを選択的に生成して管理する。あるターゲットメッセージオブジェクトに関連するフィルタオブジェクトの集合は、フィルタオブジェクト系列（チェーン）と呼ばれる。各フィルタオブジェクトに対して、オブジェクト指向メッセージフィルタリングユニットは、関連プリプロセッサメッセージオブジェクト、関連ポストプロセッサメッセージオブジェクト、或いは関連プリプロセッサメッセージオブジェクト及び関連ポストプロセッサメッセージオブジェクトの両者を、選択的に生成して管理する。各ターゲットメッセージオブジェクト、プリプロセッサメッセージオブジェクト、及びポストプロセッサメッセージオブジェクトは、ポートオブジェクトに関連づけられる。
クライアントタスクは、メッセージ送信要求を発行することによって、ターゲットメッセージオブジェクトに向けられたメッセージを送信する。送信メッセージ要求に記されたメッセージが、要求されるサービスを示す。送信メッセージ要求に応答して、オブジェクト指向メッセージフィルタリングユニットは、ユニークなメッセージＩＤ及びそのメッセージへの参照を含む送信メッセージ制御ブロック（ＭＣＢ）を生成する。オブジェクト指向メッセージフィルタリングユニットは、メッセージオブジェクトに関連づけられるポートオブジェクトに送信ＭＣＢへの参照を格納することによって、そのメッセージオブジェクトにメッセージを渡す。送信ＭＣＢをターゲットメッセージオブジェクトに渡す前に、オブジェクト指向メッセージフィルタリングユニットは、ターゲットメッセージオブジェクトのフィルタオブジェクトチェーンを介して、ターゲットメッセージオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトに、送信ＭＣＢを自動的かつ選択的に発送する。ターゲットメッセージオブジェクトにメッセージを渡した後、オブジェクト指向メッセージフィルタリングユニットは、フィルタオブジェクトチェーンを介して、ターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信ＭＣＢを自動的かつ選択的に発送する。
サーバタスクは、ポートオブジェクトへの参照を含む受信メッセージ要求を発行することによって、そのポートオブジェクトからメッセージを受け取る。メッセージ受信後、サーバタスクは、そのメッセージが渡された特定のメッセージオブジェクトに対応したサービスを実行する。オブジェクト指向メッセージフィルタリングユニットは、各送信ＭＣＢと受信メッセージリクエストとを対応付ける。各プリプロセッサメッセージオブジェクト、ターゲットメッセージオブジェクト、及びポストプロセッサメッセージオブジェクトは、ポートオブジェクトに関連づけられているので、送信ＭＣＢを前処理メッセージオブジェクトに選択的に配送することによって、ターゲットメッセージオブジェクトに関連づけられるサービスを実行する前に必要であるような、メッセージ前処理サービスを促進することが出来る。同様に、送信ＭＣＢをポストプロセッサメッセージオブジェクトに選択的に配送することによって、ターゲットメッセージオブジェクトに関連づけられるサービスを実行した後に必要であるような、メッセージ後処理サービスを促進することが出来る。
あるサービスを実行した後、サーバタスクは、継続メッセージ要求、転送メッセージ要求、或いは返答を発行することが出来る。本発明に於て、ターゲットメッセージオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトにフィルタオブジェクトチェーンを介して送信ＭＣＢを転送或いは発送することを、前処理中にメッセージを”継続する”と呼ぶ。同様に、ターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトにフィルタオブジェクトチェーンを介して送信ＭＣＢを転送或いは発送することを、後処理中にメッセージを継続すると呼ぶ。オブジェクト指向メッセージフィルタリングユニットは、継続メッセージ要求に応答して、前処理或いは後処理に応じた継続メッセージ操作を実行することによって、メッセージを継続する。オブジェクト指向メッセージフィルタリングユニットはまた、転送メッセージ要求に応答して、メッセージ転送操作を実行することによって、送信ＭＣＢを新たなターゲットメッセージオブジェクトに”転送”する。
プリプロセッサメッセージオブジェクトに関連づけられたサービスをサーバタスクが実行した後に発行した返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、”飛ばして先に進む”操作によって、プリプロセッサメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信ＭＣＢを発送する。ターゲットメッセージオブジェクトに関連づけられたサービスをサーバタスクが実行した後に発行した返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、フィルタオブジェクトチェーンを介してターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信ＭＣＢを選択的に発送する。全ての後処理の後に発行された返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、元々メッセージを送信したクライアントタスクに、返答状態及びデータがあればデータを発送する。
本発明の方法は、ポートオブジェクトを生成し、ポートオブジェクトに関連づけられたターゲットメッセージオブジェクトを生成し、ターゲットメッセージオブジェクトに関連づけられたフィルタオブジェクトを生成し、フィルタオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトを生成し、送信メッセージ要求によって開始されたメッセージ交信に反応してユニークなメッセージＩＤを生成し、送信メッセージ制御ブロックを生成し、送信メッセージ制御ブロックをターゲットメッセージオブジェクトに配送する前にプリプロセッサメッセージオブジェクトに選択的に発送する、各段階を含む。
【図面の簡単な説明】
図１は、本発明によるオブジェクト指向メッセージフィルタリングシステムの実施例を示すブロック図である。
図２は、本発明のオブジェクト指向メッセージフィルタリングユニットのブロック図である。
図３は、本発明によるオブジェクト指向メッセージフィルタリングモデルの好ましい構成のブロック図である。
図４は、本発明に於けるメッセージオブジェクトのブロック図である。
図５は、本発明に於けるポートオブジェクトのブロック図である。
図６は、本発明に於けるフィルタオブジェクトのブロック図である。
図７Ａは、本発明に於ける同期送信メッセージ制御ブロックのブロック図である。
図７Ｂは、本発明に於ける非同期送信メッセージ制御ブロックのブロック図である。
図８Ａは、本発明に於ける同期受信メッセージ制御ブロックのブロック図である。
図８Ｂは、本発明に於ける非同期受信メッセージ制御ブロックのブロック図である。
図９は、本発明に於ける配送メッセージ制御ブロックのブロック図である。
図１０Ａ、１０Ｂ、及び１０Ｃは、本発明によるオブジェクト指向メッセージフィルタリングの方法の好ましい一例のフローチャートである。
図１１Ａ、１１Ｂ、１１Ｃ、及び１１Ｄは、新規フィルタオブジェクトをフィルタオブジェクトチェーンに挿入する方法の好ましい一例のフローチャートである。
図１２は、送信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図１３は、メッセージオブジェクトロッキング操作に同期させる方法の好ましい一例のフローチャートである。
図１４は、プリプロセッサメッセージオブジェクトを検査する方法の好ましい一例のフローチャートである。
図１５Ａ、１５Ｂ、及び１５は、低レベル送信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図１６Ａ、１６Ｂ、及び１６Ｃは、継続メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図１７Ａ、１７Ｂ、及び１７Ｃは、転送メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図１８Ａ、１８Ｂ、及び１８Ｃは、受信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図１９Ａ及び１９Ｂは、返答方法の好ましい一例のフローチャートである。
図２０は、ロッキング操作を実行する方法の好ましい一例のフローチャートである。
図２１は、ロッキング解除操作を実行する方法の好ましい一例のフローチャートである。
実施例の詳細な説明
図１は、本発明により構築されたオブジェクト指向メッセージフィルタリングシステム１０の実施例のブロック図を示す。システム１０は、処理ユニット１２、入力装置１４、出力装置１６、及び所定量のメモリ１８を含み、オペレーティングシステム３０、クライアントタスク３２、サーバタスク３４がメモリ１８内に存在する。オペレーティングシステム３０は、米国特許出願番号08/220,043号に説明されるようなマイクロカーネルオペレーティングシステム３０であることが好ましい。オブジェクト指向メッセージフィルタリングユニット４０が、オペレーティングシステム３０内に存在する。システム１０の各要素は、共通システムバス２９に接続された入力及び出力を有する。模範的な例に於て、本発明のシステム１０は、カリフォルニアのCupertino所在のアップルコンピュータによって製造され、オブジェクト指向メッセージフィルタリングユニット４０を含むマイクロカーネルオペレーティングシステム３０が格納された８メガバイトのランダムアクセスメモリ（ＲＡＭ）とモトローラのＭＣ68030或いは後世代のマイクロプロセッサを有するアップルマッキントッシュコンピュータシステムである。
本発明に於て、クライアントタスク３２は好ましくは、例えば外部記憶装置１８からメモリ２０にデータを転送するといったサービスを必要とするプログラム命令セットである。サービスの提供元は、ここではサーバタスク３４として示される。各サーバタスク３４もまた、プログラム命令セットであることが好ましい。
オブジェクト指向メッセージフィルタリングユニット４０によって、クライアントタスク３２から処理のためにサーバタスク３４にメッセージを転送することが容易になる。図２は、オブジェクト指向メッセージフィルタリングユニット４０の好ましい実施例のブロック図が示される。オブジェクト指向メッセージフィルタリング４０は、オブジェクト管理ユニット４２、メッセージ交信ユニット４４、ロッキングユニット４６、及びオブジェクトデータベース４８を含み、フィルタオブジェクトメモリ４９がオブジェクトデータベース４８に格納される。オブジェクト指向メッセージフィルタリングユニット４０の各要素は、共通システムバス２９に接続された入力及び出力を有する。
オブジェクト管理ユニット４２は、メモリ２０内にオブジェクト或いはデータ構造の集合を生成して管理し、これはオブジェクト指向メッセージフィルタリングモデル５０を形成する。図３は、オブジェクト指向メッセージフィルタリングモデル５０の好ましい一例のブロック図を示す。オブジェクト指向メッセージフィルタリングモデル５０の好ましい一例は、一つ或いは複数のターゲットメッセージオブジェクト５１を含む。ターゲットメッセージオブジェクト５１の各々が、サーバタスク３４が提供する特定のサービスに対応することが好ましい。あるターゲットメッセージオブジェクト５１に関連する動作を起こさせるために、クライアントタスク３２は、送信メッセージ要求を発行することによってターゲットメッセージオブジェクト５１にメッセージを送る。この送信メッセージ要求はターゲットメッセージオブジェクト５１と、メッセージと、メッセージタイプを指定する。送信メッセージ要求は、以下により詳細に説明される。あるターゲットメッセージオブジェクト５１に関連付けられたクライアントタスク３２の集合を、クライアントチーム３３と呼ぶ。
一つ或いは複数のフィルタオブジェクト５６が、特定のターゲットメッセージオブジェクト５１に関連づけられる。ターゲットメッセージオブジェクト５１が関連づけられたフィルタオブジェクト５６を有する場合、ターゲットメッセージオブジェクト５１はフィルタされていると言う。ターゲットメッセージオブジェクト５１に関連づけられたフィルタオブジェクト５６の集合を、フィルタオブジェクトチェーン５７と呼ぶ。各フィルタオブジェクト５６は選択的メッセージ捕獲手段であり、この選択性はメッセージタイプの集合によって実現されることが好ましい。各フィルタオブジェクト５６には、プリプロセッサメッセージオブジェクト５２、ポストプロセッサメッセージオブジェクト５３、或いはプリプロセッサメッセージオブジェクト５２及びポストプロセッサメッセージオブジェクト５３の何れかが関連づけられる。プリプロセッサメッセージオブジェクト５２は、ターゲットメッセージオブジェクト５１に関連づけられたサービスをサーバタスクが実行する前に実行されるべき、特定のサービスである。同様に、ポストプロセッサメッセージオブジェクト５３は、ターゲットメッセージオブジェクト５１に関連づけられたサービスをサーバタスクが実行した後に実行されるべき、特定のサービスである。好ましい実施例に於ては、プリプロセッサメッセージオブジェクト５２とポストプロセッサメッセージオブジェクト５３とは、それ自身がフィルタされていてよい。
メッセージフィルタリングモデル５０の好ましい例に於て、各ターゲットメッセージオブジェクト５１、各プリプロセッサメッセージオブジェクト５２、及び各ポストプロセッサメッセージオブジェクト５３は、ある一つのポートオブジェクト５４に関連づけられる。図３に示されるように、プリプロセッサメッセージオブジェクト５２とポストプロセッサメッセージオブジェクト５３とは、同一のポートオブジェクト５４に関連づけられる必要はない。即ち、各プリプロセッサメッセージオブジェクト５２と、各ポストプロセッサメッセージオブジェクト５３とは、特定のポートオブジェクト５４に独立に関連づけられる。各ポートオブジェクト５４は、それに関連づけられた各ターゲット、プリプロセッサ、及びポストプロセッサメッセージオブジェクト５１、５２、及び５３に向けられたメッセージに対する受信器として働く。以下により詳細に説明されるように、サーバタスク３４は、受信メッセージ要求を発行することによって、ポートオブジェクト５４からメッセージを受信する。メッセージを受信した後、メッセージが向けられたターゲット、プリプロセッサ、或いはポストプロセッサメッセージオブジェクト５１、５２、或いは５３が示すサービスを、メッセージ自身に含まれる詳細に従って、サーバタスク３４が実行する。
オブジェクト指向メッセージフィルタリングモデル５０に於て、クライアントタスク３２は、特定のターゲットメッセージオブジェクト５１に対する送信メッセージ要求を発行する。そのターゲットメッセージオブジェクト５１にフィルタオブジェクト５６が関連づけられていない場合、米国特許出願番号08/220,043号に記載されているように、メッセージはクライアントタスク３２からサーバタスク３４に転送される。そのターゲットメッセージオブジェクト５１が関連するフィルタオブジェクト５６を有する場合、本発明に於ては、そのターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７に含まれる第１のフィルタオブジェクト５６が関連するプリプロセッサメッセージオブジェクト５２を有するか否か、及び送信メッセージ要求に指定されるメッセージタイプがその第１のフィルタオブジェクト５６に関連づけられたメッセージタイプの集合に一致するかどうかを判定する。プリプロセッサメッセージオブジェクト５２が第１のフィルタオブジェクト５６に関連づけられていてかつメッセージタイプが一致する場合、本発明に於ては、メッセージを処理のためにプリプロセッサメッセージオブジェクト５２に発送する。第１のフィルタオブジェクト５６が関連するプリプロセッサメッセージオブジェクト５３を有さない場合、或いはメッセージタイプが一致しない場合には、本発明に於ては、上述の方法でフィルタオブジェクトチェーン５７の各フィルタオブジェクト５６を順番に選択して検査する。
メッセージがプリプロセッサメッセージオブジェクト５２に再供給（ｒｅｒｏｕｔｅ）された際、サーバタスク３４はプリプロセッサメッセージオブジェクト５２に関連するサービスを実行する。プリプロセッサメッセージオブジェクト５２に関連するサービスを実行した後、本発明は：１）サーバタスク３４がメッセージ継続要求を発し他のフィルタオブジェクト５６がフィルタオブジェクトチェーン５７に存在するする場合に上述の方法で引き続きターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７における次のフィルタオブジェクト５６を選択し検査するか；或いは２）サーバタスク３４がメッセージ継続要求を発し他のフィルタオブジェクト５６がフィルタオブジェクトチェーン５７に存在しない場合に処理を行なうためにそのメッセージをターゲットメッセージオブジェクト５１に供給（ｒｏｕｔｅ）し；或いは３）サーバタスク３４が新たなターゲットメッセージ５１を明示した場合にメッセージフォワード要求を発し処理するためにそのメッセージを新たなターゲットメッセージオブジェクト５１にリルートするか；或いは４）サーバタスク３４が回答を発する場合ポストプロセッシングするためにそのメッセージを対応するポストプロセッサメッセージオブジェクト５３にリルートする。
そのメッセージがターゲットメッセージオブジェクト５１で受け取られた際、サーバタスク３４はターゲットメッセージオブジェクト５１に関連するサービスを実行する。サーバタスクのターゲットメッセージオブジェクト５１に関連するサービスの実行に引き続き、本発明は、フィルタオブジェクトチェーン５７の最後のフィルタオブジェクト５６が関連するポストプロセッサメッセージオブジェクト５３を有するかどうか及び送信（ｓｅｎｄ）メッセージ要求に明示されたメッセージタイプが最後のフィルタオブジェクト５６に関連するメッセージタイプの中に含まれるかどうかを決定する。ポストプロセッサメッセージオブジェクト５３が最後のフィルタオブジェクト５６に関連しメッセージタイプが一致（ｍａｔｃｈ）する場合、本発明はポストプロセッシングするためにそのメッセージをポストプロセッサメッセージオブジェクト５３にリルートする。ポストプロセッサメッセージオブジェクト５３が存在しないか、或いはメッセージタイプがマッチしない場合、本発明は上述の方法でフィルタオブジェクトチェーン５７における前のフィルタオブジェクトを引き続き選択し検査する。
そのメッセージがポストプロセッサメッセージオブジェクト５３にリルートされた際にサーバタスク３４はプリプロセッサメッセージオブジェクト５２に対するものと類似する方法でポストプロセッサメッセージ５３に関連するサービスを実行する。ポストプロセッサメッセージオブジェクト５３に関連するサービスを実行した後、本発明はポストプロセッサオブジェクトメッセージ５３の存在によってそしてマッチするメッセージタイプによって上述の方法で引き続きフィルタオブジェクトチェーン５７における各残った前のフィルタオブジェクト５６を選択し検査する。
当業者は、プリプロセッサメッセージオブジェクト５２が検査を受けている際にフィルタオブジェクトチェーン５７が最後のフィルタオブジェクト５６に向かう「前」方向にトラバース（ｔｒａｖｅｒｓｅ）されること及びポストプロセッサメッセージオブジェクト５３が検査されている際にフィルタオブジェクトチェーン５７が最初のフィルタオブジェクト５６に向かう「後」方向にトラバースされることを認識している。
メッセージがサービスタスクのフォワードメッセージ要求の発行の結果新たなターゲットオブジェクト５１にリルートされた際、本発明は望ましくはその新たなターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７の各フィルタオブジェクト５６を、最初はプリプロセッシングを考慮して、そして次にポストプロセッシングを考慮して、元のターゲットメッセージオブジェクト５１に関して上述した方法で検査することが望ましい。ポストプロセッシングを考慮して新たなターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７の各フィルタオブジェクト５６を検査した後、本発明はポストプロセッシングを考慮して元のターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７の各フィルタオブジェクト５６を検査する。
元のターゲットメッセージオブジェクトのフィルタオブジェクトチェーン５７の全てのフィルタオブジェクトがポストプロセッシングを考慮して検査された後、本発明は最初にそのメッセージを送ったクライアントタスク３２に回答を発する。ここに、全てのフィルタオブジェクト５６がポストプロセッシングを考慮して検査された後に発せられたこの回答は最後の回答と称される。この最後の回答はクライアントタスク３２に状態情報及びおそらくデータを供給する。オブジェクト指向メッセージフィルタリングモデル５０を述べる他のデータはアペンディックスＡにて提供される。クライアントタスク３２が与えられたメッセージを送ることは、そのメッセージの一以上のプリプロセッサメッセージオブジェクト５２、ターゲットメッセージオブジェクト５１及びポストプロセッサメッセージオブジェクト５３への転送によって引き継がれ、最後の回答のそのメッセージに対する発行によって引き継がれ、ここにメッセージトランザクションと称される。メッセージトランザクションの間に実行される動作を下により詳細に述べる。
望ましい実施例ではターゲットメッセージオブジェクト５１、プリプロセッサメッセージオブジェクト５２及びホストプロセッサメッセージオブジェクト５３は、ここにメッセージオブジェクト５８と称される同一の構造を用いて実現される。当業者は、代わりの実施例として、ターゲットメッセージオブジェクト５１、プリプロセッサメッセージオブジェクト５２及びポストプロセッサメッセージオブジェクト５３が各々自己の別個の構造を有し得たことを認識している。図４を参照するに、メッセージオブジェクト５８の望ましい実施例のブロック図が示されている。各々メッセージオブジェクト５８はオブジェクトデータベース４８に記憶されることが望ましい。オブジェクト管理ユニット５２はサーバタスクのメッセージオブジェクト作成要求の発行に応じてメッセージオブジェクト５８を作成しユニークメッセージオブジェクトアイデンティフィケーション（ＩＤ）を発生する。メッセージオブジェクト作成要求は、メッセージオブジェクト５８の最初の状態を明示した参照定数；メッセージオブジェクト５８が関連するはずの与えられたポートオブジェクトの参照；及びメッセージオブジェクト５８が関連するはずの一組のクライアントタスク３２を明示したクライアントチームＩＤを含むことが望ましい。更に、メッセージオブジェクト５８がフィルタリングされるはずである場合、メッセージオブジェクト作成要求はフィルタオブジェクトチェーン５７の最初のフィルタオブジェクト５６の参照を明示することが望ましい。メッセージオブジェクト５８がプリプロセッサメッセージオブジェクト５２として又はポストプロセッサメッセージオブジェクト５３として使用されるはずである場合、メッセージオブジェクト作成要求は又、そのプリプロセッサ又はポストプロセッサメッセージオブジェクト５２、５３が関連するフィルタオブジェクト５６を識別するユニークフィルタオブジェクトＩＤを明示する。
各メッセージオブジェクト５８内で、第１のデータフィールドにはメッセージオブジェクト５８を唯一識別するオブジェクト管理ユニットによって発生されたメッセージオブジェクトＩＤが記憶され；第２のデータフィールドにはサーバタスク３４によって供給された参照定数が記憶され、尚参照定数はメッセージオブジェクト５８の最初の状態に対応し；第３のデータフィールドはメッセージオブジェクト作成要求に示された与えられたポートオブジェクト５４に参照を付け；第４のデータフィールドはメッセージオブジェクト作成要求に含まれたクライアントチームＩＤ３３を明示し；第５のデータフィールドは与えられたポートオブジェクト５４に関連する次のメッセージオブジェクト５８に参照を付ける。オブジェクト管理ユニット４２は次のメッセージオブジェクト５８が作成されるまで値を第５のデータフィールドに与えない。メッセージオブジェクト作成要求がメッセージオブジェクト５８に関連するフィルタオブジェクトチェーン５７の第１のフィルタオブジェクト５６の参照を明示する場合、第６のデータフィールドにはこの明示されたフィルタオブジェクト５６の参照が記憶される。メッセージオブジェクト作成要求がフィルタオブジェクトＩＤを明示した場合、第７のデータフィールドにはその明示された、メッセージオブジェクト５８が関連するフィルタオブジェクト５６に対応するフィルタオブジェクトＩＤが記憶される。望ましい実施例では、メッセージオブジェクト５８における第６及び第７のデータフィールドが最初にゼロの値に設定される。メッセージオブジェクト５８における第６のデータフィールドはフィルタオブジェクトインスタレーション（ｉｎｓｔａｌｌａｔｉｏｎ）及びリムーバル（ｒｅｍｏｖａｌ）の際に初期化され更新される。フィルタオブジェクトインスタレーション及びリムーバルについては下に詳述する。メッセージオブジェクト５８がターゲットメッセージオブジェクト５１である場合、第６のデータフィールドには関連するフィルタチェーン５７へのポインタが記憶される。そのターゲットメッセージオブジェクト５１が最初に作成される際、フィルタオブジェクト５６が未だターゲットメッセージオブジェクト５１上にインストールされていないため第６のデータフィールドにはゼロの値が与えられる。
メッセージオブジェクト５８の第７のデータフィールドに記憶されたフィルタオブジェクトＩＤはプリプロセッサ及びポストプロセッサメッセージオブジェクト５２、５３によってのみ使用される。第７のデータフィールドはフィルタオブジェクトインスタレーションの間にメッセージオブジェクト５８がプリプロセッサメッセージオブジェクト５２として或いはポストプロセッサメッセージオブジェクト５３として指定される際に初期化される。
図５を参照するに、ポートオブジェクト５４の望ましい実施例のブロック図が示されている。サーバタスク３４からのポートオブジェクト作成要求に応じてオブジェクト管理ユニット４２はポートオブジェクト５４を作成しユニークポートオブジェクトＩＤを発生する。ポートオブジェクト５４において、第１のデータフィールドは次のポートオブジェクト及び前のポートオブジェクトを明示する。オブジェクト管理ユニット４２はそれによってそれら各々の第１のデータフィールドを介してポートオブジェクトを共にリンクする。ポートオブジェクト５４の第２のデータフィールドはポートオブジェクト５４に関連するメッセージオブジェクト５２のリストを与える。オブジェクト管理ユニット４２が新たなメッセージオブジェクト５８を作成する際、オブジェクト管理ユニット４２は新たに作成されたメッセージオブジェクトが関連するポートオブジェクト５４の第２のデータフィールドのリストに対応する新たなメッセージオブジェクトＩＤを加える。ポートオブジェクト５４の第３のデータフィールドはロック要求に応じて「ロックされた」各関連するメッセージオブジェクト５８のリストを与える。与えられたメッセージオブジェクト５８がロックされるとロックを解く動作が実行されるまでは与えられたメッセージオブジェクト５８へ宛てられたどんなメッセージもサーバタスク３４によって受け取られるようにならない。メッセージオブジェクトのロックを行う及びロックを解く動作はロッキングユニット４６によって実行されるものであって、下に詳述する。
ポートオブジェクト５４において、第４のデータフィールドにはポートオブジェクト５４に関連するメッセージオブジェクト５８に宛てられたものであるがサーバタスク３４によって未だ受け取られていないメッセージを明示するペンディングセンドメッセージリストを記憶させるのに使用される。ポートオブジェクト５４の第５のデータフィールドはサーバタスク３４によってポートオブジェクト５４に発せられてはいるが未だポートオブジェクト５４に関連するメッセージオブジェクト５８に宛てられた対応するメッセージにマッチされてはいないレシーブメッセージ要求を明示するペンディングレシーブメッセージリストを記憶させるのに使用される。ポートオブジェクト５４の第６のデータフィールドはサーバタスク３４は受け取っているがそれに対する最後の回答が未だ発せられていない各メッセージを明示するペンディング回答メッセージリストを記憶させるのに使用される。オブジェクト管理ユニット４２がポートオブジェクト５４を作成する際、第４、第５、及び第６のデータフィールドは空である。下に述べるごとく、第４、第５、及び第６のデータフィールドに記憶されたリストはメッセージトランザクションユニット４４によって維持される。
ポートオブジェクト５４の第７のデータフィールドはアクセプタンス関数及びアクセプタンス関数に関連する一組のメッセージタイプをオプション的に明示する。アクセプタンス関数については米国特許出願第０８／２２０，０４３号に詳述されている。第７のデータフィールドはオブジェクト管理ユニット４２が最初にポートオブジェクトを作成する際に空であることが望ましい。オブジェクト管理ユニット４２は個々のアクセプタンス関数及び一組のメッセージタイプを識別するサーバタスク登録要求に応じてアクセプタンス関数及び一組のメッセージタイプの参照を記憶又は登録する。
望ましい実施例において、クライアントタスク３２は同期的に又は非同期的にメッセージを送り得る。同様な方法にてサーバタスクはレシーブメッセージ要求を同期的又は非同期的に発することが出来る。同期的及び非同期的動作については下により詳細に述べる。ポートオブジェクト５４の第８のデータフィールドは非同期的に送られたメッセージのために使用することの出来る記憶容量を明示し、ポートオブジェクト５４の第９のデータフィールドは非同期的メッセージレシーブ要求のために使用することの出来る記憶容量を明示する。
ポートオブジェクト５４の第１０のデータフィールドはオブジェクト管理ユニット４２によって発生されたユニークポートオブジェクトＩＤを記憶させるために使用される。最後にポートオブジェクト５４の第１１のデータフィールドはポートオブジェクトの作成の時からポートオブジェクト５４に関連するメッセージオブジェクト５２に対して送られたメッセージの合計数等の統計情報を記憶させるために使用される。望ましい実施例では各メッセージオブジェクト５８は個々のポートオブジェクト５４に関連する。それ故ポートオブジェクト５４は望ましい実施例では対応するメッセージオブジェクト５８が作成される前に作成されなければならない。
オブジェクト管理ユニット４２は新たなフィルタオブジェクト５６を作成し、その新たなフィルタオブジェクト５６に対応するユニークフィルタオブジェクトＩＤを発生し、サーバタスク３４からのインスタレーション要求に応じてその新たなフィルタオブジェクト５６をフィルタオブジェクトチェーン５７にインストール又は挿入する。望ましい実施例ではインスタレーション要求は新たなフィルタオブジェクト５６に関連するサービスのタイプによって新たなフィルタオブジェクト５６を識別するフィルタオブジェクト名；それによって新たなフィルタオブジェクト５６に関連するプリプロセッサーメッセージオブジェクト５２又はポストプロセッサメッセージオブジェクト５３が動作を実行するメッセージの各タイプを明示するメッセージタイプリスト；どこで新たなフィルタオブジェクト５６がフィルタオブジェクトチェーン５７に挿入又はインストールされるのかを示すプレースメントオーダ（ｐｌａｃｅｍｅｎｔ  ｏｒｄｅｒ）；プリプロセッサメッセージオブジェクト５２が新たなフィルタオブジェクト５６に関連する場合プリプロセッサメッセージオブジェクトＩＤ；ポストプロセッサメッセージオブジェクト５２が新たなフィルタオブジェクト５６に関連する場合ポストプロセッサメッセージオブジェクトＩＤ；新たなフィルタオブジェクト５６が関連するターゲットメッセージオブジェクト５１を識別するターゲットメッセージオブジェクトＩＤ；及びインスタレーションオプションのオプションの組を明示する。
インスタレーション要求に応じてオブジェクト管理ユニット４２は新たなフィルタオブジェクト５６を作成し対応するユニークフィルタオブジェクトＩＤを発生する。図６を参照するに、フィルタオブジェクト５６の望ましい実施例のブロック図が示されたいる。各フィルタオブジェクト５６は、フィルタオブジェクトＩＤを記憶させる第１のデータフィールド；フィルタオブジェクト５６がフィルタオブジェクトチェーン５７にインストールされる際に次の及び前のフィルタオブジェクト５６の参照が記憶される第２のデータフィールド；フィルタオブジェクト名を記憶する第３のデータフィールド；メッセージタイプリストを記憶する第４のデータフィールド；プレースメントオーダを記憶する第５のデータフィールド；フィルタオブジェクト５６が関連するプリプロセッサメッセージオブジェクト５２を有する場合にプリプロセッサメッセージオブジェクトＩＤを記憶する第６のデータフィールド；フィルタオブジェクト５６が関連するポストプロセッサメッセージオブジェクト５３を有する場合にポストプロセッサメッセージオブジェクトＩＤを記憶する第７のデータフィールド；ターゲットメッセージオブジェクトＩＤを記憶する第８のデータフィールド；及びインスタレーションオプションのオプション的に明示された組を記憶する第９のデータフィールドを含むデータ構造である。各フィルタオブジェクト５６はオブジェクトデータベース内のフィルタオブジェクトメモリ４９に記憶される。
新たなフィルタオブジェクト５６を作成し対応するフィルタオブジェクトＩＤを発生した後、オブジェクト管理ユニット４６は明示されたプレースメントオーダ及びインスタレーションオプションによってフィルタオブジェクト５６を与えられたフィルタオブジェクトチェーン５７にインストールする。望ましい実施例では、各フィルタオブジェクトのプレースメントオーダは第１のフィルタオブジェクト名及び第２のフィルタオブジェクト名を明示することが望ましい。フィルタオブジェクト５６がフィルタオブジェクトチェーンにインストールされる際、第１のフィルタオブジェクト名はそのフィルタオブジェクト５６が第１のフィルタオブジェクト名を有するフィルタオブジェクトチェーン５７のフィルタオブジェクト５６に先んじてインストールされるべきであるということを示し；第２のフィルタオブジェクト名はそのフィルタオブジェクト５６が第２のフィルタオブジェクト名を有するフィルタオブジェクトチェーン５７のフィルタオブジェクト５６に引き続いてインストールされるべきであることを示す。このようにして第１のフィルタオブジェクト名はインスタレーションのための「前方規則（ｂｅｆｏｒｅ  ｒｕｌｅ）」を与え、第２のフィルタオブジェクト名はインスタレーションのための「後方規則（ａｆｔｅｒ  ｒｕｌｅ）」を与える。インスタレーションオプションが、そのフィルタオブジェクト５６が第１のフィルタオブジェクト名を有するフィルタオブジェクトチェーン５７のフィルタオブジェクト５６の直ぐ前にインストールされるべきであるかどうかを示す「直ぐ前（ｒｉｇｈｔ−ｂｅｆｏｒｅ）」オプションを明示することが望ましい。インスタレーションオプションが又、そのフィルタオブジェクト５６が第２のフィルタオブジェクト名を有するフィルタオブジェクトの直ぐ後にインストールされるべきかどうかを示す「直ぐ後（ｒｉｇｈｔ−ａｆｔｅｒ）」オプションを明示することが望ましい。オブジェクト管理ユニット４２によってフィルタオブジェクトインスタレーションの間に実行される詳細な動作は図１１Ａ、１１Ｂ、１１Ｃ及び１１Ｄの関係において下に詳述する。
メッセージオブジェクト５８を生成し、ポートオブジェクト５４を生成し、フィルタオブジェクト５６を生成・配置するのに加えて、オブジェクト管理ユニット４２は、メッセージオブジェクト検査要求に応答して、メッセージオブジェクト５８に関連づけられた情報をサーバタスク３４に提供する。この提供される情報は、メッセージオブジェクトに示されるクライアントチームＩＤ３３、メッセージオブジェクト５８が関連づけられたポートオブジェクト５４を示すポートオブジェクトＩＤ、及びメッセージオブジェクトの参照定数の現在値を含む。オブジェクト管理ユニット４２は、クライアントチームＩＤ及び参照定数の現在値に関しては、メッセージオブジェクト５８そのものから抽出し、ポートオブジェクトＩＤに関しては、メッセージオブジェクト５８に含まれるポートオブジェクトアドレスを用いて、メッセージオブジェクト５８が関連づけられたポートオブジェクト５４から獲得する。オブジェクト管理ユニット４２はまた、メッセージオブジェクト変更要求に応答して上記情報を変更し、またクライアントチーム削除メッセージに応答してメッセージオブジェクト５８を消去する。更に、オブジェクト管理ユニット４２は、メッセージオブジェクトＩＤを指定するフィルタオブジェクト参照要求に応答して、メッセージオブジェクト５８に関連づけられた各フィルタオブジェクト５６のフィルタオブジェクトＩＤを提供する。
メッセージオブジェクト５２に与えられた動作と同様の方法で、オブジェクト管理ユニット４２は、サーバタスク３４からのポートオブジェクト検査要求に応答してポートオブジェクト５４に関係した情報を提供し、ポートオブジェクト修正要求に応答してポートオブジェクト５４内のデータフィールドを修正し、ポートオブジェクト削除要求に応答してポートオブジェクト５２を削除する。
同様に、オブジェクト管理ユニット４２は、サーバタスク３４からのフィルタオブジェクト検査要求に応答してフィルタオブジェクト５６に関係した情報を提供し、ターゲットメッセージオブジェクト５１を指定するルックアップ要求に応答してフィルタオブジェクト系列５７内の各フィルタオブジェクトのフィルタオブジェクトＩＤを提供し、フィルタオブジェクト削除要求に応答してフィルタオブジェクト５６を削除する。フィルタオブジェクト削除要求において、オブジェクト管理ユニット４２は、最初に、フィルタオブジェクトがあるフィルタ系列５７からフィルタオブジェクト５７を削除し、次に、フィルタオブジェクト５６自体を削除する。
メッセージトランザクションユニット４４は、メッセージトランザクションを実行するため要求される動作を実行する。特に、メッセージトランザクションユニット４４は、クライアントタスク３２からターゲットメッセージオブジェクト５１へのメッセージの送信を補助するため要求される動作と、フィルタオブジェクト系列５７内のフィルタオブジェクト５６と関係したプリプロセッサメッセージオブジェクト５２又はポストプロセッサメッセージオブジェクト５３へのメッセージの供給と、サーバタスク３４による受信メッセージ要求の発行と、送信又は再供給されたメッセージの発行された受信メッセージ要求との一致、メッセージにより示されたサービスを実行するためのアクセプタンス関数又はサーバタスク３４へのメッセージの選択的な送付と、アクセプタンス関数又はサーバタスク３４からクライアントタスクへの応答の伝達とを実行する。
メッセージ処理ユニット４４は、メッセージ送信要求を発行することにより、クライアントタスク３２がターゲットメッセージ５１に対してメッセージを送信することを要求する。好ましい実施例において、各メッセージ送信要求は、１）メッセージ同期送信要求であるか、２）メッセージ同期送受信要求であるか、３）メッセージ非同期送信要求であるか、あるいは４）メッセージ非同期送受信要求であるかの何れかである。以後詳細に述べる如く、メッセージ処理ユニット４４は、何れかの型のメッセージ同期送信要求に応じて、メッセージ処理が完了するまで送信クライアントタスクをブロックし、これにより、メッセージ処理の進行中にクライアントタスク３２が他の操作を実行するのを阻止する。対照的に、メッセージ処理ユニット４４は、何れかの型のメッセージ非同期送信要求に応じて、送信クライアントタスク３２が他の操作を実行するのを許可する。各型のメッセージ送信要求は好ましくは、ターゲットメッセージオブジェクトＩＤ；メッセージが開始する開始メモリ位置への参照；メッセージ長情報；メッセージのカテゴリーを提供するメッセージ型；メッセージがアクセプタンス関数あるいはサーバ３４の何れに対して、参照渡しあるいは値渡しの何れによって伝達されるべきかを指示する送信オプション；及び、メッセージ送信要求が与えられるメッセージオブジェクト５２がメッセージ送信要求に応じてロックされるべきか、また、アクセプタンス関数又はサーバタスク３４がメッセージに対して応答した後、続いてアンロックされるべきかを指示するフラグを指定する。同期及び非同期のメッセージ送受信要求は共に、サーバタスクが応答メッセージ又はデータを格納し得る応答バッファアドレス、及び応答バッファサイズを付加的に指定する。好ましい実施例において、メッセージ型は３２ビットの数である。
同期送信メッセージ要求の各々の型もまた、メッセージの処理が生じている間クライアントタスク３２がアイドルのままで残り得る最大時間間隔を規定する。全ての送信メッセージ要求に共通する情報に加えて、非同期送信メッセージ要求の各々の型はまた、メッセージ処理ユニット４４が非同期送信メッセージ要求に対応するメッセージＩＤ信号を格納できるアドレス及びメッセージ処理が完了した時にどのようにメッセージ処理ユニット４４がクライアントタスク３２に通知するかのイベント通知情報を規定する。以下の説明において、メッセージＩＤ信号は単にメッセージＩＤと称される。
送信メッセージ要求の与えられたクライアントタスクの保証に応答し、メッセージ処理ユニット４４は送信メッセージ動作を行う。送信メッセージ動作は図１２の説明において以下に詳述される。送信メッセージ動作の間、メッセージ処理ユニット４４は送信メッセージ要求が同期であるか非同期であるかに基づいてメッセージ制御ブロック（ＭＣＢ）を生成して送信する。同期送信メッセージ要求又は同期送信受信メッセージ要求に応答して、メッセージ処理ユニット４４は同期送信ＭＣＢ６０を生成する。図７Ａを参照するに、同期送信ＭＣＢ６０の好適な実施例のブロック図が示される。同期送信ＭＣＢ６０は、同期送信メッセージが向けられるターゲットメッセージオブジェクト５１に対応するターゲットメッセージオブジェクトＩＤを格納する第１のデータフィールドと；フィルタオブジェクトチェーン５７内で現在考慮されているフィルタオブジェクト５６に対応する現在のフィルタオブジェクトＩＤを格納する第２のデータフィールドと；現在のフィルタオブジェクト５６に関連し現在のターゲットメッセージオブジェクト５１かプリプロセッサメッセージオブジェクト５２かポストプロセッサメッセージオブジェクト５３のいずれかとして考慮されるメッセージオブジェクト５８に対応する現在のメッセージオブジェクトＩＤを格納する第３のデータフィールドと；第３のデータフィールドにおいて規定される現在のメッセージオブジェクト５８が関連するポートオブジェクト５４を確認する現在のポートオブジェクトＩＤを格納する第４のデータフィールドと；メッセージが新しいターゲットメッセージオブジェクト５１に渡されたときに前のターゲットメッセージオブジェクト５１に関連するフィルタオブジェクト５６を確認するフィルタオブジェクトスタック５９を格納する第５のデータフィールドと；現在のポートオブジェクトの継続中のメッセージリストにおいて次の及び前のエントリに参照を与える第６のデータフィールドと；同期送信メッセージ要求を発行するクライアントタスク３２に対応したクライアントタスクＩＤを規定する第７のデータフィールドと；関連するメッセージが格納されるメモリ２０内の開始アドレスを提供する第８のデータフィールドと；メッセージの長さを与える第９のデータフィールドと；同期送信メッセージ要求において規定されるメッセージの型を示す第１０のデータフィールドと；メッセージＩＤが格納される第１１のデータフィールドと；同期送信メッセージ要求で示された送信オプションを規定する第１２のデータフィールドと；メッセージ処理ユニット４４が一致受信メッセージ要求に対応したＭＣＢを参照するために使用する第１３のデータフィールドと；メッセージをサーバタスク３４に配送した後にメッセージ処理ユニット４４がサーバタスクＩＤを格納する第１４のデータフィールドと；同期送信メッセージ要求に対応するメッセージがサーバタスク３４に配送されたかを示す第１５のデータフィールドと；同期送信要求において認識されるメッセージオブジェクト５２が固定されたかを示す第１６のデータフィールドと；送信メッセージ要求が同期送信及び受信メッセージ要求であるときに応答バッファのアドレスを規定する第１７のデータフィールドと；送信メッセージ要求が同期送信及び受信メッセージ要求であるときに応答バッファの大きさを与える第１８のデータフィールドと；送信クライアントタスク３２が阻止要求の結果として阻止されたかを示す第１９のデータフィールドと；メッセージ処理中に送信クライアントタスク３２がアイドルのまま残る最大時間間隔を規定する第２０のデータフィールドと；を含むデータ構造である。メッセージ処理ユニット４４は同期送信ＭＣＢ６０をオブジェクトデータベース４８に格納する。
もし送信メッセージ要求が非同期送信メッセージ要求又は非同期送信受信要求であった場合、メッセージ処理ユニット４４は同期送信ＭＣＢ６０ではなく非同期送信ＭＣＢ６２を生成する。図７Ｂを参照するに、非同期送信ＭＣＢ６２が示される。非同期送信ＭＣＢ６２は、上述の同期送信ＭＣＢ６０における第１から第１８のデータフィールドに規定される情報と同様の情報を規定する第１から第１８のデータフィールドを含むデータ構造である。加えて、非同期送信ＭＣＢ６２は、メッセージ処理ユニット４４が非同期送信メッセージ要求又は非同期送信受信メッセージ要求において規定されるイベント通知情報を格納する第１９のデータフィールドを含む。同期送信ＭＣＢ６０のように、メッセージ処理ユニット４４は非同期送信ＭＣＢ６２をオブジェクトデータベース４８に格納する。
メッセージ処理の間、メッセージ処理ユニット４４は一つ又はそれ以上のポートオブジェクト５４に送信ＭＣＢを選択的に通らせ、以下に詳細に説明されるように各々のポートオブジェクトはターゲットメッセージオブジェクト５１又はプリプロセッサメッセージオブジェクト５２又はポストプロセッサメッセージオブジェクト５３に関連する。送信ＭＣＢを生成した後、メッセージ処理ユニット４４はここに検査プリプロセッサメッセージオブジェクト５８と称される一組の動作を行う。プリプロセッサメッセージオブジェクト５２を考慮すると、メッセージ処理ユニット４４は送信ＭＣＢがプリプロセッサメッセージオブジェクト５２に関連するポートオブジェクト５４を通るべきかを判定する。プリプロセッサメッセージオブジェクト５２の検査においてメッセージ処理ユニット４４により行われる動作が図１４の説明において以下に詳述される。
メッセージ処理ユニット４４が、送信ＭＣＢがプリプロセッサメッセージオブジェクト５２に関連するポートオブジェクト５４又はポストプロセッサメッセージオブジェクト５３を通るべきであると判定すると、メッセージ処理ユニット４４は転送メッセージ動作を実行する。転送メッセージ動作において、メッセージ処理ユニット４４は送信ＭＣＢの第３のデータフィールドにおける現在のメッセージオブジェクトＩＤにより与えられるような現在のメッセージオブジェクト５２に関連するポートオブジェクト５４に基づいて最新送信ＭＣＢを生成する。フォーワードメッセージ動作は、図１７Ａ，１７Ｂ及び１７Ｃの説明において以下に説明される。
送信ＭＣＢを特定のポートオブジェクト５４に通らせるために、メッセージ処理ユニット４４は，図１５Ａ，１５Ｂ及び１５Ｃの説明において以下に説明されるように低レベルの送信動作を行う。ここで、低レベル送信動作は、米国特許第０８／２２０，０４３に記載される送信メッセージ動作のサブセットと同一である。
本発明において、サーバタスク３４はメッセージがポートオブジェクト５４から受信されたときにのみメッセージを処理する。メッセージ処理ユニット４４は、サーバタスク３４が与えられたポートオブジェクト５４からメッセージを受信するために受信メッセージ要求を発行する。受信メッセージ要求は同期受信メッセージ要求又は非同期受信メッセージ要求のどちらでもよい。受信メッセージ要求の各々の型は、ポートオブジェクト５４と；サーバタスク３４が受信すべきメッセージのカテゴリーを示すメッセージの型と；メッセージバッファが始まるメモリ位置の参照と；メッセージバッファの大きさとを規定する。好適な実施例において、メッセージの型は３２ビット数である。同期受信メッセージ要求は、メッセージ処理ユニット４４によるメッセージの配送の前に発行しているサーバタスク３４がアイドルで残ることのできる最大時間間隔を更に含む。同期及び非同期受信メッセージ要求の両方に共通の情報に加えて、非同期受信メッセージ要求は、非同期受信メッセージ要求に対応する受信ＩＤが格納可能なメッセージアドレスと；非同期受信メッセージ要求に対応するメッセージが配送されたことを発行しているサーバタスク３４に通知するためにメッセージ処理ユニット４４が使用するイベント通知情報を更に規定する。
受信メッセージ要求に応答して、メッセージ処理ユニット４４は図１８Ａ，１８Ｂ及び１８Ｃの説明において以下に詳細に説明される受信メッセージ動作を行う。受信メッセージ動作の間、メッセージ処理ユニット４４は、受信メッセージ要求において与えられるものに一致するメッセージの型を有する送信ＭＣＢが受信メッセージ要求が向けられるポートオブジェクト５４の継続中の送信メッセージリストに参照されていない場合、受信ＭＣＢを生成する。換言すると、メッセージ処理ユニット４４は、受信メッセージ要求が存在する送信ＭＣＢに直に一致できない場合、受信ＭＣＢを生成する。
メッセージ処理ユニット４４により生成された受信ＭＣＢは、受信メッセージ要求が夫々同期又は非同期受信メッセージ要求に従って同期又は非同期受信ＭＣＢ７０，７２のどちらかとなる。図８Ａを参照するに、同期受信ＭＣＢ７０の好適な実施例のブロック図が示される。同期受信ＭＣＢ７０は、同期受信メッセージ要求が向けられるポートオブジェクト５４に対応するポートオブジェクトＩＤを規定する第１のデータフィールドと；第１のデータフィールドで示されたポートオブジェクト５４の継続中の受信メッセージリストにおける次の及び前のエントリーを参照する第２のデータフィールドと；メッセージ処理ユニット４４が要求を発行したサーバタスク３４に対応するサーバタスクＩＤを格納する第３のデータフィールドと；同期受信メッセージ要求に含まれるメッセージバッファドレスを規定する第４のデータフィールドと；同期受信メッセージ要求に含まれるメッセージバッファの大きさを規定する第６のデータフィールドと；メッセージの型に従って同期受信メッセージ要求に一致する送信メッセージ要求に対応するＭＣＢを参照するためにメッセージ処理ユニット４４が使用する第７のデータフィールドと；同期受信メッセージ要求において規定されるように発行しているサーバタスク３４がアイドルのまま残ることができる最大時間間隔をメッセージ処理ユニット４４が格納する第８のデータフィールドとを含むデータ構造である。メッセージ処理ユニット４４は同期受信ＭＣＢ７０をオブジェクトデータベース４８に格納する。
図８Ｂを参照するに、非同期受信ＭＣＢ７２の好適な実施例のブロック図が示される。非同期受信ＭＣＢ７２は、同期受信ＭＣＢ７０に詳細に示されるものと同様な情報を規定する第１から第７までのデータフィールドを含むデータ構成である。また、非同期受信ＭＣＢ７２は、メッセージ処理ユニット４４が受信ＩＤを格納する第８のデータフィールドと、メッセージ処理ユニット４４が非同期受信メッセージ要求において規定されるイベント通知情報を格納する第９のデータフィールドとを含む。各々の同期受信ＭＣＢ７０の場合のように、メッセージ処理ユニット４４は各々の非同期受信ＭＣＢ７２をオブジェクトデータベース４８に格納する。
好適な実施例において、上述の各々のＭＣＢ６０，６２，７０，７２は、一般的なＭＣＢ構成（図示せず）に一つ又はそれ以上の要求詳細情報を供給するデータフィールドを加えたものとして具体化される。一般のＭＣＢ構成は、ポートオブジェクト５４を規定するデータフィールドと；クライアント又はサーバタスク３２，３４と；他の対応するＭＣＢ構成への参照と；一般のＭＣＢ構成が同期又は非同期要求に対応するか及び一般のＭＣＢ構成が送信又は受信要求に対応するかを規定する状態情報とを含む。当業者であれば、同期ＭＣＢ６０と非同期送信ＭＣＢ６２と同期受信ＭＣＢ７０と非同期受信ＭＣＢ７２とを具体化するのに必要な付加的なデータフィールドを上述の説明に従って決定することができる。
メッセージ処理ユニット４４は受信メッセージ要求を送信ＭＣＢに選択的に一致させる。メッセージ処理ユニット４４は、以下に詳細に規定されるように、送信ＭＣＢをアクセプタンス関数又はターゲットメッセージオブジェクト５１、プリプロセッサメッセージオブジェクト５２またはポストプロセッサメッセージオブジェクト５３に対応するポートオブジェクト５４に関連する受信ＭＣＢのいずれかに選択的に一致させる。一致は送信メッセージ要求及び受信メッセージ要求に規定されるメッセージの型に従って又は送信メッセージ要求及びアクセプタンス関数に関連するメッセージの型の組に規定されるメッセージに従って生じる。好適な実施例において、メッセージ処理ユニット４４はメッセージの型が一致するかを判定するために論理積を実行する。
送信ＭＣＢを与えられたポートオブジェクト５４に通した後、メッセージ処理ユニット４４は、ＭＣＢが一致アクセプタンス関数により直ちに処理され得る、又は送信ＭＣＢ一致継続受信ＭＣＢにより直ちに処理され得ると判定する。メッセージ処理ユニット４４はまた、送信ＭＣＢが直ちに処理され得ず従って継続受信ＭＣＢになることを判定する。メッセージ処理ユニット４４は、送信ＭＣＢにおいて確認されるポートオブジェクト５４の継続中の送信メッセージリストに送信ＭＣＢへの参照を挿入することにより送信ＭＣＢが継続中であるとして類別する。メッセージ処理ユニット４４は、好ましくはポートオブジェクト５４の継続中の送信メッセージリストを先入れ先出し（ＦＩＦＯ）順における２重リンクリストとして維持する。
与えられた受信メッセージ要求に応答して、メッセージ処理ユニット４４は、受信メッセージ要求が継続中の送信ＭＣＢに直ちに一致し得ること又は受信メッセージ要求が送信ＭＣＢに直ちに一致し得ず従って継続受信メッセージ要求となることを判定してもよい。メッセージ処理ユニット４４は、受信ＭＣＢを生成することにより及び受信ＭＣＢにおいて確認されるポートオブジェクト５４の継続中の受信メッセージリストにおける対応する受信ＭＣＢへの参照を挿入することにより、受信メッセージ要求を継続中として類別する。継続中の送信メッセージリストの場合、メッセージ処理ユニット４４は、好ましくは継続中の受信メッセージリストをＦＩＦＯ順における２重リンクリストとして維持する。メッセージ処理ユニット４４が同期受信メッセージ要求を継続中として類別した場合、メッセージ処理ユニット４４は又、一致する送信ＭＣＢがポートオブジェクト５４に到着するまで同期受信メッセージ要求を発行するサーバタスク３４の実行を阻止する。
メッセージ処理ユニット４４が送信ＭＣＢを受信ＭＣＢに一致させるとき、又は受信メッセージ要求を送信ＭＣＢに一致させるとき、メッセージ処理ユニット４４は配送ＭＣＢ８０を生成する。図９を参照するに、配送ＭＣＢ８０のブロック図が示されている。配送ＭＣＢ８０は、送信ＭＣＢ内でデータフィールドのサブセットから生成される。配送ＭＣＢ８０は、送信メッセージＭＣＢに規定されるメッセージＩＤが格納される第１のデータフィールドと；送信ＭＣＢに規定される現在のメッセージオブジェクト５８の参照定数を規定する第２のデータフィールドと；送信ＭＣＢに規定される送信オプションが格納される第３のデータフィールドと；送信ＭＣＢにおいて与えられるメッセージの型を提供する第４のデータフィールドと；送信ＭＣＢに規定されるメッセージ位置が格納される第５のデータフィールドと；送信ＭＣＢに規定されるメッセージ長が格納される第６のデータフィールドと；送信ＭＣＢに規定される応答バッファアドレスが格納される第７のデータフィールドと；送信ＭＣＢに規定される応答バッファの大きさが格納される第７のデータフィールドと；メッセージ処理中の前処理、処理及び／又は後処理が格納される第９のデータフィールドとを含む。好ましくは、配送ＭＣＢ８０が最初に生成されるとき、現在の結果は”不完全”として設定される。米国特許第０８／２２０，０４３に詳述されるように、サーバタスク３４又はアクセプタンス関数は配送ＭＣＢ８０内に規定されたメッセージを取得し、メッセージにより示される処理を実行する。
サーバタスク３４が与えられたポートオブジェクト５４に関連する処理を完了すると、サーバタスク３４は継続メッセージ要求、転送メッセージ要求又は応答を発行してもよい。継続メッセージは、好ましくはメッセージＩＤを規定する。継続メッセージ要求に応答し、メッセージ処理ユニット４４は継続メッセージ動作を行う。図１６Ａ，１６Ｂ及び１６Ｃの説明に詳述されるように、継続メッセージ動作において、メッセージ処理ユニット４４は、フィルタオブジェクト系列スキャン方向に従って現在のメッセージオブジェクトのフィルタ−オブジェクト系列５７における他のフィルタオブジェクト５６にメッセージが転送可能かを判定する。メッセージにより実行される一番最近の動作がプリプロセッサメッセージオブジェクト５２に関連する場合、メッセージ処理ユニット４４は、検査すべき次のフィルタオブジェクト５６を確認するためにフィルタオブジェクトチェーン５７における最後のフィルタオブジェクト５６に向かう”前進”方向にフィルタオブジェクトチェーン５７をスキャンする。メッセージにより実行される一番最近の動作が後プロセッサメッセージオブジェクト５３に関連する場合、メッセージ処理ユニット４４は、検査すべき前のフィルタオブジェクト５６を確認するためにフィルタオブジェクトチェーン５７における最初のフィルタオブジェクト５６に向かう”後退”方向にフィルタオブジェクトチェーン５７をスキャンする。もしメッセージが現在のメッセージオブジェクトのフィルタオブジェクトチェーン５７における他のフィルタオブジェクトに転送可能であれば、メッセージ処理ユニット４４は前進メッセージ動作を実行する。よって、継続メッセージ動作は、フィルタオブジェクトチェーン５７内において一つのフィルタオブジェクト５６から他のフィルタオブジェクト５６へ前処理又は後処理が継続する結果となる。転送メッセージ要求に応答し、メッセージ処理ユニット４４は上に参照され図１７Ａ，１７Ｂ及び１７Ｃに説明されている前進メッセージ動作を実行する。各々の前進メッセージ要求は、好ましくはメッセージＩＤ及びターゲットメッセージオブジェクト５１を規定する。転送メッセージ要求に規定されたターゲットメッセージオブジェクト５１がメッセージＩＤに対応する送信ＭＣＢに格納されたものと異なる場合、前進メッセージ動作は第１のデータフィールドに格納された新しく規定されたターゲットメッセージオブジェクトＩＤを有する最新の送信ＭＣＢを生成する結果となる。また、元のターゲットメッセージオブジェクト５１に関連する各々のフィルタオブジェクトへの参照は最新の送信ＭＣＢ内のフィルタオブジェクトスタックに格納される。
応答への対応において、メッセージ処理ユニット４４は応答動作を実行する。各々の応答は、好ましくはメッセージＩＤを規定し、現在の結果の組を任意に規定してもよい。応答動作において、メッセージ処理ユニット４４は、応答がプリプロセッサメッセージオブジェクト５２に関連したサーバタスク３４により発行されたかを判定する。そうであれば、メッセージ処理ユニット４４はメッセージＩＤに対応する送信ＭＣＢを前プロセッサメッセージオブジェクト５２に関連するポストプロセッサメッセージオブジェクト５３に通し、それにより、各々の残りのフィルタオブジェクト５６を前処理に関して”スキップ”し、ターゲットメッセージオブジェクト５６をスキップし、スキップしたフィルタオブジェクト５６に関連するポストプロセッサメッセージオブジェクト５６をスキップする。フィルタオブジェクトに関連するプリプロセッサメッセージオブジェクト５２からフィルタオブジェクトに関連するポストプロセッサメッセージオブジェクト５３へのメッセージ処理ユニットの送信ＭＣＢの経路付けは、ここにスキップ前進動作と称される。
スキップ前進動作が必要無い場合、メッセージ処理ユニット４４はターゲットメッセージオブジェクト５１が関連する各々のフィルタオブジェクト５６が後処理に関して検査されたかを判定する。もしされていない場合、メッセージ処理ユニット４４は継続メッセージ動作を実行する。もしターゲットメッセージオブジェクト５１の各々のフィルタオブジェクト５６が検査されていれば、メッセージ処理ユニット４４はメッセージを始めに送信したクライアントタスク３２に最終応答を発行し、最終応答はクライアントタスク３２に状態情報とおそらくはデータとを提供する。応答動作は図１９Ａ及び１９Ｂの説明において以下に詳述される。
サーバタスク３４により発行された組み合わされた受信及び応答メッセージ要求への応答において、メッセージ処理ユニット４４は上述のように先ず応答動作を実行し、そして上述のように受信メッセージ動作を実行する。
ロックユニット４６はメッセージオブジェクトのロック及びロック解除動作を実行する。好適な実施例において、ロック及びロック解除動作は、夫々サーバタスク３４又はメッセージ処理ユニット４４により発行されるロック要求又はロック解除要求に応答して実行される。メッセージオブジェクト５８がロックされた後に特定のメッセージオブジェクト５８に向けられた送信メッセージ要求又は送信ＭＣＢは、ロック解除動作が実行されるまで、アクセプタンス関数又は受信ＭＣＢに一致するべきものには選ばれない。好適な実施例において、ロック要求は、送信メッセージ要求の結果としてクライアントタスク３２の代わりにサーバタスク３４又はメッセージ処理ユニット４４により発行され得る。好ましくは、夫々のロック要求はロックのターゲットとなるメッセージオブジェクト５８のメッセージオブジェクトＩＤを規定する。ロック及びロック解除動作は夫々図２０及び２１の説明において以下に詳述される。
メッセージ送信操作及びメッセージ転送操作の間、メッセージ処理ユニット４４はロッキング操作と同期する。ロッキング操作との同期において、メッセージが送られた現在のメッセージオブジェクト５８がロックされた場合、メッセージ処理ユニットはメッセージを送信するクライアントタスクをブロックする。送信ＭＣＢがターゲットメッセージオブジェクト５１はロックされるべきと指定した場合、メッセージ処理ユニット４４はターゲットメッセージ５１をもロックする。メッセージ処理ユニット４４によってロッキング操作と同期して実行される動作の詳細について、以下、図１３に従って説明する。
以下、本発明のシステム１０によってオブジェクト指向メッセージフィルタリングの間に実行される操作の詳細を、図１０Ａ〜図２１の各方法ステップとして説明する。図１０Ａ、１０Ｂ、及び１０Ｃには、オブジェクト指向メッセージフィルタリングの好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ１００において、オブジェクト管理ユニット４２は、対応するサーバタスク要求に応じてポートオブジェクト５４が生成、変更、検査、あるいは削除されるべきか否かを判断する。ポートオブジェクト５４が生成、変更、検査あるいは削除されるべきならば、ステップ１０２において、オブジェクト管理ユニット４２はサーバタスク要求により指示される適切な操作を実行する。ステップ１０２の後、又はステップ１００の後、ステップ１０４において、オブジェクト管理ユニット４２は対応するサーバタスク要求に応じてメッセージオブジェクト４２が生成、変更、検査、あるいは削除されるべきか否かを判断する。肯定判断されたならば、ステップ１０６において、オブジェクト管理ユニット４２はサーバタスク要求により指示された動作を実行する。ステップ１０６又は１０４に続いて、ステップ１０８において、オブジェクト管理ユニット４２はサーバタスク要求に応じてフィルタオブジェクト５６がインストール、検査、ロックアップ、あるいは削除されるべきか否かを判断する。フィルタオブジェクト５６がインストール、検査、ロックアップ、あるいは削除されるべきならば、ステップ１１０において、オブジェクト管理ユニット４２はサーバタスク要求により要求された操作を実行する。ステップ１１０の後、あるいはステップ１０８の後、ステップ１１２において、ロッキングユニット４６はサーバタスクロック要求に応じてメッセージオブジェクト５２がロックされるべきか否かを判断する。肯定判断されたならば、ステップ１１４において、ロッキングユニット４６はサーバタスク要求により指示されたロッキング操作を実行する。ステップ１０８においてロッキングユニット４６がロックされるべきメッセージオブジェクトは存在しないと判断した場合、あるいは、ステップ１１４が終了した後、次にステップ１１６において、ロッキングユニットはサーバタスクロック解除要求に応じてメッセージオブジェクト５２がロック解除されるべきか否かを判断する。肯定判断されたならば、ステップ１１８においてロッキングユニット４６はアンロック要求に応じてアンロック操作を実行する。ステップ１１６においてメッセージオブジェクトのロッキングが要求されていない場合、あるいは、ステップ１１８の後、ステップ１２０において、オブジェクト管理ユニット４２はサーバタスク要求に応じてポートオブジェクト５４に対するアクセプタンス関数が登録されるべきか否かを判断する。アクセプタンス関数が登録されるべきならば、ステップ１２２においてオブジェクト管理ユニット４２は、サーバタスク要求において指定されたポートオブジェクトと共にアクセプタンス関数を登録する。ステップ１２２は、米国特許出願第08/220,043号に記載されている如きアクセプタンス関数の登録に従って実行される。
ステップ１１８に続いて、あるいは、ステップ１１６の後、オブジェクト管理ユニット４２が、登録すべきアクセプタンス関数は存在しないと判断したならば、ステップ１３０において、メッセージ処理ユニット４４はクライアントタスク３２がメッセージ送信要求を発行したか否かを判断する。肯定判断されたならば、ステップ１３２において、メッセージ処理ユニット４４はメッセージ送信操作を実行する。ステップ１３２の後、あるいは送信メッセージ要求が発行されていなければステップ１３０の後、ステップ１３４において、メッセージ処理ユニットはサーバタスクがメッセージ連続要求を発行したか否かを判断する。サーバタスク３４がメッセージ連続要求を発行したならば、ステップ１３６において、メッセージ処理ユニット４４はメッセージ連続操作を実行する。ステップ１３６の後、あるいは、ステップ１３４の後、ステップ１３８において、メッセージ処理ユニット４４はサーバタスク３４がメッセージ転送要求を発行したか否かを判断する。サーバタスク３４がメッセージ転送要求を発行したならば、ステップ１４０において、メッセージ処理ユニット４４はメッセージ転送操作を実行する。ステップ１４０に続いて、あるいは、ステップ１３８の後、ステップ１４２において、メッセージ処理ユニット４４はサーバタスク３４がメッセージ受信要求を発行したか否かを判断する。サーバタスク３４がメッセージ受信要求を発行したならば、ステップ１４４において、メッセージ処理ユニット４４はメッセージ受信操作を実行する。ステップ１３２においてメッセージ処理ユニット４４がメッセージ受信要求は発行されていないと判断した場合、あるいは、ステップ１３４の後、ステップ１５０において、メッセージ処理ユニット４４は応答（reply）が発行されたか否かを判断する。肯定判断されたならば、ステップ１５２においてメッセージ処理ユニットは応答操作を実行する。ステップ１５２の後、あるいは応答が発行されていなければステップ１５０の後、ステップ１５４において、メッセージ処理ユニット４４はサーバタスク３４が結合された受信−応答メッセージ要求を発行したか否かを判断する。肯定判断されたならば、ステップ１５６において、メッセージ処理ユニット４４は受信−応答メッセージ要求で指示された応答操作を実行する。この後、ステップ１５８において、メッセージ処理ユニット４４はメッセージ受信−応答要求に応じてメッセージ受信操作を実行する。ステップ１５８の後、あるいはステップ１５６が実行されなければステップ１５４の後、ステップ１６０において、メッセージ処理ユニット４４は操作を終了すべきか否かを判断する。操作を続行すべきならば、この好ましい方法はステップ１００へ進む。そうでなければ、この好ましい方法は終了する。
次に、図１１Ａ、１１Ｂ、１１Ｃ及び１１Ｄを参照するに、新たなフィルターオブジェクト５６をフィルターオブジェクトチェイン５７内にインストールする（図１０Ａのステップ１１０）好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ２００において、オブジェクト管理ユニット４２は、サーバタスク３４により発行されたインストール要求に応じて、新たなフィルターオブジェクトＩＤを発生すると共に新たなフィルターオブジェクト５６を生成する。次に、ステップ２０２において、オブジェクト管理ユニット４２は、インストール要求で指定されたターゲットメッセージオブジェクトに対応するプリプロセッサ及びポストプッロセッサメッセージオブジェクト５２、５３を夫々ロックする。ステップ２０２の後、オブジェクト管理ユニット４２は、新たなフィルターオブジェクト名が、フィルターオブジェクトチェイン５７内の全てのフィルターオブジェクトの中で唯一のものであるか否かを判断する。新たなフィルターオブジェクト名が唯一のものでなければ、オブジェクト管理ユニット４２は、ステップ２０５においてフィルターオブジェクトチェイン内のプリプロセッサ及びポストプロセッサメッセージオブジェクト５２、５３をロックした後、ステップ２０６においてインストール失敗エラーに戻る。
ステップ２０４において、新たなフィルターオブジェクト名がフィルターオブジェクトチェイン５７内の全てのフィルターオブジェクトの中で唯一のものであるならば、オブジェクト管理ユニット４２は次にステップ２０８において、フィルターオブジェクトチェイン５７内の前向き方向に他のフィルターオブジェクト５６が存在するか否かを判断する。フィルターオブジェクトチェイン５７に他のフィルターオブジェクトが存在しなければ、ステップ２０９において、オブジェクト管理ユニット４２はフィルターオブジェクトチェイン５７が空か否かを判断する。フィルターオブジェクトチェイン５７が空ならば、この好ましい方法はステップ２７６に進む。
ステップ２０８において、オブジェクト管理ユニット４２がフィルターオブジェクトチェイン５７に他のオブジェクト５６が存在すると判断したならば、ステップ２１０において、オブジェクト管理ユニット４２は次のフィルターオブジェクト５６を選択する。次に、ステップ２１２において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクトの前方規則（before rule）が、選択されたフィルターオブジェクト名とマッチするか否かを判断する。肯定判断されたならば、ステップ２１４において、オブジェクト管理ユニット４２は、選択されたフィルターオブジェクトの位置をフィルターオブジェクトチェイン５７に格納する。ステップ２１２において、新たなフィルターオブジェクトの前方規則が、選択されたフィルターオブジェクト名とマッチしなければ、オブジェクト管理ユニット４２は次にステップ２１６において、選択されたオブジェクトの後方規則（after rule）が、新たなフィルターオブジェクト名とマッチするか否かを判断する。肯定判断されたならば、この好ましい方法はステップ２１４に進む。選択されたフィルターオブジェクトの後方規則が新たなフィルターオブジェクト名とマッチしなければ、この好ましい方法はステップ２０８に戻る。
ステップ２１４の後、あるいは、フィルターオブジェクトチェイン５７が空でなければステップ２０９の後、ステップ２３０において、オブジェクト管理ユニット４２は他のフィルタ５６がフィルターオブジェクトチェインに存在するか否かを判断する。肯定判断されたならば、ステップ２３２において、オブジェクト管理ユニット４２は次のフィルターオブジェクトを選択する。次に、ステップ２３４において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクトの後方規則が、選択されたフィルターオブジェクト名にマッチするか否かを判断する。肯定判断されたならば、ステップ２３５において、オブジェクト管理ユニット４２はこのマッチが不可能なフィルターオブジェクトチェイン順序を指定しているか否かを判断する。このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているならば、この好ましい方法はステップ２０５に戻る。
ステップ２３５の後、あるいは、ステップ２３４の後、ステップ２３６において、オブジェクト管理ユニット４２は、選択されたフィルターオブジェクトの前方規則が、新たなフィルターオブジェクト名にマッチするか否かを判断する。肯定判断されたならば、ステップ２３７において、オブジェクト管理ユニット４２は、このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているか否かを判断する。このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているならば、この好ましい方法はステップ２０５に戻る。
ステップ２３７の後、あるいは、ステップ２３６の後、ステップ２３８において、オブジェクト管理ユニット４２は、選択されたオブジェクトのインストールオプションが、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内の新たなフィルターオブジェクト５６の直後に位置すべきことを指定しているか否かを判断する。選択されたオブジェクトのインストールオプションが、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内の新たなフィルターオブジェクト５６の直後に続くべきことを指定しているならば、ステップ２３９において、オブジェクト管理ユニット４２はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ２０５に戻る。
ステップ２３９の後、あるいはステップ２３８の後、ステップ２４０において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内の選択されたフィルターオブジェクト５６の直前に位置すべきことを指定しているか否かを判断する。新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内の選択されたフィルターオブジェクト５６の直前に先行すべきことを指定しているならば、ステップ２４１において、オブジェクト管理ユニット４２はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ２０５に戻る。
ステップ２３０において、オブジェクト管理ユニット４２が、フィルターオブジェクトチェイン５７に他のフィルターオブジェクト５６は存在しないと判断したならば、ステップ２４２において、オブジェクト管理ユニット４２は第１のフィルターオブジェクトチェイン５７の第１のフィルターオブジェクト５６を選択する。ステップ２４２の後、オブジェクト管理ユニット４２は、選択されたフィルターオブジェクト５６のフィルターオブジェクトチェイン内での位置がステップ２１４において格納されたマッチ位置であるか否かを判断する。否定判断されたならば、ステップ２５２において、オブジェクト管理ユニット４２は選択されたフィルターオブジェクトの配置順序が、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で新たなフィルターオブジェクト５６に続くべきであることを指定しているか否かを判断する。選択されたフィルターオブジェクトの配置順序が、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で新たなフィルターオブジェクト５６に続くべきであることを指定しているならば、オブジェクト管理ユニット４２は次にステップ２５３において、この順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ２６０に進む。ステップ２６０においてオブジェクト管理ユニット４２がステップ２１４において格納されたマッチ位置をリセットした後、この好ましい方法はステップ２３０に戻る。
ステップ２５３の後、あるいは、ステップ２５２の後、オブジェクト管理ユニット４２は、選択されたフィルターオブジェクトのインストールオプションが、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で新たなフィルターオブジェクト５６の直前に先行すべきであることを指定しているか否かを判断する。選択されたフィルターオブジェクトのインストールオプションが、選択されたフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で新たなフィルターオブジェクト５６の直前に先行すべきであることを指定しているならば、ステップ２５５において、オブジェクト管理ユニット４２は、この順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ２６０に進む。
ステップ２５５の後、あるいは、ステップ２５４の後、ステップ２５６において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で選択されたフィルターオブジェクト５６の直後に続くべきであることを指定しているか否かを判断する。新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト５６はフィルターオブジェクトチェイン５７内で選択されたフィルターオブジェクト５６の直後に続くべきであることを指定しているならば、ステップ２５７においてオブジェクト管理ユニット４２はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ２６０へ進む。
ステップ２５７の後、あるいは、ステップ２５６の後、オブジェクト管理ユニット４２はフィルターオブジェクトチェイン５７の次のフィルターオブジェクト５６を選択し、その後、この好ましい方法はステップ２５０に戻る。
ステップ２５０において、ステップ２１４において格納されたマッチ位置に達したと判断されたならば、次に、オブジェクト管理ユニット４２は新たなフィルターオブジェクト５６がフィルターオブジェクトチェイン５７の２つのフィルターオブジェクト５６の間にインストールされるべきか否かを判断する。肯定判別されたならば、ステップ２７２において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクト５６がその前に挿入されるべきフィルターオブジェクト５６の右前方（right-before）オプションが満足され得るか否かを判断する。右前方オプションが満足され得ないならば、この好ましい方法はステップ２０５に戻る。右前方オプションが満足され得るならば、オブジェクト管理ユニット４２は次にステップ２７４において、フィルターオブジェクト５６がその後に挿入されるべきフィルターオブジェクト５６の右後方（right-after）オプションが満足され得るか否かが判断される。フィルターオブジェクト５６がその後に挿入されるべきフィルターオブジェクト５６の右後方（right-after）オプションが満足され得ないならば、この好ましい方法はステップ２０５に戻る。
ステップ２７４の後、ステップ２７６においてオブジェクト管理ユニット４２は、新たなフィルターオブジェクト５６の第２データフィールドを、フィルターオブジェクトチェイン５７内の適切な次の、及び、前のフィルターオブジェクト５６を参照するように変更する。
ステップ２７４の後、ステップ２７６において、オブジェクト管理ユニット４２は、新たなフィルターオブジェクト５６の第２データフィールドを、フィルターオブジェクトチェイン５７内の適切な次の、及び、前のフィルターオブジェクト５６を参照するように変更する。オブジェクト管理ユニット４２は、新たなフィルターオブジェクト５６がフィルターオブジェクトチェイン内に配置されるべき位置の直前及び直後のフィルターオブジェクト５６の第２データフィールドをも同様に変更する。ステップ２７６が実行されることにより、新たなフィルターオブジェクトは実際にフィルターオブジェクトチェイン２５７の一部となる。ステップ２７６の後、ステップ２７８において、オブジェクト管理ユニット４２はフィルターオブジェクトチェイン５７に対応するプリプロセッサ及びポストプロセッサメッセージオブジェクト５２、５３の夫々をアンロックし、その後、この好ましい方法は終了する。
次に、図１２を参照するに、メッセージ送信操作（図１０Ｂのステップ１３２）を実行する好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ３００において、メッセージ処理ユニット４４が対応するメッセージ送信要求で指定されたターゲットオブジェクトＩＤをデコードする。次に、ステップ３０２において、メッセージ処理ユニット４４はターゲットオブジェクトＩＤが有効か否かを判断する。ターゲットオブジェクトＩＤが有効でなければ、メッセージ処理ユニット４４がステップ３０４の無効ＩＤエラーに戻った後、この好ましい方法は終了する。ターゲットオブジェクトＩＤが有効ならば、ステップ３０６において、メッセージ処理ユニット４４はメッセージオブジェクトロッキング操作と同期する。次に、ステップ３０８において、メッセージ処理ユニット４４は唯一のメッセージＩＤを発生すると共に送信ＭＣＢを生成する。好ましくは、メッセージ処理ユニット４４は、送信ＭＣＢが唯一に同定され、メッセージＩＤによってその位置が確認されるように、送信ＭＣＢをメッセージＩＤと対応させる。メッセージ送信要求が同期メッセージ送信要求であるならば、メッセージ処理ユニット４４は同期送信ＭＣＢ６０を生成する。メッセージ送信要求が非同期メッセージ送信要求であるならば、メッセージ処理ユニット４４は非同期送信ＭＣＢ６２を生成する。
ステップ３０８の後、ステップ３１０において、メッセージ処理ユニット４４は、送信ＭＣＢの第１データフィールドで指定されたターゲットメッセージオブジェクトＩＤを送信ＭＣＢの第３データフィールド内に格納することにより、ターゲットメッセージオブジェクトを検討中の現在のメッセージオブジェクトとして同定する。次に、ステップ３１２において、メッセージ処理ユニット４４はプリプロセッサメッセージオブジェクト５２を検査する。プリプロセッサメッセージオブジェクト５２の検査については、図１４を参照して詳細に後述する。ステップ３１２の後、ステップ３１４において、メッセージ処理ユニット４４は、対応するポートオブジェクトＩＤを送信ＭＣＢの第４データフィールドに格納することにより、ターゲットメッセージオブジェクト５１に対応するポートオブジェクト５４を現在のポートオブジェクト５４として同定する。次にステップ３１６において、メッセージ処理ユニット４４は低レベルメッセージ送信操作を実行し、その後、この好ましい方法は終了する。
次に、図１３を参照するに、ロッキング操作との同期（図１２のステップ３００）を行なう好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ４００において、メッセージ処理ユニット４４は現在のメッセージオブジェクト５８がロックされているか否かを判断する。現在のメッセージオブジェクト５８がロックされているならば、メッセージ処理ユニット４４は、送信ＭＣＢにより指示されたクライアントタスク３２を、ステップ４０２においてこのクライアントタスク３２の更なる操作の実行を阻止することによりブロックする。クライアントタスクのブロックは従前の方法で実行される。ステップ４０２の後、あるいはステップ４００の後、ステップ４０４において、メッセージ処理ユニット４４は、送信ＭＣＢで指定された送信オプションを検査することにより現在のメッセージオブジェクト５８がロックされるべきか否かを判断する。現在のメッセージオブジェクト５８がロックされるべきならば、ステップ４０６において、メッセージ処理ユニット４４は現在のメッセージオブジェクト５８をロックする。ステップ４０６の後、あるいはステップ４０４の後、この好ましい方法は終了する。
次に、図１４を参照するに、プロセッサメッセージオブジェクト５２の検査（図１２のステップ２１２及び図１７Ｃのステップ８３８）を行なう好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ５００において、メッセージ処理ユニット４４は、他のフィルターオブジェクト５６が現在のメッセージオブジェクト５８に対応するフィルターオブジェクトチェイン５７内で参照されているか否かを判断する。他のフィルターオブジェクト５６が現在のメッセージオブジェクト５８によって参照されていなければ、この好ましい方法は終了する。他のフィルターオブジェクト５６が現在のメッセージオブジェクト５８に対応するフィルターオブジェクトチェイン５７内で参照されているならば、ステップ５０２において、メッセージ処理ユニット４４はフィルターオブジェクトチェイン５７内の次のフィルターオブジェクト５６を選択する。ステップ５０２の後、ステップ５０４において、メッセージ処理ユニット４４は、選択されたフィルターオブジェクト５６の第６データフィールドを検査することにより、選択されたフィルターオブジェクト５６が対応するプリプロセッサメッセージオブジェクト５２を有しているか否かを判断する。選択されたフィルターオブジェクト５６が対応するプリプロセッサメッセージオブジェクト５２を有していなければ、この好ましい方法はステップ５００に戻る。選択されたフィルターオブジェクト５６が対応するプリプロセッサメッセージオブジェクト５２を有しているならば、メッセージ処理ユニット４４は次にステップ５０６において、送信ＭＣＢで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストで与えられたメッセージ型とマッチするか否かを判断する。送信ＭＣＢで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストのメッセージ型とマッチしなければ、この好ましい方法はステップ４００に戻る。送信ＭＣＢで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストのメッセージ型とマッチするならば、メッセージ処理ユニット４４は次にステップ５０８において、現在のメッセージオブジェクト５８がロックされているか否かを判断する。現在のメッセージオブジェクト５８がロックされているならば、ステップ５１０において、メッセージ処理ユニット４４は現在のメッセージオブジェクト５８をアンロックする。ステップ５１０の後、あるいはステップ５０８の後、ステップ５１２において、メッセージ処理ユニット４４は、プリプロセッサメッセージオブジェクト５２に対応するメッセージオブジェクトＩＤを送信ＭＣＢの第３データフィールドに格納することにより、選択されたフィルターオブジェクト５６に対応するプリプロセッサメッセージオブジェクト５２を現在のメッセージオブジェクトとして同定する。次に、ステップ５１４において、メッセージ処理ユニット４４は、対応するフィルターオブジェクトＩＤを送信ＭＣＢの第２データフィールドに格納することにより、選択されたフィルターオブジェクト５６を現在のフィルターオブジェクトとして同定する。ステップ５１４の後、ステップ５１６において、メッセージ処理ユニット４４はメッセージ転送操作を実行する。メッセージ転送操作については、図１７Ａ、１７Ｂ、及び１７Ｃを参照して詳細に後述する。ステップ５１６の後、この好ましい方法は終了する。
次に、図１５Ａ、１５Ｂ、及び１５Ｃを参照するに、低レベル送信操作（図１２のステップ３１６及び図１７Ｃのステップ８４０）を実行する好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ６００において、メッセージ処理ユニット４４は、送信ＭＣＢのメッセージ型とマッチするメッセージ型を指定するアクセプタンス関数が、送信ＭＣＢで指定された現在のポートオブジェクト５４と共に登録されたか否かを判断する。アクセプタンス関数が登録されているならば、ステップ６０２において、メッセージ処理ユニット４４はクライアントタスクのアドレス空間内にデリバリーＭＣＢ８０を生成する。ステップ６０２に続いて、ステップ６０４において、メッセージ処理ユニット４４はデリバリーＭＣＢ８０へのポインタをアクセプタンス関数へ引き渡す。次に、ステップ６０６において、メッセージ処理ユニット４４は、送信ＭＣＢへの参照を現在のポートオブジェクト５４内のペンディング応答メッセージリストに挿入する。
ステップ６０６の後、図１５Ｃのステップ６４０において、メッセージ処理ユニット４４は、生成された送信ＭＣＢが同期送信ＭＣＢか否かを判断する。同期送信ＭＣＢでなければ、ステップ６４２において、メッセージ処理ユニット４４がメッセージＩＤを、メッセージ送信要求を発行したクライアントタスク３２に戻した後、この好ましい方法は終了する。送信ＭＣＢが同期送信ＭＣＢ６０であるならば、メッセージ処理ユニット４４は次にステップ６４４において、送信クライアントタスク３２が更なる操作を実行するのを阻止、即ち、送信クライアントタスク３２をブロックする。次に、ステップ６４６において、メッセージ処理ユニット４４は、送信ＭＣＢで指定された最大時間間隔を超過したか否かを判断する。肯定判断されたならば、メッセージ処理ユニット４４が時間切れ状態を送信クライアントタスク３２に戻した後、この好ましい方法は終了する。最大時間間隔を超過していなければ、ステップ６４８において、メッセージ処理ユニット４４は、メッセージ送信要求で指示されたメッセージに対して応答が発行されたか否かを判断する。応答が発行されていなければ、この好ましい方法はステップ６４６に戻る。ステップ６４８において、メッセージ処理ユニット４４が応答が発行されたと判断したならば、ステップ６５０において、メッセージ処理ユニット４４は応答操作を実行する。
ステップ６００においてメッセージ・トランザクション・ユニット４４がマッチング・アクセプタンス関数が存在しないと判断した場合、メッセージ・トランザクション・ユニットは次にステップ６０８において、マッチングする受信ＭＣＢが現在のポートオブジェクトのペンディング・メッセージ・リストに存在するかどうかを判断する。マッチングする受信ＭＣＢが存在しない場合、メッセージ・トランザクション・ユニット４４はステップ６１０において、現在のポート・オブジェクトのペンディング・メッセージ・リストの送信ＭＣＢに参照符号を挿入する。その後、ステップ６４０に進む。メッセージ・トランザクション・ユニット４４がマッチングする受信ＭＣＢが存在するとステップ６０８において判断したならば、メッセージ・トランザクション・ユニット４４は図１５Ｂのステップ６２０において、マッチングする受信ＭＣＢ内の指定アドレスにおけるメッセージ・バッファに受信ＭＣＢを作成する。次に、メッセージ・トランザクション・ユニット４４はステップ６２２において、現在のポート・オブジェクトのペンディング応答メッセージ・リストの送信ＭＣＢに参照符号を挿入する。ステップ６２２の後、メッセージ・トランザクション・ユニット４４はステップ６２４において、受信ＭＣＢが同期受信ＭＣＢ７０であるかどうかを判断する。もしそうなら、メッセージ・トランザクション・ユニット４４はステップ６３０において、対応する受信メッセージ要求を発行した受信サーバ・タスク３４を非ブロック化する。メッセージ・トランザクション・ユニット４４が受信ＭＣＢが同期受信ＭＣＢ７０でないと判断した場合、メッセージ・トランザクション・ユニット４４はステップ６２６において、受信ＭＣＢ７０で参照されているメッセージを同期受信ＭＣＢ７２で指定されたサーバ・タスク３４に渡す。ステップ６２６の後、メッセージ・トランザクション・ユニット４４はステップ６２８において、同期受信ＭＣＢ７２で指定されたイベント通知情報に従って受信サーバ・タスク３４に通知する。ステップ６２８の後、またはステップ６３０の後、メッセージ・トランザクション・ユニット４４はステップ６３２において、受信ＭＣＢおよび対応するペンディング受信メッセージ・リストの参照符号を削除する。ステップ６３２の後、ステップ６４０に進む。
図１６Ａ，１６Ｂおよび１６Ｃは継続メッセージ動作（図１０Ｂのステップ１３６および図１９Ａのステップ１０１８）を行なう方法を示すフローチャートである。ステップ７００においてメッセージ・トランザクション・ユニット４４が継続メッセージ要求で指定されたメッセージＩＤをデコードする。次に、メッセージ・トランザクション・ユニット４４はステップ７０２において、メッセージＩＤが有効であるかどうかを判断する。メッセージＩＤが有効でなければ、メッセージ・トランザクション・ユニット４４はステップ７１０において無効ＩＤエラーを返して終了する。メッセージＩＤが有効であれば、メッセージ・トランザクション・ユニット４４はステップ７０４において、対応する送信ＭＣＢを探し、その後メッセージ・トランザクション・ユニットはステップ７０６において、送信ＭＣＢの第３のデータ・フィールドにおいて指定された現在のメッセージ・オブジェクトＩＤをデコードする。ステップ７０６の後、メッセージ・トランザクション・ユニット４４はステップ７０８において、現在のメッセージ・オブジェクトＩＤが有効であるかどうかを判断する。有効でなければ、メッセージ・トランザクション・ユニット４４はステップ７１０において無効ＩＤエラーを返して終了する。現在のメッセージ・オブジェクトＩＤが有効であれば、メッセージ・トランザクション・ユニット４４はステップ７１２において、フィルタ・オブジェクト・チェーンを走査する方向を決定する。フィルタ・オブジェクト・チェーンを走査する方向を決定するに際して、メッセージ・トランザクション・ユニット４４は送信ＭＣＢに記憶されている現在のメッセージＩＤが現在のフィルタ・オブジェクト５６に記憶されたプリプロセッサ・メッセージ・オブジェクトＩＤとマッチングするかどうかを判断する。送信ＭＣＢに記憶された現在のメッセージＩＤが現在のフィルタ・オブジェクト５６に記憶されたプリプロセッサ・メッセージ・オブジェクトＩＤとマッチングするならば、フィルタ・オブジェクト・チェーン走査方向は順方向である。逆の場合、フィルタ・オブジェクト・チェーンは逆方向である。フィルタ・オブジェクト・チェーン走査方向が順方向の場合、メッセージはプリプロセッサ・メッセージ・オブジェクト５２もしくは目標メッセージ・オブジェクト５１に送る。フィルタ・オブジェクト・チェーン走査方向が逆方向ならば、メッセージはポストプロセッサ・メッセージ・オブジェクト５３に送る。
ステップ７１２の後、メッセージ・トランザクション・ユニット４４はステップ７２０において、送信ＭＣＢの第２データフィールドで与えられた現在のフィルタ・オブジェクト５６が別のフィルタ・オブジェクト５６を参照しているかどうかをフィルタ・オブジェクト・チェーン走査方向に従って判断する。別のフィルタ・オブジェクト５６が参照されているならば、メッセージ・トランザクション・ユニット４４はステップ７３２において、フィルタ・オブジェクト・チェーン走査方向に沿った次の被参照フィルタ・オブジェクト５６を選択する。次に、メッセージ・トランザクション・ユニット４４はステップ７３２において、フィルタ・オブジェクト・チェーン走査方向が順方向の場合、選択されたフィルタ・オブジェクト５６が関連するプリプロセッサ・メッセージ・オブジェクト５２を有するかどうかを判断し、フィルタ・オブジェクト・チェーン走査方向が逆方向の場合、選択されたフィルタ・オブジェクト５６が関連するポストプロセッサ・メッセージ・オブジェクト５３を有するかどうかを判断する。すなわち、メッセージ・トランザクション・ユニット４４はフィルタ・オブジェクト・チェーン走査方向に従って選択されたフィルタ・オブジェクト５６がメッセージ・オブジェクト５８を参照するかどうかを判断する。選択されたフィルタ・オブジェクト５６がフィルタ・オブジェクト・チェーン走査方向に従ってメッセージ・オブジェクト５８を参照しないならば、ステップ７２０に進む。選択されたフィルタ・オブジェクト５６がフィルタ・オブジェクト・チェーン走査方向に従ってメッセージ・オブジェクト５８を参照するならば、メッセージ・トランザクション・ユニット４４は送信ＭＣＢで指定されたメッセージ・タイプが選択されたフィルタ・オブジェクトのメッセージ・タイプ・リストのメッセージ・タイプとマッチングするかどうかを判断する。マッチングしないならば、ステップ７２０に戻る。送信ＭＣＢで指定されたメッセージ・タイプが選択されたフィルタ・オブジェクトのメッセージ・タイプ・リストのメッセージ・タイプとマッチングするならば、メッセージ・トランザクション・ユニット４４はステップ７３６において、選択されたフィルタ・オブジェクト５６においてフィルタ・オブジェクト・チェーン走査方向に従って参照されたメッセージ・オブジェクトを現在のメッセージ・オブジェクトとする。ステップ７３６の後、メッセージ・オブジェクト４４はステップ７３８において選択されたフィルタ・オブジェクト５６を現在のフィルタ・オブジェクトとする。ステップ７３８の後、メッセージ・トランザクション・ユニット４４はステップ７３９において、継続メッセージ要求で指定された現在の結果に従って受渡ＭＣＢ８０の現在の結果を更新する。次に、メッセージ・トランザクション・ユニット４４はステップ７４０において、順方向メッセージ動作を行い終了する。
ステップ７２０においてメッセージ・トランザクション・ユニット４４が現在のフィルタ・オブジェクト５６がフィルタ・オブジェクト・チェーン走査方向に従って別のフィルタ・オブジェクト５６を参照していないと判断した場合、メッセージ・トランザクション・ユニット４４はステップ７２２において、送信ＭＣＢによって参照されたメッセージに対して行なわれた一番最近の動作がプリプロセッサ・メッセージ・オブジェクト５２に関連しているかどうかを調べる。関連しているならば、メッセージ・トランザクション・ユニット４４はステップ７２６において、目標メッセージ・オブジェクト５１を現在のメッセージ・オブジェクト５８とする。その後、メッセージ・オブジェクト４４はステップ７２８において、目標メッセージ・オブジェクトのフィルタ・オブジェクト・チェーン５７の最後のフィルタ・オブジェクト５６を現在のフィルタ・オブジェクト５６とする。ステップ７２８の後、ステップ７４０に進む。
メッセージ・トランザクション・ユニット４４がステップ７２２においてフィルタ・オブジェクト・チェーン走査方向が逆方向であると判断し、送信ＭＣＢによって参照されたメッセージに対して行なわれた一番最近の動作がポストプロセッサ・メッセージ・オブジェクト５３に関連していることが示唆された場合、メッセージ・トランザクション・ユニット４４は次にステップ７５０において、送信ＭＣＢにおけるフィルタ・オブジェクト５６のスタックが空であるかどうかを判断する。フィルタ・オブジェクトのスタックが空ではない場合、メッセージ・トランザクション・ユニット４４はステップ７５２において、フィルタ・オブジェクトのスタックの一番上の項目を選択し、ステップ７５４において、対応するフィルタ・オブジェクト５６を現在のフィルタ・オブジェクト５６とする。次にメッセージ・トランザクション・ユニット４４はステップ７５６において、フィルタ・オブジェクトのスタックの一番上の項目を削除する。ステップ７５６の後、ステップ７３２に進む。
メッセージ・トランザクション・ユニット４４がステップ７５０においてフィルタ・オブジェクトのスタックが空であると判断した場合、メッセージ・トランザクション・ユニット４４は次にステップ７５０において応答動作を行い終了する。
図１７Ａ，１７Ｂおよび１７Ｃは順方向メッセージ動作（図１０Ｂのステップ１４０、図１４のステップ５１６および図１６Ｂのステップ７４０）を行なう方法を示すフローチャートである。ステップ８００においてメッセージ・トランザクション・ユニット４４が順方向メッセージ要求で指定されたメッセージＩＤをデコードする。次に、メッセージ・トランザクション・ユニット４４はステップ８０２において、順方向メッセージ要求で指定されたメッセージＩＤが有効であるかどうかを判断する。メッセージＩＤが有効でなければ、メッセージ・トランザクション・ユニット４４はステップ８０４において無効ＩＤエラーを返して終了する。メッセージＩＤが有効であれば、メッセージ・トランザクション・ユニット４４はステップ８０６において、メッセージ・オブジェクト・ロック動作と同期する。次に、メッセージ・トランザクション・ユニット４４はステップ８０８において、メッセージＩＤに対応する送信ＭＣＢの場所を特定する。そしてメッセージ・トランザクション・ユニット４４はステップ８１０において、送信ＭＣＢが現在のポート・オブジェクトのペンディング応答メッセージ・リストで参照されているかどうかを判断する。参照されている場合、メッセージ・トランザクション・ユニット４４はステップ８１１において、送信ＭＣＢへの参照符号を現在のポート・オブジェクトのペンディング応答メッセージ・リストから削除する。ステップ８１１の後、またはステップ８１０の後、メッセージ・トランザクション・ユニット４４はステップ８１２において、送信ＭＣＢは同期送信ＭＣＢ６０かどうか判断する。送信ＭＣＢが同期送信ＭＣＢ６０ではないならば、メッセージ・トランザクション・ユニット４４はステップ８１４において、順方向メッセージ要求が現在のポート・オブジェクト５４と異なるポート・オブジェクト５４を示しているかどうかを判断する。異なるポート・オブジェクトであるならば、メッセージ・トランザクション・ユニット４４はステップ８１６において、新しいポート・オブジェクト５４上に新しい非同期送信ＭＣＢ６２を割り当てる。メッセージ・トランザクション・ユニット４４は次にステップ８１８において、古い非同期送信ＭＣＢ６２からデータ・フィールドを新しい非同期送信ＭＣＢ６２にコピーする。
ステップ８１８の後、ステップ８１４の後、またはステップ８１２の後、メッセージ・トランザクション・ユニット４４はステップ８２２において、順方向メッセージ要求が新しい目標メッセージ・オブジェクト５１を示しているかどうかを判断する。示しているならば、メッセージ・トランザクション・ユニット４４はステップ８２４において、新しい目標メッセージ・オブジェクトＩＤが有効かどうかを判断する。新しい目標メッセージ・オブジェクトＩＤが有効でなければ、メッセージ・トランザクション・ユニット４４は無効ＩＤエラーを返して終了する。新しい目標メッセージ・オブジェクトＩＤが有効であれば、メッセージ・トランザクション・ユニット４４ステップ８２８において、同期送信ＭＣＢ６０または新しい非同期送信ＭＣＢ６２のいずれかにおけるフィルタ・オブジェクトのスタックを更新する。ステップ８２８では、メッセージ・トランザクション・ユニット４４は、同期送信ＭＣＢ６０または新しい非同期送信ＭＣＢ６２のいずれかにおけるフィルタ・オブジェクトのスタックに保存された元来の目標メッセージ・オブジェクトのフィルタ・オブジェクト・チェーン５７の各フィルタ・オブジェクト５６への参照符号を逆方向にプッシュする。すなわち、元来の目標メッセージオブジェクト５１に関連したフィルタ・オブジェクト・チェーン５７のフィルタ・オブジェクト５６への参照符号が、フィルタ・オブジェクト・チェーン５７の最後のフィルタ・オブジェクト５６に始まってフィルタ・オブジェクト・チェーン５７の最初のフィルタ・オブジェクト５６に至るように、フィルタ・オブジェクト・スタックにプッシュされていく。ステップ８２８の後、メッセージ・トランザクション・ユニット４４はステップ８３０において、新しい目標メッセージ・オブジェクト５１を現在のメッセージ・オブジェクトとする。
ステップ８３０の後、またはステップ８２２の後、メッセージ・トランザクション・ユニット４４はステップ８１６の結果新しい非同期送信ＭＣＢ６２が割り当てられたかどうか判断する。割り当てられている場合、メッセージ・トランザクション・ユニット４４はステップ８３４において、古いポート・オブジェクト５４上の古い非同期送信ＭＣＢ６２の割当を解除する。ステップ８３４の後、またはステップ８３２の後、メッセージ・トランザクション・ユニット４４はステップ８３６において、現在のメッセージ・オブジェクト５８に関連したポート・オブジェクト５４を現在のポート・オブジェクト５４とすることによって、メッセージ・トランザクション・ユニット４４は同期送信ＭＣＢ６０または新しい非同期送信ＭＣＢ６２のいずれかのデータ・フィールドを更新する。次にメッセージ・トランザクション・ユニット４４はステップ８３８において、プリプロセッサ・メッセージ・オブジェクト５２を調べ、その後メッセージ・トランザクション・ユニット４４はステップ８４０において、低レベル送信動作を行なう。ステップ８４０の後、終了する。
図１８Ａおよび１８Ｂは受信メッセージ動作（図１０Ｂおよび１０Ｃのそれぞれステップ１４４および１５８）を行なう方法を示すフローチャートである。ステップ９００において、メッセージ・トランザクション・ユニット４４は受信メッセージ要求で指定されたポート・オブジェクトＩＤをデコードする。次に、メッセージ・トランザクション・ユニット４４はステップ９０２において、ポート・オブジェクトＩＤが有効かどうかを判断する。ポート・オブジェクトＩＤが有効でなければ、メッセージ・トランザクション・ユニット４４はステップ９０４において、受信メッセージ要求を発行したサーバ・タスク３４に無効ＩＤエラーを返し、終了する。ポート・オブジェクトＩＤが有効の場合、メッセージ・トランザクション・ユニット４４は次にステップ９０６において、マッチングする送信ＭＣＢがポート・オブジェクトのペンディング送信メッセージリストに存在するかどうか判断する。マッチングする送信ＭＣＢが存在しない場合、メッセージ・トランザクション・ユニット４４はステップ９０８において、発行された受信メッセージ要求のタイプに従って受信ＭＣＢを作成し、ペンディング受信メッセージ要求リストの受信ＭＣＢに参照符号を挿入する。ステップ９０８の後、メッセージ・トランザクション・ユニット４４はステップ９１０において、同期受信メッセージ要求かどうかを判断する。同期要求でない場合、メッセージ・トランザクション・ユニット４４はステップ９１２において、非同期受信メッセージ要求を発行したサーバ・タスク３４に受信ＩＤを返し、終了する。同期受信メッセージ要求の場合、メッセージ・トランザクション・ユニットはステップ９１４において、受信メッセージ要求を発行したサーバー・タスク３４をブロック化する。次に、ステップ９１６において、メッセージ・トランザクション・ユニット４４は受信ＭＣＢで指定された最大時間間隔を超過したかどうかを判断する。超過の場合、メッセージ・トランザクション・ユニット４４はステップ９１８において、サーバー・タスク３４に対してタイムアウト・ステータスを返し、終了する。最大時間間隔を超過していない場合、メッセージ・トランザクション・ユニットはメッセージ・トランザクション・ユニットは次にステップ９２０において、マッチングする送信メッセージ要求が発行されたかどうかを判断する。発行されていない場合、ステップ９１６に戻る。マッチングする送信メッセージ要求が発行されている場合、メッセージ・トランザクション・ユニット４４はステップ９２２において固有のメッセージＩＤを生成し対応する送信ＭＣＢを作成する。
ステップ９２２の後、またはステップ９０６の後、マッチングする送信ＭＣＢが存在する場合、メッセージ・トランザクション・ユニット４４はステップ９３０において、ポート・オブジェクトのペンディング応答メッセージ・リストの送信ＭＣＢに参照符号を挿入する。メッセージ・トランザクション・ユニット４４は次にステップ９３２において、受信メッセージ要求または受信ＭＣＢで指定されたアドレスに受信ＭＣＢ８０を作成する。ステップ９３２の後、メッセージ・トランザクション・ユニット４４はステップ９３４において、受信メッセージ要求が同期受信メッセージ要求かどうかを判断する。同期メッセージ要求である場合、メッセージ・トランザクション・ユニット４４はステップ９３６において、受信メッセージ要求を発行したサーバ・タスク３４がブロック化されているかどうかを判断する。ブロック化されている場合、メッセージ・トランザクション・ユニット４４はステップ９３８において、サーバ・タスク３４を非ブロック化する。メッセージ・トランザクション・ユニット４４がステップ９３４において受信メッセージ要求が同期受信メッセージ要求ではなく非同期受信メッセージ要求であると判断した場合、メッセージ・トランザクション・ユニット４４はステップ９４０において、非同期受信メッセージ要求を発行したサーバ・タスク３４に通知する。ステップ９４０またはステップ９３８の後、もしくはステップ９３８が実行されていない場合はステップ９３６の後、メッセージ・トランザクション・ユニット４４はステップ９４２において、送信ＭＣＢで指定されたメッセージを受信メッセージ要求で指定されたメッセージ・バッファに送る。ステップ９４２の後、メッセージ・トランザクション・ユニット４４はステップ９４４において、受信メッセージ要求に対応する受信ＭＣＢが作成されたかどうかを判断する。作成されている場合、メッセージ・トランザクション・ユニット４４はステップ９４６において、受信ＭＣＢおよびペンディング受信メッセージ・リストの対応参照符号を削除する。ステップ９４６の後、もしくはステップ９４６が実行されていない場合はステップ９４４の後、終了する。
図１９Ａおよび１９Ｂは応答方法を示すフローチャートである。ステップ１０００においてメッセージ・トランザクション・ユニット４４はメッセージＩＤをデコードする。次にメッセージ・トランザクション・ユニット４４はステップ１００２において、メッセージＩＤが有効かどうかを判断する。メッセージＩＤが有効でなければ、メッセージ・トランザクション・ユニット４４はステップ１００４において無効ＩＤエラーを返し、終了する。メッセージＩＤが有効であれば、メッセージ・トランザクション・ユニット４４はステップ１００６において、対応する送信ＭＣＢの位置を特定する。メッセージ・トランザクション・ユニット４４は次にステップ１００８において、メッセージに対して実行された一番最近の動作がプリプロセッサ・メッセージ・オブジェクト５２に関連しているかどうかを判断する。ステップ１００８において、メッセージ・トランザクション・ユニット４４は現在のメッセージ・オブジェクトＩＤが現在のフィルタ・オブジェクト５６内に記憶されているプリプロセッサ・メッセージ・オブジェクトＩＤと同一かどうかを判断する。メッセージに対して行なわれた一番最近の動作がプリプロセッサ・メッセージ・オブジェクト５２と関連しているならば、メッセージ・トランザクション・ユニット４４はステップ１０１０において、現在のフィルタ・オブジェクト５６と関連したポストプロセッサ・メッセージ・オブジェクト５３を現在のメッセージ・オブジェクト５８とする。ステップ１０１０の後、メッセージ・トランザクション・ユニット４４はステップ１０１１において、応答で指定された現在の結果に従って受信ＭＣＢ８０の現在の結果を更新する。次に、メッセージ・トランザクション・ユニット４４はステップ１０１２において、転送メッセージ動作を行ない終了する。
ステップ１０１８においてメッセージ・トランザクション・ユニット４４が現在のメッセージ・オブジェクトＩＤが現在のフィルタ・オブジェクト５６内に記憶されているプリプロセッサ・メッセージ・オブジェクトＩＤと同一であると判断した場合、メッセージ・トランザクション・ユニット４４はステップ１０１０から１０１２を実行して上記のスキップ・アヘッド動作を行なう。すなわちプリプロセッサ・メッセージ・オブジェクト５２と関連したプリプロセッシング・サービスを実行中にサーバ・タスク３４が応答を発行した場合、付加的プリプロセッシングを考慮した追加的なフィルタ・オブジェクト５６を調べないで、またメッセージを目標メッセージ・オブジェクト５１に渡さずに、メッセージは直接プリプロセッサ・メッセージ・オブジェクト５２に関連したポストプロセッサ・メッセージ・オブジェクト５３に送られる。付加的なプリプロセッシング・サービスおよび目標メッセージ・オブジェクト５１と関連したサービスはスキップ・アヘッド動作によってスキップされる。
ステップ１００８においてメッセージ・トランザクション・ユニット４４がメッセージに対して一番最近行なわれた動作がプリプロセッサ・メッセージ・オブジェクト５２に関連していないと判断した場合、メッセージ・トランザクション・ユニット４４はステップ１０１４において、現在のフィルタ・オブジェクト５６が以前のフィルタ・オブジェクト５６を参照しているかどうかを判断する。参照しているならば、メッセージ・トランザクション・ユニット４４はステップ１０１８において、継続メッセージ動作を行ない終了する。メッセージ・トランザクション・ユニット４４がステップ１０１４において現在のフィルタ・オブジェクト５６が以前のフィルタ・オブジェクト５６を参照していないと判断すれば、メッセージ・トランザクション・ユニット４４は送信ＭＣＢのフィルタ・オブジェクトのスタックが空いているかどうか判断する。フィルタ・オブジェクトのスタックが空ではない場合、ステップ１０１８に進む。フィルタ・オブジェクトのスタックが空の場合、メッセージ・トランザクション・ユニット４４は次にステップ１０２０において、送信ＭＣＢで指示されたクライアント・タスク３２に応答ステータスを渡す。メッセージ・トランザクション・ユニット４４は次にステップ１０２２において、応答バッファが応答中に指示されているかどうかを判断する。指示されていれば、メッセージ・トランザクション・ユニット４４はステップ１０２４において、応答バッファの内容のコピーをクライアント・タスク３２に渡す。ステップ１０２４の後、もしくは応答中に応答バッファが指示されていない場合はステップ１０２２の後、メッセージ・トランザクション・ユニット４４はステップ１０２６において、現在のメッセージ・オブジェクト５６がメッセージ・トランザクション終了後非ブロック化される必要があるかどうかを判断する。必要があれば、メッセージ・トランザクション・ユニット４４はステップ１０２８において対応する非ブロック化要求をロッキング部４６に発行する。ステップ１０２６の後、またはステップ１０２８の後、メッセージ・トランザクション・ユニット４４はステップ１０３０においてメッセージ・トランザクションを表すメッセージＩＤを削除する。最後に、メッセージ・トランザクション・ユニット４４はステップ１０３２において送信ＭＣＢを削除し終了する。
図２０はロック動作を示すフローチャートである。本発明では、ロック動作は合衆国特許ＮＯ．０８／２２０，０４３と同様の方法でロック動作を行なう。ステップ１１００においてロック部４６がロック要求で指定されたメッセージ・オブジェクトＩＤが有効かどうかを判断する。メッセージ・オブジェクトＩＤが有効でなければ、ロック部４６はステップ１１０２において、ロック要求の発行元に対して無効ＩＤエラーを返して終了する。メッセージ・オブジェクトＩＤが有効であれば、ロック部４６は次にステップ１１０４において、メッセージ・オブジェクト５８が既にロックされているかどうかを、メッセージ・オブジェクト５２と関連したポート・オブジェクト５４内のロック済メッセージ・オブジェクト・リストを調べることによって判断する。本発明の好ましい実施例においては、ロック済メッセージ・オブジェクト・リストの各要素は、メッセージ・オブジェクトＩＤとセマフォを指定したロック構造である。メッセージ・オブジェクト５８がロック済でない場合、ロック部４６はステップ１１０５において、クライアント・タスク３２によって発行された新しい送信メッセージ要求を無視し、ステップ１１０６においてメッセージ・オブジェクト５８を指定した、関連ポート・オブジェクトのペンディング応答メッセージ・リストで参照された各送信ＭＣＢに対して応答が発行されるのを待つ。好ましくは、ロック部４６は、メッセージ・オブジェクト５８を指定したペンディング応答メッセージ・リストで参照されている送信メッセージ制御ブロックの数をまず数えることによって、ステップ１１０６を実行し、その後ロック部４６は数えあげた各被参照ブロックがペンディング応答メッセージ・リストから消されるのを待つ。ステップ１１０６の後、ロック部４６は対応するメッセージ・オブジェクトＩＤを含む新しいロック構造をロック済メッセージ・オブジェクトのリストに挿入することによって、メッセージ・オブジェクト５８をロックする。次にロック部４６はステップ１１１８において、ロック要求の発行元に制御を返し、終了する。
ステップ１１０４において、ロッキングユニット４６がメッセージオブジェクト５８は既にロックされたことを判定した場合、ロッキングユニット４６は、次に、ステップ１１１０においてロック要求発行者の照会先をロックされたメッセージオブジェクトのリスト内の対応するロック構造セマフォに加える。好ましくは、セマフォは、メッセージオブジェクト５８をロックするため待機中の各タスクのクライアントタスクＩＤ又はサーバタスクＩＤを示す先入れ先出し順のロック待ちリストを与える。ステップ１１１０の後に、ロッキングユニット４６は、ステップ１１１２において、現在考慮されているロック要求の発行者がメッセージオブジェクトのロックの支配権を次に受容するかどうかを判定する。好ましい方法において、ロッキングユニット４６は、現在考慮されているロック要求の発行者のＩＤがロック待ちリストの先頭にあるかどうかを判定することによりステップ１１１２を実行する。現在考慮されているロック要求の発行者がメッセージオジェクトのロックの支配権を次に受けないならば、上記の好ましい方法はステップ１１１２に留まる。
現在考慮されているロック要求の発行者がメッセージオブジェクトのロックの支配権を次に受けた後、ロッキングユニット４６は、ロック解除要求がステップ１１１４において発行されたかどうかを判定する。ロック解除要求が発行されていないならば、好ましい方法は、ステップ１１１４に留まる。ロック解除要求が発行された後、ロッキングユニット４６は、ステップ１１１６においてロック解除動作を行うことによりロック解除要求に応答する。ステップ１１１６に続き、ステップ１１１８において、上記の好ましい方法は、現在考慮されているロック要求の発行者に制御を戻し、その後、上記の好ましい方法は終了する。
図２１を参照するに、ロック解除動作を行う好ましい方法のフローチャートが示される。本発明において、ロック解除動作は、米国特許出願第０８／２２０，０４３号に記載された方法と同じ方法で行われる。好ましい方法は、ロッキングユニット４６がロック解除要求に示されたメッセージオブジェクト５２のメッセージオブジェクトＩＤが有効であるかどうかを判定するステップ１２００から始まる。メッセージオブジェクトＩＤが有効ではないならば、ロッキングユニット４６は、ステップ１２０２において、ロック解除要求の発行者に無効ＩＤエラーを返し、次に、好ましい方法は終了する。ステップ１２００において、メッセージオブジェクトＩＤが有効であると判定されたならば、ロッキングユニット４６は、次に、ステップ１２０４において、メッセージオブジェクト５２が現在ロックされているかどうかを判定する。好ましくは、ロッキングユニット４６は、ロックされたメッセージオブジェクトの関係したポートオブジェクトのリストを検査することにより、メッセージオブジェクト５２が現在ロックされているかどうかを判定する。メッセージオブジェクト５２が現在ロックされていない場合、ロッキングユニット４６は、ステップ１２０６において、ロック解除要求の発行者にロック状態エラーを戻し、その後、好ましい方法は終了する。
メッセージオブジェクト５２が現在ロックされているならば、ロッキングユニット４６は、次にステップ１２０８において、別のタスクがメッセージオブジェクトのロックの支配権の取得を待機しているかどうかを判定する。ロッキングユニット４６は、好ましくは、メッセージオブジェクト５２と関係したセマフォを検査することにより、ステップ１２０８を実行する。他のタスクが支配権の取得を待機していないならば、ロッキングユニット４６は、ステップ１２１０において、ロックされたメッセージオブジェクトの対応するポートオブジェクトのリストから対応するロック構造を除去する。ステップ１２１０に続き、ロッキングユニット４６は、ステップ１２１４において、ロック解除要求の発行者に制御を戻す。ステップ１２０８において別のタスクがメッセージオブジェクトのロックの支配権の取得を待機しているならば、ロッキングユニット４６は、ステップ１２１２において、セマフォのロック待ちリストの先頭のクライアントタスク３２又はサーバタスク３４の照会先を除去する。ステップ１２１２に続いて、好ましい方法はステップ１２１４に進む。
好ましい実施例を参照して本発明の説明を行ったが、当業者は種々の変更が与えられることを認める。請求の範囲の記載だけによって限定された本発明により、上記の好ましい実施例に基づく変形及び変更が与えられる。
付録  Ａ
メッセージオブジェクトフィルタリングのＮｕカーネルオペレーティングシステム
Ｎｕカーネル  ＥＲＳのフィルタ内容
（付録Ａの題材）
オブジェクトメッセージのフィルタリング
メッセージフィルタは、別のオブジェクトメッセージを遮るため使用されるオブジェクトの対である。フィルタを備えたオブジェクトはターゲットと呼ばれる。ターゲット上に実装されたフィルタの組はフィルタ系列と呼ばれる。
実装されたフィルタはＩＤにより名前を付けられる。ＩＤは、後でフィルタを除去、又は、フィルタの実装情報を取得するため使用される。
実装された後、フィルタは、クライアントとサーバの双方に対し完全にトランスペアレントである。しかし、サーバは、そのオブジェクトがターゲットになるものを完全に管理する。
ターゲットが削除されたならば、実装された全フィルタは、自動的に除去される。ターゲットがロックされたならば、ロックはフィルタ系列の全体に適用される。ターゲットオブジェクトのフィルタ系列は、繰り返しのサービスを用いて検査される。
フィルタの数、又は、フィルタを通されるオブジェクトの数に制限はない。フィルタオブジェクトは、単一のポートを共有するが、フィルタは一つのオブジェクトのメッセージだけを遮ることが可能である。
0003689425.tif 000002
２種類のメッセージオブジェクトがフィルタに使用される。第１の種類のオブジェクトは、メッセージがターゲットに到達する前に、メッセージを遮り、プリプロセッサと呼ばれる。第２の種類のオブジェクトは、メッセージがターゲットから離れた後にメッセージを遮り、ポストプロセッサと呼ばれる。フィルタは、プリプロセッサだけから構成してもよく、或いは、ポストプロセッサだけから構成してもよい。
一つのメッセージだけが各フィルタ及びターゲットオブジェクトを通過させられる。このメッセージは、最初にプリプロセッサに与えられた、次にターゲットに与えられ、最後にポストプロセッサに与えられる。
送信メッセージ（SendMessage）、送信メッセージ非同期（SendMessageAsync）、及び転送メッセージ（ForwardMessage）のサービスは、オブジェクトのプリプロセッサを起動する。メッセージ応答（ReplyToMessage）及び非同期メッセージ削除（CancelAsyncMessage）サービスは、ポストプロセッサを起動する。継続メッセージ（ContinueMessage）サービスは、メッセージを系列内の次のオブジェクトに伝達するためオブジェクトによって使用される。
転送メッセージサービスは、メッセージを新しいターゲットに供給する前に現在のフィルタ系列内の残りのポストプロセッサを積み重ねる。新しいターゲットと、そのフィルタが処理を完了した後、残りのポストプロセッサの積み重ねが作動される。
プリプロセッサオブジェクトは、ターゲットを飛び越し、その対の一方から始まる後処理を開始するため、メッセージ応答を発行する。ポストプロセッサオブジェクトにより発生されたメッセージによる状態は、その対の一方により除去される。
内容変更フィルタが提供される予定ならば、オブジェクトのメッセージ内容のフォーマットは公開される。フィルタがフォーマットの変化に従うならば、メッセージ内容の版数が望ましい。
フィルタ名
全てのフィルタには名前が付けられる。同じターゲットに取付けられたフィルタは、特有の名前をもつ必要がある。別個のターゲットに実装されたフィルタは名前を共有してもよい。
フィルタ名は、サービス及び署名の型により構成される。サービス型は、フィルタにより提供される機能を識別する。署名型は、サービスの提供者を識別する。
0003689425.tif 000003
例えば、アップル社製の暗号化フィルタは、’ＥＮＣＲ’，’ＡＰＰＬ’のように名前が付けられる。署名型の登録及び割当ては、アップルコンピュータ社により管理される。
フィルタの順序付け
ある種のフィルタは、他のフィルタに対する起動の順序の保証を要求する。順序の要求条件は、２個の規則の組により指定される。第１の規則はフィルタ系列の所望の場所の前にあるフィルタを指定し、第２の規則は後にあるフィルタを指定する。前方及び後方規則の組合せにより、フィルタ系列内の配置が決まる。
0003689425.tif 000004
【図１】
0003689425.tif 000005
【図２】
0003689425.tif 000006
【図３】
0003689425.tif 000007
【図４】
0003689425.tif 000008
【図５】
0003689425.tif 000009
【図６】
0003689425.tif 000010
【図９】
0003689425.tif 000011
【図７Ａ】
0003689425.tif 000012
【図７Ｂ】
0003689425.tif 000013
【図８Ａ】
0003689425.tif 000014
【図８Ｂ】
0003689425.tif 000015
【図１０Ａ】
0003689425.tif 000016
【図１０Ｂ】
0003689425.tif 000017
【図１０Ｃ】
0003689425.tif 000018
【図１１Ａ】
0003689425.tif 000019
【図１１Ｂ】
0003689425.tif 000020
【図１１Ｃ】
0003689425.tif 000021
【図１１Ｄ】
0003689425.tif 000022
【図１２】
0003689425.tif 000023
【図１３】
0003689425.tif 000024
【図１４】
0003689425.tif 000025
【図１５Ａ】
0003689425.tif 000026
【図１５Ｂ】
0003689425.tif 000027
【図１５Ｃ】
0003689425.tif 000028
【図１６Ａ】
0003689425.tif 000029
【図１６Ｂ】
0003689425.tif 000030
【図１６Ｃ】
0003689425.tif 000031
【図１７Ａ】
0003689425.tif 000032
【図１７Ｂ】
0003689425.tif 000033
【図１７Ｃ】
0003689425.tif 000034
【図１８Ａ】
0003689425.tif 000035
【図１８Ｂ】
0003689425.tif 000036
【図１９Ａ】
0003689425.tif 000037
【図１９Ｂ】
0003689425.tif 000038
【図２０】
0003689425.tif 000039
【図２１】
0003689425.tif 000040