JP3689425B2 - オブジェクト指向メッセージフィルタリングのシステム及び方法 - Google Patents

オブジェクト指向メッセージフィルタリングのシステム及び方法 Download PDF

Info

Publication number
JP3689425B2
JP3689425B2 JP52968295A JP52968295A JP3689425B2 JP 3689425 B2 JP3689425 B2 JP 3689425B2 JP 52968295 A JP52968295 A JP 52968295A JP 52968295 A JP52968295 A JP 52968295A JP 3689425 B2 JP3689425 B2 JP 3689425B2
Authority
JP
Japan
Prior art keywords
message
filter
request
target
mcb
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP52968295A
Other languages
English (en)
Other versions
JPH10500507A (ja
Inventor
イー ソールポー,トマス
ジェイ シマンスキー,スティーヴン
Original Assignee
アップル コンピュータ インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by アップル コンピュータ インコーポレイテッド filed Critical アップル コンピュータ インコーポレイテッド
Publication of JPH10500507A publication Critical patent/JPH10500507A/ja
Application granted granted Critical
Publication of JP3689425B2 publication Critical patent/JP3689425B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)

Description

関連出願への参照
本発明は、1994年3月30日に出願された「オブジェクト指向メッセージ受け渡しシステム及び方法」と題される米国特許出願番号08/220,043号に関連し、これを参照することによってその内容をここに含むものとする。
発明の背景
1.発明の分野
本発明は、一般にコンピュータ内通信のシステム及び方法に関し、詳しくはメッセージに基づくクライアント・サーバ通信のシステム及び方法に関する。更に詳しくは、本発明は、オブジェクト指向メッセージフィルタリングのシステム及び方法である。
2.背景技術の説明
コンピュータ内通信に於て、クライアントタスクは、サーバタスクが提供するサービスを必要とする。例えばクライアントタスクは、ウィンドウの生成或いはファイル削除等のサービスを必要とする。クライアントタスクが必要とする特定のサービスは、ウィンドウマネージャー或いはファイルシステム等の適当なサーバタスクによって実行される。クライアント及びサーバの間の通信の単位はメッセージである。従って、サーバに特定のサービスが要求されていることを知らせるために、クライアントタスクは適切なメッセージを送信或いは発行する。発行されたメッセージを受け取ると、サーバータスクは要求された動作を実行する。米国特許出願番号08/220,043号に記載されているように、メッセージ受け渡しシステム及び方法は、クライアントタスクが発行したメッセージをサーバタスクに渡す方法について規定する。
従来技術に於て、クライアントタスクは、サービスを必要とする度にメッセージを送らなければならない。ある特定のサービスを実行するためには、しばしば、関連した別の付加的サービスを実行する必要がある。例えば、ディスクファイルにデータを書き込むサービスを実行するためには、第1の関連サービスとしてデータを暗号化し、第2の関連サービスとしてデータを圧縮する必要があるかも知れない。従って、この例において必要な暗号化、圧縮、及びデータのデータファイルへの書き込みを実行するためには、合計3つのメッセージを送信する必要がある。各メッセージを送信する毎に、そのメッセージを適当な処理用のサーバタスクに渡す必要があり、そのためのメモリの間接的なコスト(オーバーヘッド)が増加する。更に、各メッセージは適切な順番で送信されサービスを受ける必要があり、またクライアントタスクは、関連するサービスが必要なときには、メッセージの送信先である全てのサーバタスクを監視し続ける必要がある。上述の問題は、クライアントタスク及びサーバタスクをより複雑にするものである。
必要とされるのは、メモリオーバーヘッドを最小化するメッセージ転送手段であり、またメッセージに応じて複数のサーバタスクが動作実行するときに、クライアントタスク及びサーバタスクを不要な複雑さから解放するメッセージ転送手段である。
発明の概要
本発明は、オブジェクト指向メッセージフィルタリングのシステム及び方法である。本発明に於て、クライアントタスクが送信したメッセージは、前処理、処理、及び後処理のためのサーバタスクに、選択的かつ自動的に転送される。本発明のシステムは、処理ユニットと、オブジェクト指向メッセージフィルタリングユニットが存在するメモリとを含む。オブジェクト指向メッセージフィルタリングユニットは、ポートオブジェクト及びターゲットメッセージオブジェクトを生成して管理する。各ターゲットメッセージオブジェクトに対して、オブジェクト指向メッセージフィルタリングユニットは、関連フィルタオブジェクトを選択的に生成して管理する。あるターゲットメッセージオブジェクトに関連するフィルタオブジェクトの集合は、フィルタオブジェクト系列(チェーン)と呼ばれる。各フィルタオブジェクトに対して、オブジェクト指向メッセージフィルタリングユニットは、関連プリプロセッサメッセージオブジェクト、関連ポストプロセッサメッセージオブジェクト、或いは関連プリプロセッサメッセージオブジェクト及び関連ポストプロセッサメッセージオブジェクトの両者を、選択的に生成して管理する。各ターゲットメッセージオブジェクト、プリプロセッサメッセージオブジェクト、及びポストプロセッサメッセージオブジェクトは、ポートオブジェクトに関連づけられる。
クライアントタスクは、メッセージ送信要求を発行することによって、ターゲットメッセージオブジェクトに向けられたメッセージを送信する。送信メッセージ要求に記されたメッセージが、要求されるサービスを示す。送信メッセージ要求に応答して、オブジェクト指向メッセージフィルタリングユニットは、ユニークなメッセージID及びそのメッセージへの参照を含む送信メッセージ制御ブロック(MCB)を生成する。オブジェクト指向メッセージフィルタリングユニットは、メッセージオブジェクトに関連づけられるポートオブジェクトに送信MCBへの参照を格納することによって、そのメッセージオブジェクトにメッセージを渡す。送信MCBをターゲットメッセージオブジェクトに渡す前に、オブジェクト指向メッセージフィルタリングユニットは、ターゲットメッセージオブジェクトのフィルタオブジェクトチェーンを介して、ターゲットメッセージオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトに、送信MCBを自動的かつ選択的に発送する。ターゲットメッセージオブジェクトにメッセージを渡した後、オブジェクト指向メッセージフィルタリングユニットは、フィルタオブジェクトチェーンを介して、ターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信MCBを自動的かつ選択的に発送する。
サーバタスクは、ポートオブジェクトへの参照を含む受信メッセージ要求を発行することによって、そのポートオブジェクトからメッセージを受け取る。メッセージ受信後、サーバタスクは、そのメッセージが渡された特定のメッセージオブジェクトに対応したサービスを実行する。オブジェクト指向メッセージフィルタリングユニットは、各送信MCBと受信メッセージリクエストとを対応付ける。各プリプロセッサメッセージオブジェクト、ターゲットメッセージオブジェクト、及びポストプロセッサメッセージオブジェクトは、ポートオブジェクトに関連づけられているので、送信MCBを前処理メッセージオブジェクトに選択的に配送することによって、ターゲットメッセージオブジェクトに関連づけられるサービスを実行する前に必要であるような、メッセージ前処理サービスを促進することが出来る。同様に、送信MCBをポストプロセッサメッセージオブジェクトに選択的に配送することによって、ターゲットメッセージオブジェクトに関連づけられるサービスを実行した後に必要であるような、メッセージ後処理サービスを促進することが出来る。
あるサービスを実行した後、サーバタスクは、継続メッセージ要求、転送メッセージ要求、或いは返答を発行することが出来る。本発明に於て、ターゲットメッセージオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトにフィルタオブジェクトチェーンを介して送信MCBを転送或いは発送することを、前処理中にメッセージを”継続する”と呼ぶ。同様に、ターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトにフィルタオブジェクトチェーンを介して送信MCBを転送或いは発送することを、後処理中にメッセージを継続すると呼ぶ。オブジェクト指向メッセージフィルタリングユニットは、継続メッセージ要求に応答して、前処理或いは後処理に応じた継続メッセージ操作を実行することによって、メッセージを継続する。オブジェクト指向メッセージフィルタリングユニットはまた、転送メッセージ要求に応答して、メッセージ転送操作を実行することによって、送信MCBを新たなターゲットメッセージオブジェクトに”転送”する。
プリプロセッサメッセージオブジェクトに関連づけられたサービスをサーバタスクが実行した後に発行した返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、”飛ばして先に進む”操作によって、プリプロセッサメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信MCBを発送する。ターゲットメッセージオブジェクトに関連づけられたサービスをサーバタスクが実行した後に発行した返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、フィルタオブジェクトチェーンを介してターゲットメッセージオブジェクトに関連づけられたポストプロセッサメッセージオブジェクトに、送信MCBを選択的に発送する。全ての後処理の後に発行された返答に応答して、オブジェクト指向メッセージフィルタリングユニットは、元々メッセージを送信したクライアントタスクに、返答状態及びデータがあればデータを発送する。
本発明の方法は、ポートオブジェクトを生成し、ポートオブジェクトに関連づけられたターゲットメッセージオブジェクトを生成し、ターゲットメッセージオブジェクトに関連づけられたフィルタオブジェクトを生成し、フィルタオブジェクトに関連づけられたプリプロセッサメッセージオブジェクトを生成し、送信メッセージ要求によって開始されたメッセージ交信に反応してユニークなメッセージIDを生成し、送信メッセージ制御ブロックを生成し、送信メッセージ制御ブロックをターゲットメッセージオブジェクトに配送する前にプリプロセッサメッセージオブジェクトに選択的に発送する、各段階を含む。
【図面の簡単な説明】
図1は、本発明によるオブジェクト指向メッセージフィルタリングシステムの実施例を示すブロック図である。
図2は、本発明のオブジェクト指向メッセージフィルタリングユニットのブロック図である。
図3は、本発明によるオブジェクト指向メッセージフィルタリングモデルの好ましい構成のブロック図である。
図4は、本発明に於けるメッセージオブジェクトのブロック図である。
図5は、本発明に於けるポートオブジェクトのブロック図である。
図6は、本発明に於けるフィルタオブジェクトのブロック図である。
図7Aは、本発明に於ける同期送信メッセージ制御ブロックのブロック図である。
図7Bは、本発明に於ける非同期送信メッセージ制御ブロックのブロック図である。
図8Aは、本発明に於ける同期受信メッセージ制御ブロックのブロック図である。
図8Bは、本発明に於ける非同期受信メッセージ制御ブロックのブロック図である。
図9は、本発明に於ける配送メッセージ制御ブロックのブロック図である。
図10A、10B、及び10Cは、本発明によるオブジェクト指向メッセージフィルタリングの方法の好ましい一例のフローチャートである。
図11A、11B、11C、及び11Dは、新規フィルタオブジェクトをフィルタオブジェクトチェーンに挿入する方法の好ましい一例のフローチャートである。
図12は、送信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図13は、メッセージオブジェクトロッキング操作に同期させる方法の好ましい一例のフローチャートである。
図14は、プリプロセッサメッセージオブジェクトを検査する方法の好ましい一例のフローチャートである。
図15A、15B、及び15は、低レベル送信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図16A、16B、及び16Cは、継続メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図17A、17B、及び17Cは、転送メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図18A、18B、及び18Cは、受信メッセージ操作を実行する方法の好ましい一例のフローチャートである。
図19A及び19Bは、返答方法の好ましい一例のフローチャートである。
図20は、ロッキング操作を実行する方法の好ましい一例のフローチャートである。
図21は、ロッキング解除操作を実行する方法の好ましい一例のフローチャートである。
実施例の詳細な説明
図1は、本発明により構築されたオブジェクト指向メッセージフィルタリングシステム10の実施例のブロック図を示す。システム10は、処理ユニット12、入力装置14、出力装置16、及び所定量のメモリ18を含み、オペレーティングシステム30、クライアントタスク32、サーバタスク34がメモリ18内に存在する。オペレーティングシステム30は、米国特許出願番号08/220,043号に説明されるようなマイクロカーネルオペレーティングシステム30であることが好ましい。オブジェクト指向メッセージフィルタリングユニット40が、オペレーティングシステム30内に存在する。システム10の各要素は、共通システムバス29に接続された入力及び出力を有する。模範的な例に於て、本発明のシステム10は、カリフォルニアのCupertino所在のアップルコンピュータによって製造され、オブジェクト指向メッセージフィルタリングユニット40を含むマイクロカーネルオペレーティングシステム30が格納された8メガバイトのランダムアクセスメモリ(RAM)とモトローラのMC68030或いは後世代のマイクロプロセッサを有するアップルマッキントッシュコンピュータシステムである。
本発明に於て、クライアントタスク32は好ましくは、例えば外部記憶装置18からメモリ20にデータを転送するといったサービスを必要とするプログラム命令セットである。サービスの提供元は、ここではサーバタスク34として示される。各サーバタスク34もまた、プログラム命令セットであることが好ましい。
オブジェクト指向メッセージフィルタリングユニット40によって、クライアントタスク32から処理のためにサーバタスク34にメッセージを転送することが容易になる。図2は、オブジェクト指向メッセージフィルタリングユニット40の好ましい実施例のブロック図が示される。オブジェクト指向メッセージフィルタリング40は、オブジェクト管理ユニット42、メッセージ交信ユニット44、ロッキングユニット46、及びオブジェクトデータベース48を含み、フィルタオブジェクトメモリ49がオブジェクトデータベース48に格納される。オブジェクト指向メッセージフィルタリングユニット40の各要素は、共通システムバス29に接続された入力及び出力を有する。
オブジェクト管理ユニット42は、メモリ20内にオブジェクト或いはデータ構造の集合を生成して管理し、これはオブジェクト指向メッセージフィルタリングモデル50を形成する。図3は、オブジェクト指向メッセージフィルタリングモデル50の好ましい一例のブロック図を示す。オブジェクト指向メッセージフィルタリングモデル50の好ましい一例は、一つ或いは複数のターゲットメッセージオブジェクト51を含む。ターゲットメッセージオブジェクト51の各々が、サーバタスク34が提供する特定のサービスに対応することが好ましい。あるターゲットメッセージオブジェクト51に関連する動作を起こさせるために、クライアントタスク32は、送信メッセージ要求を発行することによってターゲットメッセージオブジェクト51にメッセージを送る。この送信メッセージ要求はターゲットメッセージオブジェクト51と、メッセージと、メッセージタイプを指定する。送信メッセージ要求は、以下により詳細に説明される。あるターゲットメッセージオブジェクト51に関連付けられたクライアントタスク32の集合を、クライアントチーム33と呼ぶ。
一つ或いは複数のフィルタオブジェクト56が、特定のターゲットメッセージオブジェクト51に関連づけられる。ターゲットメッセージオブジェクト51が関連づけられたフィルタオブジェクト56を有する場合、ターゲットメッセージオブジェクト51はフィルタされていると言う。ターゲットメッセージオブジェクト51に関連づけられたフィルタオブジェクト56の集合を、フィルタオブジェクトチェーン57と呼ぶ。各フィルタオブジェクト56は選択的メッセージ捕獲手段であり、この選択性はメッセージタイプの集合によって実現されることが好ましい。各フィルタオブジェクト56には、プリプロセッサメッセージオブジェクト52、ポストプロセッサメッセージオブジェクト53、或いはプリプロセッサメッセージオブジェクト52及びポストプロセッサメッセージオブジェクト53の何れかが関連づけられる。プリプロセッサメッセージオブジェクト52は、ターゲットメッセージオブジェクト51に関連づけられたサービスをサーバタスクが実行する前に実行されるべき、特定のサービスである。同様に、ポストプロセッサメッセージオブジェクト53は、ターゲットメッセージオブジェクト51に関連づけられたサービスをサーバタスクが実行した後に実行されるべき、特定のサービスである。好ましい実施例に於ては、プリプロセッサメッセージオブジェクト52とポストプロセッサメッセージオブジェクト53とは、それ自身がフィルタされていてよい。
メッセージフィルタリングモデル50の好ましい例に於て、各ターゲットメッセージオブジェクト51、各プリプロセッサメッセージオブジェクト52、及び各ポストプロセッサメッセージオブジェクト53は、ある一つのポートオブジェクト54に関連づけられる。図3に示されるように、プリプロセッサメッセージオブジェクト52とポストプロセッサメッセージオブジェクト53とは、同一のポートオブジェクト54に関連づけられる必要はない。即ち、各プリプロセッサメッセージオブジェクト52と、各ポストプロセッサメッセージオブジェクト53とは、特定のポートオブジェクト54に独立に関連づけられる。各ポートオブジェクト54は、それに関連づけられた各ターゲット、プリプロセッサ、及びポストプロセッサメッセージオブジェクト51、52、及び53に向けられたメッセージに対する受信器として働く。以下により詳細に説明されるように、サーバタスク34は、受信メッセージ要求を発行することによって、ポートオブジェクト54からメッセージを受信する。メッセージを受信した後、メッセージが向けられたターゲット、プリプロセッサ、或いはポストプロセッサメッセージオブジェクト51、52、或いは53が示すサービスを、メッセージ自身に含まれる詳細に従って、サーバタスク34が実行する。
オブジェクト指向メッセージフィルタリングモデル50に於て、クライアントタスク32は、特定のターゲットメッセージオブジェクト51に対する送信メッセージ要求を発行する。そのターゲットメッセージオブジェクト51にフィルタオブジェクト56が関連づけられていない場合、米国特許出願番号08/220,043号に記載されているように、メッセージはクライアントタスク32からサーバタスク34に転送される。そのターゲットメッセージオブジェクト51が関連するフィルタオブジェクト56を有する場合、本発明に於ては、そのターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57に含まれる第1のフィルタオブジェクト56が関連するプリプロセッサメッセージオブジェクト52を有するか否か、及び送信メッセージ要求に指定されるメッセージタイプがその第1のフィルタオブジェクト56に関連づけられたメッセージタイプの集合に一致するかどうかを判定する。プリプロセッサメッセージオブジェクト52が第1のフィルタオブジェクト56に関連づけられていてかつメッセージタイプが一致する場合、本発明に於ては、メッセージを処理のためにプリプロセッサメッセージオブジェクト52に発送する。第1のフィルタオブジェクト56が関連するプリプロセッサメッセージオブジェクト53を有さない場合、或いはメッセージタイプが一致しない場合には、本発明に於ては、上述の方法でフィルタオブジェクトチェーン57の各フィルタオブジェクト56を順番に選択して検査する。
メッセージがプリプロセッサメッセージオブジェクト52に再供給(reroute)された際、サーバタスク34はプリプロセッサメッセージオブジェクト52に関連するサービスを実行する。プリプロセッサメッセージオブジェクト52に関連するサービスを実行した後、本発明は:1)サーバタスク34がメッセージ継続要求を発し他のフィルタオブジェクト56がフィルタオブジェクトチェーン57に存在するする場合に上述の方法で引き続きターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57における次のフィルタオブジェクト56を選択し検査するか;或いは2)サーバタスク34がメッセージ継続要求を発し他のフィルタオブジェクト56がフィルタオブジェクトチェーン57に存在しない場合に処理を行なうためにそのメッセージをターゲットメッセージオブジェクト51に供給(route)し;或いは3)サーバタスク34が新たなターゲットメッセージ51を明示した場合にメッセージフォワード要求を発し処理するためにそのメッセージを新たなターゲットメッセージオブジェクト51にリルートするか;或いは4)サーバタスク34が回答を発する場合ポストプロセッシングするためにそのメッセージを対応するポストプロセッサメッセージオブジェクト53にリルートする。
そのメッセージがターゲットメッセージオブジェクト51で受け取られた際、サーバタスク34はターゲットメッセージオブジェクト51に関連するサービスを実行する。サーバタスクのターゲットメッセージオブジェクト51に関連するサービスの実行に引き続き、本発明は、フィルタオブジェクトチェーン57の最後のフィルタオブジェクト56が関連するポストプロセッサメッセージオブジェクト53を有するかどうか及び送信(send)メッセージ要求に明示されたメッセージタイプが最後のフィルタオブジェクト56に関連するメッセージタイプの中に含まれるかどうかを決定する。ポストプロセッサメッセージオブジェクト53が最後のフィルタオブジェクト56に関連しメッセージタイプが一致(match)する場合、本発明はポストプロセッシングするためにそのメッセージをポストプロセッサメッセージオブジェクト53にリルートする。ポストプロセッサメッセージオブジェクト53が存在しないか、或いはメッセージタイプがマッチしない場合、本発明は上述の方法でフィルタオブジェクトチェーン57における前のフィルタオブジェクトを引き続き選択し検査する。
そのメッセージがポストプロセッサメッセージオブジェクト53にリルートされた際にサーバタスク34はプリプロセッサメッセージオブジェクト52に対するものと類似する方法でポストプロセッサメッセージ53に関連するサービスを実行する。ポストプロセッサメッセージオブジェクト53に関連するサービスを実行した後、本発明はポストプロセッサオブジェクトメッセージ53の存在によってそしてマッチするメッセージタイプによって上述の方法で引き続きフィルタオブジェクトチェーン57における各残った前のフィルタオブジェクト56を選択し検査する。
当業者は、プリプロセッサメッセージオブジェクト52が検査を受けている際にフィルタオブジェクトチェーン57が最後のフィルタオブジェクト56に向かう「前」方向にトラバース(traverse)されること及びポストプロセッサメッセージオブジェクト53が検査されている際にフィルタオブジェクトチェーン57が最初のフィルタオブジェクト56に向かう「後」方向にトラバースされることを認識している。
メッセージがサービスタスクのフォワードメッセージ要求の発行の結果新たなターゲットオブジェクト51にリルートされた際、本発明は望ましくはその新たなターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57の各フィルタオブジェクト56を、最初はプリプロセッシングを考慮して、そして次にポストプロセッシングを考慮して、元のターゲットメッセージオブジェクト51に関して上述した方法で検査することが望ましい。ポストプロセッシングを考慮して新たなターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57の各フィルタオブジェクト56を検査した後、本発明はポストプロセッシングを考慮して元のターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57の各フィルタオブジェクト56を検査する。
元のターゲットメッセージオブジェクトのフィルタオブジェクトチェーン57の全てのフィルタオブジェクトがポストプロセッシングを考慮して検査された後、本発明は最初にそのメッセージを送ったクライアントタスク32に回答を発する。ここに、全てのフィルタオブジェクト56がポストプロセッシングを考慮して検査された後に発せられたこの回答は最後の回答と称される。この最後の回答はクライアントタスク32に状態情報及びおそらくデータを供給する。オブジェクト指向メッセージフィルタリングモデル50を述べる他のデータはアペンディックスAにて提供される。クライアントタスク32が与えられたメッセージを送ることは、そのメッセージの一以上のプリプロセッサメッセージオブジェクト52、ターゲットメッセージオブジェクト51及びポストプロセッサメッセージオブジェクト53への転送によって引き継がれ、最後の回答のそのメッセージに対する発行によって引き継がれ、ここにメッセージトランザクションと称される。メッセージトランザクションの間に実行される動作を下により詳細に述べる。
望ましい実施例ではターゲットメッセージオブジェクト51、プリプロセッサメッセージオブジェクト52及びホストプロセッサメッセージオブジェクト53は、ここにメッセージオブジェクト58と称される同一の構造を用いて実現される。当業者は、代わりの実施例として、ターゲットメッセージオブジェクト51、プリプロセッサメッセージオブジェクト52及びポストプロセッサメッセージオブジェクト53が各々自己の別個の構造を有し得たことを認識している。図4を参照するに、メッセージオブジェクト58の望ましい実施例のブロック図が示されている。各々メッセージオブジェクト58はオブジェクトデータベース48に記憶されることが望ましい。オブジェクト管理ユニット52はサーバタスクのメッセージオブジェクト作成要求の発行に応じてメッセージオブジェクト58を作成しユニークメッセージオブジェクトアイデンティフィケーション(ID)を発生する。メッセージオブジェクト作成要求は、メッセージオブジェクト58の最初の状態を明示した参照定数;メッセージオブジェクト58が関連するはずの与えられたポートオブジェクトの参照;及びメッセージオブジェクト58が関連するはずの一組のクライアントタスク32を明示したクライアントチームIDを含むことが望ましい。更に、メッセージオブジェクト58がフィルタリングされるはずである場合、メッセージオブジェクト作成要求はフィルタオブジェクトチェーン57の最初のフィルタオブジェクト56の参照を明示することが望ましい。メッセージオブジェクト58がプリプロセッサメッセージオブジェクト52として又はポストプロセッサメッセージオブジェクト53として使用されるはずである場合、メッセージオブジェクト作成要求は又、そのプリプロセッサ又はポストプロセッサメッセージオブジェクト52、53が関連するフィルタオブジェクト56を識別するユニークフィルタオブジェクトIDを明示する。
各メッセージオブジェクト58内で、第1のデータフィールドにはメッセージオブジェクト58を唯一識別するオブジェクト管理ユニットによって発生されたメッセージオブジェクトIDが記憶され;第2のデータフィールドにはサーバタスク34によって供給された参照定数が記憶され、尚参照定数はメッセージオブジェクト58の最初の状態に対応し;第3のデータフィールドはメッセージオブジェクト作成要求に示された与えられたポートオブジェクト54に参照を付け;第4のデータフィールドはメッセージオブジェクト作成要求に含まれたクライアントチームID33を明示し;第5のデータフィールドは与えられたポートオブジェクト54に関連する次のメッセージオブジェクト58に参照を付ける。オブジェクト管理ユニット42は次のメッセージオブジェクト58が作成されるまで値を第5のデータフィールドに与えない。メッセージオブジェクト作成要求がメッセージオブジェクト58に関連するフィルタオブジェクトチェーン57の第1のフィルタオブジェクト56の参照を明示する場合、第6のデータフィールドにはこの明示されたフィルタオブジェクト56の参照が記憶される。メッセージオブジェクト作成要求がフィルタオブジェクトIDを明示した場合、第7のデータフィールドにはその明示された、メッセージオブジェクト58が関連するフィルタオブジェクト56に対応するフィルタオブジェクトIDが記憶される。望ましい実施例では、メッセージオブジェクト58における第6及び第7のデータフィールドが最初にゼロの値に設定される。メッセージオブジェクト58における第6のデータフィールドはフィルタオブジェクトインスタレーション(installation)及びリムーバル(removal)の際に初期化され更新される。フィルタオブジェクトインスタレーション及びリムーバルについては下に詳述する。メッセージオブジェクト58がターゲットメッセージオブジェクト51である場合、第6のデータフィールドには関連するフィルタチェーン57へのポインタが記憶される。そのターゲットメッセージオブジェクト51が最初に作成される際、フィルタオブジェクト56が未だターゲットメッセージオブジェクト51上にインストールされていないため第6のデータフィールドにはゼロの値が与えられる。
メッセージオブジェクト58の第7のデータフィールドに記憶されたフィルタオブジェクトIDはプリプロセッサ及びポストプロセッサメッセージオブジェクト52、53によってのみ使用される。第7のデータフィールドはフィルタオブジェクトインスタレーションの間にメッセージオブジェクト58がプリプロセッサメッセージオブジェクト52として或いはポストプロセッサメッセージオブジェクト53として指定される際に初期化される。
図5を参照するに、ポートオブジェクト54の望ましい実施例のブロック図が示されている。サーバタスク34からのポートオブジェクト作成要求に応じてオブジェクト管理ユニット42はポートオブジェクト54を作成しユニークポートオブジェクトIDを発生する。ポートオブジェクト54において、第1のデータフィールドは次のポートオブジェクト及び前のポートオブジェクトを明示する。オブジェクト管理ユニット42はそれによってそれら各々の第1のデータフィールドを介してポートオブジェクトを共にリンクする。ポートオブジェクト54の第2のデータフィールドはポートオブジェクト54に関連するメッセージオブジェクト52のリストを与える。オブジェクト管理ユニット42が新たなメッセージオブジェクト58を作成する際、オブジェクト管理ユニット42は新たに作成されたメッセージオブジェクトが関連するポートオブジェクト54の第2のデータフィールドのリストに対応する新たなメッセージオブジェクトIDを加える。ポートオブジェクト54の第3のデータフィールドはロック要求に応じて「ロックされた」各関連するメッセージオブジェクト58のリストを与える。与えられたメッセージオブジェクト58がロックされるとロックを解く動作が実行されるまでは与えられたメッセージオブジェクト58へ宛てられたどんなメッセージもサーバタスク34によって受け取られるようにならない。メッセージオブジェクトのロックを行う及びロックを解く動作はロッキングユニット46によって実行されるものであって、下に詳述する。
ポートオブジェクト54において、第4のデータフィールドにはポートオブジェクト54に関連するメッセージオブジェクト58に宛てられたものであるがサーバタスク34によって未だ受け取られていないメッセージを明示するペンディングセンドメッセージリストを記憶させるのに使用される。ポートオブジェクト54の第5のデータフィールドはサーバタスク34によってポートオブジェクト54に発せられてはいるが未だポートオブジェクト54に関連するメッセージオブジェクト58に宛てられた対応するメッセージにマッチされてはいないレシーブメッセージ要求を明示するペンディングレシーブメッセージリストを記憶させるのに使用される。ポートオブジェクト54の第6のデータフィールドはサーバタスク34は受け取っているがそれに対する最後の回答が未だ発せられていない各メッセージを明示するペンディング回答メッセージリストを記憶させるのに使用される。オブジェクト管理ユニット42がポートオブジェクト54を作成する際、第4、第5、及び第6のデータフィールドは空である。下に述べるごとく、第4、第5、及び第6のデータフィールドに記憶されたリストはメッセージトランザクションユニット44によって維持される。
ポートオブジェクト54の第7のデータフィールドはアクセプタンス関数及びアクセプタンス関数に関連する一組のメッセージタイプをオプション的に明示する。アクセプタンス関数については米国特許出願第08/220,043号に詳述されている。第7のデータフィールドはオブジェクト管理ユニット42が最初にポートオブジェクトを作成する際に空であることが望ましい。オブジェクト管理ユニット42は個々のアクセプタンス関数及び一組のメッセージタイプを識別するサーバタスク登録要求に応じてアクセプタンス関数及び一組のメッセージタイプの参照を記憶又は登録する。
望ましい実施例において、クライアントタスク32は同期的に又は非同期的にメッセージを送り得る。同様な方法にてサーバタスクはレシーブメッセージ要求を同期的又は非同期的に発することが出来る。同期的及び非同期的動作については下により詳細に述べる。ポートオブジェクト54の第8のデータフィールドは非同期的に送られたメッセージのために使用することの出来る記憶容量を明示し、ポートオブジェクト54の第9のデータフィールドは非同期的メッセージレシーブ要求のために使用することの出来る記憶容量を明示する。
ポートオブジェクト54の第10のデータフィールドはオブジェクト管理ユニット42によって発生されたユニークポートオブジェクトIDを記憶させるために使用される。最後にポートオブジェクト54の第11のデータフィールドはポートオブジェクトの作成の時からポートオブジェクト54に関連するメッセージオブジェクト52に対して送られたメッセージの合計数等の統計情報を記憶させるために使用される。望ましい実施例では各メッセージオブジェクト58は個々のポートオブジェクト54に関連する。それ故ポートオブジェクト54は望ましい実施例では対応するメッセージオブジェクト58が作成される前に作成されなければならない。
オブジェクト管理ユニット42は新たなフィルタオブジェクト56を作成し、その新たなフィルタオブジェクト56に対応するユニークフィルタオブジェクトIDを発生し、サーバタスク34からのインスタレーション要求に応じてその新たなフィルタオブジェクト56をフィルタオブジェクトチェーン57にインストール又は挿入する。望ましい実施例ではインスタレーション要求は新たなフィルタオブジェクト56に関連するサービスのタイプによって新たなフィルタオブジェクト56を識別するフィルタオブジェクト名;それによって新たなフィルタオブジェクト56に関連するプリプロセッサーメッセージオブジェクト52又はポストプロセッサメッセージオブジェクト53が動作を実行するメッセージの各タイプを明示するメッセージタイプリスト;どこで新たなフィルタオブジェクト56がフィルタオブジェクトチェーン57に挿入又はインストールされるのかを示すプレースメントオーダ(placement order);プリプロセッサメッセージオブジェクト52が新たなフィルタオブジェクト56に関連する場合プリプロセッサメッセージオブジェクトID;ポストプロセッサメッセージオブジェクト52が新たなフィルタオブジェクト56に関連する場合ポストプロセッサメッセージオブジェクトID;新たなフィルタオブジェクト56が関連するターゲットメッセージオブジェクト51を識別するターゲットメッセージオブジェクトID;及びインスタレーションオプションのオプションの組を明示する。
インスタレーション要求に応じてオブジェクト管理ユニット42は新たなフィルタオブジェクト56を作成し対応するユニークフィルタオブジェクトIDを発生する。図6を参照するに、フィルタオブジェクト56の望ましい実施例のブロック図が示されたいる。各フィルタオブジェクト56は、フィルタオブジェクトIDを記憶させる第1のデータフィールド;フィルタオブジェクト56がフィルタオブジェクトチェーン57にインストールされる際に次の及び前のフィルタオブジェクト56の参照が記憶される第2のデータフィールド;フィルタオブジェクト名を記憶する第3のデータフィールド;メッセージタイプリストを記憶する第4のデータフィールド;プレースメントオーダを記憶する第5のデータフィールド;フィルタオブジェクト56が関連するプリプロセッサメッセージオブジェクト52を有する場合にプリプロセッサメッセージオブジェクトIDを記憶する第6のデータフィールド;フィルタオブジェクト56が関連するポストプロセッサメッセージオブジェクト53を有する場合にポストプロセッサメッセージオブジェクトIDを記憶する第7のデータフィールド;ターゲットメッセージオブジェクトIDを記憶する第8のデータフィールド;及びインスタレーションオプションのオプション的に明示された組を記憶する第9のデータフィールドを含むデータ構造である。各フィルタオブジェクト56はオブジェクトデータベース内のフィルタオブジェクトメモリ49に記憶される。
新たなフィルタオブジェクト56を作成し対応するフィルタオブジェクトIDを発生した後、オブジェクト管理ユニット46は明示されたプレースメントオーダ及びインスタレーションオプションによってフィルタオブジェクト56を与えられたフィルタオブジェクトチェーン57にインストールする。望ましい実施例では、各フィルタオブジェクトのプレースメントオーダは第1のフィルタオブジェクト名及び第2のフィルタオブジェクト名を明示することが望ましい。フィルタオブジェクト56がフィルタオブジェクトチェーンにインストールされる際、第1のフィルタオブジェクト名はそのフィルタオブジェクト56が第1のフィルタオブジェクト名を有するフィルタオブジェクトチェーン57のフィルタオブジェクト56に先んじてインストールされるべきであるということを示し;第2のフィルタオブジェクト名はそのフィルタオブジェクト56が第2のフィルタオブジェクト名を有するフィルタオブジェクトチェーン57のフィルタオブジェクト56に引き続いてインストールされるべきであることを示す。このようにして第1のフィルタオブジェクト名はインスタレーションのための「前方規則(before rule)」を与え、第2のフィルタオブジェクト名はインスタレーションのための「後方規則(after rule)」を与える。インスタレーションオプションが、そのフィルタオブジェクト56が第1のフィルタオブジェクト名を有するフィルタオブジェクトチェーン57のフィルタオブジェクト56の直ぐ前にインストールされるべきであるかどうかを示す「直ぐ前(right−before)」オプションを明示することが望ましい。インスタレーションオプションが又、そのフィルタオブジェクト56が第2のフィルタオブジェクト名を有するフィルタオブジェクトの直ぐ後にインストールされるべきかどうかを示す「直ぐ後(right−after)」オプションを明示することが望ましい。オブジェクト管理ユニット42によってフィルタオブジェクトインスタレーションの間に実行される詳細な動作は図11A、11B、11C及び11Dの関係において下に詳述する。
メッセージオブジェクト58を生成し、ポートオブジェクト54を生成し、フィルタオブジェクト56を生成・配置するのに加えて、オブジェクト管理ユニット42は、メッセージオブジェクト検査要求に応答して、メッセージオブジェクト58に関連づけられた情報をサーバタスク34に提供する。この提供される情報は、メッセージオブジェクトに示されるクライアントチームID33、メッセージオブジェクト58が関連づけられたポートオブジェクト54を示すポートオブジェクトID、及びメッセージオブジェクトの参照定数の現在値を含む。オブジェクト管理ユニット42は、クライアントチームID及び参照定数の現在値に関しては、メッセージオブジェクト58そのものから抽出し、ポートオブジェクトIDに関しては、メッセージオブジェクト58に含まれるポートオブジェクトアドレスを用いて、メッセージオブジェクト58が関連づけられたポートオブジェクト54から獲得する。オブジェクト管理ユニット42はまた、メッセージオブジェクト変更要求に応答して上記情報を変更し、またクライアントチーム削除メッセージに応答してメッセージオブジェクト58を消去する。更に、オブジェクト管理ユニット42は、メッセージオブジェクトIDを指定するフィルタオブジェクト参照要求に応答して、メッセージオブジェクト58に関連づけられた各フィルタオブジェクト56のフィルタオブジェクトIDを提供する。
メッセージオブジェクト52に与えられた動作と同様の方法で、オブジェクト管理ユニット42は、サーバタスク34からのポートオブジェクト検査要求に応答してポートオブジェクト54に関係した情報を提供し、ポートオブジェクト修正要求に応答してポートオブジェクト54内のデータフィールドを修正し、ポートオブジェクト削除要求に応答してポートオブジェクト52を削除する。
同様に、オブジェクト管理ユニット42は、サーバタスク34からのフィルタオブジェクト検査要求に応答してフィルタオブジェクト56に関係した情報を提供し、ターゲットメッセージオブジェクト51を指定するルックアップ要求に応答してフィルタオブジェクト系列57内の各フィルタオブジェクトのフィルタオブジェクトIDを提供し、フィルタオブジェクト削除要求に応答してフィルタオブジェクト56を削除する。フィルタオブジェクト削除要求において、オブジェクト管理ユニット42は、最初に、フィルタオブジェクトがあるフィルタ系列57からフィルタオブジェクト57を削除し、次に、フィルタオブジェクト56自体を削除する。
メッセージトランザクションユニット44は、メッセージトランザクションを実行するため要求される動作を実行する。特に、メッセージトランザクションユニット44は、クライアントタスク32からターゲットメッセージオブジェクト51へのメッセージの送信を補助するため要求される動作と、フィルタオブジェクト系列57内のフィルタオブジェクト56と関係したプリプロセッサメッセージオブジェクト52又はポストプロセッサメッセージオブジェクト53へのメッセージの供給と、サーバタスク34による受信メッセージ要求の発行と、送信又は再供給されたメッセージの発行された受信メッセージ要求との一致、メッセージにより示されたサービスを実行するためのアクセプタンス関数又はサーバタスク34へのメッセージの選択的な送付と、アクセプタンス関数又はサーバタスク34からクライアントタスクへの応答の伝達とを実行する。
メッセージ処理ユニット44は、メッセージ送信要求を発行することにより、クライアントタスク32がターゲットメッセージ51に対してメッセージを送信することを要求する。好ましい実施例において、各メッセージ送信要求は、1)メッセージ同期送信要求であるか、2)メッセージ同期送受信要求であるか、3)メッセージ非同期送信要求であるか、あるいは4)メッセージ非同期送受信要求であるかの何れかである。以後詳細に述べる如く、メッセージ処理ユニット44は、何れかの型のメッセージ同期送信要求に応じて、メッセージ処理が完了するまで送信クライアントタスクをブロックし、これにより、メッセージ処理の進行中にクライアントタスク32が他の操作を実行するのを阻止する。対照的に、メッセージ処理ユニット44は、何れかの型のメッセージ非同期送信要求に応じて、送信クライアントタスク32が他の操作を実行するのを許可する。各型のメッセージ送信要求は好ましくは、ターゲットメッセージオブジェクトID;メッセージが開始する開始メモリ位置への参照;メッセージ長情報;メッセージのカテゴリーを提供するメッセージ型;メッセージがアクセプタンス関数あるいはサーバ34の何れに対して、参照渡しあるいは値渡しの何れによって伝達されるべきかを指示する送信オプション;及び、メッセージ送信要求が与えられるメッセージオブジェクト52がメッセージ送信要求に応じてロックされるべきか、また、アクセプタンス関数又はサーバタスク34がメッセージに対して応答した後、続いてアンロックされるべきかを指示するフラグを指定する。同期及び非同期のメッセージ送受信要求は共に、サーバタスクが応答メッセージ又はデータを格納し得る応答バッファアドレス、及び応答バッファサイズを付加的に指定する。好ましい実施例において、メッセージ型は32ビットの数である。
同期送信メッセージ要求の各々の型もまた、メッセージの処理が生じている間クライアントタスク32がアイドルのままで残り得る最大時間間隔を規定する。全ての送信メッセージ要求に共通する情報に加えて、非同期送信メッセージ要求の各々の型はまた、メッセージ処理ユニット44が非同期送信メッセージ要求に対応するメッセージID信号を格納できるアドレス及びメッセージ処理が完了した時にどのようにメッセージ処理ユニット44がクライアントタスク32に通知するかのイベント通知情報を規定する。以下の説明において、メッセージID信号は単にメッセージIDと称される。
送信メッセージ要求の与えられたクライアントタスクの保証に応答し、メッセージ処理ユニット44は送信メッセージ動作を行う。送信メッセージ動作は図12の説明において以下に詳述される。送信メッセージ動作の間、メッセージ処理ユニット44は送信メッセージ要求が同期であるか非同期であるかに基づいてメッセージ制御ブロック(MCB)を生成して送信する。同期送信メッセージ要求又は同期送信受信メッセージ要求に応答して、メッセージ処理ユニット44は同期送信MCB60を生成する。図7Aを参照するに、同期送信MCB60の好適な実施例のブロック図が示される。同期送信MCB60は、同期送信メッセージが向けられるターゲットメッセージオブジェクト51に対応するターゲットメッセージオブジェクトIDを格納する第1のデータフィールドと;フィルタオブジェクトチェーン57内で現在考慮されているフィルタオブジェクト56に対応する現在のフィルタオブジェクトIDを格納する第2のデータフィールドと;現在のフィルタオブジェクト56に関連し現在のターゲットメッセージオブジェクト51かプリプロセッサメッセージオブジェクト52かポストプロセッサメッセージオブジェクト53のいずれかとして考慮されるメッセージオブジェクト58に対応する現在のメッセージオブジェクトIDを格納する第3のデータフィールドと;第3のデータフィールドにおいて規定される現在のメッセージオブジェクト58が関連するポートオブジェクト54を確認する現在のポートオブジェクトIDを格納する第4のデータフィールドと;メッセージが新しいターゲットメッセージオブジェクト51に渡されたときに前のターゲットメッセージオブジェクト51に関連するフィルタオブジェクト56を確認するフィルタオブジェクトスタック59を格納する第5のデータフィールドと;現在のポートオブジェクトの継続中のメッセージリストにおいて次の及び前のエントリに参照を与える第6のデータフィールドと;同期送信メッセージ要求を発行するクライアントタスク32に対応したクライアントタスクIDを規定する第7のデータフィールドと;関連するメッセージが格納されるメモリ20内の開始アドレスを提供する第8のデータフィールドと;メッセージの長さを与える第9のデータフィールドと;同期送信メッセージ要求において規定されるメッセージの型を示す第10のデータフィールドと;メッセージIDが格納される第11のデータフィールドと;同期送信メッセージ要求で示された送信オプションを規定する第12のデータフィールドと;メッセージ処理ユニット44が一致受信メッセージ要求に対応したMCBを参照するために使用する第13のデータフィールドと;メッセージをサーバタスク34に配送した後にメッセージ処理ユニット44がサーバタスクIDを格納する第14のデータフィールドと;同期送信メッセージ要求に対応するメッセージがサーバタスク34に配送されたかを示す第15のデータフィールドと;同期送信要求において認識されるメッセージオブジェクト52が固定されたかを示す第16のデータフィールドと;送信メッセージ要求が同期送信及び受信メッセージ要求であるときに応答バッファのアドレスを規定する第17のデータフィールドと;送信メッセージ要求が同期送信及び受信メッセージ要求であるときに応答バッファの大きさを与える第18のデータフィールドと;送信クライアントタスク32が阻止要求の結果として阻止されたかを示す第19のデータフィールドと;メッセージ処理中に送信クライアントタスク32がアイドルのまま残る最大時間間隔を規定する第20のデータフィールドと;を含むデータ構造である。メッセージ処理ユニット44は同期送信MCB60をオブジェクトデータベース48に格納する。
もし送信メッセージ要求が非同期送信メッセージ要求又は非同期送信受信要求であった場合、メッセージ処理ユニット44は同期送信MCB60ではなく非同期送信MCB62を生成する。図7Bを参照するに、非同期送信MCB62が示される。非同期送信MCB62は、上述の同期送信MCB60における第1から第18のデータフィールドに規定される情報と同様の情報を規定する第1から第18のデータフィールドを含むデータ構造である。加えて、非同期送信MCB62は、メッセージ処理ユニット44が非同期送信メッセージ要求又は非同期送信受信メッセージ要求において規定されるイベント通知情報を格納する第19のデータフィールドを含む。同期送信MCB60のように、メッセージ処理ユニット44は非同期送信MCB62をオブジェクトデータベース48に格納する。
メッセージ処理の間、メッセージ処理ユニット44は一つ又はそれ以上のポートオブジェクト54に送信MCBを選択的に通らせ、以下に詳細に説明されるように各々のポートオブジェクトはターゲットメッセージオブジェクト51又はプリプロセッサメッセージオブジェクト52又はポストプロセッサメッセージオブジェクト53に関連する。送信MCBを生成した後、メッセージ処理ユニット44はここに検査プリプロセッサメッセージオブジェクト58と称される一組の動作を行う。プリプロセッサメッセージオブジェクト52を考慮すると、メッセージ処理ユニット44は送信MCBがプリプロセッサメッセージオブジェクト52に関連するポートオブジェクト54を通るべきかを判定する。プリプロセッサメッセージオブジェクト52の検査においてメッセージ処理ユニット44により行われる動作が図14の説明において以下に詳述される。
メッセージ処理ユニット44が、送信MCBがプリプロセッサメッセージオブジェクト52に関連するポートオブジェクト54又はポストプロセッサメッセージオブジェクト53を通るべきであると判定すると、メッセージ処理ユニット44は転送メッセージ動作を実行する。転送メッセージ動作において、メッセージ処理ユニット44は送信MCBの第3のデータフィールドにおける現在のメッセージオブジェクトIDにより与えられるような現在のメッセージオブジェクト52に関連するポートオブジェクト54に基づいて最新送信MCBを生成する。フォーワードメッセージ動作は、図17A,17B及び17Cの説明において以下に説明される。
送信MCBを特定のポートオブジェクト54に通らせるために、メッセージ処理ユニット44は,図15A,15B及び15Cの説明において以下に説明されるように低レベルの送信動作を行う。ここで、低レベル送信動作は、米国特許第08/220,043に記載される送信メッセージ動作のサブセットと同一である。
本発明において、サーバタスク34はメッセージがポートオブジェクト54から受信されたときにのみメッセージを処理する。メッセージ処理ユニット44は、サーバタスク34が与えられたポートオブジェクト54からメッセージを受信するために受信メッセージ要求を発行する。受信メッセージ要求は同期受信メッセージ要求又は非同期受信メッセージ要求のどちらでもよい。受信メッセージ要求の各々の型は、ポートオブジェクト54と;サーバタスク34が受信すべきメッセージのカテゴリーを示すメッセージの型と;メッセージバッファが始まるメモリ位置の参照と;メッセージバッファの大きさとを規定する。好適な実施例において、メッセージの型は32ビット数である。同期受信メッセージ要求は、メッセージ処理ユニット44によるメッセージの配送の前に発行しているサーバタスク34がアイドルで残ることのできる最大時間間隔を更に含む。同期及び非同期受信メッセージ要求の両方に共通の情報に加えて、非同期受信メッセージ要求は、非同期受信メッセージ要求に対応する受信IDが格納可能なメッセージアドレスと;非同期受信メッセージ要求に対応するメッセージが配送されたことを発行しているサーバタスク34に通知するためにメッセージ処理ユニット44が使用するイベント通知情報を更に規定する。
受信メッセージ要求に応答して、メッセージ処理ユニット44は図18A,18B及び18Cの説明において以下に詳細に説明される受信メッセージ動作を行う。受信メッセージ動作の間、メッセージ処理ユニット44は、受信メッセージ要求において与えられるものに一致するメッセージの型を有する送信MCBが受信メッセージ要求が向けられるポートオブジェクト54の継続中の送信メッセージリストに参照されていない場合、受信MCBを生成する。換言すると、メッセージ処理ユニット44は、受信メッセージ要求が存在する送信MCBに直に一致できない場合、受信MCBを生成する。
メッセージ処理ユニット44により生成された受信MCBは、受信メッセージ要求が夫々同期又は非同期受信メッセージ要求に従って同期又は非同期受信MCB70,72のどちらかとなる。図8Aを参照するに、同期受信MCB70の好適な実施例のブロック図が示される。同期受信MCB70は、同期受信メッセージ要求が向けられるポートオブジェクト54に対応するポートオブジェクトIDを規定する第1のデータフィールドと;第1のデータフィールドで示されたポートオブジェクト54の継続中の受信メッセージリストにおける次の及び前のエントリーを参照する第2のデータフィールドと;メッセージ処理ユニット44が要求を発行したサーバタスク34に対応するサーバタスクIDを格納する第3のデータフィールドと;同期受信メッセージ要求に含まれるメッセージバッファドレスを規定する第4のデータフィールドと;同期受信メッセージ要求に含まれるメッセージバッファの大きさを規定する第6のデータフィールドと;メッセージの型に従って同期受信メッセージ要求に一致する送信メッセージ要求に対応するMCBを参照するためにメッセージ処理ユニット44が使用する第7のデータフィールドと;同期受信メッセージ要求において規定されるように発行しているサーバタスク34がアイドルのまま残ることができる最大時間間隔をメッセージ処理ユニット44が格納する第8のデータフィールドとを含むデータ構造である。メッセージ処理ユニット44は同期受信MCB70をオブジェクトデータベース48に格納する。
図8Bを参照するに、非同期受信MCB72の好適な実施例のブロック図が示される。非同期受信MCB72は、同期受信MCB70に詳細に示されるものと同様な情報を規定する第1から第7までのデータフィールドを含むデータ構成である。また、非同期受信MCB72は、メッセージ処理ユニット44が受信IDを格納する第8のデータフィールドと、メッセージ処理ユニット44が非同期受信メッセージ要求において規定されるイベント通知情報を格納する第9のデータフィールドとを含む。各々の同期受信MCB70の場合のように、メッセージ処理ユニット44は各々の非同期受信MCB72をオブジェクトデータベース48に格納する。
好適な実施例において、上述の各々のMCB60,62,70,72は、一般的なMCB構成(図示せず)に一つ又はそれ以上の要求詳細情報を供給するデータフィールドを加えたものとして具体化される。一般のMCB構成は、ポートオブジェクト54を規定するデータフィールドと;クライアント又はサーバタスク32,34と;他の対応するMCB構成への参照と;一般のMCB構成が同期又は非同期要求に対応するか及び一般のMCB構成が送信又は受信要求に対応するかを規定する状態情報とを含む。当業者であれば、同期MCB60と非同期送信MCB62と同期受信MCB70と非同期受信MCB72とを具体化するのに必要な付加的なデータフィールドを上述の説明に従って決定することができる。
メッセージ処理ユニット44は受信メッセージ要求を送信MCBに選択的に一致させる。メッセージ処理ユニット44は、以下に詳細に規定されるように、送信MCBをアクセプタンス関数又はターゲットメッセージオブジェクト51、プリプロセッサメッセージオブジェクト52またはポストプロセッサメッセージオブジェクト53に対応するポートオブジェクト54に関連する受信MCBのいずれかに選択的に一致させる。一致は送信メッセージ要求及び受信メッセージ要求に規定されるメッセージの型に従って又は送信メッセージ要求及びアクセプタンス関数に関連するメッセージの型の組に規定されるメッセージに従って生じる。好適な実施例において、メッセージ処理ユニット44はメッセージの型が一致するかを判定するために論理積を実行する。
送信MCBを与えられたポートオブジェクト54に通した後、メッセージ処理ユニット44は、MCBが一致アクセプタンス関数により直ちに処理され得る、又は送信MCB一致継続受信MCBにより直ちに処理され得ると判定する。メッセージ処理ユニット44はまた、送信MCBが直ちに処理され得ず従って継続受信MCBになることを判定する。メッセージ処理ユニット44は、送信MCBにおいて確認されるポートオブジェクト54の継続中の送信メッセージリストに送信MCBへの参照を挿入することにより送信MCBが継続中であるとして類別する。メッセージ処理ユニット44は、好ましくはポートオブジェクト54の継続中の送信メッセージリストを先入れ先出し(FIFO)順における2重リンクリストとして維持する。
与えられた受信メッセージ要求に応答して、メッセージ処理ユニット44は、受信メッセージ要求が継続中の送信MCBに直ちに一致し得ること又は受信メッセージ要求が送信MCBに直ちに一致し得ず従って継続受信メッセージ要求となることを判定してもよい。メッセージ処理ユニット44は、受信MCBを生成することにより及び受信MCBにおいて確認されるポートオブジェクト54の継続中の受信メッセージリストにおける対応する受信MCBへの参照を挿入することにより、受信メッセージ要求を継続中として類別する。継続中の送信メッセージリストの場合、メッセージ処理ユニット44は、好ましくは継続中の受信メッセージリストをFIFO順における2重リンクリストとして維持する。メッセージ処理ユニット44が同期受信メッセージ要求を継続中として類別した場合、メッセージ処理ユニット44は又、一致する送信MCBがポートオブジェクト54に到着するまで同期受信メッセージ要求を発行するサーバタスク34の実行を阻止する。
メッセージ処理ユニット44が送信MCBを受信MCBに一致させるとき、又は受信メッセージ要求を送信MCBに一致させるとき、メッセージ処理ユニット44は配送MCB80を生成する。図9を参照するに、配送MCB80のブロック図が示されている。配送MCB80は、送信MCB内でデータフィールドのサブセットから生成される。配送MCB80は、送信メッセージMCBに規定されるメッセージIDが格納される第1のデータフィールドと;送信MCBに規定される現在のメッセージオブジェクト58の参照定数を規定する第2のデータフィールドと;送信MCBに規定される送信オプションが格納される第3のデータフィールドと;送信MCBにおいて与えられるメッセージの型を提供する第4のデータフィールドと;送信MCBに規定されるメッセージ位置が格納される第5のデータフィールドと;送信MCBに規定されるメッセージ長が格納される第6のデータフィールドと;送信MCBに規定される応答バッファアドレスが格納される第7のデータフィールドと;送信MCBに規定される応答バッファの大きさが格納される第7のデータフィールドと;メッセージ処理中の前処理、処理及び/又は後処理が格納される第9のデータフィールドとを含む。好ましくは、配送MCB80が最初に生成されるとき、現在の結果は”不完全”として設定される。米国特許第08/220,043に詳述されるように、サーバタスク34又はアクセプタンス関数は配送MCB80内に規定されたメッセージを取得し、メッセージにより示される処理を実行する。
サーバタスク34が与えられたポートオブジェクト54に関連する処理を完了すると、サーバタスク34は継続メッセージ要求、転送メッセージ要求又は応答を発行してもよい。継続メッセージは、好ましくはメッセージIDを規定する。継続メッセージ要求に応答し、メッセージ処理ユニット44は継続メッセージ動作を行う。図16A,16B及び16Cの説明に詳述されるように、継続メッセージ動作において、メッセージ処理ユニット44は、フィルタオブジェクト系列スキャン方向に従って現在のメッセージオブジェクトのフィルタ−オブジェクト系列57における他のフィルタオブジェクト56にメッセージが転送可能かを判定する。メッセージにより実行される一番最近の動作がプリプロセッサメッセージオブジェクト52に関連する場合、メッセージ処理ユニット44は、検査すべき次のフィルタオブジェクト56を確認するためにフィルタオブジェクトチェーン57における最後のフィルタオブジェクト56に向かう”前進”方向にフィルタオブジェクトチェーン57をスキャンする。メッセージにより実行される一番最近の動作が後プロセッサメッセージオブジェクト53に関連する場合、メッセージ処理ユニット44は、検査すべき前のフィルタオブジェクト56を確認するためにフィルタオブジェクトチェーン57における最初のフィルタオブジェクト56に向かう”後退”方向にフィルタオブジェクトチェーン57をスキャンする。もしメッセージが現在のメッセージオブジェクトのフィルタオブジェクトチェーン57における他のフィルタオブジェクトに転送可能であれば、メッセージ処理ユニット44は前進メッセージ動作を実行する。よって、継続メッセージ動作は、フィルタオブジェクトチェーン57内において一つのフィルタオブジェクト56から他のフィルタオブジェクト56へ前処理又は後処理が継続する結果となる。転送メッセージ要求に応答し、メッセージ処理ユニット44は上に参照され図17A,17B及び17Cに説明されている前進メッセージ動作を実行する。各々の前進メッセージ要求は、好ましくはメッセージID及びターゲットメッセージオブジェクト51を規定する。転送メッセージ要求に規定されたターゲットメッセージオブジェクト51がメッセージIDに対応する送信MCBに格納されたものと異なる場合、前進メッセージ動作は第1のデータフィールドに格納された新しく規定されたターゲットメッセージオブジェクトIDを有する最新の送信MCBを生成する結果となる。また、元のターゲットメッセージオブジェクト51に関連する各々のフィルタオブジェクトへの参照は最新の送信MCB内のフィルタオブジェクトスタックに格納される。
応答への対応において、メッセージ処理ユニット44は応答動作を実行する。各々の応答は、好ましくはメッセージIDを規定し、現在の結果の組を任意に規定してもよい。応答動作において、メッセージ処理ユニット44は、応答がプリプロセッサメッセージオブジェクト52に関連したサーバタスク34により発行されたかを判定する。そうであれば、メッセージ処理ユニット44はメッセージIDに対応する送信MCBを前プロセッサメッセージオブジェクト52に関連するポストプロセッサメッセージオブジェクト53に通し、それにより、各々の残りのフィルタオブジェクト56を前処理に関して”スキップ”し、ターゲットメッセージオブジェクト56をスキップし、スキップしたフィルタオブジェクト56に関連するポストプロセッサメッセージオブジェクト56をスキップする。フィルタオブジェクトに関連するプリプロセッサメッセージオブジェクト52からフィルタオブジェクトに関連するポストプロセッサメッセージオブジェクト53へのメッセージ処理ユニットの送信MCBの経路付けは、ここにスキップ前進動作と称される。
スキップ前進動作が必要無い場合、メッセージ処理ユニット44はターゲットメッセージオブジェクト51が関連する各々のフィルタオブジェクト56が後処理に関して検査されたかを判定する。もしされていない場合、メッセージ処理ユニット44は継続メッセージ動作を実行する。もしターゲットメッセージオブジェクト51の各々のフィルタオブジェクト56が検査されていれば、メッセージ処理ユニット44はメッセージを始めに送信したクライアントタスク32に最終応答を発行し、最終応答はクライアントタスク32に状態情報とおそらくはデータとを提供する。応答動作は図19A及び19Bの説明において以下に詳述される。
サーバタスク34により発行された組み合わされた受信及び応答メッセージ要求への応答において、メッセージ処理ユニット44は上述のように先ず応答動作を実行し、そして上述のように受信メッセージ動作を実行する。
ロックユニット46はメッセージオブジェクトのロック及びロック解除動作を実行する。好適な実施例において、ロック及びロック解除動作は、夫々サーバタスク34又はメッセージ処理ユニット44により発行されるロック要求又はロック解除要求に応答して実行される。メッセージオブジェクト58がロックされた後に特定のメッセージオブジェクト58に向けられた送信メッセージ要求又は送信MCBは、ロック解除動作が実行されるまで、アクセプタンス関数又は受信MCBに一致するべきものには選ばれない。好適な実施例において、ロック要求は、送信メッセージ要求の結果としてクライアントタスク32の代わりにサーバタスク34又はメッセージ処理ユニット44により発行され得る。好ましくは、夫々のロック要求はロックのターゲットとなるメッセージオブジェクト58のメッセージオブジェクトIDを規定する。ロック及びロック解除動作は夫々図20及び21の説明において以下に詳述される。
メッセージ送信操作及びメッセージ転送操作の間、メッセージ処理ユニット44はロッキング操作と同期する。ロッキング操作との同期において、メッセージが送られた現在のメッセージオブジェクト58がロックされた場合、メッセージ処理ユニットはメッセージを送信するクライアントタスクをブロックする。送信MCBがターゲットメッセージオブジェクト51はロックされるべきと指定した場合、メッセージ処理ユニット44はターゲットメッセージ51をもロックする。メッセージ処理ユニット44によってロッキング操作と同期して実行される動作の詳細について、以下、図13に従って説明する。
以下、本発明のシステム10によってオブジェクト指向メッセージフィルタリングの間に実行される操作の詳細を、図10A〜図21の各方法ステップとして説明する。図10A、10B、及び10Cには、オブジェクト指向メッセージフィルタリングの好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ100において、オブジェクト管理ユニット42は、対応するサーバタスク要求に応じてポートオブジェクト54が生成、変更、検査、あるいは削除されるべきか否かを判断する。ポートオブジェクト54が生成、変更、検査あるいは削除されるべきならば、ステップ102において、オブジェクト管理ユニット42はサーバタスク要求により指示される適切な操作を実行する。ステップ102の後、又はステップ100の後、ステップ104において、オブジェクト管理ユニット42は対応するサーバタスク要求に応じてメッセージオブジェクト42が生成、変更、検査、あるいは削除されるべきか否かを判断する。肯定判断されたならば、ステップ106において、オブジェクト管理ユニット42はサーバタスク要求により指示された動作を実行する。ステップ106又は104に続いて、ステップ108において、オブジェクト管理ユニット42はサーバタスク要求に応じてフィルタオブジェクト56がインストール、検査、ロックアップ、あるいは削除されるべきか否かを判断する。フィルタオブジェクト56がインストール、検査、ロックアップ、あるいは削除されるべきならば、ステップ110において、オブジェクト管理ユニット42はサーバタスク要求により要求された操作を実行する。ステップ110の後、あるいはステップ108の後、ステップ112において、ロッキングユニット46はサーバタスクロック要求に応じてメッセージオブジェクト52がロックされるべきか否かを判断する。肯定判断されたならば、ステップ114において、ロッキングユニット46はサーバタスク要求により指示されたロッキング操作を実行する。ステップ108においてロッキングユニット46がロックされるべきメッセージオブジェクトは存在しないと判断した場合、あるいは、ステップ114が終了した後、次にステップ116において、ロッキングユニットはサーバタスクロック解除要求に応じてメッセージオブジェクト52がロック解除されるべきか否かを判断する。肯定判断されたならば、ステップ118においてロッキングユニット46はアンロック要求に応じてアンロック操作を実行する。ステップ116においてメッセージオブジェクトのロッキングが要求されていない場合、あるいは、ステップ118の後、ステップ120において、オブジェクト管理ユニット42はサーバタスク要求に応じてポートオブジェクト54に対するアクセプタンス関数が登録されるべきか否かを判断する。アクセプタンス関数が登録されるべきならば、ステップ122においてオブジェクト管理ユニット42は、サーバタスク要求において指定されたポートオブジェクトと共にアクセプタンス関数を登録する。ステップ122は、米国特許出願第08/220,043号に記載されている如きアクセプタンス関数の登録に従って実行される。
ステップ118に続いて、あるいは、ステップ116の後、オブジェクト管理ユニット42が、登録すべきアクセプタンス関数は存在しないと判断したならば、ステップ130において、メッセージ処理ユニット44はクライアントタスク32がメッセージ送信要求を発行したか否かを判断する。肯定判断されたならば、ステップ132において、メッセージ処理ユニット44はメッセージ送信操作を実行する。ステップ132の後、あるいは送信メッセージ要求が発行されていなければステップ130の後、ステップ134において、メッセージ処理ユニットはサーバタスクがメッセージ連続要求を発行したか否かを判断する。サーバタスク34がメッセージ連続要求を発行したならば、ステップ136において、メッセージ処理ユニット44はメッセージ連続操作を実行する。ステップ136の後、あるいは、ステップ134の後、ステップ138において、メッセージ処理ユニット44はサーバタスク34がメッセージ転送要求を発行したか否かを判断する。サーバタスク34がメッセージ転送要求を発行したならば、ステップ140において、メッセージ処理ユニット44はメッセージ転送操作を実行する。ステップ140に続いて、あるいは、ステップ138の後、ステップ142において、メッセージ処理ユニット44はサーバタスク34がメッセージ受信要求を発行したか否かを判断する。サーバタスク34がメッセージ受信要求を発行したならば、ステップ144において、メッセージ処理ユニット44はメッセージ受信操作を実行する。ステップ132においてメッセージ処理ユニット44がメッセージ受信要求は発行されていないと判断した場合、あるいは、ステップ134の後、ステップ150において、メッセージ処理ユニット44は応答(reply)が発行されたか否かを判断する。肯定判断されたならば、ステップ152においてメッセージ処理ユニットは応答操作を実行する。ステップ152の後、あるいは応答が発行されていなければステップ150の後、ステップ154において、メッセージ処理ユニット44はサーバタスク34が結合された受信−応答メッセージ要求を発行したか否かを判断する。肯定判断されたならば、ステップ156において、メッセージ処理ユニット44は受信−応答メッセージ要求で指示された応答操作を実行する。この後、ステップ158において、メッセージ処理ユニット44はメッセージ受信−応答要求に応じてメッセージ受信操作を実行する。ステップ158の後、あるいはステップ156が実行されなければステップ154の後、ステップ160において、メッセージ処理ユニット44は操作を終了すべきか否かを判断する。操作を続行すべきならば、この好ましい方法はステップ100へ進む。そうでなければ、この好ましい方法は終了する。
次に、図11A、11B、11C及び11Dを参照するに、新たなフィルターオブジェクト56をフィルターオブジェクトチェイン57内にインストールする(図10Aのステップ110)好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ200において、オブジェクト管理ユニット42は、サーバタスク34により発行されたインストール要求に応じて、新たなフィルターオブジェクトIDを発生すると共に新たなフィルターオブジェクト56を生成する。次に、ステップ202において、オブジェクト管理ユニット42は、インストール要求で指定されたターゲットメッセージオブジェクトに対応するプリプロセッサ及びポストプッロセッサメッセージオブジェクト52、53を夫々ロックする。ステップ202の後、オブジェクト管理ユニット42は、新たなフィルターオブジェクト名が、フィルターオブジェクトチェイン57内の全てのフィルターオブジェクトの中で唯一のものであるか否かを判断する。新たなフィルターオブジェクト名が唯一のものでなければ、オブジェクト管理ユニット42は、ステップ205においてフィルターオブジェクトチェイン内のプリプロセッサ及びポストプロセッサメッセージオブジェクト52、53をロックした後、ステップ206においてインストール失敗エラーに戻る。
ステップ204において、新たなフィルターオブジェクト名がフィルターオブジェクトチェイン57内の全てのフィルターオブジェクトの中で唯一のものであるならば、オブジェクト管理ユニット42は次にステップ208において、フィルターオブジェクトチェイン57内の前向き方向に他のフィルターオブジェクト56が存在するか否かを判断する。フィルターオブジェクトチェイン57に他のフィルターオブジェクトが存在しなければ、ステップ209において、オブジェクト管理ユニット42はフィルターオブジェクトチェイン57が空か否かを判断する。フィルターオブジェクトチェイン57が空ならば、この好ましい方法はステップ276に進む。
ステップ208において、オブジェクト管理ユニット42がフィルターオブジェクトチェイン57に他のオブジェクト56が存在すると判断したならば、ステップ210において、オブジェクト管理ユニット42は次のフィルターオブジェクト56を選択する。次に、ステップ212において、オブジェクト管理ユニット42は、新たなフィルターオブジェクトの前方規則(before rule)が、選択されたフィルターオブジェクト名とマッチするか否かを判断する。肯定判断されたならば、ステップ214において、オブジェクト管理ユニット42は、選択されたフィルターオブジェクトの位置をフィルターオブジェクトチェイン57に格納する。ステップ212において、新たなフィルターオブジェクトの前方規則が、選択されたフィルターオブジェクト名とマッチしなければ、オブジェクト管理ユニット42は次にステップ216において、選択されたオブジェクトの後方規則(after rule)が、新たなフィルターオブジェクト名とマッチするか否かを判断する。肯定判断されたならば、この好ましい方法はステップ214に進む。選択されたフィルターオブジェクトの後方規則が新たなフィルターオブジェクト名とマッチしなければ、この好ましい方法はステップ208に戻る。
ステップ214の後、あるいは、フィルターオブジェクトチェイン57が空でなければステップ209の後、ステップ230において、オブジェクト管理ユニット42は他のフィルタ56がフィルターオブジェクトチェインに存在するか否かを判断する。肯定判断されたならば、ステップ232において、オブジェクト管理ユニット42は次のフィルターオブジェクトを選択する。次に、ステップ234において、オブジェクト管理ユニット42は、新たなフィルターオブジェクトの後方規則が、選択されたフィルターオブジェクト名にマッチするか否かを判断する。肯定判断されたならば、ステップ235において、オブジェクト管理ユニット42はこのマッチが不可能なフィルターオブジェクトチェイン順序を指定しているか否かを判断する。このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているならば、この好ましい方法はステップ205に戻る。
ステップ235の後、あるいは、ステップ234の後、ステップ236において、オブジェクト管理ユニット42は、選択されたフィルターオブジェクトの前方規則が、新たなフィルターオブジェクト名にマッチするか否かを判断する。肯定判断されたならば、ステップ237において、オブジェクト管理ユニット42は、このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているか否かを判断する。このマッチが不可能なフィルターオブジェクトチェイン順序を指定しているならば、この好ましい方法はステップ205に戻る。
ステップ237の後、あるいは、ステップ236の後、ステップ238において、オブジェクト管理ユニット42は、選択されたオブジェクトのインストールオプションが、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内の新たなフィルターオブジェクト56の直後に位置すべきことを指定しているか否かを判断する。選択されたオブジェクトのインストールオプションが、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内の新たなフィルターオブジェクト56の直後に続くべきことを指定しているならば、ステップ239において、オブジェクト管理ユニット42はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ205に戻る。
ステップ239の後、あるいはステップ238の後、ステップ240において、オブジェクト管理ユニット42は、新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト56はフィルターオブジェクトチェイン57内の選択されたフィルターオブジェクト56の直前に位置すべきことを指定しているか否かを判断する。新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト56はフィルターオブジェクトチェイン57内の選択されたフィルターオブジェクト56の直前に先行すべきことを指定しているならば、ステップ241において、オブジェクト管理ユニット42はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ205に戻る。
ステップ230において、オブジェクト管理ユニット42が、フィルターオブジェクトチェイン57に他のフィルターオブジェクト56は存在しないと判断したならば、ステップ242において、オブジェクト管理ユニット42は第1のフィルターオブジェクトチェイン57の第1のフィルターオブジェクト56を選択する。ステップ242の後、オブジェクト管理ユニット42は、選択されたフィルターオブジェクト56のフィルターオブジェクトチェイン内での位置がステップ214において格納されたマッチ位置であるか否かを判断する。否定判断されたならば、ステップ252において、オブジェクト管理ユニット42は選択されたフィルターオブジェクトの配置順序が、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内で新たなフィルターオブジェクト56に続くべきであることを指定しているか否かを判断する。選択されたフィルターオブジェクトの配置順序が、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内で新たなフィルターオブジェクト56に続くべきであることを指定しているならば、オブジェクト管理ユニット42は次にステップ253において、この順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ260に進む。ステップ260においてオブジェクト管理ユニット42がステップ214において格納されたマッチ位置をリセットした後、この好ましい方法はステップ230に戻る。
ステップ253の後、あるいは、ステップ252の後、オブジェクト管理ユニット42は、選択されたフィルターオブジェクトのインストールオプションが、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内で新たなフィルターオブジェクト56の直前に先行すべきであることを指定しているか否かを判断する。選択されたフィルターオブジェクトのインストールオプションが、選択されたフィルターオブジェクト56はフィルターオブジェクトチェイン57内で新たなフィルターオブジェクト56の直前に先行すべきであることを指定しているならば、ステップ255において、オブジェクト管理ユニット42は、この順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ260に進む。
ステップ255の後、あるいは、ステップ254の後、ステップ256において、オブジェクト管理ユニット42は、新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト56はフィルターオブジェクトチェイン57内で選択されたフィルターオブジェクト56の直後に続くべきであることを指定しているか否かを判断する。新たなフィルターオブジェクトのインストールオプションが、新たなフィルターオブジェクト56はフィルターオブジェクトチェイン57内で選択されたフィルターオブジェクト56の直後に続くべきであることを指定しているならば、ステップ257においてオブジェクト管理ユニット42はこの順序が不可能か否かを判断する。不可能ならば、この好ましい方法はステップ260へ進む。
ステップ257の後、あるいは、ステップ256の後、オブジェクト管理ユニット42はフィルターオブジェクトチェイン57の次のフィルターオブジェクト56を選択し、その後、この好ましい方法はステップ250に戻る。
ステップ250において、ステップ214において格納されたマッチ位置に達したと判断されたならば、次に、オブジェクト管理ユニット42は新たなフィルターオブジェクト56がフィルターオブジェクトチェイン57の2つのフィルターオブジェクト56の間にインストールされるべきか否かを判断する。肯定判別されたならば、ステップ272において、オブジェクト管理ユニット42は、新たなフィルターオブジェクト56がその前に挿入されるべきフィルターオブジェクト56の右前方(right-before)オプションが満足され得るか否かを判断する。右前方オプションが満足され得ないならば、この好ましい方法はステップ205に戻る。右前方オプションが満足され得るならば、オブジェクト管理ユニット42は次にステップ274において、フィルターオブジェクト56がその後に挿入されるべきフィルターオブジェクト56の右後方(right-after)オプションが満足され得るか否かが判断される。フィルターオブジェクト56がその後に挿入されるべきフィルターオブジェクト56の右後方(right-after)オプションが満足され得ないならば、この好ましい方法はステップ205に戻る。
ステップ274の後、ステップ276においてオブジェクト管理ユニット42は、新たなフィルターオブジェクト56の第2データフィールドを、フィルターオブジェクトチェイン57内の適切な次の、及び、前のフィルターオブジェクト56を参照するように変更する。
ステップ274の後、ステップ276において、オブジェクト管理ユニット42は、新たなフィルターオブジェクト56の第2データフィールドを、フィルターオブジェクトチェイン57内の適切な次の、及び、前のフィルターオブジェクト56を参照するように変更する。オブジェクト管理ユニット42は、新たなフィルターオブジェクト56がフィルターオブジェクトチェイン内に配置されるべき位置の直前及び直後のフィルターオブジェクト56の第2データフィールドをも同様に変更する。ステップ276が実行されることにより、新たなフィルターオブジェクトは実際にフィルターオブジェクトチェイン257の一部となる。ステップ276の後、ステップ278において、オブジェクト管理ユニット42はフィルターオブジェクトチェイン57に対応するプリプロセッサ及びポストプロセッサメッセージオブジェクト52、53の夫々をアンロックし、その後、この好ましい方法は終了する。
次に、図12を参照するに、メッセージ送信操作(図10Bのステップ132)を実行する好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ300において、メッセージ処理ユニット44が対応するメッセージ送信要求で指定されたターゲットオブジェクトIDをデコードする。次に、ステップ302において、メッセージ処理ユニット44はターゲットオブジェクトIDが有効か否かを判断する。ターゲットオブジェクトIDが有効でなければ、メッセージ処理ユニット44がステップ304の無効IDエラーに戻った後、この好ましい方法は終了する。ターゲットオブジェクトIDが有効ならば、ステップ306において、メッセージ処理ユニット44はメッセージオブジェクトロッキング操作と同期する。次に、ステップ308において、メッセージ処理ユニット44は唯一のメッセージIDを発生すると共に送信MCBを生成する。好ましくは、メッセージ処理ユニット44は、送信MCBが唯一に同定され、メッセージIDによってその位置が確認されるように、送信MCBをメッセージIDと対応させる。メッセージ送信要求が同期メッセージ送信要求であるならば、メッセージ処理ユニット44は同期送信MCB60を生成する。メッセージ送信要求が非同期メッセージ送信要求であるならば、メッセージ処理ユニット44は非同期送信MCB62を生成する。
ステップ308の後、ステップ310において、メッセージ処理ユニット44は、送信MCBの第1データフィールドで指定されたターゲットメッセージオブジェクトIDを送信MCBの第3データフィールド内に格納することにより、ターゲットメッセージオブジェクトを検討中の現在のメッセージオブジェクトとして同定する。次に、ステップ312において、メッセージ処理ユニット44はプリプロセッサメッセージオブジェクト52を検査する。プリプロセッサメッセージオブジェクト52の検査については、図14を参照して詳細に後述する。ステップ312の後、ステップ314において、メッセージ処理ユニット44は、対応するポートオブジェクトIDを送信MCBの第4データフィールドに格納することにより、ターゲットメッセージオブジェクト51に対応するポートオブジェクト54を現在のポートオブジェクト54として同定する。次にステップ316において、メッセージ処理ユニット44は低レベルメッセージ送信操作を実行し、その後、この好ましい方法は終了する。
次に、図13を参照するに、ロッキング操作との同期(図12のステップ300)を行なう好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ400において、メッセージ処理ユニット44は現在のメッセージオブジェクト58がロックされているか否かを判断する。現在のメッセージオブジェクト58がロックされているならば、メッセージ処理ユニット44は、送信MCBにより指示されたクライアントタスク32を、ステップ402においてこのクライアントタスク32の更なる操作の実行を阻止することによりブロックする。クライアントタスクのブロックは従前の方法で実行される。ステップ402の後、あるいはステップ400の後、ステップ404において、メッセージ処理ユニット44は、送信MCBで指定された送信オプションを検査することにより現在のメッセージオブジェクト58がロックされるべきか否かを判断する。現在のメッセージオブジェクト58がロックされるべきならば、ステップ406において、メッセージ処理ユニット44は現在のメッセージオブジェクト58をロックする。ステップ406の後、あるいはステップ404の後、この好ましい方法は終了する。
次に、図14を参照するに、プロセッサメッセージオブジェクト52の検査(図12のステップ212及び図17Cのステップ838)を行なう好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ500において、メッセージ処理ユニット44は、他のフィルターオブジェクト56が現在のメッセージオブジェクト58に対応するフィルターオブジェクトチェイン57内で参照されているか否かを判断する。他のフィルターオブジェクト56が現在のメッセージオブジェクト58によって参照されていなければ、この好ましい方法は終了する。他のフィルターオブジェクト56が現在のメッセージオブジェクト58に対応するフィルターオブジェクトチェイン57内で参照されているならば、ステップ502において、メッセージ処理ユニット44はフィルターオブジェクトチェイン57内の次のフィルターオブジェクト56を選択する。ステップ502の後、ステップ504において、メッセージ処理ユニット44は、選択されたフィルターオブジェクト56の第6データフィールドを検査することにより、選択されたフィルターオブジェクト56が対応するプリプロセッサメッセージオブジェクト52を有しているか否かを判断する。選択されたフィルターオブジェクト56が対応するプリプロセッサメッセージオブジェクト52を有していなければ、この好ましい方法はステップ500に戻る。選択されたフィルターオブジェクト56が対応するプリプロセッサメッセージオブジェクト52を有しているならば、メッセージ処理ユニット44は次にステップ506において、送信MCBで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストで与えられたメッセージ型とマッチするか否かを判断する。送信MCBで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストのメッセージ型とマッチしなければ、この好ましい方法はステップ400に戻る。送信MCBで指定されたメッセージ型が、選択されたオブジェクトのメッセージ型リストのメッセージ型とマッチするならば、メッセージ処理ユニット44は次にステップ508において、現在のメッセージオブジェクト58がロックされているか否かを判断する。現在のメッセージオブジェクト58がロックされているならば、ステップ510において、メッセージ処理ユニット44は現在のメッセージオブジェクト58をアンロックする。ステップ510の後、あるいはステップ508の後、ステップ512において、メッセージ処理ユニット44は、プリプロセッサメッセージオブジェクト52に対応するメッセージオブジェクトIDを送信MCBの第3データフィールドに格納することにより、選択されたフィルターオブジェクト56に対応するプリプロセッサメッセージオブジェクト52を現在のメッセージオブジェクトとして同定する。次に、ステップ514において、メッセージ処理ユニット44は、対応するフィルターオブジェクトIDを送信MCBの第2データフィールドに格納することにより、選択されたフィルターオブジェクト56を現在のフィルターオブジェクトとして同定する。ステップ514の後、ステップ516において、メッセージ処理ユニット44はメッセージ転送操作を実行する。メッセージ転送操作については、図17A、17B、及び17Cを参照して詳細に後述する。ステップ516の後、この好ましい方法は終了する。
次に、図15A、15B、及び15Cを参照するに、低レベル送信操作(図12のステップ316及び図17Cのステップ840)を実行する好ましい方法のフローチャートが示されている。この好ましい方法が開始されると、先ず、ステップ600において、メッセージ処理ユニット44は、送信MCBのメッセージ型とマッチするメッセージ型を指定するアクセプタンス関数が、送信MCBで指定された現在のポートオブジェクト54と共に登録されたか否かを判断する。アクセプタンス関数が登録されているならば、ステップ602において、メッセージ処理ユニット44はクライアントタスクのアドレス空間内にデリバリーMCB80を生成する。ステップ602に続いて、ステップ604において、メッセージ処理ユニット44はデリバリーMCB80へのポインタをアクセプタンス関数へ引き渡す。次に、ステップ606において、メッセージ処理ユニット44は、送信MCBへの参照を現在のポートオブジェクト54内のペンディング応答メッセージリストに挿入する。
ステップ606の後、図15Cのステップ640において、メッセージ処理ユニット44は、生成された送信MCBが同期送信MCBか否かを判断する。同期送信MCBでなければ、ステップ642において、メッセージ処理ユニット44がメッセージIDを、メッセージ送信要求を発行したクライアントタスク32に戻した後、この好ましい方法は終了する。送信MCBが同期送信MCB60であるならば、メッセージ処理ユニット44は次にステップ644において、送信クライアントタスク32が更なる操作を実行するのを阻止、即ち、送信クライアントタスク32をブロックする。次に、ステップ646において、メッセージ処理ユニット44は、送信MCBで指定された最大時間間隔を超過したか否かを判断する。肯定判断されたならば、メッセージ処理ユニット44が時間切れ状態を送信クライアントタスク32に戻した後、この好ましい方法は終了する。最大時間間隔を超過していなければ、ステップ648において、メッセージ処理ユニット44は、メッセージ送信要求で指示されたメッセージに対して応答が発行されたか否かを判断する。応答が発行されていなければ、この好ましい方法はステップ646に戻る。ステップ648において、メッセージ処理ユニット44が応答が発行されたと判断したならば、ステップ650において、メッセージ処理ユニット44は応答操作を実行する。
ステップ600においてメッセージ・トランザクション・ユニット44がマッチング・アクセプタンス関数が存在しないと判断した場合、メッセージ・トランザクション・ユニットは次にステップ608において、マッチングする受信MCBが現在のポートオブジェクトのペンディング・メッセージ・リストに存在するかどうかを判断する。マッチングする受信MCBが存在しない場合、メッセージ・トランザクション・ユニット44はステップ610において、現在のポート・オブジェクトのペンディング・メッセージ・リストの送信MCBに参照符号を挿入する。その後、ステップ640に進む。メッセージ・トランザクション・ユニット44がマッチングする受信MCBが存在するとステップ608において判断したならば、メッセージ・トランザクション・ユニット44は図15Bのステップ620において、マッチングする受信MCB内の指定アドレスにおけるメッセージ・バッファに受信MCBを作成する。次に、メッセージ・トランザクション・ユニット44はステップ622において、現在のポート・オブジェクトのペンディング応答メッセージ・リストの送信MCBに参照符号を挿入する。ステップ622の後、メッセージ・トランザクション・ユニット44はステップ624において、受信MCBが同期受信MCB70であるかどうかを判断する。もしそうなら、メッセージ・トランザクション・ユニット44はステップ630において、対応する受信メッセージ要求を発行した受信サーバ・タスク34を非ブロック化する。メッセージ・トランザクション・ユニット44が受信MCBが同期受信MCB70でないと判断した場合、メッセージ・トランザクション・ユニット44はステップ626において、受信MCB70で参照されているメッセージを同期受信MCB72で指定されたサーバ・タスク34に渡す。ステップ626の後、メッセージ・トランザクション・ユニット44はステップ628において、同期受信MCB72で指定されたイベント通知情報に従って受信サーバ・タスク34に通知する。ステップ628の後、またはステップ630の後、メッセージ・トランザクション・ユニット44はステップ632において、受信MCBおよび対応するペンディング受信メッセージ・リストの参照符号を削除する。ステップ632の後、ステップ640に進む。
図16A,16Bおよび16Cは継続メッセージ動作(図10Bのステップ136および図19Aのステップ1018)を行なう方法を示すフローチャートである。ステップ700においてメッセージ・トランザクション・ユニット44が継続メッセージ要求で指定されたメッセージIDをデコードする。次に、メッセージ・トランザクション・ユニット44はステップ702において、メッセージIDが有効であるかどうかを判断する。メッセージIDが有効でなければ、メッセージ・トランザクション・ユニット44はステップ710において無効IDエラーを返して終了する。メッセージIDが有効であれば、メッセージ・トランザクション・ユニット44はステップ704において、対応する送信MCBを探し、その後メッセージ・トランザクション・ユニットはステップ706において、送信MCBの第3のデータ・フィールドにおいて指定された現在のメッセージ・オブジェクトIDをデコードする。ステップ706の後、メッセージ・トランザクション・ユニット44はステップ708において、現在のメッセージ・オブジェクトIDが有効であるかどうかを判断する。有効でなければ、メッセージ・トランザクション・ユニット44はステップ710において無効IDエラーを返して終了する。現在のメッセージ・オブジェクトIDが有効であれば、メッセージ・トランザクション・ユニット44はステップ712において、フィルタ・オブジェクト・チェーンを走査する方向を決定する。フィルタ・オブジェクト・チェーンを走査する方向を決定するに際して、メッセージ・トランザクション・ユニット44は送信MCBに記憶されている現在のメッセージIDが現在のフィルタ・オブジェクト56に記憶されたプリプロセッサ・メッセージ・オブジェクトIDとマッチングするかどうかを判断する。送信MCBに記憶された現在のメッセージIDが現在のフィルタ・オブジェクト56に記憶されたプリプロセッサ・メッセージ・オブジェクトIDとマッチングするならば、フィルタ・オブジェクト・チェーン走査方向は順方向である。逆の場合、フィルタ・オブジェクト・チェーンは逆方向である。フィルタ・オブジェクト・チェーン走査方向が順方向の場合、メッセージはプリプロセッサ・メッセージ・オブジェクト52もしくは目標メッセージ・オブジェクト51に送る。フィルタ・オブジェクト・チェーン走査方向が逆方向ならば、メッセージはポストプロセッサ・メッセージ・オブジェクト53に送る。
ステップ712の後、メッセージ・トランザクション・ユニット44はステップ720において、送信MCBの第2データフィールドで与えられた現在のフィルタ・オブジェクト56が別のフィルタ・オブジェクト56を参照しているかどうかをフィルタ・オブジェクト・チェーン走査方向に従って判断する。別のフィルタ・オブジェクト56が参照されているならば、メッセージ・トランザクション・ユニット44はステップ732において、フィルタ・オブジェクト・チェーン走査方向に沿った次の被参照フィルタ・オブジェクト56を選択する。次に、メッセージ・トランザクション・ユニット44はステップ732において、フィルタ・オブジェクト・チェーン走査方向が順方向の場合、選択されたフィルタ・オブジェクト56が関連するプリプロセッサ・メッセージ・オブジェクト52を有するかどうかを判断し、フィルタ・オブジェクト・チェーン走査方向が逆方向の場合、選択されたフィルタ・オブジェクト56が関連するポストプロセッサ・メッセージ・オブジェクト53を有するかどうかを判断する。すなわち、メッセージ・トランザクション・ユニット44はフィルタ・オブジェクト・チェーン走査方向に従って選択されたフィルタ・オブジェクト56がメッセージ・オブジェクト58を参照するかどうかを判断する。選択されたフィルタ・オブジェクト56がフィルタ・オブジェクト・チェーン走査方向に従ってメッセージ・オブジェクト58を参照しないならば、ステップ720に進む。選択されたフィルタ・オブジェクト56がフィルタ・オブジェクト・チェーン走査方向に従ってメッセージ・オブジェクト58を参照するならば、メッセージ・トランザクション・ユニット44は送信MCBで指定されたメッセージ・タイプが選択されたフィルタ・オブジェクトのメッセージ・タイプ・リストのメッセージ・タイプとマッチングするかどうかを判断する。マッチングしないならば、ステップ720に戻る。送信MCBで指定されたメッセージ・タイプが選択されたフィルタ・オブジェクトのメッセージ・タイプ・リストのメッセージ・タイプとマッチングするならば、メッセージ・トランザクション・ユニット44はステップ736において、選択されたフィルタ・オブジェクト56においてフィルタ・オブジェクト・チェーン走査方向に従って参照されたメッセージ・オブジェクトを現在のメッセージ・オブジェクトとする。ステップ736の後、メッセージ・オブジェクト44はステップ738において選択されたフィルタ・オブジェクト56を現在のフィルタ・オブジェクトとする。ステップ738の後、メッセージ・トランザクション・ユニット44はステップ739において、継続メッセージ要求で指定された現在の結果に従って受渡MCB80の現在の結果を更新する。次に、メッセージ・トランザクション・ユニット44はステップ740において、順方向メッセージ動作を行い終了する。
ステップ720においてメッセージ・トランザクション・ユニット44が現在のフィルタ・オブジェクト56がフィルタ・オブジェクト・チェーン走査方向に従って別のフィルタ・オブジェクト56を参照していないと判断した場合、メッセージ・トランザクション・ユニット44はステップ722において、送信MCBによって参照されたメッセージに対して行なわれた一番最近の動作がプリプロセッサ・メッセージ・オブジェクト52に関連しているかどうかを調べる。関連しているならば、メッセージ・トランザクション・ユニット44はステップ726において、目標メッセージ・オブジェクト51を現在のメッセージ・オブジェクト58とする。その後、メッセージ・オブジェクト44はステップ728において、目標メッセージ・オブジェクトのフィルタ・オブジェクト・チェーン57の最後のフィルタ・オブジェクト56を現在のフィルタ・オブジェクト56とする。ステップ728の後、ステップ740に進む。
メッセージ・トランザクション・ユニット44がステップ722においてフィルタ・オブジェクト・チェーン走査方向が逆方向であると判断し、送信MCBによって参照されたメッセージに対して行なわれた一番最近の動作がポストプロセッサ・メッセージ・オブジェクト53に関連していることが示唆された場合、メッセージ・トランザクション・ユニット44は次にステップ750において、送信MCBにおけるフィルタ・オブジェクト56のスタックが空であるかどうかを判断する。フィルタ・オブジェクトのスタックが空ではない場合、メッセージ・トランザクション・ユニット44はステップ752において、フィルタ・オブジェクトのスタックの一番上の項目を選択し、ステップ754において、対応するフィルタ・オブジェクト56を現在のフィルタ・オブジェクト56とする。次にメッセージ・トランザクション・ユニット44はステップ756において、フィルタ・オブジェクトのスタックの一番上の項目を削除する。ステップ756の後、ステップ732に進む。
メッセージ・トランザクション・ユニット44がステップ750においてフィルタ・オブジェクトのスタックが空であると判断した場合、メッセージ・トランザクション・ユニット44は次にステップ750において応答動作を行い終了する。
図17A,17Bおよび17Cは順方向メッセージ動作(図10Bのステップ140、図14のステップ516および図16Bのステップ740)を行なう方法を示すフローチャートである。ステップ800においてメッセージ・トランザクション・ユニット44が順方向メッセージ要求で指定されたメッセージIDをデコードする。次に、メッセージ・トランザクション・ユニット44はステップ802において、順方向メッセージ要求で指定されたメッセージIDが有効であるかどうかを判断する。メッセージIDが有効でなければ、メッセージ・トランザクション・ユニット44はステップ804において無効IDエラーを返して終了する。メッセージIDが有効であれば、メッセージ・トランザクション・ユニット44はステップ806において、メッセージ・オブジェクト・ロック動作と同期する。次に、メッセージ・トランザクション・ユニット44はステップ808において、メッセージIDに対応する送信MCBの場所を特定する。そしてメッセージ・トランザクション・ユニット44はステップ810において、送信MCBが現在のポート・オブジェクトのペンディング応答メッセージ・リストで参照されているかどうかを判断する。参照されている場合、メッセージ・トランザクション・ユニット44はステップ811において、送信MCBへの参照符号を現在のポート・オブジェクトのペンディング応答メッセージ・リストから削除する。ステップ811の後、またはステップ810の後、メッセージ・トランザクション・ユニット44はステップ812において、送信MCBは同期送信MCB60かどうか判断する。送信MCBが同期送信MCB60ではないならば、メッセージ・トランザクション・ユニット44はステップ814において、順方向メッセージ要求が現在のポート・オブジェクト54と異なるポート・オブジェクト54を示しているかどうかを判断する。異なるポート・オブジェクトであるならば、メッセージ・トランザクション・ユニット44はステップ816において、新しいポート・オブジェクト54上に新しい非同期送信MCB62を割り当てる。メッセージ・トランザクション・ユニット44は次にステップ818において、古い非同期送信MCB62からデータ・フィールドを新しい非同期送信MCB62にコピーする。
ステップ818の後、ステップ814の後、またはステップ812の後、メッセージ・トランザクション・ユニット44はステップ822において、順方向メッセージ要求が新しい目標メッセージ・オブジェクト51を示しているかどうかを判断する。示しているならば、メッセージ・トランザクション・ユニット44はステップ824において、新しい目標メッセージ・オブジェクトIDが有効かどうかを判断する。新しい目標メッセージ・オブジェクトIDが有効でなければ、メッセージ・トランザクション・ユニット44は無効IDエラーを返して終了する。新しい目標メッセージ・オブジェクトIDが有効であれば、メッセージ・トランザクション・ユニット44ステップ828において、同期送信MCB60または新しい非同期送信MCB62のいずれかにおけるフィルタ・オブジェクトのスタックを更新する。ステップ828では、メッセージ・トランザクション・ユニット44は、同期送信MCB60または新しい非同期送信MCB62のいずれかにおけるフィルタ・オブジェクトのスタックに保存された元来の目標メッセージ・オブジェクトのフィルタ・オブジェクト・チェーン57の各フィルタ・オブジェクト56への参照符号を逆方向にプッシュする。すなわち、元来の目標メッセージオブジェクト51に関連したフィルタ・オブジェクト・チェーン57のフィルタ・オブジェクト56への参照符号が、フィルタ・オブジェクト・チェーン57の最後のフィルタ・オブジェクト56に始まってフィルタ・オブジェクト・チェーン57の最初のフィルタ・オブジェクト56に至るように、フィルタ・オブジェクト・スタックにプッシュされていく。ステップ828の後、メッセージ・トランザクション・ユニット44はステップ830において、新しい目標メッセージ・オブジェクト51を現在のメッセージ・オブジェクトとする。
ステップ830の後、またはステップ822の後、メッセージ・トランザクション・ユニット44はステップ816の結果新しい非同期送信MCB62が割り当てられたかどうか判断する。割り当てられている場合、メッセージ・トランザクション・ユニット44はステップ834において、古いポート・オブジェクト54上の古い非同期送信MCB62の割当を解除する。ステップ834の後、またはステップ832の後、メッセージ・トランザクション・ユニット44はステップ836において、現在のメッセージ・オブジェクト58に関連したポート・オブジェクト54を現在のポート・オブジェクト54とすることによって、メッセージ・トランザクション・ユニット44は同期送信MCB60または新しい非同期送信MCB62のいずれかのデータ・フィールドを更新する。次にメッセージ・トランザクション・ユニット44はステップ838において、プリプロセッサ・メッセージ・オブジェクト52を調べ、その後メッセージ・トランザクション・ユニット44はステップ840において、低レベル送信動作を行なう。ステップ840の後、終了する。
図18Aおよび18Bは受信メッセージ動作(図10Bおよび10Cのそれぞれステップ144および158)を行なう方法を示すフローチャートである。ステップ900において、メッセージ・トランザクション・ユニット44は受信メッセージ要求で指定されたポート・オブジェクトIDをデコードする。次に、メッセージ・トランザクション・ユニット44はステップ902において、ポート・オブジェクトIDが有効かどうかを判断する。ポート・オブジェクトIDが有効でなければ、メッセージ・トランザクション・ユニット44はステップ904において、受信メッセージ要求を発行したサーバ・タスク34に無効IDエラーを返し、終了する。ポート・オブジェクトIDが有効の場合、メッセージ・トランザクション・ユニット44は次にステップ906において、マッチングする送信MCBがポート・オブジェクトのペンディング送信メッセージリストに存在するかどうか判断する。マッチングする送信MCBが存在しない場合、メッセージ・トランザクション・ユニット44はステップ908において、発行された受信メッセージ要求のタイプに従って受信MCBを作成し、ペンディング受信メッセージ要求リストの受信MCBに参照符号を挿入する。ステップ908の後、メッセージ・トランザクション・ユニット44はステップ910において、同期受信メッセージ要求かどうかを判断する。同期要求でない場合、メッセージ・トランザクション・ユニット44はステップ912において、非同期受信メッセージ要求を発行したサーバ・タスク34に受信IDを返し、終了する。同期受信メッセージ要求の場合、メッセージ・トランザクション・ユニットはステップ914において、受信メッセージ要求を発行したサーバー・タスク34をブロック化する。次に、ステップ916において、メッセージ・トランザクション・ユニット44は受信MCBで指定された最大時間間隔を超過したかどうかを判断する。超過の場合、メッセージ・トランザクション・ユニット44はステップ918において、サーバー・タスク34に対してタイムアウト・ステータスを返し、終了する。最大時間間隔を超過していない場合、メッセージ・トランザクション・ユニットはメッセージ・トランザクション・ユニットは次にステップ920において、マッチングする送信メッセージ要求が発行されたかどうかを判断する。発行されていない場合、ステップ916に戻る。マッチングする送信メッセージ要求が発行されている場合、メッセージ・トランザクション・ユニット44はステップ922において固有のメッセージIDを生成し対応する送信MCBを作成する。
ステップ922の後、またはステップ906の後、マッチングする送信MCBが存在する場合、メッセージ・トランザクション・ユニット44はステップ930において、ポート・オブジェクトのペンディング応答メッセージ・リストの送信MCBに参照符号を挿入する。メッセージ・トランザクション・ユニット44は次にステップ932において、受信メッセージ要求または受信MCBで指定されたアドレスに受信MCB80を作成する。ステップ932の後、メッセージ・トランザクション・ユニット44はステップ934において、受信メッセージ要求が同期受信メッセージ要求かどうかを判断する。同期メッセージ要求である場合、メッセージ・トランザクション・ユニット44はステップ936において、受信メッセージ要求を発行したサーバ・タスク34がブロック化されているかどうかを判断する。ブロック化されている場合、メッセージ・トランザクション・ユニット44はステップ938において、サーバ・タスク34を非ブロック化する。メッセージ・トランザクション・ユニット44がステップ934において受信メッセージ要求が同期受信メッセージ要求ではなく非同期受信メッセージ要求であると判断した場合、メッセージ・トランザクション・ユニット44はステップ940において、非同期受信メッセージ要求を発行したサーバ・タスク34に通知する。ステップ940またはステップ938の後、もしくはステップ938が実行されていない場合はステップ936の後、メッセージ・トランザクション・ユニット44はステップ942において、送信MCBで指定されたメッセージを受信メッセージ要求で指定されたメッセージ・バッファに送る。ステップ942の後、メッセージ・トランザクション・ユニット44はステップ944において、受信メッセージ要求に対応する受信MCBが作成されたかどうかを判断する。作成されている場合、メッセージ・トランザクション・ユニット44はステップ946において、受信MCBおよびペンディング受信メッセージ・リストの対応参照符号を削除する。ステップ946の後、もしくはステップ946が実行されていない場合はステップ944の後、終了する。
図19Aおよび19Bは応答方法を示すフローチャートである。ステップ1000においてメッセージ・トランザクション・ユニット44はメッセージIDをデコードする。次にメッセージ・トランザクション・ユニット44はステップ1002において、メッセージIDが有効かどうかを判断する。メッセージIDが有効でなければ、メッセージ・トランザクション・ユニット44はステップ1004において無効IDエラーを返し、終了する。メッセージIDが有効であれば、メッセージ・トランザクション・ユニット44はステップ1006において、対応する送信MCBの位置を特定する。メッセージ・トランザクション・ユニット44は次にステップ1008において、メッセージに対して実行された一番最近の動作がプリプロセッサ・メッセージ・オブジェクト52に関連しているかどうかを判断する。ステップ1008において、メッセージ・トランザクション・ユニット44は現在のメッセージ・オブジェクトIDが現在のフィルタ・オブジェクト56内に記憶されているプリプロセッサ・メッセージ・オブジェクトIDと同一かどうかを判断する。メッセージに対して行なわれた一番最近の動作がプリプロセッサ・メッセージ・オブジェクト52と関連しているならば、メッセージ・トランザクション・ユニット44はステップ1010において、現在のフィルタ・オブジェクト56と関連したポストプロセッサ・メッセージ・オブジェクト53を現在のメッセージ・オブジェクト58とする。ステップ1010の後、メッセージ・トランザクション・ユニット44はステップ1011において、応答で指定された現在の結果に従って受信MCB80の現在の結果を更新する。次に、メッセージ・トランザクション・ユニット44はステップ1012において、転送メッセージ動作を行ない終了する。
ステップ1018においてメッセージ・トランザクション・ユニット44が現在のメッセージ・オブジェクトIDが現在のフィルタ・オブジェクト56内に記憶されているプリプロセッサ・メッセージ・オブジェクトIDと同一であると判断した場合、メッセージ・トランザクション・ユニット44はステップ1010から1012を実行して上記のスキップ・アヘッド動作を行なう。すなわちプリプロセッサ・メッセージ・オブジェクト52と関連したプリプロセッシング・サービスを実行中にサーバ・タスク34が応答を発行した場合、付加的プリプロセッシングを考慮した追加的なフィルタ・オブジェクト56を調べないで、またメッセージを目標メッセージ・オブジェクト51に渡さずに、メッセージは直接プリプロセッサ・メッセージ・オブジェクト52に関連したポストプロセッサ・メッセージ・オブジェクト53に送られる。付加的なプリプロセッシング・サービスおよび目標メッセージ・オブジェクト51と関連したサービスはスキップ・アヘッド動作によってスキップされる。
ステップ1008においてメッセージ・トランザクション・ユニット44がメッセージに対して一番最近行なわれた動作がプリプロセッサ・メッセージ・オブジェクト52に関連していないと判断した場合、メッセージ・トランザクション・ユニット44はステップ1014において、現在のフィルタ・オブジェクト56が以前のフィルタ・オブジェクト56を参照しているかどうかを判断する。参照しているならば、メッセージ・トランザクション・ユニット44はステップ1018において、継続メッセージ動作を行ない終了する。メッセージ・トランザクション・ユニット44がステップ1014において現在のフィルタ・オブジェクト56が以前のフィルタ・オブジェクト56を参照していないと判断すれば、メッセージ・トランザクション・ユニット44は送信MCBのフィルタ・オブジェクトのスタックが空いているかどうか判断する。フィルタ・オブジェクトのスタックが空ではない場合、ステップ1018に進む。フィルタ・オブジェクトのスタックが空の場合、メッセージ・トランザクション・ユニット44は次にステップ1020において、送信MCBで指示されたクライアント・タスク32に応答ステータスを渡す。メッセージ・トランザクション・ユニット44は次にステップ1022において、応答バッファが応答中に指示されているかどうかを判断する。指示されていれば、メッセージ・トランザクション・ユニット44はステップ1024において、応答バッファの内容のコピーをクライアント・タスク32に渡す。ステップ1024の後、もしくは応答中に応答バッファが指示されていない場合はステップ1022の後、メッセージ・トランザクション・ユニット44はステップ1026において、現在のメッセージ・オブジェクト56がメッセージ・トランザクション終了後非ブロック化される必要があるかどうかを判断する。必要があれば、メッセージ・トランザクション・ユニット44はステップ1028において対応する非ブロック化要求をロッキング部46に発行する。ステップ1026の後、またはステップ1028の後、メッセージ・トランザクション・ユニット44はステップ1030においてメッセージ・トランザクションを表すメッセージIDを削除する。最後に、メッセージ・トランザクション・ユニット44はステップ1032において送信MCBを削除し終了する。
図20はロック動作を示すフローチャートである。本発明では、ロック動作は合衆国特許NO.08/220,043と同様の方法でロック動作を行なう。ステップ1100においてロック部46がロック要求で指定されたメッセージ・オブジェクトIDが有効かどうかを判断する。メッセージ・オブジェクトIDが有効でなければ、ロック部46はステップ1102において、ロック要求の発行元に対して無効IDエラーを返して終了する。メッセージ・オブジェクトIDが有効であれば、ロック部46は次にステップ1104において、メッセージ・オブジェクト58が既にロックされているかどうかを、メッセージ・オブジェクト52と関連したポート・オブジェクト54内のロック済メッセージ・オブジェクト・リストを調べることによって判断する。本発明の好ましい実施例においては、ロック済メッセージ・オブジェクト・リストの各要素は、メッセージ・オブジェクトIDとセマフォを指定したロック構造である。メッセージ・オブジェクト58がロック済でない場合、ロック部46はステップ1105において、クライアント・タスク32によって発行された新しい送信メッセージ要求を無視し、ステップ1106においてメッセージ・オブジェクト58を指定した、関連ポート・オブジェクトのペンディング応答メッセージ・リストで参照された各送信MCBに対して応答が発行されるのを待つ。好ましくは、ロック部46は、メッセージ・オブジェクト58を指定したペンディング応答メッセージ・リストで参照されている送信メッセージ制御ブロックの数をまず数えることによって、ステップ1106を実行し、その後ロック部46は数えあげた各被参照ブロックがペンディング応答メッセージ・リストから消されるのを待つ。ステップ1106の後、ロック部46は対応するメッセージ・オブジェクトIDを含む新しいロック構造をロック済メッセージ・オブジェクトのリストに挿入することによって、メッセージ・オブジェクト58をロックする。次にロック部46はステップ1118において、ロック要求の発行元に制御を返し、終了する。
ステップ1104において、ロッキングユニット46がメッセージオブジェクト58は既にロックされたことを判定した場合、ロッキングユニット46は、次に、ステップ1110においてロック要求発行者の照会先をロックされたメッセージオブジェクトのリスト内の対応するロック構造セマフォに加える。好ましくは、セマフォは、メッセージオブジェクト58をロックするため待機中の各タスクのクライアントタスクID又はサーバタスクIDを示す先入れ先出し順のロック待ちリストを与える。ステップ1110の後に、ロッキングユニット46は、ステップ1112において、現在考慮されているロック要求の発行者がメッセージオブジェクトのロックの支配権を次に受容するかどうかを判定する。好ましい方法において、ロッキングユニット46は、現在考慮されているロック要求の発行者のIDがロック待ちリストの先頭にあるかどうかを判定することによりステップ1112を実行する。現在考慮されているロック要求の発行者がメッセージオジェクトのロックの支配権を次に受けないならば、上記の好ましい方法はステップ1112に留まる。
現在考慮されているロック要求の発行者がメッセージオブジェクトのロックの支配権を次に受けた後、ロッキングユニット46は、ロック解除要求がステップ1114において発行されたかどうかを判定する。ロック解除要求が発行されていないならば、好ましい方法は、ステップ1114に留まる。ロック解除要求が発行された後、ロッキングユニット46は、ステップ1116においてロック解除動作を行うことによりロック解除要求に応答する。ステップ1116に続き、ステップ1118において、上記の好ましい方法は、現在考慮されているロック要求の発行者に制御を戻し、その後、上記の好ましい方法は終了する。
図21を参照するに、ロック解除動作を行う好ましい方法のフローチャートが示される。本発明において、ロック解除動作は、米国特許出願第08/220,043号に記載された方法と同じ方法で行われる。好ましい方法は、ロッキングユニット46がロック解除要求に示されたメッセージオブジェクト52のメッセージオブジェクトIDが有効であるかどうかを判定するステップ1200から始まる。メッセージオブジェクトIDが有効ではないならば、ロッキングユニット46は、ステップ1202において、ロック解除要求の発行者に無効IDエラーを返し、次に、好ましい方法は終了する。ステップ1200において、メッセージオブジェクトIDが有効であると判定されたならば、ロッキングユニット46は、次に、ステップ1204において、メッセージオブジェクト52が現在ロックされているかどうかを判定する。好ましくは、ロッキングユニット46は、ロックされたメッセージオブジェクトの関係したポートオブジェクトのリストを検査することにより、メッセージオブジェクト52が現在ロックされているかどうかを判定する。メッセージオブジェクト52が現在ロックされていない場合、ロッキングユニット46は、ステップ1206において、ロック解除要求の発行者にロック状態エラーを戻し、その後、好ましい方法は終了する。
メッセージオブジェクト52が現在ロックされているならば、ロッキングユニット46は、次にステップ1208において、別のタスクがメッセージオブジェクトのロックの支配権の取得を待機しているかどうかを判定する。ロッキングユニット46は、好ましくは、メッセージオブジェクト52と関係したセマフォを検査することにより、ステップ1208を実行する。他のタスクが支配権の取得を待機していないならば、ロッキングユニット46は、ステップ1210において、ロックされたメッセージオブジェクトの対応するポートオブジェクトのリストから対応するロック構造を除去する。ステップ1210に続き、ロッキングユニット46は、ステップ1214において、ロック解除要求の発行者に制御を戻す。ステップ1208において別のタスクがメッセージオブジェクトのロックの支配権の取得を待機しているならば、ロッキングユニット46は、ステップ1212において、セマフォのロック待ちリストの先頭のクライアントタスク32又はサーバタスク34の照会先を除去する。ステップ1212に続いて、好ましい方法はステップ1214に進む。
好ましい実施例を参照して本発明の説明を行ったが、当業者は種々の変更が与えられることを認める。請求の範囲の記載だけによって限定された本発明により、上記の好ましい実施例に基づく変形及び変更が与えられる。
付録 A
メッセージオブジェクトフィルタリングのNuカーネルオペレーティングシステム
Nuカーネル ERSのフィルタ内容
(付録Aの題材)
オブジェクトメッセージのフィルタリング
メッセージフィルタは、別のオブジェクトメッセージを遮るため使用されるオブジェクトの対である。フィルタを備えたオブジェクトはターゲットと呼ばれる。ターゲット上に実装されたフィルタの組はフィルタ系列と呼ばれる。
実装されたフィルタはIDにより名前を付けられる。IDは、後でフィルタを除去、又は、フィルタの実装情報を取得するため使用される。
実装された後、フィルタは、クライアントとサーバの双方に対し完全にトランスペアレントである。しかし、サーバは、そのオブジェクトがターゲットになるものを完全に管理する。
ターゲットが削除されたならば、実装された全フィルタは、自動的に除去される。ターゲットがロックされたならば、ロックはフィルタ系列の全体に適用される。ターゲットオブジェクトのフィルタ系列は、繰り返しのサービスを用いて検査される。
フィルタの数、又は、フィルタを通されるオブジェクトの数に制限はない。フィルタオブジェクトは、単一のポートを共有するが、フィルタは一つのオブジェクトのメッセージだけを遮ることが可能である。
Figure 0003689425
2種類のメッセージオブジェクトがフィルタに使用される。第1の種類のオブジェクトは、メッセージがターゲットに到達する前に、メッセージを遮り、プリプロセッサと呼ばれる。第2の種類のオブジェクトは、メッセージがターゲットから離れた後にメッセージを遮り、ポストプロセッサと呼ばれる。フィルタは、プリプロセッサだけから構成してもよく、或いは、ポストプロセッサだけから構成してもよい。
一つのメッセージだけが各フィルタ及びターゲットオブジェクトを通過させられる。このメッセージは、最初にプリプロセッサに与えられた、次にターゲットに与えられ、最後にポストプロセッサに与えられる。
送信メッセージ(SendMessage)、送信メッセージ非同期(SendMessageAsync)、及び転送メッセージ(ForwardMessage)のサービスは、オブジェクトのプリプロセッサを起動する。メッセージ応答(ReplyToMessage)及び非同期メッセージ削除(CancelAsyncMessage)サービスは、ポストプロセッサを起動する。継続メッセージ(ContinueMessage)サービスは、メッセージを系列内の次のオブジェクトに伝達するためオブジェクトによって使用される。
転送メッセージサービスは、メッセージを新しいターゲットに供給する前に現在のフィルタ系列内の残りのポストプロセッサを積み重ねる。新しいターゲットと、そのフィルタが処理を完了した後、残りのポストプロセッサの積み重ねが作動される。
プリプロセッサオブジェクトは、ターゲットを飛び越し、その対の一方から始まる後処理を開始するため、メッセージ応答を発行する。ポストプロセッサオブジェクトにより発生されたメッセージによる状態は、その対の一方により除去される。
内容変更フィルタが提供される予定ならば、オブジェクトのメッセージ内容のフォーマットは公開される。フィルタがフォーマットの変化に従うならば、メッセージ内容の版数が望ましい。
フィルタ名
全てのフィルタには名前が付けられる。同じターゲットに取付けられたフィルタは、特有の名前をもつ必要がある。別個のターゲットに実装されたフィルタは名前を共有してもよい。
フィルタ名は、サービス及び署名の型により構成される。サービス型は、フィルタにより提供される機能を識別する。署名型は、サービスの提供者を識別する。
Figure 0003689425
例えば、アップル社製の暗号化フィルタは、’ENCR’,’APPL’のように名前が付けられる。署名型の登録及び割当ては、アップルコンピュータ社により管理される。
フィルタの順序付け
ある種のフィルタは、他のフィルタに対する起動の順序の保証を要求する。順序の要求条件は、2個の規則の組により指定される。第1の規則はフィルタ系列の所望の場所の前にあるフィルタを指定し、第2の規則は後にあるフィルタを指定する。前方及び後方規則の組合せにより、フィルタ系列内の配置が決まる。
Figure 0003689425

