JP7071379B2 - リモート・オブジェクトからの呼び出し要求の延期 - Google Patents

リモート・オブジェクトからの呼び出し要求の延期 Download PDF

Info

Publication number
JP7071379B2
JP7071379B2 JP2019541300A JP2019541300A JP7071379B2 JP 7071379 B2 JP7071379 B2 JP 7071379B2 JP 2019541300 A JP2019541300 A JP 2019541300A JP 2019541300 A JP2019541300 A JP 2019541300A JP 7071379 B2 JP7071379 B2 JP 7071379B2
Authority
JP
Japan
Prior art keywords
call
call request
computing system
proxy
client computing
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.)
Active
Application number
JP2019541300A
Other languages
English (en)
Other versions
JP2020506481A (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 JP2020506481A publication Critical patent/JP2020506481A/ja
Application granted granted Critical
Publication of JP7071379B2 publication Critical patent/JP7071379B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/546Message passing systems or structures, e.g. queues
    • 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]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/02Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
    • H04L67/025Protocols based on web technology, e.g. hypertext transfer protocol [HTTP] for remote control or remote monitoring of applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/561Adding application-functional data or data for application control, e.g. adding metadata
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Library & Information Science (AREA)
  • Computer And Data Communications (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Information Transfer Between Computers (AREA)
  • Multi Processors (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Storage Device Security (AREA)
  • Pharmaceuticals Containing Other Organic And Inorganic Compounds (AREA)
  • Pyrrole Compounds (AREA)

Description

[0001] クラウド・ベース・サービスは、ウェブ・ブラウザーを通じて実行されるアプリケーションによって提供される場合が多い。このようなアプリケーションを開発するためには、プログラマーは、ウェブ・ブラウザーのクライアントによって実行され、クラウド・データー・センターのサーバーのサービスにアクセスするアプリケーションを開発すればよい。アプリケーション(またはクライアント・コード)は、通例、ユーザー・インターフェースを提供し、このユーザー・インターフェースを通じて、ユーザーはアプリケーションの機能(feature)にアクセスすることができる。例えば、アプリケーションがワード・プロセッサーである場合、アプリケーションは、編集される文書の内容、ワード・プロセッサーの機能にアクセスするためのメニュー・バー(例えば、文書を開く、および脚注を挿入する)等を表示する。編集されている文書は、サーバー上に格納される。つまり、ユーザーが文書を開くことを要求すると、アプリケーションは、開く要求をサーバーに送り、文書の少なくとも一部のコピーを受け取る。アプリケーションは、この文書の内容を表示する。ユーザーがこの文書に変更を加えると、アプリケーションは、表示されている内容を更新し、メッセージをサーバーに送る。次いで、サーバーが文書を変更する。クライアントとサーバーとの間における通信は、通例、ハイパーテキスト・トランスポート・プロトコル(「HTTP」)要求メッセージ(例えば、GET方法)および応答メッセージというような、リプリゼンテーショナル・ステート・トランスファ(「REST」: Representational State Transfer)またはRESTfullモデルに基づく。
[0002] このようなアプリケーションは、殆どのブラウザーがJavaScript(登録商標)アプリケーションの実行をサポートするので、通例、JavaScriptで書かれている。対照的に、サーバー・コードは効率の理由のために、通例、C#またはC++のような、JavaScript以外のプログラミング言語で書かれている。何故なら、JavaScriptはインタプリタ型言語であり、C#およびC++は実行可能ファイルにコンパイルされるからである。JavaScriptならびにC#およびC++は、オブジェクト指向プログラミング言語である。オブジェクト指向プログラミング言語は、インスタンス化することができるオブジェクトの型を定めるクラスをプログラムが指定するプログラミング・モデルをサポートする。クラスは、データー・メンバーおよびメソッド(メンバー関数とも呼ぶ)を、そのクラスのオブジェクトに対して定める。各メソッドは、そのメソッドの名称を指定する署名、メソッドに渡される入力パラメーターの型、およびメソッドによって戻される出力パラメーターの型を有する。例えば、文書クラスは、文書を開き、文書を修正し、そして文書を保存するためのメソッドを含むように定められてもよい。アプリケーションの実行中、特定のクラスのオブジェクトがインスタンス化された後、アプリケーションは、オブジェクトに対する参照、呼び出すメソッドの指示、およびメソッドに渡される入力パラメーター(何らかの入力パラメーターがある場合)を指定することによって、オブジェクトのメソッドを呼び出すことができる。メソッドが完了したとき、このメソッドは出力パラメーターを戻す(なんらかの出力パラメーターがある場合)。
[0003] このようなアプリケーションは、従来から、ウェブ・サービス記述言語(「WSDL」:Web Service Description Language)によって定められるウェブ・サービス・インターフェースを使用して、または何らかの他の型のリモート・プロシージャ・コール(「RPC」:remote procedure call)メカニズムを使用して、サーバーのサービスにアクセスしている。生憎、このようなアプリケーションからサーバーへの、リモート・メソッド呼び出し(「RMI」:remote method invocations)とも呼ばれる、オブジェクト指向RPCに対するサポートは殆どない。その結果、このようなアプリケーションは、サーバーによってホストされたオブジェクトにアクセスするとき、オブジェクト指向手法を使用しないことが多い。
[0004] サーバーによってホストされたリモート・オブジェクト・クラスのリモート・オブジェクトのリモート・オブジェクト・メソッドを呼び出すためにクライアントによって実行されるアプリケーションのためのシステムを提供する。アプリケーションは、リモート・オブジェクト・メンバー関数と同じ署名を有するプロキシー・メンバー関数を含むプロキシー・クラスのプロキシーをインスタンス化する。アプリケーションは、オブジェクト識別子をプロキシーと関連付ける。アプリケーションは、プロキシーのプロキシー・メンバー関数を呼び出す。呼び出されたプロキシー・メンバー関数の制御の下で、アプリケーションは、サーバーに呼び出し要求メッセージを送る。呼び出し要求メッセージは、プロキシーと、リモート・オブジェクト・メンバー関数の識別子とに関連付けられたオブジェクト識別子を含む。アプリケーションは、ブラウザーによって提供される機能を当てにしており、アプリケーションを実行するときに、ブラウザーがアドオン機能にアクセスする必要はない。
[0005] クライアントのアプリケーションのプロキシーとサーバーの対応するリモート・オブジェクトとの間でプロパティ値を同期させるシステムを提供する。アプリケーションは、リモート・オブジェクト・クラスのリモート・オブジェクトに対応するプロキシー・クラスのプロキシーをインスタンス化し、プロキシー・クラスは、プロキシー・ゲッター(proxy getter)を有するプロパティを指定する。アプリケーションは、リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すために、呼び出し要求メッセージをサーバーに送り、呼び出し応答メッセージを受信する。呼び出し応答メッセージがプロパティ更新を含むとき、アプリケーションは、呼び出し応答メッセージから、プロパティ更新からのプロパティの値を抽出し、抽出した値をプロキシーに格納する。プロパティに対するプロキシー・ゲッターが呼び出されたとき、呼び出し要求メッセージをサーバーに送る必要なく、プロパティの値をプロキシーから引き出すことができる。
[0006] クライアントにおいて実行するアプリケーションが、サーバーのリモート・オブジェクトに呼び出し要求を送るためのシステムを提供する。各呼び出し要求は、アプリケーションが、リモート・オブジェクト・クラスのリモート・オブジェクトに対応するアプリケーションのプロキシー・クラスのプロキシーを呼び出すときに生成される。呼び出し要求毎に、呼び出し要求が延期可能であれば、システムはこの呼び出し要求を格納する。呼び出し要求が延期可能でないとき、システムはサーバーに呼び出し要求メッセージを送る。呼び出し要求メッセージは、以前に送られておらず格納されている各呼び出し要求と、現在の呼び出し要求とを含む。このシステムは、呼び出し応答メッセージをサーバーから受信する。受信した呼び出し応答メッセージの呼び出し応答毎に、システムは、呼び出し応答が受信されたという指示を、アプリケーションに与える。
[0007] この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
ある実施形態におけるアプリケーションおよびサーバー・コンポーネントのデーター構造を示すブロック図である。 ある実施形態において、同期して呼び出されたプロキシーのメソッドの処理を示す流れ図である。 ある実施形態において、サーバー・コンポーネントの要求受信コンポーネントの処理を示す流れ図である。 ある実施形態において、クライアント・コンポーネントの応答オブジェクトのための応答オブジェクト・クラスのパラメーター抽出メソッドの処理を示す流れ図である。 ある実施形態において、サーバー・コンポーネントの応答オブジェクトに対する応答オブジェクト・クラスのパラメーター格納メソッドの処理を示す流れ図である。 ある実施形態において、IDテーブル・オブジェクト・クラスのID引き出しメソッドの処理を示す流れ図である。 ある実施形態において、IDテーブル・オブジェクトの基準引き出しメソッドの処理を示す流れ図である。 ある実施形態において、参照が渡されるIDテーブル・オブジェクトのエントリー追加メソッドの処理を示す流れ図である。 ある実施形態において、エントリーが渡されるIDテーブル・オブジェクトのエントリー追加メソッドの処理を示す流れ図である。 ある実施形態において、リモート・オブジェクトのピア・ホスティングをサポートするOORPCシステムの実施態様を示すブロック図である。 ある実施形態において、OORPCシステムによるプロパティの値の同期をサポートするデーター構造を示すブロック図である。 ある実施形態において、サーバー・コンポーネントのプロパティ値取得コンポーネントの処理を示す流れ図である。 ある実施形態において、クライアント・コンポーネントのプロパティ値格納コンポーネントの処理を示す流れ図である。 ある実施形態において、プロキシー・クラスに対してコードを自動的に生成するためのOORPCシステムのコード生成器を示す流れ図である。 ある実施形態において、コード生成器のプロキシー・プロパティ処理コンポーネントの処理を示す流れ図である。 ある実施形態において、クライアント・コンポーネントの要求送出コンポーネントの処理を示す流れ図である。 ある実施形態において、サーバー・コンポーネントの要求受信コンポーネントの処理を示す流れ図である。
[0025] サーバーまたは他のリモート・デバイスによってリモートにホストされたオブジェクトにアクセスするために、オブジェクト指向の仕方で、クライアントによって実行されるアプリケーションに対してコードを自動的に生成するための方法およびシステムを提供する。「クライアント」という用語は、コンピューティング・デバイスを指し、「サーバー」という用語はコンピューティング・デバイスを指す。ある実施形態では、オブジェクト指向型リモート・プロシージャ・コール(「OORPC」)システムが、サーバーによってリモートにホストされたオブジェクト(「リモート・オブジェクト」)に対するリモート・オブジェクト・クラスに対して、インターフェースの定義を入力する。リモート・オブジェクト・クラス毎に、OORPCシステムは、リモート・オブジェクト・クラスのためにプロキシーとして役割を果たすプロキシー・クラスを自動的に生成する。「プロキシー」とは、オブジェクトであり、そのメソッドは主に呼び出し要求メッセージを、対応するリモート・オブジェクトをホストするサーバーに送る。通例、プロキシーとリモート・オブジェクトとの間には、1対1の対応がある。プロキシー・クラスは、対応するリモート・オブジェクト・クラスと同じインターフェース(例えば、同じメソッドおよびメソッド署名)を有するが、コードは、リモート・オブジェクト・クラスのコードとは異なる。プロキシー・クラスのメソッド毎に、OORPCシステムは、そのメソッドに対してコードを生成する。このコードが呼び出されると、呼び出し要求メッセージを、プロキシー・クラスのプロキシーに対応するリモート・オブジェクトをホストするサーバーに送る。呼び出し要求メッセージは、リモート・オブジェクト、メソッド、およびメソッドに渡されるあらゆる入力パラメーターを識別する。また、OORPCシステムは、メソッドに対してコードを生成する。このコードは、呼び出し応答メッセージがリモート・デバイスから受信された後、メソッドの呼び出しから、呼び出し応答メッセージにおいて識別されたあらゆる出力パラメーターを戻す。あるいは、メソッドの呼び出しが非同期の呼び出しである場合、OORPCシステムは、呼び出し応答メッセージを処理するクライアント・コンポーネントを含み、呼び出し応答メッセージは、メソッドの一部ではなく、むしろコールバック・メソッドの一部であってもよく、コールバック・メソッドは、そのメソッドの実行が完了したことをアプリケーションに通知するために呼び出される。
[0026] ある実施形態では、OORPCシステムは、各プロキシーをその対応するリモート・オブジェクトにマッピングするクライアント・コンポーネントを、アプリケーションのために提供する。アプリケーションは、リモート・オブジェクトをインスタンス化するために使用される、作成リモート・オブジェクト(create remote object)に対応する作成プロキシーを有することができる。作成プロキシーの各メソッドを呼び出し、特定のリモート・オブジェクト・クラスのリモート・オブジェクトをインスタンス化することができる。各メソッドは、作成リモート・オブジェクト上に対応するメソッドを呼び出し、リモート・オブジェクト・クラスのリモート・オブジェクトをインスタンス化するために、「スタブ」(stub)と呼ばれる、呼び出し要求メッセージをサーバー・コンポーネントに送る。また、各メソッドは、リモート・オブジェクトのプロキシーをインスタンス化し、参照をこのプロキシーに戻す。例えば、作成プロキシーは、文書作成メソッドを有することができる。文書作成メソッドは、呼び出し要求メッセージを、作成リモート・オブジェクトの文書作成メソッドの呼び出しを要求したサーバー・コンポーネントに送り、文書リモート・オブジェクトをインスタンス化する。インスタンス化された文書リモート・オブジェクトには、オブジェクト識別子を割り当てることができる(アプリケーションまたはサーバー・コードのいずれかによって)。また、作成プロキシーの文書作成メソッドは、文書リモート・オブジェクトに対応する文書プロキシーもインスタンス化し、文書プロキシーに対する参照(例えば、文書プロキシーのアドレス)をオブジェクト識別子にマッピングする。次いで、作成プロキシーの文書作成メソッドは、文書プロキシーに対する参照を戻す。その後、アプリケーションが、参照によって示されるように、文書プロキシーのメソッドを呼び出すとき、このメソッドは、文書リモート・オブジェクトのオブジェクト識別子を引き出すために、その参照を使用する。次いで、この方法は、サーバー・コンポーネントに、前述のような呼び出し要求メッセージを送る。呼び出し要求メッセージは、文書リモート・オブジェクトをサーバー・コンポーネントに識別するオブジェクト識別子を含む。
[0027] サーバー・コンポーネントが呼び出し要求メッセージを受信すると、サーバー・コンポーネントは、呼び出し要求メッセージから、オブジェクト識別子、メソッド識別子、およびあらゆる入力パラメーターを抽出する。サーバー・コンポーネントは、オブジェクト識別子によって識別されるリモート・オブジェクトに対する参照を引き出し、識別したメソッドを呼び出して、入力パラメーターを渡す。メソッドが戻るとき、サーバー・コンポーネントは呼び出し応答メッセージをクライアントに送る。呼び出し応答メッセージは、オブジェクト識別子、メソッド識別子、およびあらゆる出力パラメーターを含む。
[0028] ある実施形態では、作成プロキシーおよび作成リモート・オブジェクトは、それぞれ、互いに独立して、アプリケーションおよびサーバー・コンポーネントの初期化中にインスタンス化される。即ち、アプリケーションは、サーバー・コンポーネントと通信することなく、作成プロキシーをインスタンス化し、サーバー・コンポーネントは、アプリケーションと通信することなく、作成リモート・オブジェクトをインスタンス化する。アプリケーションおよびサーバー・コンポーネントは双方共、作成プロキシーおよび作成リモート・オブジェクトを識別するために同じオブジェクト識別子(例えば、既定の)を割り当てるので、アプリケーションが作成プロキシーのメソッドを呼び出すとき、サーバーに送られる呼び出し要求メッセージは、作成リモート・オブジェクトのオブジェクト識別子を含む。サーバー・コンポーネントが作成リモート・オブジェクトのメソッドを呼び出した後、サーバー・コンポーネントには、新たに作成されたリモート・オブジェクトに対する参照が戻される。次いで、サーバー・コンポーネントは、新たに作成されたリモート・オブジェクトに対してオブジェクト識別子を生成し、このオブジェクト識別子を参照にマッピングし、オブジェクト識別子と呼び出されたメソッドのメソッド識別子とを含む呼び出し応答メッセージを送る。アプリケーションが呼び出し応答メッセージを受信すると、アプリケーションはオブジェクト識別子を、対応するプロキシーの参照にマッピングする。このため、対応するプロキシーのメソッドが後に呼び出されるときに、このメソッドは呼び出し要求メッセージにおけるリモート・オブジェクトのオブジェクト識別子を含むことができる。
[0029] ある実施形態では、OORPCシステムは、呼び出し要求メッセージ送出判断基準が満たされるまで、呼び出し要求を送らないのでもよい。呼び出し要求メッセージ送出判断基準が満たされたときに、OORPCシステムは、未だ送られていない各呼び出し要求を含む呼び出し要求メッセージを送る。例えば、プロキシー・クラスのメソッドは、延期可能または延期不可能に指定することができる(例えば、リモート・オブジェクト・クラスのインターフェースと関連付けられたメタデーターを通じて)。アプリケーションが延期可能であるメソッドを呼び出すとき、OORPCシステムは、オブジェクト識別子、メソッド識別子、およびあらゆる入力パラメーターを含む呼び出し要求を生成し、この呼び出し要求を待ち行列に入れる。アプリケーションが、延期不可能であるメソッドを呼び出すとき、OORPCシステムは、待ち行列に入れられた呼び出し要求と、現在の呼び出しに対する呼び出し要求とを含む呼び出し要求メッセージを送る。呼び出し要求メッセージ送出判断基準を満たすことができるのは、延期不可能なメソッドが呼び出されるときである。同様に、呼び出し要求送出メッセージを満たすことができるのは、呼び出し要求が一定期間待ち行列に入れられたとき、一定数の呼び出し要求が待ち行列に入れられたとき、アプリケーションが呼び出し要求メッセージを送るように指令したとき等である。
[0030] サーバー・コンポーネントが、複数の呼び出し要求を有する呼び出し要求メッセージを受信したとき、サーバー・コンポーネントは、呼び出し要求を、これらが待ち行列に入れられた順序で処理する。呼び出し要求の完了後に、サーバー・コンポーネントは、呼び出し要求メッセージの呼び出し要求毎の呼び出し応答を含む、呼び出し応答メッセージを送る。アプリケーションが呼び出し応答メッセージを受信すると、呼び出し応答を、それらの対応する呼び出し要求の順に処理する。
[0031] ある実施形態では、OORPCシステムは、リモート・オブジェクトのプロパティの値をローカルにクライアントに格納するためのサポートに対応する(provide)。OORPCシステムがリモート・オブジェクト・クラスに対してプロキシー・クラスを生成するとき、OORPCシステムは、プロパティに対するゲッター・メソッド(「ゲッター」)を、他のメソッドとは異なる方法で(differently)生成する。OORPCシステムは、プロパティの値を引き出すためにサーバーに呼び出し要求メッセージを送るのではなく、ゲッター・メソッドを生成し、ローカルに格納されているプロパティの値を引き出し、その値を戻す。プロキシーのプロパティについてローカルに格納されている値が、対応するリモート・オブジェクトによって格納された値と同期されていることを確保するために、サーバー・コンポーネントは、最後の呼び出し応答メッセージが送られて以来値が変化したリモート・オブジェクトのプロパティ毎に、各呼び出し応答メッセージにプロパティ更新を添付する。サーバー・コンポーネントは、プロパティ毎に最後に送られた値のリストを維持することができ、呼び出し応答メッセージを送るときに、各リモート・オブジェクトのプロパティ毎にゲッター・メソッドを呼び出して、変化した値を識別することができる。
[0032] アプリケーションが、プロパティ更新を有する呼び出し応答メッセージを受信すると、アプリケーションは、プロパティ更新の新たな値を対応するプロキシーに格納する。OORPCシステムがリモート・オブジェクト・クラスのインターフェースからプロキシー・クラスを生成するとき、OORPCシステムはプロキシー・クラス毎に格納クラスを生成することができる。格納クラスは、各プロパティの識別子(例えば、プロパティ名のハッシュ)をプロパティの型(例えば、整数)、およびそのプロパティの値を格納するための格納クラスのメソッドにマッピングするテーブルを含むことができる。OORPCシステムは、プロキシー・クラスに、スタティック・データー・メンバーを追加することができる。スタティック・データー・メンバーは、そのプロキシー・クラスに対するインスタンス・格納クラスである格納オブジェクトに対する参照である。OORPCシステムがプロパティに対して新たな値を受信すると、呼び出し応答メッセージ内のプロパティ更新から、リモート・オブジェクトのオブジェクト識別子、プロパティの識別子、およびプロパティの値を引き出す。OORPCシステムは、オブジェクト識別子を使用して、対応するプロキシーに対する参照を引き出し、更にこのプロキシーから、格納オブジェクトに対する参照を引き出す。次いで、OORPCは、プロパティに対応する格納オブジェクトの格納メソッドを呼び出して、プロキシーに対する参照および値を渡す。格納メソッドはその値をプロキシーに格納する。
[0033] 図1は、ある実施形態において、アプリケーションのデーター構造およびサーバー・コンポーネントを示すブロック図である。クライアント110は、アプリケーション111を実行し、サーバー120はサーバー・コンポーネント121を実行する。アプリケーションおよびサーバー・コンポーネントは、擬似コードとして表されている。初期化の間、クライアントにおいて実行するOORPCシステムのクライアント・コンポーネント119は、IDテーブル・オブジェクト113を初期化することができ、OORPCシステムのコンポーネントであるサーバー・コンポーネントはIDテーブル・オブジェクト123をインスタンス化することができる。IDテーブル・オブジェクトは、プロキシーおよびリモート・オブジェクトのオブジェクト識別子と、それらの対応する参照との間のマッピングを、IDテーブル・オブジェクトのIDテーブルに格納するおよび引き出すためのメソッドを提供する。アプリケーションは、作成プロキシー112をインスタンス化し、サーバー・コンポーネントは対応する作成リモート・オブジェクト122をインスタンス化する。クライアント・コンポーネントは、IDテーブル・オブジェクト113に、作成プロキシーに対するオブジェクト識別子(例えば、1)と作成プロキシー(「S」)に対する参照(例えば、そのアドレス)との間のマッピングを追加し、サーバー・コンポーネントは、IDテーブル・オブジェクト123に、作成リモート・オブジェクトに対するオブジェクト識別子と、作成リモート・オブジェクトに対する参照との間のマッピングを追加する。次いで、サーバー・コンポーネントは、クライアントから呼び出し要求を受けるのを待つ。クライアントのプロキシーに対するオブジェクト識別子、およびサーバーの対応するリモート・オブジェクトに対するオブジェクト識別子は、同じ値を有する。
[0034] リモート・オブジェクト・クラスのリモート・オブジェクトを作成するために、アプリケーションは、リモート・オブジェクト・クラスのリモート・オブジェクトを作成するための作成プロキシーのメソッドを呼び出す。例えば、リモート・オブジェクト・クラスが「X」と命名された場合、アプリケーションは、作成プロキシーのcreateXメソッドを呼び出して、リモート・オブジェクト・クラスXのリモート・オブジェクトを作成することができる。作成プロキシーのcreateXメソッドは、サーバーに、呼び出し要求メッセージ(「req」)を送る。呼び出し要求メッセージは、作成リモート・オブジェクトのオブジェクト識別子(「req.ID」)、createXメソッドのメソッド識別子(「req.method」)、およびあらゆる入力パラメーター(「req.inparam」)を含む。クライアント・コンポーネントは、要求オブジェクト117をインスタンス化し、送られる呼び出し要求メッセージのデーター、および受信された呼び出し応答メッセージのデーターを格納する応答オブジェクト118を格納することができる。同様に、サーバー・コンポーネントは、受信した呼び出し要求メッセージのデーターを格納するために要求オブジェクト127をインスタンス化し、更に送ろうとする呼び出し応答メッセージのデーターを格納するために応答オブジェクト128をインスタンス化することができる。
[0035] 呼び出し要求メッセージを受信すると、サーバー・コンポーネントはオブジェクト識別子を呼び出し要求メッセージから抽出し、作成リモート・オブジェクトに対する参照を引き出すために、そのIDテーブル・オブジェクトの参照引き出しメソッド(「retrieveref)を呼び出し、オブジェクト識別子を渡す。次いで、サーバー・コンポーネントは、あらゆる入力パラメーター(「inparam」)を抽出するために、要求オブジェクトの抽出メソッド(「extract」)を呼び出す。次いで、サーバー・コンポーネントは、要求オブジェクトから、createXメソッドのメソッド識別子を抽出する。次いで、サーバー・コンポーネントは、作成リモート・オブジェクトに対する参照、およびcreateXメソッドの識別子を使用して、作成リモート・オブジェクトのcreateXメソッドを呼び出し、入力パラメーターを渡す。createXメソッドは、クラスXのリモート・オブジェクト124(「X2オブジェクト」)をインスタンス化し、リモート・オブジェクト124に対する参照である出力パラメーターを戻す。擬似コードによって示されていないが、サーバー・コンポーネントは、IDテーブル・オブジェクト123のエントリー追加メソッドも呼び出して、そのIDテーブルに、リモート・オブジェクト124に対するオブジェクト識別子(「2」)をリモート・オブジェクト124(「X2」)に対する参照にマッピングするエントリーを追加し、更に、応答オブジェクト(「res」)に、オブジェクト識別子(「res.ID」)およびcreateXメソッドの識別子(「res.method」)を追加する。次いで、サーバー・コンポーネントは、応答オブジェクトの格納メソッド(「store」)を呼び出し、あらゆる出力パラメーターを格納する。次いで、サーバー・コンポーネントは、応答オブジェクトに基づいて、クライアントに呼び出し応答メッセージを送る。
[0036] 呼び出し応答メッセージを受信すると、クライアント・コンポーネントは、呼び出し応答メッセージに基づいて、応答オブジェクトをインスタンス化する。次いで、クライアント・コンポーネントは、プロキシー114(「X2プロキシー」)をインスタンス化し、IDテーブル・オブジェクト113のエントリー追加メソッドを呼び出し、そのIDテーブルに、プロキシー114に対するオブジェクト識別子(「2」)とプロキシー114に対する参照(「X2」)との間のマッピングを追加する。createXメソッドの呼び出しが同期している場合、createXメソッドは、プロキシー114に対する参照を戻す(return with)。
[0037] リモート・オブジェクト124およびその対応するプロキシー114がインスタンス化された後、アプリケーションは、次いで、プロキシー114のメソッドを呼び出し、入力パラメーター(「in」)の指示を渡す。呼び出されたメソッドは、クライアント・コンポーネントを呼び出し、プロキシー114のオブジェクト識別子(「2」)、メソッド識別子、および入力パラメーターを含む要求オブジェクトを生成し、要求オブジェクトに基づいて、呼び出し要求メッセージをサーバーに送る。呼び出し応答メッセージを受信すると、サーバー・コンポーネントは、リモート・オブジェクト124に対する参照をIDテーブル・オブジェクトから引き出し、リモート・オブジェクト124の識別されたメソッドを呼び出して、入力パラメーターを渡す。このメソッドが戻るとき、サーバー・コンポーネントは応答オブジェクトを生成する。この応答オブジェクトは、リモート・オブジェクト124のオブジェクト識別子(「2」)、メソッド識別子、およびあらゆる出力パラメーターを含む。次いで、サーバー・コンポーネントは、応答オブジェクトに基づいて、呼び出し応答メッセージをクライアントに送る。呼び出し応答メッセージを受信すると、クライアント・コンポーネントは、出力パラメーターを抽出し、同期および非同期呼び出し処理に作用するメソッドが戻ったことを知らせる。
[0038] 次いで、アプリケーションは、サーバーにおけるリモート・オブジェクト125(「X3オブジェクト」)およびリモート・オブジェクト126(「Y4オブジェクト」)、ならびにクライアントにおける対応するプロキシー115(「X3プロキシー」)および対応するプロキシー116(「Y4プロキシー」)の作成を実行するために、作成プロキシーのcreateXメソッドおよびcreateYメソッドを呼び出す。次いで、アプリケーションは、プロキシー115およびプロキシー116の対応するメソッドを呼び出すことによって、リモート・オブジェクト125およびリモート・オブジェクト126のメソッドを呼び出すことができる。
[0039] OORPCシステムを実装することができるコンピューティング・システム(例えば、クライアント、サーバー、クライアント・デバイス、サーバー・デバイス)は、中央処理ユニット、入力デバイス、出力デバイス(例えば、ディスプレイ・デバイスおよびスピーカー)、記憶デバイス(例えば、メモリーおよびディスク・ドライブ)、ネットワーク・インターフェース、グラフィクス処理ユニット、加速センサー(accelerometer)、セルラー無線リンク・インターフェース、全地球測位システム・デバイス等を含むことができる。コンピューティング・システムは、データー・センターのサーバー、大規模(massively)並列システム等を含んでもよい。コンピューティング・システムは、コンピューター読み取り可能記憶媒体およびデーター送信媒体を含むコンピューター読み取り可能媒体にアクセスすることができる。コンピューター読み取り可能記憶媒体は、一時的な伝搬信号を含まない、有形記憶手段である。コンピューター読み取り可能記憶媒体の例には、主メモリー、キャッシュ・メモリー、および副メモリー(例えば、DVD)というようなメモリー、ならびに他のストレージが含まれる。コンピューター読み取り可能記憶媒体は、その上に、OORPCシステムを実装するコンピューター実行可能命令またはロジックを記録することができ、またはコンピューター実行可能命令をエンコードすることができる。データー送信媒体は、一時的、伝搬信号または搬送波(例えば、電磁気)によって有線またはワイヤレス接続を介してデーターを送信するために使用される。
[0040] OORPCシステムは、1つ以上のコンピューター、プロセッサー、またはその他のデバイスによって実行されるプログラム・モジュールおよびコンポーネントというような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールまたはコンポーネントは、ルーチン、プログラム、オブジェクト、データー構造等を含み、特定のタスクを実行するか、または特定のデーター型を実装する。通例、プログラム・モジュールの機能は、種々の実施形態において、所望に応じて組み合わせることまたは分散することができる。OORPCシステムの態様は、例えば、特定用途集積回路(ASIC)を使用して、ハードウェアで実装することができる。
[0041] 図2は、ある実施形態において、同期して呼び出されたプロキシーのメソッドの処理を示す流れ図である。方法200は、OORPCシステムのコード生成器によって自動的に生成され、1つ以上の入力パラメーターが渡され、1つ以上の出力パラメーターを戻す。この方法は、サーバーに呼び出し要求メッセージを送り、呼び出し応答メッセージを受信する。ブロック202において、この方法は、プロキシーのオブジェクト識別子を引き出すために、IDテーブル・オブジェクトの識別子引き出しメソッドを呼び出し、プロキシーに対する参照(「this」)を渡す。このメソッドは、プロキシーのオブジェクト識別子を要求オブジェクトに格納する。ブロック204において、このメソッドは、メソッド識別子を要求オブジェクトに追加する。ブロック206において、このメソッドは、入力パラメーターを格納するために、要求オブジェクトのパラメーター格納メソッドを呼び出す。ブロック208において、このメソッドは、サーバーに、要求オブジェクトに基づく呼び出し要求メッセージを送る。ブロック210において、このメソッドは、サーバーから呼び出し応答メッセージを受信し、応答オブジェクトを生成する。ブロック212において、このメソッドは、出力パラメーターを抽出するために、応答オブジェクトのパラメーター抽出メソッドを呼び出す。次いで、このメソッドは完了する。ある実施形態では、このメソッドは、ブロック202~212の処理を実行するために、クライアント・コンポーネントを呼び出すこともできる。
[0042] 図3は、ある実施形態において、サーバー・コンポーネントの要求受信コンポーネントの処理を示す流れ図である。要求受信コンポーネント300が呼び出されるのは、呼び出し要求メッセージがクライアントから受信され、呼び出し要求メッセージに基づく要求オブジェクトが渡されるときである。このコンポーネントは、リモート・オブジェクトのメソッドを呼び出し、クライアントに呼び出し応答メッセージを送る。ブロック302において、このコンポーネントは、リモート・オブジェクトのオブジェクト識別子を要求オブジェクトから抽出し、IDテーブル・オブジェクトの参照引き出しメソッドを呼び出して、オブジェクト識別子を渡し、そしてリモート・オブジェクトに対する参照を受信する。ブロック304において、このコンポーネントは要求オブジェクトからメソッド識別子を抽出する。ブロック306において、このコンポーネントは、入力パラメーターを抽出するために、要求オブジェクトのパラメーター抽出メソッドを呼び出す。ブロック308において、このコンポーネントは、リモート・オブジェクトの識別子メソッドを呼び出し、入力パラメーターを渡し、戻り時にあらゆる出力パラメーターを受信する。ブロック310において、このコンポーネントは、オブジェクト識別子、メソッド識別子、および出力パラメーターを含む応答オブジェクトを生成する。ブロック312において、このコンポーネントは、クライアントに、応答オブジェクトに基づく呼び出し応答メッセージを送り、次いで完了する。
[0043] 図4は、ある実施形態において、クライアント・コンポーネントの応答オブジェクトに対する応答オブジェクト・クラスのパラメーター抽出メソッドの処理を示す流れ図である。パラメーター抽出メソッド400は、呼び出されたメソッドによって戻された出力パラメーターを抽出するために、クライアント・コンポーネントによって呼び出される。ブロック402において、このメソッドは、最初のものから始めて、次の出力パラメーターを選択する。判断ブロック404において、全ての出力パラメーターが既に選択されている場合、このメソッドは完了し、そうでなければ、このメソッドはブロック406に進む。判断ブロック406において、選択した出力パラメーターがリモート・オブジェクトの識別子である場合、このメソッドはブロック410に進み、そうでなければ、このメソッドはブロック408に進む。ブロック408において、コンポーネントは、選択した出力パラメーターを出力パラメーターとして格納し、次いでブロック402に戻り、次の出力パラメーターを選択する。ブロック410において、このメソッドは、IDテーブル・オブジェクトの参照引き出しメソッドを呼び出して、応答オブジェクト内で識別されているリモート・オブジェクトに対する参照を引き出す。判断ブロック412において、参照がヌルである場合、このリモート・オブジェクトに対するプロキシーは未だインスタンス化されておらず、このメソッドはブロック414に進む。そうでなければ、このメソッドはブロック422に進む。ブロック414において、このメソッドは、リモート・オブジェクトのクラスに対してプロキシーをインスタンス化する。OORPCシステムのコード生成器は、リモート・オブジェクトのクラス、更に一般的には、任意のパラメーターの型を、呼び出されたメソッドの署名から識別することができる。ブロック416および418において、このメソッドはIDテーブルに対してエントリーを作成する。ブロック420において、このメソッドは、IDテーブル・オブジェクトのエントリー追加メソッドを呼び出してエントリーを格納し、次いでブロック422に進む。ブロック422において、コンポーネントは、戻される参照に対して出力パラメーターをセットし、次いでブロック402に戻り、応答オブジェクトの次の出力パラメーターを選択する。
[0044] 図5は、ある実施形態において、サーバー・コンポーネントの応答オブジェクトに対する応答オブジェクト・クラスのパラメーター格納メソッドの処理を示す流れ図である。パラメーター格納メソッド500には、応答オブジェクトに格納される、出力パラメーターが渡される。ブロック502において、このメソッドは次の出力パラメーターを選択する。判断ブロック504において、全ての出力パラメーターが既に選択されている場合、このメソッドは完了し、そうでなければ、このメソッドはブロック506に進む。判断ブロック506において、出力パラメーターがオブジェクトに対する参照である場合、コンポーネントはブロック508に進み、そうでなければ、コンポーネントはブロック510に進む。ブロック508において、コンポーネントはIDテーブル・オブジェクトのID引き出しメソッドを呼び出し、参照に対応するオブジェクト識別子を引き出し、出力パラメーターを参照にセットする。ブロック510において、コンポーネントは出力パラメーターを応答オブジェクトに格納し、次いでブロック502に戻り、次の出力パラメーターを選択する。図示しないが、要求オブジェクトは、パラメーター抽出メソッドおよびパラメーター格納メソッドも有し、これらのメソッドは、応答オブジェクトのそれらと同様に機能する。
[0045] 図6~図9は、ある実施形態において、IDテーブル・オブジェクト・クラスのメソッドを示す流れ図である。図6は、ある実施形態において、IDテーブル・オブジェクト・クラスのID引き出しメソッドの処理を示す流れ図である。ID引き出しメソッド600は、オブジェクトに対する参照が渡され、この参照に対応するオブジェクト識別子を戻す。ブロック602において、このメソッドはIDテーブルの次のエントリーを選択する。判断ブロック604において、全てのエントリーが既に選択されている場合、このメソッドは、この参照のエントリーがIDテーブルにないことを示すために、ヌル値を戻し、そうでない場合、このメソッドはブロック606に進む。判断ブロック606において、選択したエントリー内にある参照が、渡された参照と一致する場合、このメソッドは、このエントリーのオブジェクト識別子の指示を戻し、そうでない場合、このメソッドはブロック602にループし(loop)、IDテーブルの次のエントリーを選択する。
[0046] 図7は、ある実施形態において、IDテーブル・オブジェクトの参照引き出しメソッドの処理を示す流れ図である。参照引き出しメソッド700は、オブジェクト識別子が渡され、このオブジェクト識別子に対応する参照を戻す。ブロック702において、このメソッドはIDテーブルの次のエントリーを引き出す。判断ブロック704において、全てのエントリーが既に選択されている場合、このメソッドは、このオブジェクト識別子のエントリーがIDテーブルにはないことを示すために、ヌル値を戻し、そうでない場合、このメソッドはブロック706に進む。判断ブロック706において、選択したエントリーのオブジェクト識別子が、渡されたオブジェクト識別子と一致する場合、このメソッドは、選択したエントリーの参照を戻し、そうでない場合、このメソッドはブロック702にループし、IDテーブルの次のエントリーを選択する。
[0047] 図8は、ある実施形態において、参照を渡されたIDテーブル・オブジェクトのエントリー追加メソッドの処理を示す流れ図である。エントリー追加メソッド800は、オブジェクト(即ち、プロキシーまたはリモート・オブジェクト)に対する参照が渡され、IDテーブルがこの参照のエントリーを未だ収容していない場合、その参照のためにエントリーをIDテーブルに追加する。ブロック802において、このメソッドは、IDテーブルが参照に対応するエントリーを収容している場合、オブジェクト識別子を引き出すために、IDテーブル・オブジェクトのID引き出しメソッドを呼び出し、この参照を渡す。判断ブロック804において、戻されたオブジェクト識別子がヌルである場合、IDテーブルは対応するエントリーを収容していないことになり、このメソッドはブロック806に進む。そうでない場合、このメソッドはオブジェクト識別子を戻す。ブロック806において、このメソッドは、オブジェクト識別子をIDテーブル・オブジェクトの次のオブジェクト識別子フィールドにセットし、次のオブジェクト識別子フィールドをインクリメント(increment)する。ブロック808~810において、このメソッドは参照のエントリーを初期化する。ブロック812において、このメソッドはこのエントリーをIDテーブルに添付し、次いでオブジェクト識別子の指示を戻す。
[0048] 図9は、ある実施形態において、エントリーが渡されたIDテーブル・オブジェクトのエントリー追加メソッドの処理を示す流れ図である。エントリー追加メソッド900は、IDテーブル内に未だエントリーがない場合、IDテーブルに追加されるべきエントリーを渡される。ブロック902において、このメソッドはこのIDテーブル・オブジェクトのID引き出しメソッドを呼び出し、エントリーの参照を渡す。判断ブロック904において、エントリーがヌルである場合、IDテーブルはそのエントリーを収容しておらず、このメソッドはブロック906に進む。そうでない場合、このメソッドは戻る。ブロック906において、このメソッドはエントリーをIDテーブルに追加し、次いで戻る。
[0049] ある実施形態では、OORPCシステムは、クライアントおよびサーバーの双方が、他方によってリモートにアクセスされるリモート・オブジェクトをホストすることを許容する。つまり、クライアントおよびサーバーは、双方共リモート・オブジェクトをホストするという意味で、ピアであると見なされてもよい。例えば、複数のクライアントによって協調環境において文書が処理されている場合、各クライアントは、この文書に対する変更のイベント通知を受けるために、オブジェクトをサーバーに登録することができる。このような場合、クライアントは、文書プロキシーの登録メソッドを呼び出して、クライアントによってインスタンス化されたイベント待ち受けオブジェクトを渡す。クライアントは、オブジェクト識別子を、サーバーによってリモートにホストされたオブジェクトのプロキシーに対する参照にマッピングするためのプロキシーIDテーブルと、オブジェクト識別子を、クライアントによってローカルにホストされたオブジェクトに対する参照にマッピングするためのオブジェクトIDテーブルとを維持することができる。同様に、サーバーは、オブジェクト識別子を、クライアントによってリモートにホストされたオブジェクトのプロキシーに対する参照にマッピングするためのプロキシーIDテーブルと、オブジェクト識別子を、サーバーによってローカルにホストされたオブジェクトに対する参照にマッピングするためのオブジェクトIDテーブルとを維持することができる。文書プロキシーの登録メソッドは、イベント待ち受けオブジェクトのエントリーをオブジェクトIDテーブルに追加し、エントリーのオブジェクト識別子を入力パラメーターとして、登録メソッドに対する呼び出し要求メッセージ内に含ませる。サーバーが呼び出し要求メッセージを受信すると、サーバー・コンポーネントはオブジェクトIDテーブルおよびプロキシーIDテーブルの双方を検索し、一致するオブジェクト識別子を有するエントリーを求めることができる。このようなエントリーが発見された場合、サーバー・コンポーネントは、オブジェクト識別子を、登録メソッドへの入力パラメーターとして、エントリーの参照と置き換える。このようなエントリーが発見されない場合、サーバー・コンポーネントは、イベント待ち受けオブジェクトに対してイベント待ち受けプロキシーをインスタンス化し、エントリーをプロキシーIDテーブルに追加する。プロキシーIDテーブルは、オブジェクト識別子を、イベント待ち受けオブジェクト・プロキシーに対する参照にマッピングする。次いで、サーバー・コンポーネントは、文書リモート・オブジェクトの登録メソッドを呼び出し、待ち受けプロキシーに対する参照を渡す。サーバー・コンポーネントがイベントをアプリケーションに送ると、サーバー・コードは待ち受けプロキシーのイベント・メソッドを呼び出し、クライアントに呼び出し要求メッセージを送る。クライアントが呼び出し要求メッセージを受信すると、クライアント・コンポーネントは、サーバーのサーバー・コンポーネントが呼び出し要求メッセージを扱うのと全く同様に、呼び出し要求メッセージを処理する。このように、クライアントおよびサーバーの双方が、他方によってリモートにホストされたリモート・オブジェクトのメソッドを呼び出すことができる。
[0050] ある実施形態では、リモート・オブジェクトのオブジェクト・メソッドが、値渡しされる(passed by value)入力パラメーターおよび/または出力パラメーターを有することができる。入力パラメーターを値渡しするために、リモート・オブジェクトに対応するプロキシーのプロキシー・メソッドは、入力パラメーターの値を引き出し、この引き出した値を呼び出し要求メッセージに追加する。入力パラメーター自体がサーバーによってホストされたリモート・オブジェクトである場合、プロキシー・メソッドは、その値を引き出すために、呼び出し要求メッセージをサーバーに送ることができる。同様に、出力パラメーターを値渡しによって戻すとき、オブジェクト・メソッドは出力パラメーターの値を引き出し、この引き出した値を呼び出し応答メッセージに追加する。ある実施形態では、入力パラメーターまたは出力パラメーターが、複数のオブジェクトを収容するデーター構造であってもよい。このようなデーター構造である入力パラメーターを渡すために、プロキシー・メソッドは、このデーター構造における各オブジェクトのオブジェクト識別子を引き出し、各オブジェクト識別子を呼び出し要求メソッドに追加する。例えば、データー構造がアレイである場合、このアレイのエレメント毎のプロキシー・メソッドはそのエレメントを選択し、選択したエレメントのオブジェクト識別子を引き出し、引き出したオブジェクト識別子を呼び出し要求メソッドに追加する。アレイである出力パラメーターを渡すためには、オブジェクト・メソッドは、アレイのエレメントを同様に処理する。入力パラメーターまたは出力パラメーターのデーター構造は、サーバー上にホストされたオブジェクト、およびクライアント上にホストされたオブジェクトを収容することができる。このような入力パラメーターを処理するとき、プロキシー・メソッドは各オブジェクトのオブジェクト識別子を呼び出し、要求メソッドに追加する。呼び出し要求メソッドを受け取ると、サーバー・コンポーネントは、オブジェクト識別子テーブルまたはプロキシー識別子テーブルのいずれかから、オブジェクトに対する参照を引き出し、オブジェクト・メソッドを呼び出して、引き出した参照を渡す。サーバー・コンポーネントは、対応するオブジェクトまたはプロキシーを、未だインスタンス化されてなければ、インスタンス化することができる。
[0051] 図10は、ある実施形態において、リモート・オブジェクトのピア・ホスティングをサポートするOORPCシステムの実施態様を示すブロック図である。クライアント1010は、プロキシーIDテーブル・オブジェクト1011と、オブジェクトIDテーブル・オブジェクト1015とを含む。プロキシーIDテーブル・オブジェクト1011は、プロキシー1012のエントリーを収容するIDテーブルを含み、オブジェクトIDテーブル・オブジェクト1015は、リモート・オブジェクト1016のエントリーを収容するIDテーブルを含む。サーバー1020は、オブジェクトIDテーブル・オブジェクト1021と、プロキシーIDテーブル・オブジェクト1025とを含む。オブジェクトIDテーブル・オブジェクト1021は、各オブジェクト1022のエントリーを収容するIDテーブルを含み、プロキシーIDテーブル・オブジェクト1025は、各プロキシー1026のエントリーを収容するIDテーブルを含む。
[0052] 図11は、ある実施形態において、OORPCシステムによるプロパティの値の同期をサポートするデーター構造を示すブロック図である。クライアント1110は、IDテーブルを有するIDテーブル・オブジェクト1111を含む。このIDテーブルは、リモート・オブジェクト・クラスXのリモート・オブジェクトに対するプロキシー1112および1113の*エントリーを含み、更にリモート・オブジェクト・クラスYのリモート・オブジェクトに対するプロキシー1114のエントリーを含む。各プロキシーは、そのリモート・オブジェクト・クラスに対する格納オブジェクトを参照するためにスタティック・データー・メンバーを含む。プロキシー1112および1113は、リモート・オブジェクト・クラスXに対する格納オブジェクト1115に対する参照を含み、プロキシー1114は、リモート・オブジェクト・クラスYに対する格納オブジェクト1116に対する参照を含む。リモート・オブジェクト・クラスに対する格納オブジェクトは、プロパティの値をローカルにプロキシーに格納するリモート・オブジェクト・クラスのゲッター・メソッド毎にメソッドを含むことができる。サーバー1120は、IDテーブルを有するIDテーブル・オブジェクト1121を含む。このIDテーブルは、リモート・オブジェクト・クラスXのリモート・オブジェクト1122および1123のエントリーを含み、更に、リモート・オブジェクト・クラスYのオブジェクト1124のエントリーを含む。また、サーバーは、プロパティ・テーブルを有するプロパティ・テーブル・オブジェクト1125も含み、プロパティ・テーブルは各リモート・オブジェクトのプロパティ毎にエントリーを含む。各エントリーは、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクトの各プロパティの最後に引き出された値、およびリモート・オブジェクトのリモート・オブジェクト・クラスのゲッター・テーブルに対する参照を含む。ある実施形態では、各エントリーは、リモート・オブジェクトに対する最後に引き出された値を格納するデーター構造に対する参照を収容することができる。また、IDテーブルおよびプロパティ・テーブルを組み合わせて1つのテーブルにすることもできる。図示のように、プロパティ・テーブルの第1エントリーはリモート・オブジェクト1122に対応し、リモート・オブジェクト・クラスXに対するゲッター・テーブル1126へのポインタを含む。ゲッター・テーブル1126は、リモート・オブジェクト・クラスXのゲッター・メソッド1128および1129毎にエントリーを含む。ゲッター・テーブル1127は、リモート・オブジェクト・クラスYのゲッター・メソッド1130および1131毎にエントリーを含む。これらのエントリーは、プロパティの値を引き出すために、リモート・オブジェクトの対応するゲッター・メソッドを呼び出すコードを指し示す。
[0053] 応答呼び出しメッセージを送る前に、サーバー・コンポーネントは、プロパティ・テーブルの各エントリーを選択し、各プロパティの値を引き出すために、各エントリーのリモート・オブジェクトのゲッター・メソッドを呼び出すことができる。オブジェクトに対してゲッター・メソッドによって戻されたプロパティの値が、プロパティ・テーブルに格納されているそのプロパティの値と異なる場合、サーバー・コンポーネントはプロパティ更新を呼び出し応答メッセージに追加する。プロパティ更新は、オブジェクト識別子、プロパティ識別子、および新たな値を含む。クライアントが呼び出し応答メッセージを受信すると、クライアント・コンポーネントは各プロパティ更新を処理する。プロパティ更新毎に、クライアント・コンポーネントは、プロパティ更新のオブジェクト識別子に対応するプロキシーに対する参照を引き出す。クライアント・コンポーネントは、プロキシーから、格納オブジェクトに対する参照を引き出し、格納オブジェクトのそのプロパティに対する対応する格納メソッドを呼び出し、参照の指示を渡す。次いで、格納メソッドは、プロパティの値をプロキシーに格納する。ある実施形態では、各プロパティ更新が、リモート・オブジェクトの全ての変化したプロパティの値を収容することができる。即ち、呼び出し応答メッセージは、リモート・オブジェクトの変化したプロパティ毎に別個のプロパティ更新ではなく、リモート・オブジェクト毎に1つだけのプロパティ更新を収容する。
[0054] 図12は、ある実施形態において、サーバー・コンポーネントのプロパティ値取得コンポーネントの処理を示す流れ図である。プロパティ値取得コンポーネント1200は、値が変化した各リモート・オブジェクトのプロパティ毎に、プロパティ更新を呼び出し応答メッセージに追加するために呼び出される。ブロック1202において、このコンポーネントはプロパティ・テーブルの次のエントリーを選択する。判断ブロック1204において、全てのエントリーが既に選択されている場合、このコンポーネントは完了し、そうでない場合、このコンポーネントはブロック1206に進む。ブロック1206において、このコンポーネントは、選択したエントリーのオブジェクト識別子に対応する参照を引き出すために、IDテーブル・オブジェクトの基準引き出しメソッドを呼び出す。ブロック1208~1218において、このコンポーネントはループして、参照されたリモート・オブジェクトの各プロパティを処理する。ブロック1208において、このコンポーネントは、選択したエントリーによって参照されたゲッター・テーブルから次のゲッター・メソッドを選択する。判断ブロック1210において、全てのゲッター・メソッドが既に選択されている場合、このコンポーネントはブロック1202に戻り、プロパティ・テーブルにおいて次のエントリーを選択し、そうでない場合、このコンポーネントはブロック1212に進む。ブロック1212において、このコンポーネントは、参照されたリモート・オブジェクトの選択したゲッター・メソッドを呼び出す。判断ブロック1214において、プロパティの現在値が、このプロパティに対して選択したエントリー内の値と同じである場合、このコンポーネントはブロック1208にループし(loop back)、次のゲッター・メソッドを選択し、そうでない場合、このコンポーネントはブロック1216に進む。ブロック1216において、このコンポーネントは、プロパティのエントリー内の値を現在値にセットする。ブロック1218において、このコンポーネントは、オブジェクト識別子を有するプロパティ更新、プロパティ識別子、およびプロパティの現在値を呼び出し応答メッセージに追加し、次いでブロック1208にループして次のゲッター・メソッドを選択する。
[0055] 図13は、ある実施形態において、クライアント・コンポーネントのプロパティ値格納コンポーネントの処理を示す流れ図である。プロパティ値格納コンポーネント1300が呼び出されるのは、プロパティ更新を含む呼び出し応答メッセージを受信し、プロパティに対してローカルに格納されている値を更新するときである。ブロック1302において、このコンポーネントは呼び出し応答メッセージの次のプロパティ更新を選択する。判断ブロック1304において、全てのプロパティ更新が既に選択されている場合、このコンポーネントは完了し、そうでなければ、このコンポーネントはブロック1306に進む。ブロック1306において、コンポーネントは、IDテーブル・オブジェクトの参照引き出しメソッドを呼び出し、選択したエントリーのオブジェクト識別子を渡し、対応するプロキシーに対する参照を受け取る。ブロック1308において、このコンポーネントは、プロキシーのスタティック・データー・メンバーによって参照された格納オブジェクトの格納メソッドを呼び出し、エントリーの値を渡す。次いで、このコンポーネントはブロック1302にループし、応答呼び出しメッセージの次のプロパティ更新エントリーを選択する。格納オブジェクトは、各プロパティを扱うために、別個の格納メソッドが生成されていてもよい。あるいは、格納オブジェクトは、オブジェクトの型およびプロパティの名称のような情報を有するプロパティ毎にエントリーを有するテーブルにアクセスする、1つの格納メソッドを有してもよい。
[0056] 図14は、ある実施形態において、プロキシー・クラスに対するコードを自動的に生成するためのOORPCシステムのコード生成器を示す流れ図である。プロキシー・コード・コンポーネント1400は、サーバーによってホストされたオブジェクトのクラス毎にインターフェースが渡され、プロキシー・クラス(例えば、JavaScript)を生成する。ブロック1402において、コンポーネントは次のインターフェースを選択する。判断ブロック1404において、全てのインターフェースが既に選択されている場合、このコンポーネントは完了し、そうでない場合、このコンポーネントはブロック1406に進む。ブロック1406において、このコンポーネントはプロキシー・クラスに対して初期コードを生成する。初期コードは、クラスの名称、クラスの開始および終了シンボル(例えば、括弧)等を含むクラス・テンプレートを含むことができる。ブロック1408~1412において、このコンポーネントはループして、ゲッター・メソッドではないインターフェースの各メソッドを処理する。ブロック1408において、このコンポーネントは次のメソッドを選択する。判断ブロック1410において、全てのメソッドが既に選択されている場合、このコンポーネントはブロック1414に進み、そうでない場合、このコンポーネントはブロック1412に進む。ブロック1412において、このコンポーネントはプロキシー・クラスの選択したメソッドに対してコードを生成し、ブロック1408に戻り次のメソッドを選択する。ブロック1414において、このコンポーネントは、コード生成器のプロキシー・プロパティ処理コンポーネントを呼び出して、プロパティ・クラスに対する格納クラスに対してコードを生成するために選択したインターフェースの指示を渡す。次いで、このコンポーネントはブロック1402にループし、次のインターフェースを選択する。
[0057] 図15は、ある実施形態において、コード生成器のプロキシー・プロパティ処理コンポーネントの処理を示す流れ図である。プロキシー・プロパティ処理コンポーネント1500は、プロキシー・クラスに対して格納クラスを生成し、プロキシー・クラスに対する格納オブジェクトに対する参照を格納するためにスタティック・データー・メンバーをプロキシー・クラスに追加するために呼び出される。ブロック1502において、このコンポーネントは格納クラスに対して初期コードを生成する。ブロック1504において、このコンポーネントは、プロキシー・クラスに、格納オブジェクトを参照するためのスタティック・データー・メンバーを追加する。ブロック1506において、このコンポーネントはインターフェースの次のプロパティを選択する。判断ブロック1508において、インターフェースの全てのプロパティが既に選択されている場合、このコンポーネントは完了し、そうでなければ、このコンポーネントはブロック1510に進む。ブロック1510において、このコンポーネントは、選択したプロパティに対して、呼び出し要求メッセージをサーバーに送る、プロキシー・クラスのセッター・メソッド(setter method)に対してコードを生成する。ブロック1512において、このコンポーネントは、選択したプロパティに対して、プロパティのローカル値を引き出す、プロキシー・クラスのゲッター・メソッドに対してコードを生成する。ブロック1514において、このコンポーネントは、選択したプロパティの値を呼び出し応答メッセージにおいて受け取り、プロキシーに格納するために、格納クラスの格納メソッドに対してコードを生成し、次いでブロック1506にループし、インターフェースの次のプロパティを選択する。
[0058] ある実施形態では、OORPCシステムのコード生成器は、サーバーがリモート・オブジェクトの呼び出しをサポートするためのサーバー・コンポーネントを自動的に生成することができる。コード生成器には、サーバーによってホストされたリモート・オブジェクトに対するインターフェースを設けることができる。コード生成器は、クライアントから呼び出し要求メッセージを受信するため、そして識別されたリモート・オブジェクトの識別されたリモート・オブジェクト・メソッドを呼び出して、識別された入力パラメーターを渡すためのコードを生成する。また、コード生成器は、呼び出されたリモート・オブジェクト・メソッドが戻った後に、クライアントに、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクト・メソッドのメソッド識別子、および呼び出されたリモート・オブジェクト・メソッドによって戻された出力パラメーターを有する呼び出し応答メッセージを送るためのコードも生成する。また、コード生成器は、インターフェースに基づいて、プロパティ値の同期をサポートするコードも自動的に生成することができる。
[0059] 図16および図17は、ある実施形態において、呼び出し要求の延期を示す流れ図である。図16は、ある実施形態において、クライアント・コンポーネントの要求送出コンポーネントの処理を示す流れ図である。要求送出コンポーネント1600を呼び出し、リモート・オブジェクトのメソッドの呼び出すための呼び出し要求を渡す(例えば、要求オブジェクトを通じて)。このコンポーネントは、メソッドの呼び出しが延期可能でないとき、サーバーに、任意の待ち行列に入れられた呼び出し要求を有する呼び出しメッセージを送る。ブロック1602において、このコンポーネントは呼び出し要求を要求キューに添付する。判断ブロック1604において、メソッドの呼び出しが延期可能である場合、このコンポーネントは完了し、そうでない場合、このコンポーネントはブロック1606に進む。ブロック1606において、このコンポーネントは呼び出し要求キューの呼び出し要求を、呼び出し要求メッセージに追加する。ブロック1608において、このコンポーネントはサーバーに呼び出し要求メッセージを送る。ブロック1610において、コンポーネントは要求キューを空にし、次いで完了する。
[0060] 図17は、ある実施形態において、サーバー・コンポーネントの要求受信コンポーネントの処理を示す流れ図である。要求受信コンポーネント1700は、サーバー・コンポーネントが呼び出し要求メッセージを受信したときに呼び出される。ブロック1702において、このコンポーネントは呼び出し要求メッセージの次の呼び出し要求を選択する。判断ブロック1704において、全ての呼び出し要求が既に選択されている場合、このコンポーネントは完了し、そうでない場合、このコンポーネントはブロック1706に進む。ブロック1706において、このコンポーネントは、呼び出し要求によって識別されたリモート・オブジェクトのメソッドを呼び出すことによって、選択した呼び出し要求を処理する。次いで、このコンポーネントはブロック1702に戻り、次の呼び出し要求を選択する。
[0061] 以下の章では、OORPCシステムの態様の種々の実施形態について説明する。OORPCシステムの実施態様は、実施形態の任意の組み合わせを採用することができる。以下で説明する処理は、OORPCシステムを実装するコンピューター読み取り可能記憶媒体上に格納されたコンピューター実行可能命令を実行するプロセッサーを有するコンピューティング・デバイスによって実行することができる。
[0062] ある実施形態では、リモート・オブジェクトがサーバーによってホストされた場合に、リモート・オブジェクト・クラスのリモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すためにクライアントによって実行される方法を提供する。ブラウザーの制御下において、この方法は以下を実行する。この方法は、アプリケーションを含むウェブ・ページを引き出す。アプリケーションの制御下において、この方法は、プロキシー・クラスのプロキシーをインスタンス化する。このプロキシー・クラスは、リモート・オブジェクト・メンバー関数と同じ署名を有するプロキシー・メンバー関数を含む。この方法は、オブジェクト識別子をプロキシーと関連付ける。このオブジェクト識別子は、リモート・オブジェクトをサーバーに対して識別するときに使用するためのものである。この方法は、プロキシー・オブジェクトのプロキシー・メンバー関数を呼び出す。呼び出したプロキシー・メンバー関数の制御下において、この方法は、サーバーに呼び出し要求メッセージを送る。呼び出し要求メッセージは、プロキシーと関連付けられたオブジェクト識別子と、リモート・オブジェクト・メンバー関数の識別子とを含む。アプリケーションは、ブラウザーを必要とせずに、ブラウザーによって提供される機能を当てにしており、アプリケーションを実行するとき、アドオン機能にアクセスする。ある実施形態では、この方法は、更に、サーバーに呼び出し要求メッセージを送る。呼び出し要求メッセージは、リモート・オブジェクトをインスタンス化するために、作成リモート・オブジェクトのメンバー関数を呼び出すことを要求する。ある実施形態では、この方法は、更に、アプリケーションの制御下において、リモート・オブジェクトがインスタンス化されていることを示す呼び出し応答メッセージをサーバーから受信する。ある実施形態では、呼び出し応答メッセージは、サーバーによってリモート・オブジェクトに割り当てられたオブジェクト識別子を含む。ある実施形態では、呼び出し要求メッセージは、クライアントによってリモート・オブジェクトに割り当てられたオブジェクト識別子を含む。ある実施形態では、呼び出し要求メッセージは、プロキシー・メンバー関数に渡される入力パラメーターを含む。ある実施形態では、呼び出し応答メッセージは、プロキシー・メンバー関数によって戻される出力パラメーターを含む。ある実施形態では、プロキシーはプロキシー参照によって識別され、更に、プロキシー参照をオブジェクト識別子と関連付けるステップを含む。ある実施形態では、関連付けるステップは、オブジェクト識別子テーブルに、プロキシー参照およびオブジェクト識別子を含むエントリーを追加するステップを含む。ある実施形態では、リモート・オブジェクト・クラスおよびプロキシー・クラスは異なるプログラミング言語で実装される。ある実施形態では、プロキシー・クラスは、リモート・オブジェクト・クラスに対するインターフェース定義に基づいて、自動的に生成され、プロキシー・クラスはプロキシー・メンバー関数の実施態様を含む。ある実施形態では、プロキシー・メンバー関数の呼び出しは、非同期の呼び出しである。
[0063] ある実施形態では、サーバーによってホストされたリモート・オブジェクト・クラスのリモート・オブジェクトにアクセスするために、クライアントにおいて実行するアプリケーションに対してプロキシー・クラスを生成するためにコンピューティング・システムによって実行される方法を提供する。この方法は、リモート・オブジェクト・クラスのインターフェースにアクセスし、各インターフェースは、リモート・クラスのリモート・オブジェクト・メンバー関数の署名を含む。リモート・オブジェクト・クラス毎に、この方法は、リモート・オブジェクト・クラスに対してプロキシー・クラスを生成する。プロキシー・クラスは、リモート・オブジェクト・クラスのリモート・オブジェクト・メンバー関数毎に、プロキシー・メンバー関数を含む。プロキシー・クラスの各プロキシー・メンバー関数は、プロキシー・メンバー関数の呼び出し時に、サーバーに呼び出し要求メッセージを送るために生成される。呼び出し要求メッセージは、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクト・メンバー関数のメンバー関数識別子、およびプロキシー・メンバー関数に渡される入力パラメーターを含む。この方法は、サーバーから呼び出し応答メッセージを受信した後に、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクト・メンバー関数のメンバー関数識別子、および呼び出し応答メッセージからの出力パラメーターを抽出し、リモート・オブジェクト・メンバー関数の呼び出しが完了したことを示すためのコードを供給する。ある実施形態では、この方法は、更に、サーバーに対してサーバー・コンポーネントを生成する。サーバー・コンポーネントは、ホストされたリモート・オブジェクトのインターフェースに基づいて、クライアントから呼び出し要求メッセージを受信し、識別されたリモート・オブジェクトの識別されたリモート・オブジェクト・メンバー関数を呼び出して、識別された入力パラメーターを渡し、呼び出したリモート・オブジェクト・メンバー関数が戻った後に、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクト・メンバー関数のメンバー関数識別子、および呼び出したリモート・オブジェクト・メンバー関数によって戻された出力パラメーターを有する呼び出し応答メッセージをクライアントに送るために生成される。ある実施形態では、アプリケーションのコードは、ブラウザーを必要とすることなく、ブラウザーによって提供される機能を当てにしており、アプリケーションを実行するときに、アドオン機能にアクセスする。
[0064] ある実施形態では、プログラムのアプリケーション実行エンジンによって実行されるアプリケーションが、サーバーによってホストされたリモート・オブジェクト・クラスのリモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すことを可能にするように構成されたクライアントを提供する。このクライアントは、コンピューター実行可能命令を実行するプロセッサーと、コンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体とを含み、コンピューター実行可能命令がプロセッサーによって実行されると、以下の処理を実行するようにクライアントを制御する。この処理は、プロキシー・クラスのプロキシーをインスタンス化する。プロキシー・クラスは、リモート・オブジェクト・メンバー関数と同じ署名を有するプロキシー・メンバー関数を含む。この処理は、オブジェクト識別子をプロキシーと関連付ける。オブジェクト識別子は、リモート・オブジェクトをサーバーに対して識別するときに使用するためのものである。この処理は、プロキシーのプロキシー・メンバー関数を呼び出す。呼び出したプロキシー・メンバー関数の制御下において、この処理は、サーバーに呼び出し要求メッセージを送る。呼び出し要求メッセージは、リモート・オブジェクトを識別するオブジェクト識別子と、リモート・オブジェクト・メンバー関数を識別するメンバー関数識別子とを含む。ある実施形態では、アプリケーションは、プログラムを必要とせず、プログラムによって提供される機能を当てにしており、アプリケーションを実行するときに、アドオン機能にアクセスし、アプリケーションのプロキシー・クラスは、リモート・オブジェクトのクライアントによるアクセスをサポートするために、リモート・オブジェクト・クラスのインターフェースから自動的に生成される。ある実施形態では、この処理は、更に、呼び出し要求メッセージを、サーバーに送る。この呼び出し要求メッセージは、リモート・オブジェクト・クラスのインスタンスをインスタンス化すること、およびリモート・オブジェクトがインスタンス化されたことを示す呼び出し応答メッセージをサーバーから受信することを要求する。ある実施形態では、この処理は、メンバー関数を有する作成プロキシーをインスタンス化する。これが呼び出されると、プロキシーのインスタンス化、および呼び出し要求メッセージの送出を指令する。ある実施形態では、呼び出し応答メッセージはオブジェクト識別子を含む。ある実施形態では、プログラムはブラウザーであり、アプリケーションは、ユーザーがブラウザーを介してウェブ・ページにアクセスしたことに応答して、ダウンロードおよび実行される。
[0065] ある実施形態では、アプリケーション実行エンジンを有するプログラムによって実行されるアプリケーションが、サーバーによってホストされたリモート・オブジェクト・クラスのリモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出し、クライアントによってホストされたローカル・オブジェクト・クラスのローカル・オブジェクトのローカル・オブジェクト・メンバー関数のサーバーによる呼び出しをサポートすることを可能にするように構成されたクライアントを提供する。このクライアントは、コンピューター実行可能命令を実行するプロセッサーと、コンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体とを含み、コンピューター実行可能命令がプロセッサーによって実行されると、以下の処理を実行するようにクライアントを制御する。プログラムによって実行されるアプリケーションの制御下において、処理はプロキシー・クラスのプロキシーをインスタンス化する。このプロキシー・クラスは、リモート・オブジェクト・メンバー関数と同じ署名を有するプロキシー・メンバー関数を含む。この処理は、ローカル・オブジェクト・クラスのローカル・オブジェクトをインスタンス化する。この処理は、リモート・オブジェクト識別子を、プロキシーに対するプロキシー参照と関連付け、更にローカル・オブジェクト識別子をローカル・オブジェクトに対するローカル・オブジェクト参照と関連付ける。呼び出されたプロキシー・メンバー関数の制御下において、この処理は、サーバーに、リモート・オブジェクトを識別するリモート・オブジェクト識別子と、リモート・オブジェクト・メンバー関数を識別するメンバー関数識別子とを含む呼び出し要求メッセージを送る。ローカル・オブジェクト識別子を含みローカル・オブジェクト・メンバー関数を識別する呼び出し要求メッセージを、サーバーから受信すると、この処理は、含まれるローカル・オブジェクト識別子と関連付けられたローカル・オブジェクト参照を引き出し、引き出したローカル・オブジェクト参照によって参照されるローカル・オブジェクトのローカル・オブジェクト・メンバー関数を呼び出す。
[0066] ある実施形態では、プロパティ値を同期させるためにクライアントによって実行される方法を提供する。この方法は、リモート・オブジェクト・クラスのリモート・オブジェクトに対応するプロキシー・クラスのプロキシーをインスタンス化する。リモート・オブジェクトは、サーバーにおいてインスタンス化される。プロキシー・クラスは、プロキシー・ゲッターを有する(with)プロパティを指定する。プロキシーのプロキシー・ゲッターは、プロキシーに格納されているプロパティの値を引き出すためのものである。この方法は、リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すために呼び出し要求メッセージを、サーバーに送る。この方法は、サーバーから、呼び出し要求メッセージに対する呼び出し応答メッセージを受信する。呼び出し応答メッセージがプロパティ更新を含むとき、この方法は、呼び出し応答メッセージから、プロパティ更新からのプロパティの値を抽出し、抽出した値をプロキシーに格納する。プロキシーに対するプロキシー・ゲッターが呼び出されると、この方法は呼び出し要求メッセージをサーバーに送る必要なく、プロパティの値をプロキシーから引き出すことを可能にする。ある実施形態では、プロキシーは、ブラウザーによって実行されるアプリケーションの一部である。ある実施形態では、サーバーに送るステップ、およびサーバーから受信するステップは、HTTPメッセージを介して行われる。ある実施形態では、プロキシー・クラスは、プロパティに対する格納メンバー関数を有する格納クラスの格納オブジェクトに対する静的参照を含み、抽出するステップおよび格納するステップは、格納メンバー関数によって実行される。ある実施形態では、格納クラスは、プロキシー・クラスのプロパティ毎に、格納メンバー関数を含む。ある実施形態では、格納クラスはゲッター・テーブルを含む。ゲッター・テーブルは、抽出した値を格納するために、プロパティの識別子をそのプロパティに対する格納クラスの格納メンバー関数の識別子にマッピングし、更に プロパティの識別子をプロパティの型の識別子にマッピングする。ある実施形態では、格納メンバー関数は、プロキシーに対する参照が渡され、プロパティの型に基づいてプロパティの値の抽出、および参照されたプロキシーへの値の格納を実行する。ある実施形態では、格納メンバー関数には、プロキシーの識別子が渡される。ある実施形態では、呼び出し応答メッセージは、プロキシーの複数のプロパティの値を含む。ある実施形態では、呼び出し応答メッセージは、異なるプロキシーの複数のプロパティの値を含む。ある実施形態では、呼び出し応答メッセージは、以前の呼び出し応答メッセージがサーバーによって送られて以来値が変化したプロパティのみの値を含む。
[0067] ある実施形態では、クライアントに格納されているプロパティ値を同期させるためにサーバーによって実行される方法を提供する。この方法は、クライアントから、サーバーによってホストされたリモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出す要求を受ける。この方法は、リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出す。リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出した後、この方法はリモート・オブジェクトのプロパティの値を引き出す。引き出した値が、プロパティに対して最後に引き出した値と同じでないとき、この方法は、呼び出し応答メッセージに、リモート・オブジェクトのオブジェクト識別子、プロパティのプロパティ識別子、および引き出した値を追加する。この方法は、クライアントに、リモート・オブジェクト・メンバー関数が呼び出されたこと、そしてプロパティの値が変化したことを示すための呼び出し応答メッセージを送るので、リモート・オブジェクトに対するクライアントのプロキシーのプロパティに対するゲッター・メンバー関数は、ローカルにサーバーにアクセスすることによって、プロパティの値を引き出すことができる。ある実施形態では、引き出すステップおよび送るステップは、複数のプロパティに対して実行される。ある実施形態では、複数のプロパティは異なるリモート・オブジェクトのプロパティを含む。ある実施形態では、引き出すステップおよび追加するステップは、リモート・オブジェクトのリモート・オブジェクト・メンバー関数が呼び出されたことを示すために送られる呼び出し応答メッセージ毎に実行される。
[0068] ある実施形態では、リモート・オブジェクト・クラスのリモート・オブジェクトのプロパティの値と、プロキシー・クラスのプロキシーのプロパティの値との同期をサポートするためにコンピューティング・システムによって実行される方法を提供する。この方法は、リモート・オブジェクト・クラス毎にインターフェースの記述を入力する。リモート・オブジェクト・クラスに対するインターフェース毎に、この方法はプロキシー・クラスに対するコードを生成する。この方法は、プロキシー・クラスの各プロキシー・メンバー関数が、対応するリモート・オブジェクト上において対応するリモート・オブジェクト・メンバー関数を呼び出すための呼び出し要求メッセージを送るためのコードを生成する。この方法は、対応するリモート・オブジェクトにアクセスせずに、プロキシー・クラスのプロキシーにローカルに格納されているプロパティの値を引き出し、そして戻すために、プロキシー・クラスのプロパティのプロキシー・ゲッター・メンバー関数毎にコードを生成する。この方法は、プロキシー・クラスのプロパティの各プロキシー・ゲッター・メンバー関数が、プロパティに対してローカルに格納されている値を引き出すことができるように、サーバーから受け取ったプロキシー・クラスのプロパティの値を格納するためのコードを生成する。ある実施形態では、この方法は、更に、プロキシー・クラス毎に、プロパティの値を格納するためのコードに対する静的参照をプロキシー・クラスに追加する。ある実施形態では、プロパティの値を格納するためのコードは、格納クラスの一部として実装される。ある実施形態では、格納クラスはテーブルを含む。このテーブルは、プロキシー・クラスのプロパティ毎に、そのプロパティのプロキシー・ゲッター・メンバー関数によって値を引き出すことができるように、そのプロパティの値を格納するために、プロパティの識別子を格納メンバー関数にマッピングする。ある実施形態では、プロパティの識別子は、更に、サーバーから受信した呼び出し応答メッセージからプロパティの値を抽出するときに使用するために、プロパティの型の指示にマッピングされる。
[0069] ある実施形態では、アプリケーションの呼び出し要求をサーバーのリモート・オブジェクトに送るためにクライアントによって実行される方法を提供する。この方法は、呼び出し要求を受ける。各呼び出し要求は、リモート・オブジェクト・クラスのリモート・オブジェクトに対応するアプリケーションのプロキシー・クラスのプロキシーからのものである。受けた呼び出し要求毎に、その呼び出し要求が延期可能であるとき、この方法はその呼び出し要求を格納する。呼び出し要求が延期可能でないとき、この方法は、格納されている呼び出し要求の内以前に送られていない各呼び出し要求、および受けた呼び出し要求を含む呼び出し要求メッセージを、サーバーに送る。この方法は、サーバーから呼び出し応答メッセージを受信する。各呼び出し応答メッセージは、1つ以上の呼び出し要求を含んだ呼び出し要求メッセージに対する応答である。少なくとも1つの呼び出し応答メッセージは、複数の呼び出し応答を含む。受信した呼び出し応答メッセージの呼び出し応答毎に、この呼び出し応答が出力パラメーターを含むとき、この方法は呼び出し応答からその出力パラメーターを抽出する。この方法は、アプリケーションに、呼び出し応答が受信されたことの指示と、あらゆる抽出された出力パラメーターとを供給する。ある実施形態では、呼び出し要求メッセージは、呼び出し要求が受け取られた順序を示す。ある実施形態では、呼び出し応答メッセージの呼び出し応答は、対応する呼び出し要求が受け取られた順序で処理される。ある実施形態では、呼び出し要求は非同期の呼び出し要求である。ある実施形態では、呼び出し要求が指定された時間量よりも長く格納されているとき、この方法は、その呼び出し要求を含む呼び出し要求メッセージを送る。ある実施形態では、未だ送られていない呼び出し要求を送る要求をアプリケーションから受けたことに応答して、この方法は、更に、その呼び出し要求を含む呼び出し要求メッセージを送る。ある実施形態では、呼び出し要求は、異なるサーバーによってホストされたリモート・オブジェクトに対して受け取られ、サーバーに送られる呼び出し要求メッセージは、そのサーバーによってホストされたリモート・オブジェクトに対する呼び出し要求のみを含む。ある実施形態では、アプリケーションはブラウザーの制御下において実行される。
[0070] ある実施形態では、サーバーによってホストされたリモート・オブジェクトのメンバー関数を呼び出すためのアプリケーションの呼び出し要求を送るためのクライアントを提供する。このクライアントは、コンピューター実行可能命令を実行するプロセッサーと、コンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体とを含む。コンピューター実行可能命令がプロセッサーによって実行されると、以下の処理を実行するようにクライアントを制御する。この処理は、呼び出し要求を待ち行列に入れる。各呼び出し要求は、アプリケーションのリモート・オブジェクト・クラスのリモート・オブジェクトに対応する、アプリケーションのプロキシー・クラスのプロキシーからのものである。呼び出し要求は、リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すためのものである。呼び出し要求送出判断基準が満たされたとき、この処理は、サーバーに、待ち行列に入れられた各呼び出し要求を含む呼び出し要求メッセージを送る。この処理は、待ち行列に入れられた各呼び出し要求がもはや待ち行列に並べられていないことを示す。この処理は、サーバーから、呼び出し要求メッセージに応答する呼び出し応答メッセージを受信する。受信した呼び出し応答メッセージの呼び出し応答毎に、この処理は、呼び出し応答が受信されたという指示を、アプリケーションに供給する。ある実施形態では、呼び出し要求送出判断基準が満たされるのは、呼び出し要求が受け取られ、待ち行列に入れられないときである。ある実施形態では、呼び出し要求送出判断基準が満たされるのは、呼び出し要求が指定時間量よりも長く格納されているときである。ある実施形態では、呼び出し要求送出判断基準が満たされるのは、待ち行列に入れられた呼び出し要求を送る要求をアプリケーションから受けたときである。ある実施形態では、呼び出し要求メッセージは、呼び出し要求がアプリケーションによって生成された順序を示す。ある実施形態では、呼び出し応答メッセージの呼び出し応答は、対応する呼び出し要求が生成された順序で処理される。ある実施形態では、呼び出し要求は非同期の呼び出し要求である。ある実施形態では、異なるサーバーによってホストされたリモート・オブジェクトに対して呼び出し要求を受け、サーバーに送られる呼び出し要求メッセージは、そのサーバーによってホストされたリモート・オブジェクトに対する呼び出し要求のみを含む。ある実施形態では、アプリケーション実行エンジンを有するプログラムの制御下において、アプリケーションが実行される。
[0071] ある実施形態では、アプリケーションの呼び出し要求を処理するためにサーバーによって実行される方法である。この方法は、クライアントから、呼び出し要求を含む呼び出し要求メッセージを受信する。各呼び出し要求は、アプリケーションのリモート・オブジェクト・クラスのリモート・オブジェクトに対応するアプリケーションのプロキシー・クラスのプロキシーからのものである。呼び出し要求は、リモート・オブジェクトのリモート・オブジェクト・メンバー関数を呼び出すためである。呼び出し要求メッセージの呼び出し要求毎に、呼び出し要求を処理する。この処理は、呼び出し要求から、リモート・オブジェクトのオブジェクト識別子、リモート・オブジェクト・メンバー関数のメンバー関数識別子、および入力パラメーターを抽出する処理を含む。この処理は、識別されたリモート・オブジェクトの識別されたリモート・オブジェクト・メンバー関数を呼び出して、入力パラメーターを渡す。呼び出されたリモート・オブジェクト・メンバー関数からの戻りのときに、この処理は、呼び出されたリモート・オブジェクト・メンバー関数によって戻された出力パラメーターを含む呼び出し要求に対する呼び出し応答を格納する。呼び出し要求を処理した後、この方法は、クライアントに、呼び出し応答を含む呼び出し応答メッセージを送る。ある実施形態では、呼び出し要求は、呼び出し要求メッセージによって指定された順序で処理される。ある実施形態では、呼び出し応答に対応する呼び出し要求は、呼び出し応答から識別可能である。ある実施形態では。
[0072] 以上、構造的特徴および/またはアクトに特定的な文言で主題について説明したが、添付する特許請求の範囲において定められる主題は、以上で説明した特定的な特徴やアクトに必ずしも限定されないことは理解されよう。逆に、以上で説明した特定的な特徴およびアクトは、特許請求の範囲を実施する形態例として開示したまでである。例えば、アプリケーションを実行するウェブ・ブラウザーのコンテキストでOORPCシステムについて主に説明したが、OORPCは他のコンテキストでも使用することができる。例えば、顧客関係管理(「CRM」:customer relationship management)システムが、CRMシステムをカスタム化するアプリケーションを開発することを可能にするのでもよい。このような場合、CRMシステムの顧客側コンポーネントが、CRMシステムのサーバー側コンポーネントを有するサーバーによってホストされたオブジェクトにアクセスするアプリケーションを実行する。このようなアプリケーションを実行するウェブ・ブラウザー、CRMシステム、およびその他のプログラムは、アプリケーション実行エンジンを有するプログラムと呼んでもよい。したがって、本発明は、添付する特許請求の範囲による以外では、限定されないものとする。

Claims (15)

  1. クライアント・コンピューティング・システムであって、
    コンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体と、
    前記コンピューター実行可能命令を実行するように構成されたプロセッサーと、
    を備え、前記コンピューター実行可能命令が前記プロセッサーによって実行されると、
    複数の呼び出し要求を、サーバー・コンピューティング・システムのリモート・オブジェクト・クラスのリモート・オブジェクトに対応する前記クライアント・コンピューティング・システムのアプリケーションのプロキシー・クラスのプロキシー・オブジェクトから受け取る処理であって前記プロキシー・クラスは、プロパティのローカル値を引き出すゲッター・メソッドと、リモート・オブジェクトのプロパティの値をローカルに前記クライアント・コンピューティング・システムに格納する格納クラスの格納メソッドを指定し、前記ゲッター・メソッドは、前記プロパティの値を引き出すために呼び出し要求メッセージを送るのではなく、前記プロパティのローカルに格納されている値を引き出し、その値を戻す、処理と、
    受け取った呼び出し要求毎に、
    前記呼び出し要求が延期可能か否かを判定し、
    前記呼び出し要求が延期可能であるとき、前記呼び出し要求を格納する処理と、
    前記呼び出し要求が延期可能でないとき、呼び出し要求メッセージを前記サーバー・コンピューティング・システムに送る処理であって、前記呼び出し要求メッセージが、格納されているが未だ送られていない各呼び出し要求と、延期可能でない呼び出し要求とを含む、処理と、
    前記サーバー・コンピューティング・システムから、複数の呼び出し応答メッセージを受信する処理であって、各呼び出し応答メッセージが、前記クライアント・コンピューティング・システムから以前に送られた呼び出し要求メッセージに応答するものであり、前記呼び出し応答メッセージの内少なくとも1つが複数の呼び出し応答を含む、処理と、
    前記複数の呼び出し応答の中から呼び出し応答毎に、
    前記呼び出し応答が出力パラメーターを含むとき、前記呼び出し応答から前記出力パラメーターを抽出する処理と、
    前記アプリケーションに、前記呼び出し応答が受信されたことの指示、および抽出されたあらゆる出力パラメーターを供給する処理と、
    を実行するように、前記クライアント・コンピューティング・システムを制御する、クライアント・コンピューティング・システム。
  2. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記呼び出し要求メッセージ前記クライアント・コンピューティング・システムによって前記呼び出し要求が受け取られた順序を示す、クライアント・コンピューティング・システム。
  3. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記複数の呼び出し応答前記クライアント・コンピューティング・システムによって前記対応する呼び出し要求が受け取られた順序で処理される、クライアント・コンピューティング・システム。
  4. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記コンピューター実行可能命令が、前記プロセッサーによって実行されると、格納されている呼び出し要求が指定時間量よりも長く格納されているとき、前記格納されている呼び出し要求を含む呼び出し要求メッセージを送るように、前記クライアント・コンピューティング・システムを制御する、クライアント・コンピューティング・システム。
  5. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記コンピューター実行可能命令が、前記プロセッサーによって実行されると、送られていない呼び出し要求を送る要求を前記アプリケーションから受けたことに応答して、前記呼び出し要求を含む呼び出し要求メッセージを送るように、前記クライアント・コンピューティング・システムを制御する、クライアント・コンピューティング・システム。
  6. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記複数の呼び出し要求が、異なるサーバー・コンピューティング・システムによってホストされたリモート・オブジェクトに対して受け取られ、特定のサーバー・コンピューティング・システムに送られる呼び出し要求メッセージがいずれも、当該サーバー・コンピューティング・システムによってホストされたリモート・オブジェクトに対する呼び出し要求のみを含む、クライアント・コンピューティング・システム。
  7. 請求項1記載のクライアント・コンピューティング・システムにおいて、前記アプリケーションがブラウザーの制御下において実行される、クライアント・コンピューティング・システム。
  8. 方法であって、
    クライアント・コンピューティング・システムによって、複数の呼び出し要求を受けるステップであって、各呼び出し要求が、サーバー・コンピューティング・システムのリモート・オブジェクト・クラスのリモート・オブジェクトに対応する前記クライアント・コンピューティング・システムのアプリケーションのプロキシー・クラスのプロキシー・オブジェクトから受け取られ、前記プロキシー・クラスは、プロパティのローカル値を引き出すゲッター・メソッドと、リモート・オブジェクトのプロパティの値をローカルに前記クライアント・コンピューティング・システムに格納する格納クラスの格納メソッドを指定し、前記ゲッター・メソッドは、前記プロパティの値を引き出すために呼び出し要求メッセージを送るのではなく、前記プロパティのローカルに格納されている値を引き出し、その値を戻す、ステップと、
    受け取られた呼び出し要求毎に、
    前記呼び出し要求が延期可能か否かを判定し、
    前記呼び出し要求が延期可能であるとき、前記クライアント・コンピューティング・システムによって、前記呼び出し要求を格納するステップと、
    前記呼び出し要求が延期可能でないとき、前記クライアント・コンピューティング・システムによって、呼び出し要求メッセージを前記サーバー・コンピューティング・システムに送るステップであって、前記呼び出し要求メッセージが、格納されているが未だ送られていない各呼び出し要求と、延期可能でない呼び出し要求とを含む、ステップと、
    前記クライアント・コンピューティング・システムによって、前記サーバー・コンピューティング・システムから、複数の呼び出し応答メッセージを受信するステップであって、各呼び出し応答メッセージが、前記クライアント・コンピューティング・システムから以前に送られた呼び出し要求メッセージに応答するものであり、前記呼び出し応答メッセージの内少なくとも1つが複数の呼び出し応答を含む、ステップと、
    前記複数の呼び出し応答の中から呼び出し応答毎に、
    前記呼び出し応答が出力パラメーターを含むとき、前記クライアント・コンピューティング・システムによって、前記呼び出し応答から前記出力パラメーターを抽出するステップと、
    前記クライアント・コンピューティング・システムによって、前記アプリケーションに、前記呼び出し応答が受信されたことの指示、および抽出されたあらゆる出力パラメーターを供給するステップと、
    を含む、方法。
  9. 請求項8記載の方法において、前記呼び出し要求メッセージ前記クライアント・コンピューティング・システムによって前記呼び出し要求が受け取られた順序を示す、方法。
  10. 請求項8記載の方法において、前記複数の呼び出し応答前記クライアント・コンピューティング・システムによって前記対応する呼び出し要求が受け取られた順序で処理される、方法。
  11. 請求項8記載の方法であって、更に、格納されている呼び出し要求が指定時間量よりも長く格納されているとき、前記クライアント・コンピューティング・システムによって、前記格納されている呼び出し要求を含む呼び出し要求メッセージを送るステップを含む、方法。
  12. 請求項8記載の方法であって、更に、前記アプリケーションから、送られていない呼び出し要求を送る要求を受けたことに応答して、前記呼び出し要求を含む呼び出し要求メッセージを送るステップを含む、方法。
  13. 請求項8記載の方法において、前記複数の呼び出し要求が、異なるサーバー・コンピューティング・システムによってホストされたリモート・オブジェクトに対して受け取られ、特定のサーバー・コンピューティング・システムに送られる呼び出し要求メッセージがいずれも、当該サーバー・コンピューティング・システムによってホストされたリモート・オブジェクトに対する呼び出し要求のみを含む、方法。
  14. 請求項8記載の方法において、前記アプリケーションが、ウェブ・ブラウザーの制御下において実行される、方法。
  15. 請求項8記載の方法において、前記複数の呼び出し要求が、非同期の呼び出し要求である、方法。
JP2019541300A 2017-01-30 2017-12-22 リモート・オブジェクトからの呼び出し要求の延期 Active JP7071379B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/419,964 US10455040B2 (en) 2017-01-30 2017-01-30 Deferring invocation requests for remote objects
US15/419,964 2017-01-30
PCT/US2017/068063 WO2018140183A1 (en) 2017-01-30 2017-12-22 Deferring invocation requests for remote objects

Publications (2)

Publication Number Publication Date
JP2020506481A JP2020506481A (ja) 2020-02-27
JP7071379B2 true JP7071379B2 (ja) 2022-05-18

Family

ID=60972518

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019541300A Active JP7071379B2 (ja) 2017-01-30 2017-12-22 リモート・オブジェクトからの呼び出し要求の延期

Country Status (17)

Country Link
US (1) US10455040B2 (ja)
EP (1) EP3574403B1 (ja)
JP (1) JP7071379B2 (ja)
KR (1) KR102473967B1 (ja)
CN (1) CN110268388B (ja)
AU (1) AU2017395742B2 (ja)
BR (1) BR112019013265A2 (ja)
CA (1) CA3049217A1 (ja)
CL (1) CL2019002046A1 (ja)
CO (1) CO2019007877A2 (ja)
IL (1) IL268034B (ja)
MX (1) MX2019008801A (ja)
PH (1) PH12019550117A1 (ja)
RU (1) RU2759330C2 (ja)
SG (1) SG11201905451QA (ja)
WO (1) WO2018140183A1 (ja)
ZA (1) ZA201903700B (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications
CN114095487B (zh) * 2020-07-30 2024-03-19 中移(苏州)软件技术有限公司 一种远程任务执行方法、装置及存储介质
US11936763B2 (en) 2020-10-28 2024-03-19 International Business Machines Corporation Handling deferrable network requests
CN116074337B (zh) * 2023-04-06 2023-06-13 徐工汉云技术股份有限公司 基于api网关的远程过程调用处理方法和装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004507801A (ja) 2000-03-03 2004-03-11 オラクル・コーポレイション 階層独立のデータアクセスフレームワーク

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU639802B2 (en) * 1990-08-14 1993-08-05 Oracle International Corporation Methods and apparatus for providing dynamic invocation of applications in a distributed heterogeneous environment
US6058389A (en) * 1997-10-31 2000-05-02 Oracle Corporation Apparatus and method for message queuing in a database system
US6920636B1 (en) * 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
US6813641B2 (en) * 2001-07-05 2004-11-02 Sun Microsystems, Inc. Teamware server working over HTTP/HTTPS connections
US7051341B2 (en) * 2001-12-14 2006-05-23 International Business Machines Corporation Method, system, and program for implementing a remote method call
US20040215665A1 (en) * 2002-01-09 2004-10-28 Edgar David A. System, method, and computer program product for providing accelerated and secure wireless data transmission over the internet
US7209929B2 (en) * 2003-04-17 2007-04-24 Salesforce.Com, Inc. Java object cache server for databases
US7831956B2 (en) * 2005-09-13 2010-11-09 Microsoft Corporation Using attributes to identify and filter pluggable functionality
WO2009073368A1 (en) * 2007-11-29 2009-06-11 Motorola, Inc. Method and apparatus to facilitate asynchronously invoking a browser application in a client platform
US9588827B2 (en) 2008-02-21 2017-03-07 International Business Machines Corporation Single program call message retrieval
US8683498B2 (en) 2009-12-16 2014-03-25 Ebay Inc. Systems and methods for facilitating call request aggregation over a network
US8505034B2 (en) 2009-12-17 2013-08-06 Amazon Technologies, Inc. Automated service interface optimization
US8655955B2 (en) * 2011-08-18 2014-02-18 International Business Machines Corporation Stream processing using a client-server architecture
KR101909982B1 (ko) * 2011-12-22 2018-10-23 삼성전자 주식회사 VoIP 게이트웨이 장치, 이의 제어방법 및 이를 포함하는 시스템
CN102497453A (zh) * 2011-12-28 2012-06-13 用友软件股份有限公司 远端程序的调用装置和调用方法
US9262183B2 (en) 2012-04-23 2016-02-16 Microsoft Technology Licensing, Llc Self-service composed web APIs
US8516508B1 (en) 2012-08-02 2013-08-20 Cisco Technology, Inc. Automated application programming interface (API) generation
US20150081774A1 (en) * 2013-09-13 2015-03-19 John Wason System and method for implementing augmented object members for remote procedure call
US9401953B2 (en) * 2013-10-09 2016-07-26 At&T Intellectual Property I, L.P. Intelligent high-volume cloud application programming interface request caching
JP2017505473A (ja) * 2013-11-29 2017-02-16 カルガリー サイエンティフィック インコーポレイテッド クライアントサーバリモートアクセスシステムにおけるクライアントの非管理サービスへの接続の提供方法
US9942265B2 (en) 2014-01-06 2018-04-10 International Business Machines Corporation Preventing application-level denial-of-service in a multi-tenant system
US9614939B2 (en) 2014-05-08 2017-04-04 Google Inc. Network timeouts using intentionally delayed transmissions
US9760415B2 (en) * 2014-05-16 2017-09-12 Microsoft Technology Licensing, Llc Code service for language-independent dispatch
US9729506B2 (en) 2014-08-22 2017-08-08 Shape Security, Inc. Application programming interface wall
US10223181B2 (en) * 2017-01-30 2019-03-05 Microsoft Technology Licensing, Llc Object-oriented remote procedure calls for browser applications

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2004507801A (ja) 2000-03-03 2004-03-11 オラクル・コーポレイション 階層独立のデータアクセスフレームワーク

Also Published As

Publication number Publication date
WO2018140183A1 (en) 2018-08-02
EP3574403A1 (en) 2019-12-04
IL268034B (en) 2022-06-01
MX2019008801A (es) 2019-12-02
SG11201905451QA (en) 2019-08-27
CL2019002046A1 (es) 2019-12-13
KR102473967B1 (ko) 2022-12-02
CO2019007877A2 (es) 2019-07-31
RU2759330C2 (ru) 2021-11-11
ZA201903700B (en) 2020-10-28
EP3574403B1 (en) 2023-06-14
JP2020506481A (ja) 2020-02-27
BR112019013265A2 (pt) 2019-12-17
CN110268388A (zh) 2019-09-20
PH12019550117A1 (en) 2019-12-02
RU2019126643A3 (ja) 2021-04-12
CN110268388B (zh) 2023-06-20
IL268034A (en) 2019-09-26
KR20190108581A (ko) 2019-09-24
AU2017395742B2 (en) 2022-03-17
CA3049217A1 (en) 2018-08-02
US20180219961A1 (en) 2018-08-02
US10455040B2 (en) 2019-10-22
RU2019126643A (ru) 2021-03-01
AU2017395742A1 (en) 2019-07-04

Similar Documents

Publication Publication Date Title
US11010219B2 (en) Object-oriented remote procedure calls for browser applications
US10778795B2 (en) Synchronization of property values between a client and a server
JP7071379B2 (ja) リモート・オブジェクトからの呼び出し要求の延期
US8868637B2 (en) Page rendering for dynamic web pages
KR101505234B1 (ko) 원격 리소스들의 웹 액세스를 위한 xml-기반 웹 피드
US8589800B2 (en) Methods and systems for accessing and controlling a remote desktop of a remote machine in real time by a web browser at a client device via HTTP API utilizing a transcoding server
EP2649499B1 (en) Methods and systems for conducting a remote desktop session via html that supports a 2d canvas and dynamic drawing
US9245047B2 (en) Methods and systems for facilitating a remote desktop session utilizing a remote desktop client common interface
US8966376B2 (en) Methods and systems for remote desktop session redrawing via HTTP headers
US8504654B1 (en) Methods and systems for facilitating a remote desktop session utilizing long polling
JP2009530736A (ja) 初期動的レンダリング制御データの推定
US20110264729A1 (en) Augmentation of network traffic
US9330188B1 (en) Shared browsing sessions
CN112565472B (zh) 静态资源的处理方法和装置
NZ754547A (en) Deferring invocation requests for remote objects

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20201222

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20211028

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20211115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220215

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: 20220408

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220506

R150 Certificate of patent or registration of utility model

Ref document number: 7071379

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150