JP2000515278A - 非同期式にオブジェクトを呼出し、処理するための方法および装置 - Google Patents

非同期式にオブジェクトを呼出し、処理するための方法および装置

Info

Publication number
JP2000515278A
JP2000515278A JP10506101A JP50610198A JP2000515278A JP 2000515278 A JP2000515278 A JP 2000515278A JP 10506101 A JP10506101 A JP 10506101A JP 50610198 A JP50610198 A JP 50610198A JP 2000515278 A JP2000515278 A JP 2000515278A
Authority
JP
Japan
Prior art keywords
call
client
server
application
function
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.)
Pending
Application number
JP10506101A
Other languages
English (en)
Inventor
スコフィールド,アンドリュー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Compaq Computer Corp
Original Assignee
Compaq Computer Corp
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 Compaq Computer Corp filed Critical Compaq Computer Corp
Publication of JP2000515278A publication Critical patent/JP2000515278A/ja
Pending legal-status Critical Current

Links

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/547Remote procedure calls [RPC]; Web services
    • 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/547Remote procedure calls [RPC]; Web services
    • G06F9/548Object oriented; Remote method invocation [RMI]

Landscapes

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

Abstract

(57)【要約】 非同期式にオブジェクトを呼出し実行するための方法および装置が開示されている。オペレーションを実行するためのオブジェクト呼出しは、クラアントアプリケーションから適切なスタブ関数を呼出し、オブジェクト参照、入力パラメータおよび完了ルーチンを指示するポインタを取り込むことによって、非同期式に行われる。前記オブジェクト参照、入力パラメータおよび完了ルーチンアドレスは、クラアント側実行環境に与えられる。このクラアント側実行環境は、前記完了ルーチンアドレスを格納し、前記入力パラメータをサーバ側実行環境に送る。前記サーバ側実行環境は、リクエストされたオペレーションを実行するサーバアプリケーションにおけるメソッドを呼出す。前記サーバアプリケーションは、リクエストされたオペレーションを実行する。前記呼出しに応答がなされると、前記クラアント側実行環境は、前記完了ルーチンを呼出し、前記リクエストされたオペレーションに出力パラメータを送る。前記完了ルーチンが呼出される前において、前記クラアントアプリケーションは、他の非同期オペレーションを実行し続けることができる。呼出されたオブジェクトを非同期式に実行するために、非同期オペレーションを呼出す前記サーバアプリケーションにおける適切なメソッド関数が呼出される。前記非同期オペレーションが戻されると、このアプリケーションは前記クラアントアプリケーションに応答する。

Description