Claims (27)

  1. 処理ユニットとメモリを有し、オブジェクト指向メッセージフィルタリングユニットと、クライアントタスクと、サーバタスクとが存するオブジェクト指向メッセージフィルタリングシステムのメッセージフィルタリング方法であって、
    ポートオブジェクトを生成する段階と、
    上記クライアントタスクにより発行された送信メッセージ要求によって指定されたメッセージの宛先としての機能を行うターゲットメッセージオブジェクトを生成する段階と、
    メッセージ前処理サービス又はメッセージ後処理サービスの群からの一つが、送信メッセージ要求により始められたメッセージトランザクションの間に必要とされるかどうかを選択的に示すフィルタオブジェクトを生成する段階とからなる方法。
  2. 上記メッセージトランザクションの間にメッセージ前処理サービスが必要とされるかどうかを判定する段階と、
    メッセージ前処理サービスが必要とされる場合に、上記メッセージを上記サーバタスクに伝達する段階とを更に有する請求項1記載の方法。
  3. 上記メッセージトランザクションの間にメッセージ後処理が必要とされるかどうかを判定する段階と、
    メッセージ後処理サービスが必要とされる場合に、上記メッセージを上記サーバタスクに伝達する段階とを更に有する請求項1記載の方法。
  4. 上記ポートオブジェクトへの参照を上記ターゲットオブジェクトメッセージに格納する段階と、
    上記ターゲットメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項1記載の方法。
  5. プリプロセッサメッセージオブジェクトを生成する段階と、
    上記プリプロセッサメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項1記載の方法。
  6. ポストプロセッサメッセージオブジェクトを生成する段階と、
    上記ポストプロセッサメッセージオブジェクトへの参照を上記フィルタオブジェクトに格納する段階とを更に有する請求項1記載の方法。
  7. 上記送信メッセージ要求により始められた上記メッセージトランザクションに対応する上記固有のメッセージ識別信号を発生する段階と、
    発生された上記メッセージ識別信号に対応する送信メッセージ制御ブロックを生成する段階を更に有する請求項1記載の方法。
  8. プリプロセッサメッセージオブジェクトが上記フィルタオブジェクトに関係するかどうかを判定する段階と、
    上記フィルタオブジェクトが関係のあるプリプロセッサメッセージオブジェクトを有する場合に、上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階とを更に有する請求項7記載の方法。
  9. 上記サーバスタからの受信メッセージ要求が上記送信メッセージ制御ブロックと一致するかどうかを判定する段階と、
    上記受信メッセージ要求が上記送信メッセージ制御ブロックと一致するならば、上記プリプロセッサメッセージオブジェクトに対応するメッセージ前処理サービスを始めるため上記サーバタスクに信号を発行する段階とを更に有する請求項8記載の方法。
  10. 次のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係するかどうかを判定する段階を更に有する請求項9記載の方法。
  11. 次のフィルタオブジェクトが次のターゲットメッセージオブジェクトと関係する場合に、
    プリプロセッサメッセージオブジェクトが上記次のフィルタオブジェクトと関係するかどうかを判定し、
    上記次のフィルタオブジェクトが関係のあるプリプロセッサメッセージオブジェクトを有する場合に、上記次のフィルタオブジェクトに関係した上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を実行する請求項10記載の方法。
  12. 上記フィルタオブジェクトに関係したポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項9記載の方法。
  13. 上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項9記載の方法。
  14. 次のターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項13記載の方法。
  15. 元のターゲットメッセージオブジェクトと関係した上記フィルタオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を更に有する請求項14記載の方法。
  16. ポストプロセッサメッセージオブジェクトが上記フィルタオブジェクトと関係するかどうかを判定する段階と、
    上記フィルタオブジェクトが関係のあるポストプロセッサメッセージオブジェクトを有する場合に、上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階とを更に有する請求項7記載の方法。
  17. 前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係するかどうかを判定する段階を更に有する請求項16記載の方法。
  18. 前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係する場合に、
    ポストプロセッサメッセージオブジェクトが上記前のフィルタオブジェクトと関係するかどうかを判定し、
    上記前のフィルタオブジェクトが関係のあるポストプロセッサメッセージオブジェクトを有する場合に、上記前のフィルタオブジェクトと関係のある上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する段階を実行する請求項17記載の方法。
  19. 前のフィルタオブジェクトが上記ターゲットメッセージオブジェクトと関係しない場合に、上記クライアントタスクに最終応答を発行する段階を更に有する請求項17記載の方法。
  20. ポートオブジェクトを生成する手段と、
    上記ポートオブジェクトと関係したターゲットメッセージオブジェクトを生成する手段と、
    上記ターゲットメッセージオブジェクトと関係したフィルタオブジェクトを生成する手段とからなるオブジェクト指向メッセージフィルタリング装置であって、
    上記フィルタオブジェクトは、メッセージ前処理サービス又はメッセージ後処理サービスの群からの一つが、送信メッセージ要求により始められたメッセージトランザクションの間に、必要とされるかどうかを、選択的に示すオブジェクト指向メッセージフィルタリング装置。
  21. プリプロセッサメッセージオブジェクトを生成する手段を更に有する請求項20記載のオブジェクト指向メッセージフィルタリング装置。
  22. ポストプロセッサメッセージオブジェクトを生成する手段を更に有する請求項20記載のオブジェクト指向メッセージフィルタリング装置。
  23. クライアントタスクからの送信メッセージ要求により始められたメッセージトランザクションに対応する固有のメッセージ識別信号を発生する手段と、
    発生された上記メッセージ識別信号に対応する送信メッセージ制御ブロックを生成する手段とを更に有する請求項20記載のオブジェクト指向メッセージフィルタリング装置。
  24. プリプロセッサメッセージオブジェクト、ポストプロセッサメッセージオブジェクト、又は、ターゲットメッセージオブジェクトよりなる群からの一つのオブジェクトへの参照を上記送信メッセージ制御ブロックに格納する手段を更に有する請求項20記載のオブジェクト指向メッセージフィルタリング装置。
  25. サーバタスクにより発行された受信メッセージ要求が上記送信メッセージ制御ブロックに一致するかどうかを判定する手段を更に有する請求項20記載のオブジェクト指向メッセージフィルタリング装置。
  26. クライアントタスクからのメッセージを少なくとも一つのサーバタスクに供給するオブジェクト指向メッセージフィルタリングシステムであって、
    入力及び出力を有し、ポートオブジェクトと、ターゲットメッセージオブジェクトと、フィルタオブジェクトと、プリプロセッサメッセージオブジェクトとを生成するオブジェクト管理ユニットと、上記ポートオブジェクトと、上記ターゲットメッセージオブジェクトと、上記フィルタオブジェクトと、上記プリプロセッサメッセージオブジェクトとを格納するオブジェクトデータベースと、送信メッセージ要求に応答して送信メッセージ制御ブロックを生成し、上記プリプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納し、上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納するメッセージトランザクションユニットとを含むデータ及び命令を格納するメモリと、
    上記メモリの上記出力に接続された入力と、上記メモリの上記入力に接続された出力とを有し、上記メモリの管理下でデータ及び命令を処理する処理ユニットとからなるシステム。
  27. クライアントタスクからのメッセージを少なくとも一つのサーバタスクに供給するオブジェクト指向メッセージフィルタリングシステムであって、
    入力及び出力を有し、ポートオブジェクトと、ターゲットメッセージオブジェクトと、フィルタオブジェクトと、ポストプロセッサメッセージオブジェクトとを生成するオブジェクト管理ユニットと、上記ポートオブジェクトと、上記ターゲットメッセージオブジェクトと、上記フィルタオブジェクトと、上記ポストプロセッサメッセージオブジェクトとを格納するオブジェクトデータベースと、送信メッセージ要求に応答して送信メッセージ制御ブロックを生成し、上記ターゲットメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納し、上記ポストプロセッサメッセージオブジェクトへの参照を上記送信メッセージ制御ブロックに選択的に格納するメッセージトランザクションユニットとを含むデータ及び命令を格納するメモリと、
    上記メモリの上記出力に接続された入力と、上記メモリの上記入力に接続された出力とを有し、上記メモリの管理下でデータ及び命令を処理する処理ユニットとからなるシステム。
JP52968295A 1994-05-13 1995-05-02 オブジェクト指向メッセージフィルタリングのシステム及び方法 Expired - Lifetime JP3689425B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/242,259 US5734903A (en) 1994-05-13 1994-05-13 System and method for object oriented message filtering
US08/242,259 1994-05-13
PCT/US1995/005457 WO1995031780A1 (en) 1994-05-13 1995-05-02 System and method for object oriented message filtering

Publications (2)

Publication Number Publication Date
JPH10500507A JPH10500507A (ja) 1998-01-13
JP3689425B2 true JP3689425B2 (ja) 2005-08-31

Family

ID=22914081

Family Applications (1)

Application Number Title Priority Date Filing Date
JP52968295A Expired - Lifetime JP3689425B2 (ja) 1994-05-13 1995-05-02 オブジェクト指向メッセージフィルタリングのシステム及び方法

Country Status (6)

Country Link
US (1) US5734903A (ja)
EP (1) EP0791196B1 (ja)
JP (1) JP3689425B2 (ja)
AU (1) AU2465795A (ja)
DE (1) DE69524253T2 (ja)
WO (1) WO1995031780A1 (ja)

Families Citing this family (89)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5822527A (en) * 1990-05-04 1998-10-13 Digital Equipment Corporation Method and apparatus for information stream filtration using tagged information access and action registration
KR960008583A (ko) * 1994-08-26 1996-03-22 윌리암 티. 엘리스 데이타 프로세싱 시스템 및 데이타 프로세싱 시스템 관리 방법
US6269407B1 (en) * 1996-03-14 2001-07-31 International Business Machines Corporation Method and system for data filtering within an object-oriented data
GB9606733D0 (en) * 1996-03-29 1996-06-05 British Telecomm Collection of events within a distributed object system
US6718550B1 (en) 1996-06-26 2004-04-06 Sun Microsystems, Inc. Method and apparatus for improving the performance of object invocation
US6275871B1 (en) * 1996-07-03 2001-08-14 Siemens Aktiengesellschaft Asynchronous transport optimizing observer-pattern-like system supporting several modes for an interface definition language-less communication subsystem
US6108655A (en) * 1996-07-19 2000-08-22 Cisco Technology, Inc. Method and apparatus for transmitting images and other objects over a computer network system
US20060195595A1 (en) * 2003-12-19 2006-08-31 Mendez Daniel J System and method for globally and securely accessing unified information in a computer network
US6061713A (en) * 1997-03-12 2000-05-09 Fujitsu Limited Communications system for client-server data processing systems
US6092101A (en) * 1997-06-16 2000-07-18 Digital Equipment Corporation Method for filtering mail messages for a plurality of client computers connected to a mail service system
US6185551B1 (en) 1997-06-16 2001-02-06 Digital Equipment Corporation Web-based electronic mail service apparatus and method using full text and label indexing
US6199102B1 (en) 1997-08-26 2001-03-06 Christopher Alan Cobb Method and system for filtering electronic messages
US6317796B1 (en) * 1997-10-06 2001-11-13 Sun Microsystems, Inc. Inline database for receiver types in object-oriented systems
US6438616B1 (en) 1997-12-18 2002-08-20 Sun Microsystems, Inc. Method and apparatus for fast, local corba object references
US6249803B1 (en) * 1997-12-18 2001-06-19 Sun Microsystems, Inc. Method and apparatus for executing code during method invocation
US6516354B2 (en) 1997-12-18 2003-02-04 Sun Microsystems, Inc. Method and apparatus for efficient representation of variable length identifiers in a distributed object system
US6510460B1 (en) 1997-12-18 2003-01-21 Sun Microsystems, Inc. Method and apparatus for enforcing locking invariants in multi-threaded systems
US6405264B1 (en) 1997-12-18 2002-06-11 Sun Microsystems, Inc. Marshaling and unmarshaling framework for supporting filters in a distributed object system
US6351751B1 (en) * 1998-05-14 2002-02-26 Sun Microsystems, Inc. Persistent storage managers for configuring client/server environments
US7173651B1 (en) * 1998-06-02 2007-02-06 Knowles Andrew T Apparatus and system for prompt digital photo delivery and archival
US6112227A (en) 1998-08-06 2000-08-29 Heiner; Jeffrey Nelson Filter-in method for reducing junk e-mail
US6425017B1 (en) * 1998-08-17 2002-07-23 Microsoft Corporation Queued method invocations on distributed component applications
JP2000122913A (ja) * 1998-10-15 2000-04-28 Fujitsu Ltd オブジェクト管理方法及び装置
US6668284B1 (en) 1998-11-04 2003-12-23 Beckman Coulter, Inc. Software messaging system
US6240453B1 (en) 1998-11-12 2001-05-29 International Business Machines Corporation Managing unused resources in a service application
US6868541B1 (en) * 1998-12-21 2005-03-15 Microsoft Corporation Asynchronous programming environment
US6442589B1 (en) 1999-01-14 2002-08-27 Fujitsu Limited Method and system for sorting and forwarding electronic messages and other data
JP3323144B2 (ja) * 1999-01-19 2002-09-09 松下電器産業株式会社 移動端末
US6286035B1 (en) * 1999-02-01 2001-09-04 Lucent Technologies Inc. Validating and parsing engine for system configuration and support command messages
KR100617228B1 (ko) * 1999-03-19 2006-08-31 엘지전자 주식회사 실시간 운영체계 커널의 이벤트 전달 체계 구현방법
US6446036B1 (en) * 1999-04-20 2002-09-03 Alis Technologies, Inc. System and method for enhancing document translatability
US6338033B1 (en) * 1999-04-20 2002-01-08 Alis Technologies, Inc. System and method for network-based teletranslation from one natural language to another
US6718367B1 (en) * 1999-06-01 2004-04-06 General Interactive, Inc. Filter for modeling system and method for handling and routing of text-based asynchronous communications
US7013465B1 (en) * 1999-08-17 2006-03-14 Emc Corporation System, device and method for interprocessor communication in a computer system
US6832266B1 (en) * 2000-02-07 2004-12-14 Sun Microsystems, Inc. Simplified microkernel application programming interface
US6658658B1 (en) 2000-02-17 2003-12-02 International Business Machines Corporation Implicit forwarding and resolving of a reference made by an importing module to an exporting module for a specified export
US6728722B1 (en) * 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US6865579B1 (en) 2000-08-28 2005-03-08 Sun Microsystems, Inc. Simplified thread control block design
US7287071B2 (en) 2000-09-28 2007-10-23 Vignette Corporation Transaction management system
USH2176H1 (en) * 2000-10-05 2006-12-05 Johnson Controls Technology Company System for processing interior environment complaints from building occupants
US6753886B1 (en) 2000-10-31 2004-06-22 Cisco Technology, Inc. Methods and apparatus for communicating messages in a computer display
US6781961B1 (en) 2000-11-17 2004-08-24 Emware, Inc. Systems and methods for routing messages sent between computer systems
KR100570143B1 (ko) * 2000-12-09 2006-04-12 인터내셔널 비지네스 머신즈 코포레이션 상호 통신 프리프로세서
US7080120B2 (en) * 2001-01-19 2006-07-18 Digital Orchid, Inc. System and method for collaborative processing of distributed applications
DE10131944A1 (de) * 2001-07-02 2003-01-16 Siemens Ag Verfahren zur Verarbeitung von Daten
US7703077B2 (en) * 2002-04-30 2010-04-20 Microsoft Corporation Programming model to detect deadlocks in concurrent programs
US20030208524A1 (en) * 2002-05-02 2003-11-06 Morman Daniel N. System for routing data in a communication network
US7516182B2 (en) * 2002-06-18 2009-04-07 Aol Llc Practical techniques for reducing unsolicited electronic messages by identifying sender's addresses
US20040117793A1 (en) * 2002-12-17 2004-06-17 Sun Microsystems, Inc. Operating system architecture employing synchronous tasks
US7620691B1 (en) 2003-02-10 2009-11-17 Aol Llc Filtering electronic messages while permitting delivery of solicited electronics messages
US7290033B1 (en) 2003-04-18 2007-10-30 America Online, Inc. Sorting electronic messages using attributes of the sender address
US7590695B2 (en) * 2003-05-09 2009-09-15 Aol Llc Managing electronic messages
WO2005003909A2 (en) * 2003-06-27 2005-01-13 University Of Florida Research Foundation, Inc. Perimeter-based defense against data flooding in a data communication network
US8817772B2 (en) * 2003-07-02 2014-08-26 Nokia Corporation Function mode routing
US7627635B1 (en) 2003-07-28 2009-12-01 Aol Llc Managing self-addressed electronic messages
US7647595B2 (en) * 2003-10-29 2010-01-12 Oracle International Corporation Efficient event notification in clustered computing environments
US20050125667A1 (en) * 2003-12-09 2005-06-09 Tim Sullivan Systems and methods for authorizing delivery of incoming messages
WO2005062843A2 (en) 2003-12-19 2005-07-14 America On Line, Inc Community messaging lists for authorization to deliver electronic messages
US20050193130A1 (en) * 2004-01-22 2005-09-01 Mblx Llc Methods and systems for confirmation of availability of messaging account to user
US7469292B2 (en) * 2004-02-11 2008-12-23 Aol Llc Managing electronic messages using contact information
US7797669B1 (en) 2004-02-13 2010-09-14 Microsoft Corporation Analysis of distributed software systems via specification substitution
US7824408B2 (en) * 2004-08-05 2010-11-02 Tyco Healthcare Group, Lp Methods and apparatus for coagulating and/or constricting hollow anatomical structures
US7549151B2 (en) * 2005-02-14 2009-06-16 Qnx Software Systems Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment
US7625372B2 (en) * 2005-02-23 2009-12-01 Vnus Medical Technologies, Inc. Methods and apparatus for coagulating and/or constricting hollow anatomical structures
US7650383B2 (en) * 2005-03-15 2010-01-19 Aol Llc Electronic message system with federation of trusted senders
US7647381B2 (en) * 2005-04-04 2010-01-12 Aol Llc Federated challenge credit system
US8151112B2 (en) * 2005-04-22 2012-04-03 Gerard Lin Deliver-upon-request secure electronic message system
US7840682B2 (en) 2005-06-03 2010-11-23 QNX Software Systems, GmbH & Co. KG Distributed kernel operating system
US8667184B2 (en) * 2005-06-03 2014-03-04 Qnx Software Systems Limited Distributed kernel operating system
US7844957B2 (en) * 2005-08-19 2010-11-30 Sybase, Inc. Development system with methodology providing optimized message parsing and handling
US20070088793A1 (en) * 2005-10-17 2007-04-19 Landsman Richard A Filter for instant messaging
US7680096B2 (en) * 2005-10-28 2010-03-16 Qnx Software Systems Gmbh & Co. Kg System for configuring switches in a network
US8041946B2 (en) * 2006-02-28 2011-10-18 The Boeing Company Data transfer between networks operating at different security levels
US8185944B2 (en) * 2006-02-28 2012-05-22 The Boeing Company High-assurance file-driven content filtering for secure network server
GB0605341D0 (en) * 2006-03-17 2006-04-26 Ergo Ltd 2 Managing message distribution
WO2008113639A1 (en) * 2007-03-16 2008-09-25 International Business Machines Corporation Method, apparatus and computer program for administering messages which a consuming application fails to process
TW200839561A (en) * 2007-03-22 2008-10-01 Wistron Corp Method of irregular password configuration and verification
US9032087B2 (en) * 2007-07-13 2015-05-12 International Business Machines Corporation Providing a fine-grained response from a coarse-grained service object
US8510752B2 (en) * 2007-08-31 2013-08-13 Siemens Product Lifecycle Management Software Inc. System and method for data management of embedded systems
US20090158298A1 (en) * 2007-12-12 2009-06-18 Abhishek Saxena Database system and eventing infrastructure
US8934890B2 (en) * 2008-01-11 2015-01-13 Texas Instruments Incorporated Transmission of data bursts on a constant data rate channel
US8799909B1 (en) * 2008-12-23 2014-08-05 Juniper Networks, Inc. System and method for independent synchronous and asynchronous transaction requests
US8112666B2 (en) * 2009-03-03 2012-02-07 International Business Machines Corporation Message producer with message type validation
US8936631B2 (en) * 2010-01-04 2015-01-20 Covidien Lp Apparatus and methods for treating hollow anatomical structures
US8793691B2 (en) * 2010-04-15 2014-07-29 Salesforce.Com, Inc. Managing and forwarding tasks to handler for processing using a message queue
US20130067488A1 (en) 2010-05-19 2013-03-14 Hughes Systique India Private Limited Method and system for efficient inter- process communication in a high availability system
US10812434B2 (en) * 2017-03-23 2020-10-20 Blackberry Limited Apparatus and method for maintaining message databases in eventual consistency distributed database systems
US11138265B2 (en) * 2019-02-11 2021-10-05 Verizon Media Inc. Computerized system and method for display of modified machine-generated messages
CN110046079B (zh) * 2019-04-25 2024-03-12 广州方硅信息技术有限公司 网络请求检测方法、装置及设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4868745A (en) * 1986-05-30 1989-09-19 Hewlett-Packard Company Data processing system and method for the direct and indirect execution of uniformly structured object types
US4704717A (en) * 1986-07-22 1987-11-03 Prime Computer, Inc. Receive message processor for a solicited message packet transfer system
US4970658A (en) * 1989-02-16 1990-11-13 Tesseract Corporation Knowledge engineering tool
US5339418A (en) * 1989-06-29 1994-08-16 Digital Equipment Corporation Message passing method
DE69029515D1 (de) * 1990-06-28 1997-02-06 Ibm Nachrichtenverarbeitung in einem Datenverarbeitungsgerät
US5291593A (en) * 1990-10-24 1994-03-01 International Business Machines Corp. System for persistent and delayed allocation object reference in an object oriented environment
US5315709A (en) * 1990-12-03 1994-05-24 Bachman Information Systems, Inc. Method and apparatus for transforming objects in data models
US5305461A (en) * 1992-04-03 1994-04-19 International Business Machines Corporation Method of transparently interconnecting message passing systems
US5329619A (en) * 1992-10-30 1994-07-12 Software Ag Cooperative processing interface and communication broker for heterogeneous computing environments
US5377350A (en) * 1993-04-30 1994-12-27 International Business Machines Corporation System for cooperative communication between local object managers to provide verification for the performance of remote calls by object messages