【発明の詳細な説明】 非同期式にオブジェクトを呼出し、処理するための方法および装置 発明の背景 1.発明の分野 この発明は、クライアントアプリケーションおよひサーバアプリケーションに おいて非同期的なオブジェクト呼出しおよび非同期的なオブジェクト実行を行う ための方法および装置に関する。 2.背景 分散型オブジェクトコンピューティング方式は、分散型コンピューティングお よびオブジェクト指向型コンピューティングの概念を組合わせたものである。分 散型コンピューティング方式は、相互に情報を共有する2つまたは3つ以上のソ フトウエアで構成される。これら2つのソフトウエアは、同一のコンピュータ、 または、共通のネットワークに接続された複数の異なるコンピュータ上で実行さ れる。ほとんどの分散型コンピューティング方式は、クライアント/サーバモデ ルに基づいている。このようなクライアント/サーバモデルでは、大別して2種 類のソフトウエア、すなわち、情報またはサービスを要求するクライアントソフ トウエアと、情報またはサービスを提供または実行するサーバソフトウエアが使 用される。 前記オブジェクト指向型コンピューティングは、“オブジェクト”と呼ばれる コード(しばしば、現実世界における現実の対象から抽出される)がデータ(オ ブジェクト指向プログラミング言語では“属性”と呼ばれる)を含み、これらオ ブジェクトについて実行される行為(“オペレーション”とも呼ばれる)を含む ことがあるオブジェクトモデルに基づくものである。各オブジェクトは、そのイ ンターフェイス(または、C++言語では“クラス”)によって定義される。前 記インターフェイスは、該インターフェイスのオブジェクトについて実行される オペレーション、および、該オペレーションのためのパラメータを含む、オブジ ェクトの特徴および作用を定義する。オブジェクトは、分散型オブジェクトシス テムにおいて、オブジェクト参照と呼ばれるユニークな識別子によって識別され る。 分散型オブジェクトシステムにおいて、クライアントアプリケーションは、サ ーバアプリケーションに対してリクエスト(または“オブジェクトコール(呼出 し)”)を送る。このリクエストは、特定のオブジェクトについて実行すべきオ ペレーション、このオペレーションのためのパラメータ、前記オブジェクトのオ ブジェクト参照、および、リクエストの成功または失敗についてのエラー情報( または“例外情報”)を戻すためのメカニズムを含んでいる。サーバアプリケー ションは、前記リクエストを受け取り、サーバ“処理系”を介して前記リクエス トを実行する。前記処理系は、特定のオブジェクトについてのオペレーションを 要求するクライアントのリクエストに答える。前記処理系は、サーバアプリケー ションにおいてその実行に関して要求された作業を実際に行うコード部分である 1つまたは複数のメソッドを含む。前記処理系による実行が成功した場合、前記 サーバアプリケーションは、必要に応じて、クライアントに対して応答を送る。 前記サーバアプリケーションは、例外情報を戻すこともある。 分散型オブジェクトシステムを標準化するために、コンピュータソフトウエア 会社の協会であるオブジェクト管理グループ(“OMG”:Object Management Group)は、“CORBA”(Common Object Request Broker Architecture)を 提案した。CORBA基準の下では、オブジェクトリクエストブローカ(“OR B”)は、そのシステムにおけるすべてのオブジェクトのために、サーバに対し てリクエストを送り、クライアントに応答を送る通信ハブを提供する。市販のO RBは従来より知られており、一般的なタイプとしては、IBMのSystem Objec t Model(“SOM”)がある。クライアント側のORBは、メソッドの実行、 ならびに、これに関連したサーバおよびメソッドの選択を要求するリクエストを 取り扱う。クライアントアプリケーションが、前記ORBに対して、1つのオブ ジェクトについて実行すべきメソッドを要求するリクエストを送ると、前記OR Bでは、該リクエストに含まれる引数をそのオブジェクトのインターフェイスに 対して検査し、該リクエストをサーバに送り、必要な場合それを開始する。サー バ側のORBは、前記リクエスト中の情報を使用して、該リクエストを満足させ る 最良の処理系を決定する。前記リクエスト中の情報には、前記クライアントが要 求しているオペレーション、該オペレーションがどのオブジェクトについて実行 されるかについての情報、さらに、前記リクエストについて格納されている付加 情報が含まれる。さらに、前記サーバ側のORBは、各リクエストおよびその引 数を検査する。さらに、該ORBは、前記クライアントに応答を送る機能も果た す。 クライアントアプリケーションおよびサーバアプリケーションは、共に、オブ ジェクトおよびこれらのオブジェクトについて実行可能なオペレーションを含む 利用可能なインターフェイスについての情報を有する必要がある。インターフェ イス定義の共用化を容易にするために、前記OMGは、インターフェイス定義言 語(“IDL”)を提案した。該IDLは、オブジェクトのインターフェイス、 すなわち、該オブジェクトについて実行可能なオペレーションを含む該オブジェ クトの特徴および作用を記述するために使用される定義言語である(プログラミ ング言語ではない)。 IDLは、OMGのCORBAのRevision2.0仕様を実行する分散型オブジ ェクトシステムに使用されるよう設計されている。前記CORBA仕様を実行す る典型的なシステムにおいて、インターフェイス定義は、IDL定義ソースファ イル(“翻訳単位”としても知られている)に書かれている。前記ソースファイ ルは、クライアントスタブファイル、サーバスタブファイルおよびヘッダファイ ルを含むプログラミング言語別ファイルを生成するIDLコンパイラによってコ ンパイルされる。前記クライアントスタブファイルは、ある1つのオブジェクト タイプに関するIDLオペレーション定義の手続きルーチンへの、各言語別の対 応づけ(マッピング)であり、各オペレーション毎に1つ設けられる。ある言語 に固有のコンパイラによってコンパイルされ、クライアントアプリケーションに リンクされる場合、スタブルーチンは、リクエストを記述するために、前記クラ イアントアプリケーションによって呼び出されることができる。同様に、前記サ ーバスタブファイルは、ある1つのオブジェクトタイプに関するIDLオペレー ション定義(インターフェイスによる定義)の手続きルーチンへの、各言語別の 対応づけである。コンパイルされ、サーバアプリケーションにリンクされる場合 、 前記サーバアプリケーションは、対応するリクエストが到着した時にこれらのル ーチンを呼び出すことができる。前記ヘッダファイルは、コンパイルされ、クラ イアントアプリケーションおよびサーバアプリケーションにリンクされ、共通の データ型および構造体を定義するために使用される。 一般的に、コンピュータシステムは、(1)一方向通信、(2)同期通信およ び(3)非同期通信、である3つの通信方式のうちのいずれか1つを使用する。 分散型オブジェクトシステムにおけるクライアントアプリケーションが一方向通 信リクエストを呼び出すと、前記アプリケーションは、このリクエストを送り、 そして、該リクエストが完了したか否かをチェックすることなく他の作業を続行 する。この場合、前記リクエストは、実際、一方向のみ送られる。すなわち、前 記アプリケーションは前記リクエストをサーバに送るが、該サーバからは何の応 答も戻されない。また、クライアントアプリケーションが同期通信リクエストを 呼び出すと、前記アプリケーションは、制御をORBに移し、該リクエストが完 了しまたは失敗するまで何も実行することができない。アプリケーションが一定 の順序でリクエストを送ったり完了させたりする必要があり、オペレーションが 短い時間のものである場合、同期通信は最も適切である。アプリケーションが非 同期オブジェクトコールを呼び出した場合、前記アプリケーションは、該リクエ ストが完了するのを待たずに、他の作業を続行する。時間が重要要素である情況 下においては、非同期通信はオブジェクトコールのための最も好ましい方式であ る。同様に、非同期通信が効率的にサポートされる場合、サーバアプリケーショ ンにおけるオブジェクトの実行が有用である。 しかし、残念ながら、従来の分散型オブジェクトシステムは、クライアントア プリケーションからのオブジェクトコールについて、真の非同期通信をサポート するものではない。例えば、前記CORBA仕様は“遅延型同期通信”を提供す る。この遅延型同期通信において、リクエスト側アプリケーションは、CORBA_Re quest_get_responseオペレーションまたはCORBA_get_next_responseルーチンを 使用して連続的にポーリングすることによって、リクエストが完了したか否かを 定期的にチェックする。しかし、この処理は、時間がかかり、真の非同期通信の 持つ利点を提供するものではない。 さらに、従来の分散型オブジェクトシステムは、非同期のオペレーションを取 り扱うための処理から分岐する実行ストリームである“スレッド(thread)”を サポートする。しかし、このスレデッド型の実行には、共通データに対するアク セスを同期させなければならないという不都合、全体的な動作効率ロスおよびプ ラットフォーム依存等の問題点がある。 従って、分散型オブジェクトシステム内において真の非同期オブジェクト呼び 出し(コール)を実行するための方法および装置が必要とされている。 さらに、スレデッド型実行を使用することなく非同期オブジェクト処理を実行 するための方法および装置が必要とされている。 発明の要旨 この発明は、非同期のオブジェクト呼出しを実行するための方法および装置を 提供する。さらに、この発明は、スレッド化されていない非同期のオブジェクト 実行をなす方法および装置に対する需要を満たすものである。 好ましい実施の形態において、この発明に係る非同期のオブジェクト呼出しを 実行する方法は、クラアントアプリケーションからスタブ関数を呼び出すことに よって、オブジェクトについてのオペレーションを実行することを含む。前記ク ラアントアプリケーションは、前記スタブ関数に対して、前記オペレーションに 対する入力パラメータおよび完了ルーチンを指示するポインタを与える。前記呼 出しは、前記クラアントアプリケーションおよびサーバアプリケーションに共通 の実行環境を使用して、サーバアプリケーションに送られる。前記サーバアプリ ケーションは、前記オブジェクトについてのオペレーションを実行し、前記実行 環境に対して応答を送る。前記オペレーションが前記サーバアプリケーションに よって実行されると、前記実行環境は、前記オペレーションの出力パラメータと 共に、前記完了ルーチンを呼び出す。該完了ルーチンは、さらに、前記オブジェ クト呼出しが成功したか否かを判定する。 前記の実行は、非同期式に行うこともできる。非同期実行の間、クラアントア プリケーションは、オブジェクトについてオペレーションが実行されることをリ クエストする(上述のように、このリクエストは同期式または非同期式になされ てよい)。前記リクエストは、前記クラアントアプリケーションおよびサーバア プリケーションの両方によってアクセス可能な実行環境によって、前記サーバア プリケーションに送られる。前記リクエストが送られると、前記サーバアプリケ ーションは、前記呼出しを呼出し識別子に関連付ける。前記サーバアプリケーシ ョンから非同期メソッドが呼び出される場合、該サーバアプリケーションは、前 記呼出し識別子および応答関数のアドレスを前記非同期メソッドに送る。 コールバック関数(“完了ルーチン”および“応答関数”)を使用することに より、前記クラアントアプリケーションおよびサーバアプリケーションの両方は 、特定の関数内で待機することなく、他の作業を行い続けることができる。さら に、クラアントおよびサーバの両方が非同期式に実行できるようにすることによ って、異なる呼出し方式を用いて、特定のタスクに適応できる。例えば、オブジ ェクト呼出しを非同期式に行い、その実行を同期式に行ってよく、または、その 逆であってもよい。このようにして、開発者に対してより高い自由度が提供され る。 非同期式に呼出しを実行するための方法および装置、ならびに、その利点およ び目的は、添付図面を参照して以下に述べるこの発明の詳細な説明によって、よ り完全に理解されるであろう。 図面の簡単な説明 図1は、この発明の方法を使用したクライアント/サーバシステムを示す図。 図2Aおよび図2Bは、共通実行環境(CEE)カプセルの異なる構成を示す 図。 図3は、CEEカプセルおよびそのコア要素を示す図。 図4は、IDLソースコードのコンパイルおよびクライアントアプリケーショ ンおよびサーバアプリケーションへのリンクを説明する図。 図5は、同期オブジェクト呼出しに係るステップを示すフローチャート。 図6は、非同期オブジェクト呼出しに係るステップを示すフローチャート。 図7は、非同期オブジェクト呼出しを実行するプログラミングコードの一部を 示す図。 図8は、オブジェクトの非同期実行に係るステップを示すフローチャート。 図9は、非同期オブジェクト実行を行うプログラミングコードの一部を示す図 。 図10は、この発明の方法の第2の実施の形態を示すフローチャート。 図11は、この発明の方法に係るステップを示すフローチャート。 図12は、この発明の方法の他の実施の形態に係るステップを示すフローチャ ート。 図13は、PIFデータ構造を示す図。 図14は、エントリデータ構造を示す図。 図15は、オペレーションデータ構造を示す図。 図16は、共用体データ構造を示す図。 好適な実施の形態の詳細な説明 以下、添付図面に示した例を参照して、この発明の好適な実施の形態を詳細に 説明する。添付図面において、同一または類似した構成要素には同一の参照番号 が付されている。 I.システムの概要 図1に示すように、この発明の方法は、分散型(クライアント/サーバ)コン ピューティング環境10に使用されるよう設計されている。該クライアント/サ ーバシステムは、インターネット接続部またはローカルエリアネットワーク接続 部のようなネットワーク接続部12によって接続されている。サーバコンピュー タ11は、バスまたはI/Oチャンネル20を介して、ディスク記憶サブシステ ム13と通信する。サーバシステム11は、CPU15と、プログラムの実行に ついての現在の状態情報を格納するためのメモリ17とを具備している。該メモ リ17の一部は、クライアントコンピュータ上で現在実行されているプログラム の各関数に関連した状態および変数を格納するために専用される。同様に、クラ イアントコンピュータ21は、CPU27とこれに関連するメモリ23と、キー ボード29またはマウス31のような入力装置29と、ビデオ表示端末(“VD T”)のような表示装置33とを具備している。該クライアントのCPUは、バ スまたはI/Oチャンネル40を介してディスク記憶サブシステム33と通信し 、また、I/Oチャンネル41を介してキーボード29、VDT33およびマウ ス 31と通信する。 好ましくは、前記クライアントメモリ23は、クライアントスタブ79に後述 のようにリンクされるクライアントアプリケーション77がロードされている。 同様に、前記サーバメモリ17には、サーバスタブ89にリンクされるサーバア プリケーション87を含む。さらに、前記クライアントメモリおよびサーバメモ リは、共に、実行環境(“CEE”)75,85を含んでいる(後述)。 図1に示すクライアント/サーバモデルは、単に、典型的なクライアント/サ ーバシステムを例示するものである。この発明によると、前記クライアントは、 あるオブジェクトについてオペレーションが実行されるべきことをリクエストす るアプリケーションであり、前記サーバは、前記オブジェクトについて前記オペ レーションを実行するアプリケーションである。実際上、前記クライアントアプ リケーションおよびサーバアプリケーションは、後述のように、同一のコンピュ ータおよび共通のカプセル内に備えられていてよい。しかし、ほとんどの場合、 前記クライアントアプリケーションおよびサーバアプリケーションは、異なるオ ペレーティングシステムを使用する異なるコンピュータに備えられることになる 。以下、この発明の方法を、異なるマシーン上で動作する2つのカプセルについ て説明する。 II.分散型コンピューティング環境 この発明の方法および装置は、任意の分散型コンピューティング環境内で利用 可能である。好ましい実施の形態において、Tandem Message Switching Facilit y(“MSF”)Architectureの一要素である共通実行環境(“CEE”)75 ,85が使用される。前記CEEは、オブジェクトを起動したり停止したりする ものであり、CEEカプセルにロードされたクライアントアプリケーションとサ ーバアプリケーションとの間でメッセージのやり取りするために使用される。該 CEEは、1つのマシーンのメモリに格納されてよい。しかし、該CEE、クラ イアントアプリケーションおよびサーバアプリケーションは、図1に示すように 、ネットワーク上の多数のマシーンにロードされてもよい。クライアント側のC EE75は、クライアントメモリ23に格納されている。また、サーバ側のCE E85は、サーバメモリ17に格納されている。 前記共通実行環境(“CEE”)は、“カプセル”下部構造を使用する。該カ プセルは、メモリスペースおよび1つまたは複数の実行ストリームを封入するも のである。カプセルは、異なるシステムでは、当該システムによって使用される オペレーティングシステムに応じて、異なる態様で実現されてよい。例えば、あ るシステムでは、前記カプセルはプロセスとして実現される。また、他のシステ ムでは、前記カプセルはスレッド(thread)として実現される。さらに、クライ アントアプリケーションおよびサーバアプリケーションは、図1に示すように異 なるマシーンに含まれる異なるカプセル内に構成されてもよい。代案として、異 なるカプセルが図2のように構成されてもよい。図2Aは1つのカプセル81に ロードされたクライアントアプリケーション77を示し、この場合、サーバアプ リケーション87は別のカプセル85にされてよい。しかし、これら2つのアプ リケーションは、同一のマシーン21に格納されている。また、図2Bに示すよ うに、前記クライアントアプリケーションおよびサーバアプリケーションは、共 に、同一のマシーン21上の1つのカプセル81内にロードされてもよい。上述 のように、ここでは、多数のカプセル、多数のマシーンを使用する例についてこ の発明の方法を説明する。従って、クライアントマシーン12およびサーバマシ ーン11は、それぞれのメモリにロードされたクライアント側CEE75および サーバ側CEE85を備えている。 図3は、例えば、クライアントコンピュータメモリ27(ここでは図示せず) に格納されたCEEカプセル70を示すものであり、該CEEカプセル70は、 CEE75、ならびに、コアCEE要素および処理系ライブラリ71内に含まれ るオブジェクトの処理系のうちのいくつかを含むものである。前記処理系ライブ ラリ71は、後述のように、オブジェクトインターフェイスのIDL仕様書から 生成されたクライアントアプリケーション79(サーバカプセルの場合、サーバ アプリケーション)およびクライアントスタブ77(またはサーバスタブ)を含 んでいる。前記処理系ライブラリ71およびCEE75は、該CEEによって供 給される動的アクセス可能なルーチンのダウンコーリングおよび前記処理系ライ ブラリに含まれるルーチンのアップコーリングによって、相互作用する。また、 前記CEE75は、同じマシーン内の他のカプセルからのオブジェクトコール8 2、および、他のCEEからのリクエスト84を受け取ることができる。前記ク ライアント側CEE75およびサーバ側CEE85は、任意の既知のネットワー クプロトコルを使用して通信することができる。 CEEカプセルで実現されるオブジェクトは、構成オブジェクトまたは動的オ ブジェクトであってよい。構成オブジェクトの処理系の詳細は、(MSF Warehous e85のような)格納部または初期化スクリプトに格納されている。特定のオブジ ェクト参照に対するリクエストがあった場合、前記クライアント側CEE75で は、この構成データに基づいて適切なカプセルを始動する。前記カプセルは、こ の構成データを使用して、ロードすべき処理系ライブラリおよび呼び出すべきオ ブジェクト初期化ルーチンを決定する。そして、前記オブジェクト初期化ルーチ ンがそのオブジェクトを作成する。動的オブジェクトは、同一のカプセル内にお いて、動的に作成され、破棄される。該動的オブジェクトには、格納部に格納さ れたまたはスクリプト化された構成情報が無い。 以下のパラグラフでは、前記処理系ライブラリがどのようにCEE75と相互 作用するのかについてシステムレベルで概説する。前記CEE75は、カプセル 内でオブジェクトを起動したり停止したりするためのリクエストを実行する。さ らに、上述の如く、前記CEEは、カプセル間オブジェクトコール82および他 のCEE84からのリクエストを容易にする。オブジェクト起動リクエストは、 クライアントアプリケーションまたはサーバアプリケーションからのオブジェク トコールが満足させられなければならない場合に発生する。以下に示すように、 オブジェクトを起動するためには、前記CEE75は、それが未だロードされて いない場合、前記オブジェクトのメソッドを含む適切な処理系ライブラリをロー ドし、その後、前記処理系ライブラリに含まれる構成オブジェクト初期化ルーチ ンを呼び出す。該初期化ルーチンは、前記処理系ライブラリがサポートするイン ターフェイスを指定し、その後前記CEEによって呼出すべき前記オブジェクト のメソッドのエントリポイントを登録する。 クライアントシステムおよびサーバシステムが始動すると、前記クライアント 側CEEおよびサーバ側CEEは各々の初期化を実行する。この初期化は、前記 クライアント側CEEおよびサーバ側CEEに対して、様々な前記処理系ライブ ラリの位置を指示する。前記CEEによる位置検出がなされると、前記CEEは 、前記クライアントアプリケーションおよびサーバアプリケーションにおける初 期化ルーチンを呼び出す。次に、前記クライアントアプリケーションおよびサー バアプリケーションに含まれる初期化ルーチンは、先ず、必要とされるアプリケ ーション別の初期化を実行しなければならない。次に、クライアント初期化ルー チンおよびサーバ初期化ルーチンが生成されたスタブ関数を呼出し、該スタブ関 数は、前記オブジェクトのインターフェイスを指定するために、GEE_INTERFACE_ CREATEと称される(上述の如く動的ライブラリに含まれる)CEE関数をダウン コールする。各オブジェクトごとにインターフェイスを指定してよい。後述のよ うに、このインターフェイスの記述は、通常、該インターフェイスのIDL記述 から生成される。GEE_INTERFACE_CREATEは、インターフェイスを作成し、この新 たに作成されたインターフェイスに“インターフェイスハンドル”を戻す。前記 ハンドルは、前記インターフェイスを指示するユニークな識別子である。そして 、前記サーバアプリケーションの初期化ルーチンは、前記インターフェイスハン ドルを使用して、GEE_IMPLEMENTATION_CREATEをダウンコールする。該GEE_IMPLE MENTATION_CREATEは、1つまたは複数のオブジェクトで使用可能な実行記述を作 成する。該GEE_IMPLEMENTATION_CREATEは、前記インターフェイスにおいて各オ ペレーションごとの処理系を指示するユニークな識別子である“処理系ハンドル ”を戻す。最後に、前記サーバアプリケーションの初期化ルーチンは、前記処理 系ハンドルを使用して、CEE_SET_METHODをダウンコールするスタブ関数を呼び出 す。該CEE_SET_METHODは、前記サーバアプリケーションに含まれる前記処理系の 特定のメソッドルーチンの実際のアドレスを指示する。こうして、前記CEEは 、前記クライアントアプリケーションにおけるオブジェクト呼出しを、前記サー バアプリケーションにおける特定のメソッドに接続する。 III.IDLソースファイルのコンパイルおよびリンク 図4は、IDLソースファイルが、コンパイルされ、この発明の方法および装 置を使用するクライアントアプリケーションおよびサーバアプリケーションにリ ンクされる手順を示すものである。先ず、IDLインターフェイス定義を含むI DLソースファイル101が作成される。IDLコンパイラ103は、前記ID Lソースファイル101をコンパイルする。前記IDLコンパイラ103は、オ リジナルソースファイルの格納するために、コード101を分析して中間的なPi ckled IDLファイル(“PIF”)105を生成する。PIFファイルの生成は 、下記のセクションVIIIにおいて説明されている。コードジェネレータ111は PIFファイルを分析する。しかしながら、好ましくは、前記ソースファイルか ら直接にコードを生成するために、前記IDLコンパイラおよびコードジェネレ ータは組み合わされる。前記コードジェネレータ111は、前記クライアントア プリケーションおよびサーバアプリケーションの言語のファイルを生成する。前 記クライアントアプリケーションとサーバアプリケーションとが異なる言語によ るものである場合、異なるコードジェネレータ111が使用される。代案として 、前記コードジェネレータ111およびIDLコンパイラ103は、1つのアプ リケーションにおいて、言語別コードを生成するために組み合わされてもよい。 前記コードジェネレータ111は、クライアントスタブ関数を含むクライアント スタブファイル77と、オブジェクト実行についての定義を含むサーバスタブフ ァイル87とを生成する。コンパイルされたクライアントスタブオブジェクトコ ードおよびコンパイルされたサーバスタブオブジェクトコードを生成するために 、前記クライアントスタブファイル77およびサーバスタブファイル87は、プ ログラミング言語別のコンパイラ121,123によってコンパイルされる。同 様に、コンパイルされたクライアントアプリケーションオブジェクトコードおよ びコンパイルされたサーバアプリケーションオジェクトコードを生成するために 、クライアントアプリケーション79およびサーバアプリケーション89は、プ ログラミング言語別のコンパイラによってコンパイルされる。前記クライアント アプリケーション79およびサーバアプリケーション89は、さらに、前記コー ドジェネレータ111によって生成されるヘッダファイル119を含む。該ヘッ ダファイル119は共通の定義および宣言を含む。最後に、コンパイラ121は 、前記クライアントアプリケーションオブジェクトコードとクライアントスタブ オブジェクトコードとをリンクすることにより、処理系ライブラリ71を生成す る。同様に、第2のコンパイラ123は、前記サーバアプリケーションオブジェ クトコードとサーバスタブオブジェクトコードとをリンクすることにより、他の 処理系 ライブラリ81を生成する。 IV.非同期クライアントスタブファイルおよびサーバスタブファイル 前記コードジェネレータ111は、クライアントスタブ関数77において、前 記IDLソースファイル101に定義された各インターフェイスの各オペレーシ ョンごとに同期クライアントスタブ関数および非同期クライアントスタブ関数を 生成する。各スタブ関数は、前記IDLソースファイル101に定義された1つ の特定のオペレーションに対応する。前記クライアントアプリケーション79は 、これらのスタブ関数を呼出して、あるオブジェクトについてオペレーションが 行われることをリクエストする。前記同期クライアントスタブ関数は、当該オペ レーションの入力パラメータおよび前記オブジェクトに対する参照(プロキシ一 つまり代理ハンドルの形態での参照)を受け取る。前記同期クライアントスタブ 関数は、(以下に示すように)前記クライアント側CEE全体に対するオブジェ クト呼出しを行うために使用されるCEE_OBJECT_CALLへの呼出しを含む。また、 前記非同期クライアントスタブ関数は、リクエストされたオペレーションのため の入カパラメータ、プロキシーハンドルおよび完了ルーチンアドレスを示すポイ ンタを受け取る。これらのパラメータは、同様に後で詳述するCEE関数CEE_OB JECT_CALL_POSTに送られる。 同様に、前記コードジェネレータ111は、サーバスタブ関数87において、 同期サーバスタブ関数および非同期サーバスタブ関数を生成する。各スタブ関数 は、前記IDLソースファイル101に定義された1つの特定のオペレーション に対応する。前記サーバアプリケーションは、これらのスタブ関数を呼出し、該 スタブに対応するインターフェイスオペレーションを実行するためにアップコー ルすべきメソッドを前記CEEに通知する。各オペレーションの同期サーバスタ ブ関数は、(CEE_IMPLEMEMTATION_CREATEに対する呼出しから戻される)処理系 ハンドル、および、前記サーバアプリケーションにおけるメソッドのアドレスを 受け取る。前記サーバアプリケーションにおいて呼出されると、前記同期サーバ スタブ関数は、CEE_SET_METHODを呼出し、前記サーバアプリケーションのメソッ ドを前記スタブによって指定されたオペレーションに接続する。特定のオペレー ションに対するリクエストが前記サーバ側CEEに到達すると、該サーバ側CE E は、そのリクエストされたオペレーションについて設定されたアドレスに基づい て、前記サーバアプリケーションにおける適切なメソッドを呼び出す。前記サー バアプリケーションのメソッドが戻されると、前記サーバ側CEEはクライアン トに対して応答を送る。 前記コードジェネレータ111は、非同期オブジェクト実行を処理するための スタブ関数を生成する。前記非同期サーバスタブ関数は、(前記サーバアプリケ ーションから)処理系ハンドルおよび前記サーバアプリケーションからアップコ ールすべきメソッドのアドレスを受け取る、という点で前記同期スタブ関数と同 様である。前記非同期スタブ関数は、前記サーバアプリケーションのメソッドを 前記スタブに対応したオペレーションに接続するCEE_SET_METHODを呼び出す。こ のCEE_SET_METHODに対する呼出しは、(CEE_SET_METHODのパラメータを介して) 前記CEEに対して、前記メソッドが非同期式に実行されるべきことを通知する 。アップコールされた前記サーバアプリケーションのメソッドは非同期的なもの であるので、前記CEEは、同様に前記サーバスタブファイル87に含まれる生 成された応答スタブ関数を呼び出すと直ぐに、前記クライアントに対して応答す る。前記生成された応答スタブ関数は、前記オペレーションの出力パラメータお よび呼出し識別子を受け取る。これらのパラメータは、前記クライアントアプリ ケーションに応答するCEE関数CEE_RESPOND(後述)に送られる。 V.同期呼出しおよび実行ならびに非同期呼出しおよび実行 A.同期呼出し/同期実行 次に図5〜図10を参照して、この発明の方法を説明する。ここでは、呼出す べきサーバオブジェクトが前記サーバ側CEEによって予め起動されている、と 仮定する。上述のように、オブジェクト呼出しは、生成された同期クライアント スタブおよび非同期クライアントスタブを介して同期式または非同期式に実行さ れてよい。同様に、前記サーバアプリケーションにおけるオブジェクト実行も、 同期式または非同期式に実行されてよい。ここに説明する方法および装置は、異 なるマシーンにロードされた異なるカプセルを使用する。 先ず、同期オブジェクト実行と組み合わされる同期オブジェクト呼出しについ て説明する。図5は、オブジェクトに対する同期呼出しに係るステップを説明す るフローチャートである。最初のステップ501では、前記クライアントアプリ ケーションによって、所望のオブジェクトについてのオブジェクト参照が得られ なければならない。該オブジェクト参照は、様々な方法で得ることができる。通 常、クライアントアプリケーションは、これらがオブジェクト参照を有する他の オブジェクトについての構成(configuration)データ、ディレクトリまたは呼 出しから前記オブジェクト参照を受け取る。オブジェクト参照は、後にアクセス されるファイルに格納可能な文字列名に変換可能である。 前記オブジェクト呼出しは、ステップ503において、先ず前記CEEから該 オブジェクト参照に対する“プロキシーハンドル”を得ることによって開始され る。前記プロキシーハンドルは、その都度オブジェクトを呼び出す際に発生する ことになるオーバーヘッドを招くことなく、同一のオブジェクトに対する多くの 呼出しを容易にするよう設計されている。複数のオブジェクト呼出しを実行可能 なプロキシーハンドルを作成することによって、前記プロキシーハンドルを介し て、プロキシーオブジェクトに対する多くの同時呼出しを可能にしながら、初期 化ルーチンを一通り実行することができる。プロキシーハンドルは、前記クライ アントアプリケーションからCEE関数CEE_PROXY_CREATEをダウンコールするこ とによって、CEE75において作成される。前記関数はCプログラミング言語 により次のように定義される。 CEE_PROXY_CREATE( const char *objref, const char *intf_handle, char *proxy_handle); 前記関数は、CEE_INTERFACE_CREATE(上述)によって戻されるオブジェクト参照 objrefおよびインターフェイスハンドルintf_handleを受け取り、新たに作成さ れたプロキシーオブジェクトを示すプロキシーハンドルを戻す。プロキシーの作 成の詳細、および、CEE_PROXY_CREATEによって戻されるプロキシーハンドル構造 の記述については、下記のセクションVIおよびVIIにおいて説明する。 CEE_PROXY_CREATEによって戻される前記プロキシーハンドルは、当該オブジェ クトが同一のカプセル内にある場合は該オブジェクトを指示するポインタを含む 構造体であり、当該オブジェクトが同一のカプセル内にない場合はクライアント ポートを指示するポインタを含む構造体である。さらに、前記クライアント側C EEは、前記プロキシーを使用して、非同期オブジェクト呼出し(後述)に使用 される完了ルーチンのアドレスを格納する。該完了ルーチンについては、前記ク ライアントアプリケーションからの非同期呼出しに関して詳述する。同期オブジ ェクト呼出しにおいては、完了ルーチンのアドレスは前記プロキシーハンドル構 造に格納されない。 ステップ505において、前記クライアントは前記オブジェクトを呼び出す。 より詳しくは、前記クライアントアプリケーションは、適切に生成された同期ス タブ関数を呼び出すことによって前記オブジェクトについてオブジェクトのイン ターフェイスのオペレーションが実行されることをリクエストする。前記同期ス タブ関数はCEE_OBJECT_CALLに対するダウンコールを含むものであり、該CEE_OBJ ECT_CALLはCプログラミング言語により次のように定義される。 CEE_OBJECT_CALL( const char *proxy_handle, long *operation_idx, void *param_vector); 前記スタブ関数は、前記プロキシーハンドルおよび前記オペレーションのための 入力パラメータを受け取る。前記スタブ関数は、3つのパラメータを有するCEE_ OBJECT_CALLを提供する。最初のパラメータはproxy_handleである。2番目のパ ラメータoperation_idxは、オブジェクトのどのメソッドを呼び出すべきかを指 示する整数である。該識別子は、クライアントによって、特定のオペレーション を指示するために局所的に使用される。該識別子は、クライアント側においてオ ペレーション名について繰返し文字列比較を実行する面倒を省くものである。同 様に、サーバ側でも、該サーバは、自己のオペレーション識別子を使用してオペ レーションを指示する。param_vectorは、前記オブジェクト呼出しの入力パラメ ータ、出力パラメータおよび例外構造体のアドレスを含むアレイである。好まし くは、例外構造体のアドレスは、前記アレイにおける最初の構成要素である。前 記オペレーションがvoid(空)タイプのものでない場合、前記アレイにおける次 の構成 要素は、前記オペレーションの結果を受け取るための変数のアドレスを含む。後 の構成要素は、IDLにおいて定義された順序と同じ順序で、前記オペレーショ ンの入力パラメータおよび出力パラメータのアドレスを含む。 ステップ507では、入力パラメータ、オペレーション識別子および(プロキ シーハンドルによって決定される)オブジェクト参照を含む、実行すべきオペレ ーションを要求するリクエストが、CEEインターフェイス84を介して前記ク ライアント側CEEから前記サーバ側CEEに送られる。上述のように、前記C EEは、システムまたはネットワーク間で前記呼出しを伝送するための任意のデ ータ伝送方法を使用してよい。 前記オブジェクトを非同期式に実行するために、前記サーバ側CEE85は、 (CEE_SET_METHODを呼び出すサーバスタブ関数に対する初期化ルーチンの呼出し によって指示される)前記サーバアプリケーションにおける適切なメソッドを呼 び出す。好ましくは、前記サーバ側CEE85は、前記サーバアプリケーション におけるメソッドに対して3つのパラメータ、すなわち、(1)前記呼出しのた めにメモリを割当てたり、割当てを解除したりするために前記サーバアプリケー ションによって使用される任意の呼出し識別子、(2)コーラ(呼出し側)に戻 され得るエラー情報を保持する例外識別子、および、(3)IDLで当初定義さ れた順序で配列されたリクエストされたオペレーションのための入力パラメータ 、を与える。前記メソッドは、ステップ509において、前記入力パラメータを 使用し、前記メソッドを実行する。図10に関して後述するように、前記呼出し 識別子を使用することにより、前記サーバアプリケーションのメソッド内で自動 的に前記メモリを割当てたり、割当てを解除したりする他のCEE関数を呼び出 すことができる。 前記クライアントによってリクエストされたオペレーションが出力パラメータ を含むものである場合、前記サーバアプリケーションにおけるメソッドは、該メ ソッドの本体内で前記出力パラメータを初期化し、(必要ならば)これを修正す る。前記メソッドが完了すると、ステップ511において、前記出力パラメータ を前記サーバ側CEEに戻す。該サーバ側CEEは、ステップ513において、 前記クライアントアプリケーションにおける呼出し側関数に応答する。この応答 メッセージは、(もし存在する場合)前記オペレーションの成功または失敗に関 する任意のサーバ側CEEで生成された例外情報と共に前記出力パラメータを含 むものである。こうして、前記オブジェクト呼出しが完了する。 B.非同期呼出し/同期実行 図6は、前記クライアントアプリケーションからの非同期オブジェクト呼出し を、同期実行と組み合せて実行する。初めいくつかのステップは前記同期オブジ ェクト呼出しの場合のステップと同様である。ステップ601において、前記ク ライアントアプリケーションはオブジェクト参照を得る。ステップ603では、 前記クライアントアプリケーションは、CEE_PROXY_CREATEを使用して、前記オブ ジェクト参照に関するプロキシーハンドルを作成する。 次のステップ605では、生成された非同期クライアントスタブ関数を使用し て、前記オブジェクトを呼び出す。この生成された非同期クライアントスタブ関 数は、前記オブジェクトのプロキシーハンドル、オペレーションの入力パラメー タ、呼出しタグ(後述)および前記クライアントアプリケーション内における“ 完了ルーチン”のアドレスを受け取る。前記オブジェクト呼出しに対する応答が 戻された時、前記クライアント側CEEによって前記完了ルーチンが呼出される ことになる。前記非同期クライアントスタブ関数は、前記オブジェクトを呼び出 すクライアント側CEE関数CEE_OBJECT_CALL_POSTをダウンコールする。該CEE_ OBJECT_CALL_POSTはCプログラミング言語により次のように定義される。 CEE_OBJECT_CALL_POST( const char *proxy_handle, long *operation_idx, const void *const*param_vector, void *completion_routine, char *call_tag1); 前記スタブ関数は、リクエストされたオブジェクトのプロキシーハンドル、およ び、前記オブジェクトのどのオペレーションを実行すべきかを指示するオペレー ションインデックスを供給する。ここで供給される前記param_vectorパラメータ は、前記オブジェクト呼出しの入力パラメータのアドレスのみを含むアレイであ る。前記入力パラメータは、多数のプラットフォーム間におけるオブジェクト呼 出しを可能にするよう、IDLで当初定義された順序のアレイで格納される。前 記call_tag1は、前記オブジェクトに対する呼出しを識別するために使用される 定数である。 さらに、前記非同期クライアントスタブ関数およびCEE_OBJECT_CALL_POSTは、 前記オブジェクトに対する応答が前記クライアントアプリケーションに戻され、 または、エラー状態(あるいは他の例外)が前記クライアント側CEEに受け取 られた時に前記クライアント側CEE75によって呼出される前記クライアント アプリケーションにおける“完了ルーチン”のアドレスを受け取る。ステップ6 07において、前記クライアント側CEEは、後における使用のために、前記プ ロキシーハンドルに前記完了ルーチンのアドレスを格納する。特定のプロキシー ハンドルについての呼出しが戻されると、前記クライアント側CEEは、前記プ ロキシー構造体から前記完了ルーチンのアドレスを抽出し、該完了ルーチンを呼 び出す。該完了ルーチンについては後述する。これと同じ完了ルーチンを必要と する多数の呼出しがなされる場合、前記完了ルーチン内の特定の呼出しを識別す るために、前記call_tag1パラメータを使用してよい。該call_tag1パラメータも 、ステップ607において、前記プロキシー構造体に格納される。 ステップ609では、移送メカニズムを使用して、オブジェクトについて実行 すべきオペレーションを要求するリクエストが前記クライアント側CEEから前 記サーバ側CEEに送られる。前記オブジェクト呼出しがなされると、前記クラ イアントは他の関数の実行を続ける。前記同期呼出しのように応答を待つ必要が ない。さらに、応答を得るためにサーバに対して連続的にポーリングするために 、前記クライアントアプリケーションは必要とされない。 サーバ側において、前記オブジェクトは上述のように同期式に実行される。前 記サーバ側CEEでは、前記オペレーションを実行するために前記サーバアプリ ケーションにおける適切なメソッドを選択する。前記メソッドは、ステップ61 1において前記リクエストされたオブジェクトについてのオペレーションを実行 し、ステップ613において前記クライアントアプリケーションに応答する。ス テップ615において、前記サーバ側CEEは、前記クライアント側CEEに対 して、出力パラメータと例外情報を含む応答を送る。 前記クライアント側CEEは、前記送られた応答のプロキシーハンドル構造体 を前記クライアントCEEカプセルに格納する。そして、ステップ617におい て、前記クライアント側CEEは、前記プロキシーハンドル構造体から前記完了 ルーチンのアドレスおよびcall_tag1を抽出する。ステップ619において、前 記クライアント側CEEは、前記クライアントアプリケーションの完了ルーチン を呼び出す。前記クライアント側CEEは、前記完了ルーチンに対して、前記例 外情報、前記オブジェクトのメソッドの出力パラメータ、および、(多数の呼出 しが同一の完了ルーチンを使用している場合)どの非同期呼出しが完了したのか を指示する任意の識別子タグ(call_tag1)を与える。こうして、前記クライアン トアプリケーションにおける完了ルーチンは、必要に応じてこれらのパラメータ を使用することができる。 図7は、この発明のメソッドを使用するクライアントアプリケーション77に おけるサンプルコードを示す。該クライアントアプリケーションは、Cプログラ ミング言語で書かれている。この例において、クライアントは、Timeインターフ ェイスのオブジェクト(“Timeオブジェクト”)から現在の時間を得る。該オブ ジェクトは、前記TimeオブジェクトについてTim_Nowオペレーションの実行をリ クエストすることによって現在の時間を得る。前記Tim_Nowオペレーションは、 入力パラメータとして定数(LOCALまたはGMT)をとり、ローカル時間またはグリ ニッチ標準時間(GMT)を戻す。 ライン701において、前記クライアントアプリケーションは、前記Timeイン ターフェイス定義を含むIDLソースファイルから前記コードジェネレータによ って生成されたヘッダファイル119を含む。該ヘッダファイル119は、前記 Timeインターフェイスにおける各オペレーションごとに、Tim_Nowスタブ関数を 含む同期および非同期のクライアント(およびサーバ)スタブ関数を含む。 ライン702において、前記クライアント側CEE75によって、クライアン ト初期化ルーチンがアップコールされる。ステップ703において、前記クライ アントは、CEE_INTERFACE_CREATEを呼び出すインターフェイススタブ関数を呼び 出すことによって、前記Timeインターフェイスを前記クライアント側CEE75 に登録する。前記CEEは、インターフェイスハンドルintfをクライアントに戻 す。(変数sts(ステータス)は、デバッグ時に関数戻し値の検査を可能にする ダミー変数である。) ライン703において、前記クライアントは、前記CEEに前に登録された構 成(コンフィギュレーション)ファイルからオブジェクト参照を得る。参照objr efは、Timeインターフェイスのオブジェクトを指示するものである。前記クライ アントアプリケーションはTIM_Nowを2回同時に呼び出すつもりであるので、前 記クライアントは、ライン705および706において、前記オブジェクト参照 を使用して2つのプロキシーハンドルを作成する。前記クライアントは、proxy およびproxy1を戻すCEE_PROXY_CREATEを呼び出す。 ライン707では、前記クライアントは、非同期スタブ関数TIM_Now_pstを使 用して前記Timeオブジェクトを呼び出す。前記クライアントは、第1のプロキシ ーハンドル(proxy)、完了ルーチンタグ(LOCAL_TIME_TAG)および入力パラメ ータ(LOCAL)を供給する。ライン708では、前記クライアントは、異なるプ ロキシーハンドル(proxy)、完了ルーチンタグ(LOCAL_TIME_TAG)および入力 パラメータ(LOCAL)を使用して同一のオブジェクトに他の呼出しを実行するこ とによって、他の非同期の作業を行う。最初の呼出しが同期式に行われた場合、 Tim_Nowに対して2番目の呼出しを行う前に前記Tim_Nowに対する最初の呼出しが 戻るまで、クライアントアプリケーションは待機しなければならない。 両前記呼出しについて、前記クライアント側CEEは、前記プロキシー構造体 に前記完了ルーチンのアドレスおよび完了ルーチンのタグを格納する。前記クラ イアント側CEE75は、両リクエストを前記サーバ側CEE85に送る。前記 サーバアプリケーションは、前記Tim_Nowオペレーションのための処理系を含ん でいる。この処理系(図示せず)は、ローカル時間またはグリニッチ標準時間( GMT)を提供する。該時間は出力パラメータに挿入され、該出力パラメータお よび例外情報は前記クライアント側CEE75に送り返される。 前記クライアント側CEEは、どの呼出しが戻されたのかを判定し、該戻され た呼出しのための完了ルーチンを呼び出す。この例の完了ルーチンは、ライン7 09から示されている。ライン710のswitch文は、任意の完了ルーチンのタグ パラメータを受け取る。前記タグの値がLOCALである場合、前記関数はライン7 11−712に示されているようなローカル時間を印刷する。前記タグの値がGM Tである場合、前記関数はライン713−714に示されているようなGMT時 間を印刷する。完了ルーチンタグの他の例によると、前記CEEは、1つの呼出 しに対して新たな関数呼出しを行うごとに、連続したタグ番号を割当てる。 B.非同期実行 次に、図8を参照して、前記サーバアプリケーションによるオブジェクトの非 同期実行について説明する。この非同期実行は、前記サーバアプリケーションに おけるオリジナルのメソッドが第2のメソッドを呼び出すことを含む。前記オリ ジナルのメソッドは、前記クライアントによって同期式または非同期式に呼び出 されてよい。ここで説明するメソッドにより、オブジェクトは2つ以上の同時の リクエストをサポートすることができる。最初のステップ801において、前記 クライアントは、前記オブジェクトを呼び出し、該オブジェクトについてオペレ ーションが実行されることをリクエストする。上述の如く、前記オブジェクト呼 出し自体は同期的または非同期的なものでよい。しかし、前記呼出しが同期的な ものであって、前記オブジェクトの実行が非同期的なものである場合、前記クラ イアントおよびオブジェクトは、MSFシステムにおける異なるカプセル内で実 行されなければならない。ここでは、前記クライアントアプリケーションおよび サーバアプリケーションは、異なるマシーン上の異なるカプセル内で実行される ものと仮定する。ステップ803では、前記呼出しは、任意の既知の移送メカニ ズムを使用するインターフェイス84を介して、前記クライアント側CEEから サーバ側CEEに送られる。 前記サーバ側において、ステップ805において、前記CEEは、リクエスト されたオペレーションのために適切なメソッドを呼び出す。このメソッド(以下 、“オリジナルメソッド”と呼ぶ)は、上述のように、前記初期化ルーチンから 非同期スタブ関数に対する呼出しによって、前記リクエストされたオペレーショ ンのための適切なメソッドとして明示されたものである。前記CEEは、前記同 期実行の場合と同様なパラメータ、すなわち、(1)call_idパラメータ、(2 )前記オブジェクトを実行する際のエラーを検出するために使用される例外パラ メー タ、および、(3)前記オペレーションに対する入力パラメータ、を前記サーバ アプリケーションにおけるオリジナルメソッドに与える。しかし、この非同期実 行の場合、前記サーバアプリケーションメソッドに与えられる呼出し識別子は、 前記サーバコンピュータメモリ17におけるサーバ側CEEによって格納される 。(前記オリジナルメソッドからのリターン時に自動的に行われるのではなく) CEE_RESPONDに対する呼出し時に前記サーバ側CEEが前記クライアント側CE Eに応答することになるので、前記サーバ側CEEは異なる呼出し識別子によっ て各呼出しを追跡することになる。従って、前記オリジナルメソッド、該オリジ ナルメソッドから呼び出される非同期メソッド、および、応答関数(後述)は、 前記呼出し識別子をも追跡しなければならない。ステップ807では、前記オリ ジナルメソッド内において、好ましくは、コンテキスト変数を使用して、前記オ リジナルメソッドに送られた呼出し識別予を格納する。前記コンテキスト変数は 、前記メソッドによって実行されるオペレーションの結果を含む出力パラメータ を格納するためにも格納される。前記コンテキスト変数は、前記オリジナルメソ ッドから呼出された非同期メソッドに送られることになる。前記CEEが前記オ リジナルメソッドをアップコールする毎に、新たなコンテキスト変数が作成され る。 ステップ809では、前記オリジナルメソッドは、非同期メソッドを呼出して 他の関数を実行する。例えば、前記オリジナルメソッドは、ディスクファイルを 開きまたは閉じることなどの非同期入力/出力を行う必要があるかもしれない。 または、前記オリジナルメソッドは、ある関数を実行するために非同期オブジェ クト呼出し自体を実行してよい。前記オリジナルメソッドが非同期メソッドを呼 び出す場合、好ましくは、前記オリジナルメソッドは、該非同期メソッドに対し て前記サーバアプリケーションにおける応答関数のアドレスを与える。さらに、 前記非同期メソッドは、前記呼出し識別子を含むコンテキスト変数および前記オ リジナルメソッドにおいて実行されたオペレーションの結果を受け取る。最終的 に、前記コンテキスト変数は、前記応答を特定のオブジェクト呼出しに対応づけ るために、前記応答関数によって使用されることになる。 前記非同期メソッドは、指定された関数を実行する。完了すると、前記非同期 メソッドはステップ811において応答関数を呼び出す。前記非同期メソッドは 、 前記呼出し識別子および出力パラメータ(ならびに有用と思われる他のコンテキ スト)を含むコンテキストパラメータを、前記応答関数に与える。そして、該応 答関数は、ステップ813において、前記サーバアプリケーションにおける非同 期応答スタブ関数を呼び出す。上述のように、該非同期応答スタブ関数は、CEE_ RESPONDに対するダウンコールを含む。前記オリジナルメソッドが非同期メソッ ドを呼び出しておらないが、前記初期化ルーチンにおいて非同期メソッドとして 指定されている場合、該オリジナルメソッドは、直接的に、前記非同期応答スタ ブ関数を呼び出すことができる。または、前記サーバアプリケーションにおける 任意のメソッドがCEE_RESPONDを呼び出すことができる。 該CEE_RESPONDはCプログラミング言語により次のように定義される。 CEE_RESPOND( const char *call_id, const void *const*param_vector); 前記応答関数は、前記コンテキストから前記呼出し識別子を抽出することによっ て、該呼出し識別子を前記スタブ関数に送る。該スタブ関数は前記識別子をCEE_ RESPONDに送る。前記サーバ側CEEは、前記サーバコンピュータメモリにおけ る呼出し識別子を捜し出し、該呼出し識別子に基づいて適切な呼出しに応答する 。この応答は、前記オブジェクト呼出しの出力パラメータおよび例外構造体を指 示するポインタを含むアレイであるparam_vectorパラメータを含むものである。 前記アレイの最初の構成要素は、前記例外構造体のアドレスである。前記オペレ ーションがvoid(空)タイプのものでない場合、次の構成要素は、前記オペレー ションの結果を含む変数のアドレスを含む。その後の構成要素は、IDLにおい て定義された順序と同じ順序で、前記オペレーションの出力パラメータのアドレ スを含む。 ステップ815では、インターフェイス84を介して前記クライアント側CE Eに前記応答が送り返される。前記クライアント側CEEは、前記クライアント アプリケーションにおける適切なメソッドをアップコールし、前記呼出しからCE E_RESPONDに前記出力パラメータおよび例外構造体を与える。 図9は、非同期式にオブジェクトを実行するC言語サーバアプリケーションに おけるサンプルコードを示すものである。この例は、前記Timインターフェイス のオブジェクトについてのTim_Nowオペレーションの非同期実行を含む。(デー タ型定義は省略されている)。 前記処理系ライブラリがロードされた時、前記サーバ側CEE85が前記サー バアプリケーションの初期化ルーチンを呼び出す。ライン901から開始するル ーチンは、ライン902においてサーバスタブ関数を呼び出すことによって、イ ンターフェイスハンドルを得る。ライン903では、該インターフェイスハンド ルを使用して実行ハンドルが作成され、該実行ハンドルは、前記サーバアプリケ ーションにおけるメソッドのためのアドレスを設定するためのサーバスタブに送 られる。ライン904では、前記サーバメソッドのアドレスNowMethodは、前記T im_Nowオペレーションのために前記サーバ側CEE85によってアップコールさ れるべきメソッドとして指定される。さらに、前記アドレスを設定するためのサ ーバスタブを呼び出すことによって、サーバアプリケーションは、前記サーバC EEに対して、(前記アップコールされたメソッドからの退出時に自動的に応答 する代りに)前記クライアントに応答する前にCEE_RESPONDに対する呼出しが必 要である旨通知する。さらに、前記サーバ側CEE85は、前記呼出しを識別す る呼出し識別子を前記メソッドに送ることになる。 TIM_Nowの呼出しが前記サーバ側CEEに到達すると、前記CEEは前記サー バアプリケーションにおけるNowMethod(オリジナルメソッド)をアップコール する。ライン905では、NowMethodは、時間をリクエストされた時間帯に変換 し、変数timeptrに格納する。ライン906−907では、前記メソッドは、そ の結果を予め定義されたコンテキスト構造体に格納する。ライン908では、こ のコンテキスト構造体を使用して、ライン920で前記メソッドに送られた前記 呼出し識別子を格納する。 ステップ909では、前記オリジナルメソッド(NowMethod)が非同期メソッ ドを呼び出す。この例において、前記非同期メソッドは、CEEタイマ関数に対 する単純なダウンコールである。前記CEEタイマメソッドは、前記コンテキス ト構造体、および、前記サーバアプリケーションにおける応答関数TimerExpired のアドレスを受け取る。1秒後に前記タイマが“ポップ”した時、該CEEは前 記 応答関数を呼び出すことになる。ライン909の呼出しの後、前記サーバ側の実 行は、制御がCEE_TIMER_CREATEからリターンするのを待つことなく続けられる。 前記タイマがポップすると、前記CEEは前記応答関数TimerExpiredを呼び出 す。ライン910において、TimerExpiredは、サーバスタブ応答関数に対する1 つの呼出しを含む。好ましくは、前記サーバスタブ応答関数はCEE_RESPONDを呼 び出す。前記サーバスタブ応答関数に対する呼出しは、呼出し識別子および出力 パラメータtimestrを抽出する。前記サーバ側CEEは、前記オリジナル呼出し が同期式または非同期式になされたのかに応じて、前記出力パラメータ(および 、もし存在するならば、例外情報)を前記クラアント側CEE75に送り返す。 C.メモリ割当てによる非同期実行 前記サーバアプリケーションにおける同じメソッドに対して多数の呼出しが可 能であるので、前記方法は、多数の呼出しのためのメモリを割り当てたり、割当 てを解除したりするためのメソッドを有するのが好ましい。この発明の方法およ び装置の他の実施の形態において、オブジェクトの実行時におけるメモリの割当 ておよび割当て解除(“不要部分の整理”)が提供される。図10は、この発明 のこのような他の実施の形態に係る方法を示すものである。ステップ1001− 1005は図6のステップと同様なものである。すなわち、ステップ1001に おいて、前記オブジェクトは非同期式または同期式に呼び出される。次に、ステ ップ1003において、前記クライアント側CEEからサーバ側CEEにリクエ ストが送られる。そして、ステップ1005において、前記サーバ側CEEは、 前記サーバアプリケーションにおける適切なメソッドをアップコールする。 ステップ1007において、前記サーバアプリケーションは前記呼出しのため のメモリを割り当てる。これは、CおよびC++言語におけるMALLOCのような適 切なメモリ割当て関数を呼び出すことによって実現される。前に割り当てられた 資源の割当てを解除するためのメカニズムも提供されなければならない。好まし くは、メモリの割当ておよび割当て解除は、次のようにC言語で定義されたCEE_T MP_ALLOCATEをダウンコールすることによって実行される。 CEE_TMP_ALLOCATE( const char *call_id long len void **ptr 前記call_idパラメータは、前記CEEが前記呼出し時に前記メモリの割当てを 自動的に解除できるよう、前記特定の呼出しを識別するものである。前記lenパ ラメータは、割り当てるバイト数を指示する。前記CEEは、前記ptrパラメー タを使用して、割り当てられたメモリのアドレスを戻す。 次に、ステップ1009において、前記メソッドが実行され、その結果および call_idがコンテキスト変数に格納される。その後、前記メソッドは、ステップ 1011において、非同期メソッドを呼出す(すなわちオブジェクト呼出し)。 ステップ1013では、前記非同期オペレーションは、その関数を実行し、応答 関数を呼び出す。こうして、ステップ1015において、前記応答関数がサーバ スタブ応答関数を呼び出す。ステップ1017では、前記オブジェクト呼出しの 成功または失敗を示す例外情報と共に、前記オペレーションの出力パラメータが コーラ(Caller)に送り返される。 VI.プロキシー作成および削除 次に、図11および図12を参照して、この発明の方法を説明する。ここでは 、この発明の方法を、クライアントコンピュータのカプセル内で実行されるクラ イアントアプリケーション、および、サーバコンピュータのカプセル内で実行さ れるサーバアプリケーションについて説明する。図11は、オブジェクトを呼び 出すためにプロキシーハンドルを利用するためのステップを示すフローチャート である。最初のステップ1101において、所望のオブジェクトのオブジェクト 参照が得られ必要がある。該オブジェクト参照は、様々な方法で得られてよい。 通常、クライアントアプリケーションは、これらがオブジェクト参照を有する他 のオブジェクトについての構成データ、ディレクトリまたは呼出しから前記参照 を受け取る。オブジェクト参照は、後にアクセスすべきファイルに格納可能な文 字列名に変換されることができる。 前記オブジェクト参照が得られと、オブジェクト呼出しを実行することができ る。この発明の方法において、先ず前記オブジェクト参照に対する“プロキシー ハンドル”を得ることによって前記オブジェクト呼出しが実行される。該プロキ シーハンドルは、特定のオブジェクト参照のためのユニークな識別データ構造体 (“プロキシーオブジェクト”)である。このプロキシー構造体は、オブジェク トについての情報および該オブジェクトに対する呼出しを含む。このプロキシー ハンドルを使用して、指定されたオブジェクトに対する呼出しを行うことができ る。前記プロキシーハンドルは、同じオブジェクトに対する多数の呼出しを容易 にし、該同じオブジェクトに対する多数の呼出しにおいて発生するオーバヘッド を防止する。オブジェクトを実行可能にするプロキシーハンドルを作成すること によって、該プロキシーハンドルを介して、代理されるオブジェクトに対する多 数の呼出しを可能にしながら、初期化ルーチンを一通り実行することができる。 さらに、前記プロキシーハンドルは、オブジェクトに対する非同期呼出しの使用 を容易にする(後述)。好ましい実施の形態によると、ステップ1103におい て、前記クライアントアプリケーションにおいてクライアント側CEE関数CEE_ PROXY_CREATEをダウンコールすることによってプロキシーハンドルが作成される 。該関数はCプログラミング言語により次のように定義される。 CEE_PROXY_CREATE( const char *objref const char *intf_handle char *proxy_handle); 前記関数は、オブジェクト参照objrefおよびインターフェイスハンドルintf_han dleを受け取り、新たに作成されたプロキシーオブジェクトを指示するプロキシ ーハンドルを戻す。図3について上述したように、インターフェイスは各オブジ ェクトごとに作成されなければならない。インターフェイスは、類似したオブジ ェクトの集合に利用可能なオペレーションを定義するものである。前記インター フェイスは、IDLで定義され、コンパイルされ、クライアントアプリケーショ ンにリンクされる。該クライアントアプリケーションは、その初期化ルーチンで CEE_INTERFACE_CREATEを呼び出し、前記インターフェイスを指定する。前記クラ イアント側CEEは、任意の数のオブジェクトまたはプロキシーを作成するため に使用可能なインターフェイスハンドルを戻す。 この発明の好ましい実施の形態において、前記プロキシーオブジェクトは次の ようなフィールドを含む構造体によって表現される。 link; call_link; self; nor; state; call_active; destroy; lock_count; *intf; call_compl_rtn; call_compl_tag1; call_complt_tag2; call_compl_sts; operation_idx; *client_allocated_params; *senrver_allocated_params; *obj; operation_idx_table; max_response_size; *req_area; *rsp_area; *rsp_param_buf, ochan; 次に、前記プロキシーオブジェクトのデータ構造体における各構成要素につい て説明する。前記構成要素の各々のアドレスおよび値は、該プロキシー構造体に よって示されるオブジェクトに対するする各呼出しごとに、前記クライアント側 CEEによって修正される。該クライアント側CEEは、プロキシー構造体のリ ンクされたリストを維持する。各プロキシー構造体のリンクメンバは、このプロ キシー構造体のリストにおける次のエントリを指示するポインタを含むものであ る。 好ましい実施の形態において、オブジェクト呼出しは同期的なもの(クライア ントアプリケーションが、オブジェクトについてのオペレーションが行われるよ うリクエストし、応答を待つもの)、あるいは、非同期的なもの(クライアント アプリケーションが、オブジェクトについてのオペレーションが行われるようリ クエストし、他の作業を続けて行うもの)のいずれであってもよい。同一のカプ セル内において非同期オブジェクト呼出しが送られると、各呼出しは、起動時に 、各オブジェクトごとに存在するオブジェクト構造体に含まれるリンクリスト上 に並べられる。前記call_linkパラメータは、前記呼出しリストへのリンクであ る。前記selfメンバは、この特定のプロキシー構造体のハンドルである。このハ ンドルは、CEE_PROXY_CREATEの間に前記クライアントに戻される。 CEE_PROXY_CREATEに送られたオブジェクト参照は、norメンバに格納される。 前記stateパラメータは、前記プロキシー構造体が内部オブジェクト構造体、( クライアントポートを介した)外部オブジェクト、または存在しない(無効な) オブジェクト構造体を指示するポインタを含むか否かを示す。前記プロキシーが 内部的なものである場合、前記オブジェクトのポインタは前記objパラメータに 含まれる。前記オブジェクトが異なるカプセル内にある場合、前記ochanパラメ ータは、クライアントポートハンドルを指示するポインタ、または、前記オブジ ェクトと通信するために必要な他の情報を含む。 前記call_activeメンバは真/偽の値を保持する。この特定のプロキシーハン ドルについてのオブジェクト呼出しが未完了である場合、前記call_activeメン バは真の値に設定される。1つの特定のプロキシーについて1つのオブジェクト 呼出しだけが未完了となり得る。前記プロキシー構造体が破棄されるのを防止す るために、前記lock_countメンバがインクリメントされる。前記構造体がもはや 必要でない時、前記lock_countメンバはデクリメントされる。前記destroyメン バは、前記lock_countメンバがゼロになった時このプロキシー構造体が破棄され るべき場合に真の値に設定される真/偽値である。前記intfメンバは前記インタ ーフェイスを記述するintf構造体のアドレスである。 次の4つのメンバcall_compl_rtn,call_compl_tag1,call_compl_tag2,call _compl_stsは、非同期オブジェクト呼出しを実行するために使用される。サーバ アプリケーションにおけるオブジェクトに対する非同期呼出しは、呼出し時に、 完了ルーチンのアドレスをクライアントスタブ関数に送ることによって行われる 。こうして、前記クライアントスタブ関数は、前記プロキシーハンドルの作成時 に、前記完了関数のアドレスを前記プロキシー構造体に格納する。前記ルーチン は、前記呼出しが完了したことを前記クライアントアプリケーションに通知する ために呼出される。前記オブジェクトの実行中において、前記クライアントアプ リケーションは他の関数の実行を続けることができる。前記メンバcall_compl_r tnは、前記完了ルーチンのアドレスを含むものである。同一のプロキシーオブジ ェクトに対して多数の呼出しが可能であるので、前記クライアントアプリケーシ ョンは、オブジェクト呼出し実行時に、前記call_compl_tag1を使用することに よって、前記呼出しを指示することができる。該call_compl_tag1は、前記クラ イアントスタブ関数に送られる。これらの識別子は、前記プロキシー構造体にお いて前記メンバcall_compl_tag1およびcall_compl_tag2によって指示される。前 記call_compl_stsは、呼び出しできない非同期呼出しについての完了ステータス を示す。 前記operation_idxメンバは、どのオブジェクトのオペレーションを呼び出す べきかを指示する。オペレーション識別子は、前記インターフェイスにおける各 オペレーションごとに、前記コードジェネレータによって生成される。前記allo cated_paramsメンバは、一時的に割り当てられた(制限の無いタイプなどに使用 される)親を指示するポインタである。このメンバの割当て解除は、このプロキ シー構造体によって参照されるオブジェクトに対する次の呼出しについて不要部 分整理を行う。前記operation_idx_tableパラメータは、前記オブジェクトが同 一のカプセル内に含まれる場合にのみ使用されるオペレーションインデックス翻 訳テーブルを指示するポインタである。 メモリ割当ては、max_response_size,req_area,rep_area,rsp_param_bufメ ンバを使用して実行される。前記rsp_param_bufメンバは、応答パラメータを含 むバッファを指示する。次にこのプロキシーオブジェクトが使用されるとき、前 記バッファの割当てが解除される。前記max_response_sizeは、予期され得る最 大の応答サイズである。これは、前記rep_areaを割り当てるために使用される。 前記前記req_areaメンバは、前記リクエストのために使用されるエリア構造体を 指示 する。また、前記rep_areaは、前記オブジェクト呼出しに対する応答のために使 用されるエリア構造体を指示する。該エリア構造体は、Cプログラミング言語に より次のように定義される。 desc; *data; curlen; 前記エリア構造体は、オブジェクト呼出しエリア記述子、データポインタおよび 該データの長さを含む。 前記クライアントアプリケーションによるCEE_PROXY_CREATEの呼出しにより、 ステップ1108において、前記クライアント側CEEは、自動的に、前記オブ ジェクトのためのメモリを割り当てる。前記クライアントコンピュータにおける メモリは、前記呼出しを行うために必要な付加的な資源と共に割り当てられる。 前記プロキシーハンドルが(後述のように、CEE_PROXY_DESTROYに対するダウン コールにより)破棄されると、前記メモリおよび割り当てられた資源が解放され る。オブジェクト呼出しから可変サイズの出力パラメータのために割り当てられ たメモリは、同一のプロキシーハンドルを使用して次のオブジェクト呼出しがな される時に、その割当てが解除される。 前記プロキシーハンドルは、前記プロキシーによって参照されるオブジェクト に対する後のすべての呼出しを行うために使用される。前記オブジェクト呼出し は、ステップ1111において、前記クライアントアプリケーションにおける適 切なスタブ関数を呼び出し、例外情報と共に前記プロキシーハンドル、入力パラ メータおよび出力パラメータを前記関数に与えることによって行われる。こうし て、前記スタブ関数は、次のようにC言語によって定義されるCEE_OBJECT_CALL をダウンコールする。 CEE_OBJECT_CALL( const char *proxy_handle long operation_idx void **param_vector); 前記プロキシーハンドルは前記proxy_handleパラメータによって指示される。前 記パラメータoperation_idxは、どのオブジェクトのメソッドが呼び出されるべ きかを指示する。このパラメータは、前記インターフェイスが作成された時に供 給された前記インターフェイス記述における必要なメソッドに対するインデック スである。最後に、前記param_vectorは、前記オブジェクト呼出しの入力パラメ ータ、出力パラメータおよび例外構造体を指示するポインタのアレイである。前 記例外構造体のアドレスは、前記アレイにおける最初の構成要素である。前記オ ペレーションがvoid(空)タイプのものでない場合、前記アレイにおける次の構 成要素は、前記オペレーションの結果を受け取るための変数のアドレスを含む。 その後の構成要素は、IDLにおいて定義された順序と同じ順序で、前記オペレ ーションの入力パラメータおよび出力パラメータのアドレスを含む。 そして、前記呼出しは、任意の移送メカニズムを使用して前記サーバに送られ る。ステップ1115では、前記サーバアプリケーションが前記オブジェクトを 実行する。これは、適切なメソッドルーチンをアップコールする前記サーバ側C EEによって実行される。前記メソッドルーチンには、前記入力パラメータおよ び出力パラメータのすべてのアドレスを含む前記param_vectorパラメータが与え られる。前記メソッドが退出すると、ステップ1119において、前記コーラに 応答がなされ、前記オブジェクト呼出しが完了する。 最初の呼出しが完了すると、前記プロキシーハンドルを再使用して、同じオブ ジェクトに対して更なる呼出しを行うことができる。後の各呼出しは、前記オブ ジェクトを確認したり、他のスタートアップオペレーションを実行したりするこ となく実行することができる。このようにして、前記プロキシー作成ステップは 前記クライアントアプリケーションにおける時間が重要な要素でない部分に置く ことができ、オブジェクト呼出しは前記アプリケーションにおける時間が重要な 部分において行うことができる。 指定されたプロキシーハンドルについての最終的なオブジェクト呼出しに続い て、ステップ1211では、前記プロキシーハンドルが破棄される。これは、ク ライアントアプリケーションにおいて次のようにC言語で定義されるCEE_PROXY_ DESTROYを呼び出すことによって実現される。 CEE_PROXY_DESTROY( const char *proxy_handle); 前記プロキシーハンドルは前記関数に送られる。前記クライアント側CEEでは 、ステップ1128において、このプロキシーハンドルを破棄し、該プロキシー ハンドルについて割当てられていたすべての資源を解放する。代案として、オブ ジェクト呼出しがキャンセルされ、該呼出しが未完了のまま該呼出しに関連する すべての資源の割当てが解除されてよい。 VII.プロキシー作成およびメモリ割当て 図12は、この発明に係るオブジェクト呼出しメソッドの他の実施の形態を示 すものである。この実施の形態において、オブジェクトの呼出し中のみならずオ ブジェクトの実行中にメモリが割り当てられる。 ステップ1201−1211は上記と同様である。従って、ステップ1201 では、オブジェクト参照が得られる。次に、前記プロキシーハンドルを戻すCEE_ PROXY_CREATEをダウンコールすることによって、プロキシーハンドルが得られる 。そして、ステップ1211において、参照されたオブジェクトのプロキシーハ ンドルが与えられたCEE_OBJECT_CALLを使用して、前記オブジェクト呼出しが行 われる。 ステップ1213において、前記サーバ側CEEは、前記サーバアプリケーシ ョンにおける適切なメソッドルーチンをアップコールする。ステップ1216で は、前記メソッドルーチンは、その呼出し時に、サーバ側CEE関数をダウンコ ールし、メモリを割当てる。その関数CEE_TMP_ALLOCATEは、次のようにC言語で 定義される。 CEE_TMP_ALLOCATE( const char *call_id long len void **ptr); 前記関数は、前記call_idパラメータを使用して特定のオブジェクト呼出しを追 跡する。前記オブジェクトに対する各呼出しには、前記サーバアプリケーション によってユニークなcall_idが与えられる。こうして、前記呼出しが行われると 、前 記サーバの処理系は、前記call_idパラメータにおける前記呼出しにidを与え る。割り当てるべきバイト数は、前記lenパラメータにおいて指定される。前記 関数は、前記ptrパラメータを介して前記割り当てられたメモリのアドレスを戻 す。 ステップ1219において、前記オブジェクトのメソッドが前記サーバアプリ ケーションによって実行される。該サーバアプリケーションは、ステップ121 5において、前記コーラに応答する。前記メソッド関数からの退出時に、ステッ プ1220において、CEE_TMP_ALLOCATEに対するダウンコールに基づいて割り当 てられたメモリが解放される。その後、前記クライアントアプリケーションは、 ステップ1211において他のオブジェクト呼出しを行うか、または、ステップ 1225において前記プロキシーハンドルを破棄する。前記プロキシーハンドル が破棄されると、ステップ1209で割り当てられたメモリが、ステップ122 8において、前記クライアント側CEEによって自動的に割当て解除される。 メモリは、CEE_TMP_DEALLOCATEを使用して早めに割当て解除されることができ る。その関数は次のように定義される。 CEE_TMP_DEALLOCATE( In void *ptr); 前記関数には、CEE_TMP_ALLOCATEによって提供された前記ptrパラメータが与え られる。前記CEEは、前記パラメータによって指示されたアドレスを解放する 。 VIII.ピクルドIDLフォーマットデータ構造体の作成 ピクルド(pickled)IDLフォーマット(“PIF”)データ構造体は、ク ライアントメモリ23およびサーバメモリ17にロードされたIDLコンパイラ およびコードジェネレータと共に使用されるよう設計されている。該データ構造 体は、メモリ23またはメモリ17に格納されたIDLソースファイルに基づい ている。該ソースファイルも、ディスクのようなコンピュータによって読取り可 能な媒体に格納されることができる。このデータ構造体は、IDLソースファイ ルを示す解析ツリーを含んでいる。該データ構造体は、メモリ23またはメモリ 17あるいはディスクのようなコンピュータによって読取り可能な媒体に格納可 能である。前記ソースファイルを示す前記データ構造体は、ピクルドIDLフォ ーマット(“PIF”)と呼ばれている。該PIFファイルは、前記ソースファ イ ルに定義されたインターフェイスを使用するクライアントおよびサーバにより実 行時にアクセス可能である。該PIFファイルに含まれる解析ツリーは、ポイン タの代りにアレイインデックスを使用するアレイである。このアレイインデック スの使用により、その結果としての解析ツリーは言語とは独立したものとするこ とができる。前記アレイの最初の構成要素は使用されない。前記アレイの2番目 の構成要素(インデックス1)は、前記解析ツリーの残りの部分へのエントリポ イントとして機能するルート部である。 図13にはデータ構造体tu1301が示されており、これは次のようにIDL によって定義される。 strunct tu_def{ sequence<entry_def> entry; sequence<string> source; } 前記データ構造体1301は、その各々がentry_defタイプ(後で定義)である 解析ツリーノード1305のシーケンス(可変サイズアレイ)およびソースファ イルライン1307のシーケンスを含む。前記ソースファイルライン1307の シーケンスは、前記IDLソースファイルからの実際のソースコードラインを含 む文字列シーケンスである。 各解析ツリーノード(または“エントリ”)1305は、該ノードの名前およ びその特性を含む固定部、ならびに、前記ノードのタイプによって決まる可変部 で構成される。前記解析ツリーノードは図14に示されており、これは次のよう にIDLによって定義される。 struct entry_def{ unsigned long entry_index; string name; string jile_name; unsigned long line_nr; boolean in_main_file; union u_tag switch(entry_type_def){ case entry_argument:argument_def argument_entry; case entry_array:array_def array_entry; case entry_attr:attr_def attr_entry; case entry_const:const_def const_entry; case entry_enum:enum_def enum_entry; case entry_enum val:enum_val_def enum_val_entry; case entry_except:except_def except_def_entry; case entry_field:field_defneld_def entry; case entry_interface:interface_def interface_entry; case entry_interface_fwd:interface_fwd_def interface _fwd_entry; case entry_module:module_def module_entry; case entry_op:op_def op_entry; case entry_pre_defined:pre_defined_def pre_defined_e ntry; case entry_sequencec:sequence_def sequence_entry; case entry_string:string_def string_entry; case entry_struct:struct_def struct_entry; case entry_typedef:typedef_def typedef_entry; case entry_union:union_def union_entry; case entry_union_branch:union_branch_def union_branc h_entry; }u; }; 前記解析ツリーノードの固定部はentry_index1405を含み、これは前記解 析ツリーにおけるこの特定のエントリのインデックスである符号なしlongである 。前記エントリの非修飾名は、nameフィールド1407に含まれる。オリジナル のIDLソースファイルの名前は、file_nameフィールド1411に含まれる。l ine_nrフィールド1413は、この解析ツリーノードを作成させる前記IDLソ ースファイルにおけるライン番号を含む。ブールin_main_file1415は、コマ ンドライン上に指定されたIDLソースファイルにおいてエントリがなされたか 否か、または、前記エントリが“include”ファイルの一部か否かを示す。この ファイルに続いて、前記解析ツリーは、可変部、すなわち、識別子entry_type_d efを 有する共用体1417を含む。前記共用体識別子entry_type_defは、ノードのタ イプおよびentry_def内のどの変数がアクティブなのかを指示する。entry_type_ defは次のように定義される列挙である。 enum entry_type_def{ entry_unused, entry_module, entry_interface, entry_interface_Fwd, entry_const, entry_except, entry_attr, entry_op, entry_argument, entry_union, entry_union_branch, entry_struct, entry_field, entry_enum, entry_enum_val, eniry_string, entry_array, entry_sequence, cntry_typedef, entry_pre_defined }; entry_type_defは、各種の解析ツリーエントリのリストを含む。各解析ツリー エントリは、entry_defに含まれるswitch文に使用される一定の定数を示す。各 エントリごとに、共用体u_tagは異なるタイプの構造体を含むことになる。列挙 された最初の値entry_unusedは、ゼロの値に対応し、前記共用体のタイプを決定 するのに使用されない。 前記解析ツリーエントリが(値entry_moduleによって指示された)モジュール である場合、前記解析ツリーの可変部は、モジュール定義シーケンスを含むデー タ構造体である。各モジュール定義は、前記解析ツリーにおけるインデックスと して機能する符号なしlongである。 前記解析ツリーエントリが値entry_inter faceによって指示されたインターフ ェイスである場合、前記解析ツリーの可変部は、ローカル定義シーケンス、およ び、このインターフェイスが継承する基本インターフェイスのシーケンスを含む データ構造体である。前記解析ツリーエントリがインターフェイスの前向き宣言 (entry_interface_fwd)である場合、前記共用体はフル定義のインデックスを 含む符号なしのlongである。 定数(entry_const)は、解析ツリーノードにおいて該定数の値を含む構造体 として表現される。好ましくは、前記ソースファイルに含まれる各種の基本タイ プ定数(ブール定数、char定数、double定数等)を識別するために、共用体およ びswitch/case文が使用される。 例外(entry_except)は、解析ツリーノードにおいてフィールドのシーケンス を含む構造体として表現される。属性(entry_attr)は、該属性が読出し専用で あるか否かを示すブール値、および、そのデータ型を示す符号なしのlongを含む データ構造として表現される。 前記解析ツリーエントリがオペレーション(op_def)である場合、前記エント リデータ構造体1305の可変部1417は図15に示されるようなデータ構造 体である。前記データ構造体1417は、前記オペレーションが一方向属性を有 するものか否かを示すブール数1305、戻りタイプを示す符号なしのlong13 07、前記オペレーションに対する引数1509のシーケンス、前記オペレーシ ョンに対する例外1511のシーケンス、および、前記オペレーションに含まれ るコンテキストを指示する文宇列1513のシーケンスを含む。前記解析ツリー エントリが特定のオペレーションに対する引数(entry_argument)である場合、 該解析ツリーエントリの可変部は、該引数の方向およびデータ型を示す符号なし のlongを含む。 前記解析ツリーエントリが共用体(entry_union)である場合、これは解析ツ リーエントリにおいて図16に示すようなに表現される。前記データ構造体14 1 7は、識別子1603を示す符号なしのlong、および、その型1605を示す符 号なしのlongを含む。その型は、基本型の列挙リストを使用して指示されるのが 好ましい。該データ構造体1417は、共用体フィールド1607のシーケンス をさらに含む。前記解析ツリーエントリが共用体ブランチ(entry_branch)であ る場合、前記解析ツリーエントリの可変部は、前記ブランチの基本型を示す符号 なしのlong、前記ブランチがcaseラベルを含むか否かを示すブール数、および、 識別子の値を含む構造体である。前記値は特定のデータ型であるので、好ましく は、各種基本型の列挙リストを使用して、該共用体ブランチを表現するために使 用される構造体内の値を示す。 データ構造体(entry_struct)の場合、前記解析ツリーエントリの可変部は、 指定された構造体フィールドのシーケンスを含む構造体を含む。列挙された値( entry_enum)は、列挙された値のシーケンスを含む構造体によって表現される。 列挙されたタイプの列挙(entry_enum_val)は、前記解析ツリーエントリにおい て、列挙の数値を保持する符号なしのlongを含む構造体によって表現される。 前記解析ツリーエントリが文字列(entry_string)である場合、前記解析ツリ ーエントリの可変部は、該文字列の最大サイズを含む構造体である。最大サイズ がゼロである場合、これは制限なしの文字列を示す。アレイ(entry_array)は 、前記解析ツリーエントリにおいて、前記アレイの基本型を保持する符号なしの long、および、前記アレイのサイズを保持するlongのシーケンス含む構造体によ って表現される。シーケンス(entry_sequence)は、前記シーケンスの基本型お よび最大サイズを保持する符号なしのlongを含む構造体によって表現される。 タイプ定義(entry_typedef)の場合、前記解析ツリーエントリは、前記タイ プ定義の基本型を示す符号なしのlongの値を含む構造体によって表現される。予 め定義されたタイプ(entry_pre_defined)は、データ型を含む構造体によって 表現される。前記タイプを指示するために、前記各種基本型の列挙が使用される のが好ましい。 前記tuデータ構造体を使用して前記IDLソースが記述されると、前記データ 構造体は任意の既知の方法を使用してファイルまたはデータベースに移送される 。 以上のようにオブジェクトを非同期式に呼出し、実行するための方法の好まし い実施の形態について説明してきたが、この発明の範囲および精神の範囲内で様 々な変更が可能である。例えば、上述した発明の概念は非MSF環境にも適用可 能である。
───────────────────────────────────────────────────── 【要約の続き】 きる。呼出されたオブジェクトを非同期式に実行するた めに、非同期オペレーションを呼出す前記サーバアプリ ケーションにおける適切なメソッド関数が呼出される。 前記非同期オペレーションが戻されると、このアプリケ ーションは前記クラアントアプリケーションに応答す る。

Claims (1)

  1. 【特許請求の範囲】 1.クラアントアプリケーションからサーバアプリケーションにリクエストされ るオブジェクトについてのオペレーションを非同期式に実行するための方法であ って、 前記クラアントアプリケーションにおいて前記オペレーションに対するオブジ ェクト参照を得るステップと、 前記クラアントアプリケーションにおいて、前記オブジェクト参照、前記オペ レーションの入力パラメータ、および、前記クラアントアプリケーションにおけ る完了ルーチンのクラアントコンピュータメモリアドレスが与えられたスタブ関 数により前記オペレーションをリクエストするステップと、 前記完了ルーチンのメモリアドレスを格納するステップと、 前記クラアントアプリケーションおよびサーバアプリケーションによりアクセ ス可能な実行環境を介して、前記サーバアプリケーションにおけるメソッドに前 記入力パラメータを送るステップと、 前記サーバアプリケーションにおいて前記オブジェクトについてのオペレーシ ョンを実行するステップであって、その実行が前記クラアントアプリケーション に対する応答を含むものと、 前記実行環境を介して前記クラアントアプリケーションに対する応答を送るス テップと、 前記クラアントアプリケーションにおける完了ルーチンを呼び出し、該完了ル ーチンに前記応答を与えるステップと を具備する方法。 2.前記オブジェクト参照が、前記クラアントアプリケーションによりアクセス 可能な構成ファイルから得られる請求の範囲第1項に記載の方法。 3.前記オブジェクト参照が、前記クラアントアプリケーションによりアクセス 可能なディスクファイルから得られる請求の範囲第1項に記載の方法。 4.前記オブジェクト参照が、前記クラアントアプリケーションによる前のオブ ジェクト呼出しから得られる請求の範囲第1項に記載の方法。 5.前記オブジェクトについてのオペレーションを実行するステップが非同期式 に行われる請求の範囲第1項に記載の方法。 6.前記オブジェクトについてのオペレーションを非同期式に実行するステップ が、 前記サーバアプリケーションにおけるメソッド内から非同期関数を呼び出し、 該非同期関数に、呼出し識別子およびサーバアプリケーションにおける応答関数 を含むメモリアドレスを与えるステップと、 前記非同期関数から前記応答関数を呼び出し、該応答関数に前記呼出し識別子 を与えるステップと、 前記識別子に基づいて前記オブジェクト呼出しに応答するステップと をさらに含む請求の範囲第5項に記載の方法。 7.クラアントアプリケーションからサーバアプリケーションへのリクエストを 介してオブジェクトについてのオペレーションを非同期式に実行するための方法 であって、 前記オブジェクトを示すオブジェクト参照を得るステップと、 前記クラアントアプリケーションにおいてスタブ関数により前記オブジェクト を呼び出すステップであって、このスタブ関数は、前記オブジェクト参照、前記 オペレーションの入力パラメータ、および、前記クラアントアプリケーションに おける完了ルーチンのクラアントコンピュータメモリアドレスが与えられること と、 前記クラアントアプリケーションおよびサーバアプリケーションによりアクセ ス可能な実行環境を介して、前記サーバアプリケーションにおけるメソッドに前 記入力パラメータおよびオブジェクト参照を送るステップと、 前記サーバアプリケーションにおけるメソッド内から非同期関数を呼び出し、 該非同期関数に対して、呼出し識別子およびサーバコンピュータの応答関数のメ モリアドレスを与えるステップと、 前記非同期関数から前記応答関数を呼び出し、該応答関数に前記呼出し識別子 を与えるステップと、 前記識別子に基づいて前記オブジェクト呼出しに応答するステップと 前記実行環境を介して前記コーラに応答を送るステップと、 前記完了ルーチンを呼び出し、該完了ルーチンに前記応答を与えるステップと を具備する方法。 8.クラアントコンピュータアプリケーションからサーバコンピュータアプリケ ーションへのリクエストを介して、オブジェクトについてのオペレーションを非 同期式に実行するための方法であって、 前記オブジェクトを示すオブジェクト参照をステップと、 前記オブジェクト参照を示すプロキシーハンドルを作成するステップと、 前記クラアントアプリケーションにおいて、前記プロキシーハンドル、前記オ ペレーションの入力パラメータ、および、前記クラアントアプリケーションにお ける完了ルーチンのクラアントコンピュータメモリアドレスが与えられたスタブ 関数により前記オブジェクトを呼び出すステップと、 前記プロキシーハンドルに基づき前記クラアントアプリケーションおよびサー バアプリケーションによりアクセス可能な実行環境を介して、前記サーバアプリ ケーションに前記入力パラメータを送るステップと、 前記サーバアプリケーションにおいて前記オブジェクトについてのオペレーシ ョンを実行するステップであって、その実行が前記クラアントアプリケーション に対する応答を含むものと、 前記実行環境を介して前記クライアントアプリケーションに前記応答を送るス テップと、 前記クラアントアプリケーションにおける完了ルーチンを呼び出し、該完了ル ーチンに前記応答を与えるステップと を具備する方法。 9.前記オブジェクト参照が、前記クラアントアプリケーションにおける初期化 ルーチンから得られる請求の範囲第8項に記載の方法。 10.前記オブジェクト参照がディスクファイルから得られる請求の範囲第8項 に記載の方法。 11.前記オブジェクト参照が前のオブジェクト呼出しから得られる請求の範囲 第8項に記載の方法。 12.前記オブジェクトについてのオペレーションを実行するステップが非同期 式に行われる請求の範囲第8項に記載の方法。 13.前記オブジェクトについてのオペレーションを非同期式に実行するステッ プが、 前記メソッド内から非同期関数を呼び出し、該非同期関数に呼出し識別子およ び応答関数アドレスを与えるステップと、 前記非同期関数から前記応答関数を呼び出し、該応答関数に前記呼出し識別子 を与えるステップと、 前記識別子に基づいて前記オブジェクト呼出しに応答するステップと をさらに含む請求の範囲第12項に記載の方法。 14.オブジェクトについてのオペレーションを実行するための方法であって、 前記オペレーションを実行するためのメソッド関数を呼び出し、前記関数に対 して、呼び出される前記オブジェクトを識別するための識別子を与えるステップ と、 前記メソッド関数内から非同期関数を呼び出し、前記非同期関数に前記識別子 を与えるステップと、 前記識別子に基づいて前記オブジェクト呼出しに応答するステップと を具備する方法。 15.前記サーバコンピュータメモリの一部を前記オブジェクト呼出しに割り当 てるステップと、 前記オブジェクト呼出しに応答した後、前記サーバコンピュータメモリの一部 の割当てを解除するステップと を具備した請求の範囲第14項に記載の方法。 16.クラアントアプリケーションからサーバアプリケーションへのリクエスト を介してオブジェクトについてのオペレーションを実行するためにコンピュータ により読み取り可能なコード手段を有するコンピュータで使用可能な媒体と、 前記オブジェクトを示すオブジェクト参照を得るソフトウエア手段と、 前記クラアントアプリケーションにおいて、前記オブジェクト参照、前記オペ レーションの入力パラメータ、および、前記クラアントアプリケーションにおけ る完了ルーチンのクラアントコンピュータメモリアドレスが与えられたスタブ関 数により前記オブジェクトを呼び出すソフトウエア手段と、 前記クラアントアプリケーションおよびサーバアプリケーションによりアクセ ス可能な実行環境に、前記オブジェクト参照、入力パラメータおよび完了ルーチ ンのアドレスを送るソフトウエア手段と、 前記オブジェクト参照に基づいて前記実行環境を介して、前記サーバアプリケ ーションにおけるメソッドに前記入力パラメータを送るソフトウエア手段と、 前記サーバアプリケーションにおいて前記オブジェクトについてのオペレーシ ョンを実行するためのソフトウエア手段であって、その実行が前記クライアント アプリケーションに対する応答を含むものと、 前記実行環境を介して前記クライアントアプリケーションに応答を送るソフト ウエア手段と、 前記クライアントアプリケーションにおける完了ルーチンを呼び出し、該完了 ルーチンに前記応答を与えるソフトウエア手段と を具備するコンピュータプログラム製品。 17.前記第1のコンピュータおよび第2のコンピュータの一方に前記オブジェ クトについてのオペレーションを実行させるソフトウエア手段が、 前記サーバアプリケーションにおけるメソッド内から非同期関数を呼び出し、 前記非同期関数に呼出し識別子および応答関数を与えるソフトウエア手段と、 前記非同期関数から前記応答関数を呼び出し、前記応答関数に前記呼出し識別 子を送るソフトウエア手段と、 前記識別子に基づいて前記オブジェクト呼出しに応答するソフトウエア手段と を含む請求の範囲第17項に記載のコンピュータプログラム製品。
JP10506101A 1996-07-11 1997-07-10 非同期式にオブジェクトを呼出し、処理するための方法および装置 Pending JP2000515278A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/680,202 1996-07-11
US08/680,202 US6253252B1 (en) 1996-07-11 1996-07-11 Method and apparatus for asynchronously calling and implementing objects
PCT/US1997/011879 WO1998002809A1 (en) 1996-07-11 1997-07-10 Method and apparatus for asynchronously calling and implementing objects

Publications (1)

Publication Number Publication Date
JP2000515278A true JP2000515278A (ja) 2000-11-14

Family

ID=24730154

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10506101A Pending JP2000515278A (ja) 1996-07-11 1997-07-10 非同期式にオブジェクトを呼出し、処理するための方法および装置

Country Status (4)

Country Link
US (1) US6253252B1 (ja)
EP (1) EP0912937A1 (ja)
JP (1) JP2000515278A (ja)
WO (1) WO1998002809A1 (ja)

Families Citing this family (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6813769B1 (en) * 1997-10-28 2004-11-02 Microsoft Corporation Server application components with control over state duration
US6631425B1 (en) 1997-10-28 2003-10-07 Microsoft Corporation Just-in-time activation and as-soon-as-possible deactivation or server application components
US5958004A (en) 1997-10-28 1999-09-28 Microsoft Corporation Disabling and enabling transaction committal in transactional application components
JPH11249918A (ja) * 1998-03-04 1999-09-17 Sony Corp データ処理方法、記録媒体及びデータ処理装置
JPH11249898A (ja) * 1998-03-04 1999-09-17 Sony Corp データ処理方法、記録媒体及びデータ処理装置
US6154765A (en) * 1998-03-18 2000-11-28 Pasocs Llc Distributed digital rule processor for single system image on a clustered network and method
EP0967549A3 (en) * 1998-06-24 2002-02-13 Intellution Inc. Processing asynchronously called operations of objects
US6526416B1 (en) 1998-06-30 2003-02-25 Microsoft Corporation Compensating resource managers
US6442620B1 (en) 1998-08-17 2002-08-27 Microsoft Corporation Environment extensibility and automatic services for component applications using contexts, policies and activators
US6425017B1 (en) * 1998-08-17 2002-07-23 Microsoft Corporation Queued method invocations on distributed component applications
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
GB2346990B (en) * 1999-02-20 2003-07-09 Ibm Client/server transaction data processing system with automatic distributed coordinator set up into a linear chain for use of linear commit optimization
US6748455B1 (en) 1999-02-23 2004-06-08 Microsoft Corporation Object connectivity through loosely coupled publish and subscribe events with filtering
US6829770B1 (en) 1999-02-23 2004-12-07 Microsoft Corporation Object connectivity through loosely coupled publish and subscribe events
US20040019898A1 (en) * 1999-06-14 2004-01-29 International Business Machines Corporation Accessing local objects using local access proxies
DE19929751A1 (de) 1999-06-30 2001-01-18 Siemens Ag System und Verfahren zur Übertragung von Daten, insbesondere zwischen einem Anwender- und einem Serverprogramm im Bereich der Automatisierungstechnik mit verteilten Objekten
US6609248B1 (en) * 1999-06-30 2003-08-19 Microsoft Corporation Cross module representation of heterogeneous programs
US7150000B1 (en) * 1999-08-17 2006-12-12 Nash Controlware, Inc. Component development with autonomous and compiled components to implement and consume services with components operate in edit and run mode
US6748555B1 (en) * 1999-09-09 2004-06-08 Microsoft Corporation Object-based software management
US6633919B1 (en) * 1999-11-18 2003-10-14 International Business Machines Corporation Method, system and program product for managing the flow of data between senders and receivers of a computing environment
US6920636B1 (en) * 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
WO2001073551A2 (en) * 2000-03-29 2001-10-04 Nextset Software Inc. System and method of providing an asynchronous interface between a client system and an enterprise javabeans-enabled server
US6546359B1 (en) 2000-04-24 2003-04-08 Sun Microsystems, Inc. Method and apparatus for multiplexing hardware performance indicators
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6647546B1 (en) 2000-05-03 2003-11-11 Sun Microsystems, Inc. Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code
US6986130B1 (en) 2000-07-28 2006-01-10 Sun Microsystems, Inc. Methods and apparatus for compiling computer programs using partial function inlining
US6910107B1 (en) 2000-08-23 2005-06-21 Sun Microsystems, Inc. Method and apparatus for invalidation of data in computer systems
US7406681B1 (en) 2000-10-12 2008-07-29 Sun Microsystems, Inc. Automatic conversion of source code from 32-bit to 64-bit
US20020188764A1 (en) * 2001-05-25 2002-12-12 Sun Microsystems, Inc. Method and apparatus for asynchronous component invocation
WO2003002243A2 (en) 2001-06-27 2003-01-09 Remon Medical Technologies Ltd. Method and device for electrochemical formation of therapeutic species in vivo
US7280558B1 (en) * 2001-06-28 2007-10-09 Microsoft Corporation Asynchronous pattern
US7356803B2 (en) * 2001-07-02 2008-04-08 Bea Systems, Inc. Annotation based development platform for asynchronous web services
US6918107B2 (en) * 2001-07-02 2005-07-12 Bea Systems, Inc. Programming language extensions for processing data representation language objects and related applications
US6754884B1 (en) 2001-07-02 2004-06-22 Bea Systems, Inc. Programming language extensions for processing XML objects and related applications
US7437710B2 (en) * 2001-07-02 2008-10-14 Bea Systems, Inc. Annotation based development platform for stateful web services
US7191361B2 (en) * 2001-08-31 2007-03-13 National Instruments Corporation System and method enabling asynchronous execution of a test executive subsequence
US6934953B2 (en) * 2001-11-28 2005-08-23 Intel Corporation Deferred procedure call in interface description language
US6859810B2 (en) * 2001-12-10 2005-02-22 Bea Systems, Inc. Declarative specification and engine for non-isomorphic data mapping
US7516447B2 (en) 2002-02-22 2009-04-07 Bea Systems, Inc. Methods and apparatus for building, customizing and using software abstractions of external entities
US7703077B2 (en) * 2002-04-30 2010-04-20 Microsoft Corporation Programming model to detect deadlocks in concurrent programs
US20040024843A1 (en) * 2002-07-31 2004-02-05 Smith Christopher T. Method for provisioning distributed web applications
AU2003259872A1 (en) * 2002-08-16 2004-03-03 Globespanvirata Incorporated Operating system for executing computer software applications
US7124414B2 (en) * 2002-10-31 2006-10-17 International Business Machines Corporation Method, system and program product for routing requests in a distributed system
US7219341B2 (en) 2002-10-31 2007-05-15 International Business Machines Corporation Code analysis for selective runtime data processing
WO2004057469A1 (en) * 2002-12-19 2004-07-08 Red Plain Technology Limited A distributed object processing system and method
US7349968B2 (en) * 2003-07-31 2008-03-25 International Business Machines Corporation Method, system and program product for asynchronously processing requests
US7797669B1 (en) 2004-02-13 2010-09-14 Microsoft Corporation Analysis of distributed software systems via specification substitution
US20050246692A1 (en) * 2004-04-28 2005-11-03 Convey Development, Inc. Asynchronous compilation
GB0422007D0 (en) * 2004-10-05 2004-11-03 Ibm Method and system for identifying a complete response to a request
US7962917B2 (en) 2005-03-10 2011-06-14 Microsoft Corporation System data interfaces, related architectures, print system data interfaces and related print system architectures
US8840660B2 (en) 2006-01-05 2014-09-23 Boston Scientific Scimed, Inc. Bioerodible endoprostheses and methods of making the same
US8089029B2 (en) 2006-02-01 2012-01-03 Boston Scientific Scimed, Inc. Bioabsorbable metal medical device and method of manufacture
US8048150B2 (en) 2006-04-12 2011-11-01 Boston Scientific Scimed, Inc. Endoprosthesis having a fiber meshwork disposed thereon
CA2659761A1 (en) 2006-08-02 2008-02-07 Boston Scientific Scimed, Inc. Endoprosthesis with three-dimensional disintegration control
CA2663220A1 (en) 2006-09-15 2008-03-20 Boston Scientific Limited Medical devices and methods of making the same
CA2663250A1 (en) 2006-09-15 2008-03-20 Boston Scientific Limited Bioerodible endoprostheses and methods of making the same
WO2008034066A1 (en) 2006-09-15 2008-03-20 Boston Scientific Limited Bioerodible endoprostheses and methods of making the same
ES2357661T3 (es) * 2006-09-15 2011-04-28 Boston Scientific Scimed, Inc. Endoprótesis bioerosionables con capas inorgánicas bioestables.
WO2008036548A2 (en) 2006-09-18 2008-03-27 Boston Scientific Limited Endoprostheses
EP2277563B1 (en) 2006-12-28 2014-06-25 Boston Scientific Limited Bioerodible endoprostheses and method of making the same
US7958518B1 (en) * 2007-06-26 2011-06-07 Amazon Technologies, Inc. Providing enhanced interactions with software services
US8052745B2 (en) 2007-09-13 2011-11-08 Boston Scientific Scimed, Inc. Endoprosthesis
WO2009093217A2 (en) * 2008-01-25 2009-07-30 Nxp B.V. Message interface code generator and method of producing an asynchronous message interface code for an audio streaming system
US20090228904A1 (en) * 2008-03-04 2009-09-10 Microsoft Corporation Declarative support for asynchronous methods
US7998192B2 (en) 2008-05-09 2011-08-16 Boston Scientific Scimed, Inc. Endoprostheses
US8236046B2 (en) 2008-06-10 2012-08-07 Boston Scientific Scimed, Inc. Bioerodible endoprosthesis
US7985252B2 (en) 2008-07-30 2011-07-26 Boston Scientific Scimed, Inc. Bioerodible endoprosthesis
US8382824B2 (en) 2008-10-03 2013-02-26 Boston Scientific Scimed, Inc. Medical implant having NANO-crystal grains with barrier layers of metal nitrides or fluorides
US8267992B2 (en) 2009-03-02 2012-09-18 Boston Scientific Scimed, Inc. Self-buffering medical implants
WO2011119573A1 (en) 2010-03-23 2011-09-29 Boston Scientific Scimed, Inc. Surface treated bioerodible metal endoprostheses
US8769544B2 (en) * 2011-09-01 2014-07-01 Qualcomm Incorporated Method and system for managing parallel resource request in a portable computing device
US9104404B2 (en) * 2012-05-07 2015-08-11 Oracle International Corporation System and method for supporting a deferred reference to an object in an objected-oriented programming language environment
US9846597B2 (en) * 2013-03-13 2017-12-19 Microsoft Technology Licensing, Llc Durable program execution
US10732796B2 (en) 2017-03-29 2020-08-04 Microsoft Technology Licensing, Llc Control of displayed activity information using navigational mnemonics
US10671245B2 (en) 2017-03-29 2020-06-02 Microsoft Technology Licensing, Llc Collection and control of user activity set data and activity set user interface
US10853220B2 (en) 2017-04-12 2020-12-01 Microsoft Technology Licensing, Llc Determining user engagement with software applications
US10693748B2 (en) 2017-04-12 2020-06-23 Microsoft Technology Licensing, Llc Activity feed service
US11580088B2 (en) 2017-08-11 2023-02-14 Microsoft Technology Licensing, Llc Creation, management, and transfer of interaction representation sets

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5247676A (en) * 1989-06-29 1993-09-21 Digital Equipment Corporation RPC based computer system using transparent callback and associated method
US5481721A (en) * 1991-07-17 1996-01-02 Next Computer, Inc. Method for providing automatic and dynamic translation of object oriented programming language-based message passing into operation system message passing using proxy objects
FR2714746B1 (fr) * 1993-12-31 1996-02-02 Bull Sa Procédé de simulation d'une architecture "serveur" à partir d'une architecture "client".

Also Published As

Publication number Publication date
US6253252B1 (en) 2001-06-26
EP0912937A1 (en) 1999-05-06
WO1998002809A1 (en) 1998-01-22

Similar Documents

Publication Publication Date Title
JP2000515278A (ja) 非同期式にオブジェクトを呼出し、処理するための方法および装置
US6622175B1 (en) System and method for communications in a distributed processing environment
US6487607B1 (en) Methods and apparatus for remote method invocation
US6697877B1 (en) Method and apparatus for determining equality of objects in a distributed object environment
US6393497B1 (en) Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system
US6385661B1 (en) System and method for dynamic generation of remote proxies
EP0733970B1 (en) Methods and apparatus for managing collections of objects
US5440744A (en) Methods and apparatus for implementing server functions in a distributed heterogeneous environment
US6877163B1 (en) Method and system for dynamic proxy classes
EP0912933B1 (en) Method and apparatus for describing an interface definition language-defined interface, operation, and data type
EP0474339A2 (en) Methods and apparatus for providing a client interface to an object-oriented invocation of an application
US20090228899A1 (en) Method and apparatus for dynamically brokering object messages among object models
JPH0869435A (ja) ネットワークを介してリモート・プロシージャ・コール及びレスポンスを転送するための方法及びシステム
US6470346B2 (en) Remote computation framework
JPH0283627A (ja) インタプリタ
US6751798B1 (en) Method and apparatus for performing distributed object calls using proxies and memory allocation
KR20010034542A (ko) 네트워크를 통한 동적 분산 컴퓨팅 방법 및 장치
US6516354B2 (en) Method and apparatus for efficient representation of variable length identifiers in a distributed object system
Chatterjee Futures: a mechanism for concurrency among objects
US7003782B2 (en) Optimized COBRA software method invocation
IL143948A (en) A method and device for dynamically extending the command of an intelligent agent
EP0733968B1 (en) Method and system for type identification for multiple object interfaces in a distributed object environment
JPH11249919A (ja) 手続き呼出しの処理方法およびスタブ生成方法
Taveira et al. Asynchronous Remote Method Invocation in Java.
Tzruya et al. A portable implementation of the distributed systems annex in Java

Legal Events

Date Code Title Description
A625 Written request for application examination (by other person)

Free format text: JAPANESE INTERMEDIATE CODE: A625

Effective date: 20040712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20061107

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070206

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070326

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20070507

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20070626