Also Published As

Publication number Publication date
WO1995031780A1 (en) 1995-11-23
AU2465795A (en) 1995-12-05
EP0791196B1 (en) 2001-11-28
DE69524253T2 (de) 2002-07-18
EP0791196A1 (en) 1997-08-27
JPH10500507A (ja) 1998-01-13
DE69524253D1 (de) 2002-01-10
US5734903A (en) 1998-03-31

Similar Documents

Publication Publication Date Title
JP3689425B2 (ja) オブジェクト指向メッセージフィルタリングのシステム及び方法
US5590334A (en) Object oriented message passing system and method
US6529932B1 (en) Method and system for distributed transaction processing with asynchronous message delivery
JP3691515B2 (ja) オペレーティングシステムにおけるイベント分配装置及び方法
US6516328B1 (en) Digitized document circulating system with circulation history
EP0753817A1 (en) Method and apparatus for data communication
US7356739B2 (en) System and program for controlling a distributed processing system
JPH086840A (ja) サーバ回復のためのディレクトリ操作の完了を判定する機構
CA2222347C (en) System and method for efficiently transferring datastreams in a multimedia system
JP2002533838A (ja) クライアントサーバーでダイナミックなファイルアクセスを行うシステムと方法
US8606833B2 (en) Method and system of committing operations of a synchronized transaction
CN110968478A (zh) 日志采集方法、服务器及计算机存储介质
JP2002532784A (ja) ネットワークドライバおよびソフトウェアのリモートインストールの方法および装置
JP4607999B2 (ja) ロック関連の一貫性欠如を処理する方法
JP2001175460A (ja) プログラム配付管理システム
US5892907A (en) Bypass SEND and RECEIVE optimizer method for VTAM processes
JP2896394B2 (ja) ファイルサーバ装置
JP3014792B2 (ja) 文書伝送方法及びシステム
JPH0628322A (ja) 情報処理装置
JP2001005614A (ja) ディスク装置およびサーバ装置
JP3412921B2 (ja) データ処理システム及びコンピュータ及び遠隔ファイル処理方法
JPH09330240A (ja) 資源排他制御方式
JP3492900B2 (ja) ワークフローシステム
US20090319593A1 (en) Optimized Message Format for Synchronization Flows Between Transaction Processing Systems
JP3171271B2 (ja) ファイルロック管理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040330

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20040630

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20040816

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040929

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050517

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050613

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080617

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080617

Year of fee payment: 3

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080617

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090617

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100617

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100617

Year of fee payment: 5

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110617

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110617

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120617

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120617

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130617

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term