JP2000515280A - オブジェクト指向型情報伝送方法および装置 - Google Patents

オブジェクト指向型情報伝送方法および装置

Info

Publication number
JP2000515280A
JP2000515280A JP10506107A JP50610798A JP2000515280A JP 2000515280 A JP2000515280 A JP 2000515280A JP 10506107 A JP10506107 A JP 10506107A JP 50610798 A JP50610798 A JP 50610798A JP 2000515280 A JP2000515280 A JP 2000515280A
Authority
JP
Japan
Prior art keywords
information
stream
component
information provider
adapter
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
JP10506107A
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 JP2000515280A publication Critical patent/JP2000515280A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/465Distributed object oriented systems
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99954Version management

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)【要約】 コンピュータネットワーク上における1つのコンポーネントから他のコンポーネントに情報を伝達するためのオブジェクト指向型伝送方法および装置は、アダプタおよび情報プロバイダ要素のための処理系ライブラリをメモリにロードし、これらのコンポーネントのためのファクトリオブジェクトを作成するステップを含む。前記ネットワークを介してリクエストが到着すると、前記ファクトリオブジェクトが呼び出され、このファクトリオブジェクトによって、ストリームオブジェクトが作成される。その後、前記ストリームオブジェクトを使用して、情報プロバイダソースからオリジナルリクエスタに対して、データがストリーム伝送される。

Description

【発明の詳細な説明】 オブジェクト指向型情報伝送方法および装置 発明の背景 1.発明の分野 この発明は、1つのコンピュータ内またはコンピュータネットワーク内におい て情報を伝送するためのオブジェクト指向型情報伝送方法および装置に関する。 特に、この発明は、ファクトリ/ストリームモデルを使用して、コンピュータま たはネットワーク内の1つのコンポーネントから他のコンポーネントにデータお よび関連コンテキストを伝送する分散型オブジェクトシステムに関する。 2.背景 分散型コンピューティングは、相互に情報を共有する2つまたは3つ以上のソ フトウエアで構成される。これら2つのソフトウエアは、同一のコンピュータ、 または、共通のネットワークに接続された複数の異なるコンピュータ上で実行さ れる。ほとんどの分散型コンピューティング方式は、クライアント/サーバモデ ルに基づいている。このようなクライアント/サーバモデルでは、大別して2種 類のソフトウエア、すなわち、情報またはサービスを要求するクライアントソフ トウエアと、情報またはサービスを提供するサーバソフトウエアが使用される。 通常、情報またはサービスは、Information Delivery System(情報伝送シス テム)ソフトウエアアプリケーションによって、サーバからクライアントに伝送 される。この種のアプリケーションは、しばしば、クライアントからの情報リク エストを待つモジュールで構成される、モノリシックでプロトコルごとに固有の 、UNIXに基づいたサーバアプリケーションである。前記リクエストが到着すると 、前記モジュールは自分自身をコピー(“複写”)し、該モジュールのコピーが 前記リクエストを処理することになる。例えば、SQLデータベースからの情報 またはローカルディスクファイルに含まれる情報を提供することによって、前記 リクエストは前記コピーによって処理される。一方、オリジナルのモジュールは 、入って来るリクエストをモニタし続ける。 しかしながら、前記情報伝送システムのアーキテクチャは、通常、プロトコル ごとに固有のものである。換言すれば、前記伝送システムアーキテクチャは、H TTP、TCP/IPまたはSPXのような特定のプロトコルのみをサポートす るものである。このため、サポートされていないプロトコルを介して到着するリ クエストは、処理されることができない。このようなシステムは、本来、柔軟性 がなく拡張性もない。 モノリシックなアプリケーションによる多数のプロトコルをサポートする試み は、さらに、それらの非拡張性を露呈することになる。しかし、一般的に、いつ くかのプロトコルについてのサポートを追加するためには、アプリケーションに おいて付加的なコードを追加することを必要とする。多くのプロトコルが生成さ れるのに対応して、アプリケーションはより大きなものになる。アプリケーショ ンが1つの処理を実行する場合、前記アプリケーションはエラー無しに実行され 得る。しかし、前記アプリケーションが多数の処理を実行する場合、あまりにも 多くの資源が使用され、前記アプリケーションが破損することになる。 さらに、これらシステムの多くにおける耐故障性(フォールトトレランス)お よびエラー処理の欠如により、エラー訂正はほとんど不可能となる。システム資 源が使い果たされ、アプリケーションが終了した場合、しばしば、どのクライア ントのリクエストがその故障の原因となったのかを判定するのが困難になる。例 えば、前記システムは、SQL問合せまたはWorld Wide Webページリクエストが そのエラーを招いたのかを判定するための組込み(ビルトイン)型メカニズムを 備えていない。従って、前記アプリケーションは、容易にデバッグされたり、訂 正されたりできない。 考えられる1つの解決策は、分散型オブジェクトシステムの使用である。分散 型オブジェクトコンピューティングは、分散型コンピューティング(上述)の概 念とオブジェクト指向型コンピューティングの概念とを組合わせたものである。 前記オブジェクト指向型コンピューティングはオブジェクトモデルに基づくもの であり、該オブジェクトモデルにおいては、(しばしば、現実世界における現実 の対象から抽出される)“オブジェクト”と呼ばれるコードが、属性を有し、メ ソッド(または“オペレーション”もしくは“メンバ関数”)によってサービス を提供する。典型的には、前記メソッドは、前記オブジェクトが有するプライベ ート属性(データ)に作用する。同様なオブジェクトの集合は、インターフェイ ス(または、C++言語では“クラス”)を構成する。各オブジェクトは、オブ ジェクト参照と呼ばれるユニークな識別子によって識別される。 分散型オブジェクトシステムにおいて、クライアントは、サーバが実行すべき オペレーションの指示、前記オブジェクト参照、および、リクエストの成功また は失敗についての“例外情報”を戻すためのメカニズムを含む、リクエストを送 る(または“オブジェクト呼出し”を実行する)。さらに、前記クライアントに 関する“コンテキスト”情報(例えば、プラットフォームまたはマシーン)が、 前記リクエストに含まれることもある。前記サーバは、前記リクエストを受け取 り、そして、もし可能ならば、前記特定のオブジェクトについてのリクエストを 実行し、前記オペレーションの成功または失敗についての情報(“例外情報”) を戻す。クライアントおよびサーバは、共に、利用可能なオブジェクト、および 、実行可能なオペレーションについての情報を有さなければならない。従って、 これら両者は、オブジェクト管理グループ(“OMG”:Object Management Gr oup)によって定義されているインターフェイス定義言語(IDL)のような共 通の言語に対してアクセス可能でなければならない。インターフェイス定義は、 通常、IDLで書かれ、コンパイレされ、クライアントアプリケーションおよび サーバアプリケーションにリンクされる。 分散型オブジェクトコンピューティングは、従来のモノリシックアプリケーシ ョンの問題点のうちのいくつかを解決するものである。分散オブジェクトの場合 、大きなアプリケーションは、より小さな“コンポーネント”に分解されること ができ、当該システムをより管理しやすく、且つ、故障しにくくする。さらに、 前記システムは、様々なコンポーネントがプラグ・アンド・プレイし、ネットワ ーク間で共同作業し、様々のプラットフォームにおいて実行され、オブジェクト ラッパーを介してレガシアプリケーションと共存し、ネットワーク上を徘徊し、 自己およびこれらが制御する資源を管理することを可能にする。さらに、例外処 理を使用してエラーを捕捉することができる。 しかし、残念ながら、現在の標準的な分散型システムのアーキテクチャは、い かにして多数のプロトコルにより多数の情報プロバイダからクライアントに対し て情報が提供され得るか、について具体的に対処していない。前記OMGによっ て提案されたCommon Object Request Broker Architecture(CORBA)は、 オブジェクトリクエストブローカ(ORB)を使用して、クライアントとサーバ との間のオブジェクト呼出しを処理する。しかし、該CORBA基準は、依然と して、特定のプロトコルを使用しなければならないという制限に束縛されている 。OpenDocやOLEなどの他の基準も、同様に、特定のプロトコルを使用しなけ ればならない。 さらに、従来の分散型オブジェクトシステムにあっては、古典的なオブジェク ト呼出しは、リクエスト/応答メカニズムに基づいている。従って、ある一定量 の情報のみが、特定のオブジェクト呼出しにおいて送信され得る。従来の情報伝 送システムは、大量のデータ(例えば、4GBのビデオデータ)の伝送をサポー トするためのメカニズムを提供するものではない。 従って、多数のプロトコルをサポートする情報伝送方法が必要となっている。 さらに、分散オブジェクト技術を使用して個々のコンポーネントの使用を促進 する情報伝送方法が必要となっている。 さらに、ネットワーク内で大量のデータを伝送するための方法が必要となって いる。 発明の要旨 この発明は、多数のプロトコルに対するサポートを有するオブジェクト指向型 情報伝送方法およびシステムに関するものである。さらに、この発明の情報伝送 システムは、ネットワーク内のクライアントアプリケーションに対する大量の情 報伝送を可能にする。 好ましい実施の形態において、前記オブジェクト指向型情報伝送方法は、次の ようなステップを含む。先ず、情報をリクエストするアダプタコンポーネント、 情報プロバイダコンポーネントおよびナビゲータコンポーネントが、1つまたは 多数のコンピュータのメモリにロードされる。そして、ナビゲータオブジェクト 、アダプタファクトリオブジェクトおよび情報プロバイダファクトリオブジェク ト が生成される。ネットワーク上においてリクエスタからのリクエストが到着する と、ストリームオブジェクトを生成するために、前記ファクトリが呼び出される 。情報ソースから前記リクエスタに情報を流す(ストリーム)するために、前記 ストリームオブジェクトが呼び出される。ストリームインターフェイスは、情報 ソースに対してデータを書いたり読み出したりするためのオペレーションを含む 。このモデルを利用することにより、前記情報ソースから前記リクエスタに対し てデータが個別的にストリームされ得る。 他の実施の形態において、オブジェクト指向型情報伝送システムは、サーバま たはゲートウエイを介して他のサーバに情報を提供する少なくとも1つの情報プ ロバイダコンポーネントと、前記情報プロバイダコンポーネントに情報をリクエ ストする少なくとも1つのアダプタコンポーネントとを含む。各コンポーネント は、処理系ライブラリとして実現される。利用可能な様々なプロトコルに応じた 多くのアダプタコンポーネントを、前記システムに使用することができる。各ア ダプタコンポーネントは、他のサブコンポーネントに前記リクエストを送るディ スパッチャコンポーネントと前記リクエストを満足させるために使用すべき情報 プロバイダを決定するナビゲータコンポーネントとを含む多数のサブコンポーネ ントを備えている。最後に、前記システムは、前記情報プロバイダコンポーネン トから前記アダプタコンポーネントに個別的にパケットを送るためのオブジェク ト指向型技術を利用する。特に、前記システムは、各アダプタコンポーネントお よび情報プロバイダコンポーネントが、ストリームオブジェクトの生成を可能に するファクトリインターフェイスと、大量の情報ユニットの取り出しまたは格納 を可能にするストリームインターフェイスとを実施するファクトリ/ストリーム モデルを使用する。 さらに、前記情報伝送システムは、前記アダプタコンポーネントと前記情報プ ロバイダコンポーネントとの間の仲介者として機能するトレーダを使用すること もできる。このようなトレーダが使用される場合、前記ナビゲータサブコンポー ネントは前記トレーダを選択し、該トレーダは正しい情報プロバイダを選択する 。前記トレーダコンポーネントはコピーされることができ、その場合、前記ナビ ゲータサブコンポーネントは適当なトレーダを選択する。 この発明の情報伝送方法および装置は、多数の情報伝送に適用できる伸縮可能 なコンポーネントの生成を容易にする。より重要なことは、この発明のオブジェ クト指向性により、様々なコンポーネントが、異なるプラットフォーム間で、プ ロトコルから独立した形態で、情報を伝送することができる、ということである 。 この発明に係る情報伝送システムェクトは、添付図面を参照して以下に述べる この発明の詳細な説明によって、より完全に理解されるであろう。 図面の簡単な説明 図1は、この発明の方法を実施するネットワークを示すブロック図、 図2は、共通実行環境(CEE)カプセルを示す図、 図3は、IDLソースファイルのコンパイルおよびリンクを示すブロック図、 図4は、この発明の方法に使用されるコンテキストデータ構造体を示す図、 図5は、情報マトリックスのアーキテクチャ概観図、 図6は、HTTPアダプタの一例を示す図、 図7は、Gopherゲートウエイの一例を示す図、 図8は、トレードを伴わないコンポーネント間インタラクションを示す図、 図9は、トレードを伴うコンポーネント間インタラクションを示す図、 図10aは、アダプタコンポーネント間インタラクションのためのスタートア ップ局面およびセットアップ局面を示す図、 図10bは、アダプタコンポーネント間インタラクションのためのストリーム 局面およびクリーンアップ局面を示す図、 図11は、トレーダインタラクションを示す図、 図12は、情報プロバイダコンポーネント間インタラクションを示す図、 図13は、トランスフォーマコンポーネント間インタラクションを示す図、 図14aおよび図14bは、IDL定義によるデータ構造体、生成されたCI N記述およびop_tag構造体の生成されたアレイを示す図、 図15は、この発明の方法におけるクライアント側の第1の好ましい実施の形 態を示すフローチャート、 図16は、この発明の方法におけるサーバ側の第1の好ましい実施の形態を示 すフローチャート、 図17は、基本データ型および混成データ型用のCIN記述の生成を示すフロ ーチャート、 図18は、オペレーション用のCIN記述の生成を示すフローチャート、 図19は、インターフェイス用のCIN記述の生成を示すフローチャート、 図20は、PIFデータ構造体を示す図、 図21は、エントリデータ構造体を示す図、 図22は、オペレーションデータ構造体を示す図、 図23は、共用体データ構造体を示す図、 好適な実施の形態の詳細な説明 I.ハードウエアの概要 図1はネットワーク35の一例を示すものである。該ネットワーク35は、ク ライアントコンピュータ40と、この発明の情報伝送方法および装置を使用した 情報マトリックス(“IM”)コンピュータ60と、遠隔ファイルサーバコンピ ュータ80と含む。前記クライアントコンピュータ40、IMコンピュータ60 およびファイルサーバコンピュータ80は、インターネット接続部のようなネッ トワーク接続部51,53によって接続されている。前記クライアントコンピュ ータ40は、バスまたはI/Oチャンネル42を介してディスク記憶サブシステ ム43と通信し、また、I/Oチャンネル48を介してキーボードのような入力 装置41、ビデオ表示端末(“VDT”)のような表示装置48およびマウス4 7と通信する。前記クライアントコンピュータ40は、CPU45と、プログラ ムの実行についての現在の状態情報を格納するためのメモリ44とを具備してい る。前記メモリ44の一部は、クライアントコンピュータ40上で現在実行され ているプログラムの各関数に関連した状態および変数を格納するために専用され る。前記クライアントコンピュータメモリ44は、Netscape Communication Cor p.の商標Netscape Navigatorの下で販売されているブラウザのようなWorld Wide Web(“WWW”)ブラウザ49を格納している。 前記ファイルサーバコンピュータ80は、バスまたはI/Oチャンネル82を 介して対応するディスク記憶サブシステム83と通信する。該サーバシステム8 0は、CPU85とメモリ84を備えている。該ファイルサーバメモリ84には 、ファイルトランスポート(移送)プロトコル(“FTP”)サーバ89がロー ドされている。前記FTPサーバ89は、(前記IMコンピュータ60およびク ライアントコンピュータ40のような)他のコンピュータに対して、前記ディス ク記憶サブシステム83からのファイル、または、前記ファイルサーバコンピュ ータ80と通信する他の遠隔のコンピュータからのファイルを提供する。 前記IMコンピュータ60は、バスまたはI/Oチャンネル62を介して対応 するディスク記憶サブシステム63と通信する。該IMコンピュータ60は、C PU65とメモリ64を備えている。該メモリ64は、1つまたは複数の処理系 ライブラリ68と、実行環境(“CEE”)61(後述)とを備えている。 図1に示すネットワーク35は、単に、典型的なネットワークを例示するもの である。この発明の方法および装置は、1つまたは複数のコンピュータにおいて 分散した分散ソフトウエアを使用する。前記処理系ライブラリ68と実行環境6 1とは、前記クライアントコンピュータメモリ44またはファイルサーバメモリ 84に格納されてよい。さらに、前記World Wide Webブラウザ49、FTPサー バ89および実行環境61は、1つのコンピュータにロードされてよい。 II.分散型コンピューティング環境 この発明の方法および装置は、任意の分散型コンピューティング環境内で利用 可能である。好ましい実施の形態において、Tandem Message Switching Facilit y(“MSF”)Architectureの一コンポーネントである共通実行環境(“CE E”)61が使用される。前記CEEは、オブジェクトを起動したり停止したり するものであり、CEEカプセルにロードされた処理系ライブラリ間でメッセー ジのやり取りするために使用される。該CEEは、図1のように、1つのマシー ンのメモリに格納されてよい。しかし、多くの場合、前記CEEおよび処理系ラ イブラリのコピーが、ネットワーク上の多数のマシーンにロードされることにな る。 前記CEEは、“カプセル”下部構造を使用する。該カプセルは、メモリスペ ースおよび1つまたは複数の実行ストリームを封入するものである。カプセルは 、 異なるシステムでは、当該システムによって使用されるオペレーティングシステ ムに応じて、異なる態様で実現されてよい。例えば、あるシステムでは、前記カ プセルはプロセスとして実現されてよい。また、他のシステムでは、前記カプセ ルはスレッド(thread)として実現されてよい。 図2は、例えば、IMコンピュータ60に格納されたCEEカプセル70を示 すものであり、該CEEカプセル70は、CEE61、ならびに、コアCEEコ ンポーネントおよび処理系ライブラリ68内に含まれるオブジェクトの処理系の うちのいくつかを含むものである。前記処理系ライブラリ68は、後述のように 、クライアントアプリケーションまたはサーバアプリケーション79等の手書き コード、および、オブジェクトインターフェイスのIDL仕様書から生成された クライアントスタブ77を含んでいる。前記処理系ライブラリ68およびCEE 61は、該CEE61によって供給される動的アクセス可能なルーチンのダウン コーリングおよび前記処理系ライブラリに含まれるルーチンのアップコーリング によって、相互作用(インタラクト)する。また、前記CEE61は、同じマシ ーン内の他のカプセルからのオブジェクトコール82、および、他のCEEから のリクエスト84を受け取ることができる。 CEEカプセルで実現されるオブジェクトは、構成設定オブジェクトまたは動 的オブジェクトであってよい。構成設定オブジェクトの処理系の詳細は、(MSF Warehouse85のような)格納部または初期化スクリプトに格納されている。特定 のオブジェクト参照に対するリクエストがあった場合、前記クライアント側CE E61では、この構成設定データに基づいて適切なカプセルを始動する。前記カ プセルは、この構成設定データを使用して、ロードすべき処理系ライブラリおよ び呼び出すべきオブジェクト初期化ルーチンを決定する。そして、前記オブジェ クト初期化ルーチンがそのオブジェクトを生成する。動的オブジェクトは、同一 のカプセル内において、動的に生成され、破棄される。該動的オブジェクトには 、格納部に格納されたまたはスクリプト化された構成設定情報が無い。 以下のパラグラフでは、前記処理系ライブラリ68がどのようにCEE61と インタラクトするのかについてシステムレベルで概説する。前記CEE61は、 カプセル内でオブジェクトを起動したり停止したりするためのリクエストを実行 する。さらに、上述の如く、前記CEEは、カプセル間オブジェクトコール72 および他のCEE74からのリクエストを容易にする。オブジェクト起動リクエ ストは、クライアントアプリケーションまたはサーバアプリケーションからのオ ブジェクトコールが満足させられなければならない場合に発生する。オブジェク トを起動するためには、前記CEE61は、それが未だロードされていない場合 、前記オブジェクトのオペレーションを含む適切な処理系ライブラリをロードし 、その後、以下に説明するように、前記処理系ライブラリに含まれる構成設定オ ブジェクト初期化ルーチンを呼び出す。該初期化ルーチンは、前記処理系ライブ ラリがサポートするインターフェイスを指定し、その後前記CEE61によって 呼び出すべき前記オブジェクトのオペレーションのエントリポイントを登録する 。 前記処理系ライブラリ68はスタートアップ時にロードされる。スタートアッ プ時において、前記CEE61は、自己の初期化ルーチンを実行する。この初期 化ルーチンは、前記CEE61に対して、様々な前記処理系ライブラリの位置を 指示する。前記CEE61による位置検出がなされると、前記CEE61は、前 記処理系ライブラリ68における初期化ルーチンを呼び出す。前記処理系ライブ ラリに含まれる初期化ルーチンは、先ず、必要とされるアプリケーション別の初 期化(例えば、ファイルを開くことなど)を実行しなければならない。次に、両 前記初期化ルーチンは、前記オブジェクトのインターフェイスを指定するために 、GEE_INTERFACE_CREATEと称される(上述の如く動的ライブラリに含まれる)C EE関数をダウンコールする生成済のスタブ関数を呼び出す。インターフェイス は、各オブジェクトごとに指定されることができる。後述のように、インターフ ェイスの記述は、通常、インターフェイスのIDL記述から生成される。GEE_IN TERFACE_CREATEは、インターフェイスを生成し、この新たに生成されたインター フェイスに“インターフェイスハンドル”を戻す。前記ハンドルは、前記インタ ーフェイスを指示するユニークな識別子である。そして、前記初期化ルーチンは 、前記インターフェイスハンドルを使用して、GEE_IMPLEMENTATION_CREATEをダ ウンコールする。該GEE_IMPLEMENTATION_CREATEは、1つまたは複数のオブジェ クトで使用可能な実行記述を生成する。該GEE_IMPLEMENTATION_CREATEは、前記 インターフェイスにおいて各オペレーションごとの処理系を指示するユニークな 識別 子である“処理系ハンドル”を戻す。最後に、前記初期化ルーチンは、前記処理 系ハンドルを使用して、CEE_SET_METHODをダウンコールするスタブ関数を呼び出 す。該CEE_SET_METHODは、前記処理ライブラリ68に含まれる処理系の特定のメ ソッドルーチンの実際のアドレスを指示する。 III.IDLソースファイルのコンパイルおよびリンク 図3は、インターフェイス定義言語(“IDL”)ソースファイルが、この発 明の方法および装置に使用される処理系ライブラリにコンパイルされる手順を示 すものである。先ず、IDLインターフェイス定義を含むIDLソースファイル 101が生成される。IDLコンパイラ103は、前記IDLソースファイル1 01をコンパイルする。前記IDLコンパイラ103は、オリジナルソースファ イルを格納するために、コード101を分析して中間的なPickled IDLファイル (“PIF”)105を生成する。コードジェネレータ111はPIFファイル を分析する。PIFの生成については、セクションXXXにおいて後述する。代 案として、コードを生成するために、前記IDLコンパイラとコードジェネレー タとが組み合わされてもよい。前記クライアントアプリケーションとサーバアプ リケーションとが異なる言語によるものである場合、異なるコードジェネレータ 111が使用される。代案として、前記コードジェネレータ111およびIDL コンパイラ103は、1つのアプリケーションにおいて、言語別コードを生成す るために組み合わされてもよい。前記コードジェネレータ111は、クライアン トスタブ関数を含むクライアントスタブファイル77と、オブジェクト実行につ いての定義を含むサーバスタブファイル87とを生成する。コンパイルされたク ライアントスタブオブジェクトコードおよびコンパイルされたサーバスタブオブ ジェクトコードを生成するために、前記クライアントスタブファイル77および サーバスタブファイル87は、プログラミング言語別のコンパイラ121,12 3によってコンパイルされる。同様に、コンパイルされたクライアントアプリケ ーションオブジェクトコードおよびコンパイルされたサーバアプリケーションオ ジェクトコードを生成するために、クライアントアプリケーション79およびサ ーバアプリケーション89は、プログラミング言語別のコンパイラによってコン パイルされる。前記クライアントアプリケーション79およびサーバアプリケー ション89は、さらに、前記コードジェネレータ111によって生成されるヘッ ダファイル119を含む。該ヘッダファイル119は共通の定義および宣言を含 む。最後に、前記言語コンパイラ121は、前記クライアントアプリケーション オブジェクトコードとクライアントスタブオブジェクトコードとをリンクするこ とにより、処理系ライブラリ71を生成する。同様に、第2のコンパイラ123 は、前記サーバアプリケーションオブジェクトコードとサーバスタブオブジェク トコードとをリンクすることにより、他の処理系ライブラリ81を生成する。 IV.ファクトリインターフェイスおよびストリームインターフェイス この発明の方法および装置は、ネットワーク内で分散可能な1つまたは複数の ソフトウエアコンポーネントで構成される情報伝送システム(“情報マトリック ス”)において利用可能である。各コンポーネントは様々な形態で実現可能であ る。この発明の方法および装置により、開発者は、特定の情報伝送タスクに適す るよう各コンポーネントを実現することができる。しかしながら、各コンポーネ ントの好ましい処理系は、前記CEE61にロードされここで実行される処理系 ライブラリ68の一部分として格納されている。各処理系ライブラリ68は、I DLにより定義されたインターフェイスを処理することによって、これらのイン ターフェイスのオブジェクトを生成する。上述のように、インターフェイス定義 は、IDLで書かれ、IDLコンパイラによってコンパイルされ、コードジェネ レータによって前記コンポーネントのコードにリンクされる。こうして、前記コ ンポーネントは、そのインターフェイスのオブジェクトを生成する。各オブジェ クトインターフェイスは、オブジェクト呼出しを介して他のオブジェクトとイン タラクトする。 図5に示すように、情報マトリックス69のコンポーネントは、4つの主要な 抽象コンポーネント(抽象体)、すなわち、(1)アダプタ(Adaptor)、(2 )サーバ(Server)、(3)ゲートウエイ(Gateway)および(4)トレーダ(T rader)、に分割されることができる。各抽象体は、1つまたは複数の実際のソ フトウエアコンポーネント(処理系ライブラリ)を含む。ここに説明する例にお いて、すべての抽象体およびこれらに含まれるコンポーネントは、1つのIMコ ンピュータにロードされる。しかし、あるコンポーネントがクライアントコンピ ュ ータにロードされ、また、あるコンポーネントがサーバコンピュータにロードさ れていもよい。前記アダプタ抽象体(Adaptor Abstraction)は、リクエスタが 前記情報マトリックス69から情報を取り出すための方法を提供する。図1にお いては、クライアントマシーンメモリにロードされたWorld Wide Webブラウザ4 9がリクエスタとなる。リクエストは、IMコンピュータメモリ64にロードさ れたアダプタ抽象体のコンポーネントのうちの1つに到達することになる。図5 は、Hypertext Transport Protocol(“HTTP”)アダプタ131、Gopher(イン ターネットサーバ)プロトコルアダプタ133およびNetwork News Transportア ダプタ135を含むアダプタ抽象体の一例を示している。他の種類の情報取出し リクエストのために、付加的なアダプタ抽象体が追加されてよい。前記ゲートウ エイ抽象体(Gateway Abstraction)は、外部情報ソースを前記情報システムに 接続する。例えば、図5は、HTTPゲートウエイ137、Gopherゲートウエイ13 9およびFile Transport Protocol(“FTP”)ゲートウエイ141を示している 。前記サーバ143は、前記情報伝送システム内部に存在し、ディスクファイル 145のようなローカルソースからの情報を提供する。前記ゲートウエイおよび サーバは、共にアダプタに対して情報を提供するので、“情報プロバイダ”と呼 ばれる(前記ゲートウエイは外部ソースからの情報を提供し、前記サーバは内部 ソースからの情報を提供する)。トレーダ(Trader)150は、情報プロバイダ のロードをバランスさせるための方法に基づいて、必要とされるタイプのゲート ウエイまたはサーバを選択する。しかしながら、トレーダ150を使用すること なく、リクエスタに対して情報の提供がなされてもよい。 この発明の各コンポーネントは、多数のIDLインターフェイスを実現するこ とができる。しかし、この発明は、あるコンポーネントについて、2つのインタ ーフェイス、すなわち、ファクトリインターフェイスおよびストリームインター フエイスである2つのインターフェイスが実現される、ことを必要とする。前記 ファクトリインターフェイスおよびストリームインターフェイスを実現するある コンポーネントに関して、該インターフェイスはまさに以下に説明するように実 現される。しかし、他のコンポーネントは前記ファクトリインターフェイスおよ びストリームインターフェイスのオペレーションを“引き継ぐ”。すなわち、こ れらのコンポーネントは前記インターフェイスに対してオペレーションを付加す る。前記ファクトリインターフェイスおよびストリームインターフェイスは、1 つのコンポーネントから他のコンポーネントに大量のデータを送るために、ある コンポーネントによって利用される。 前記ファトリインターフェイスはストリームオブジェクトを生成するために( いずれかのコンポーネントの)オブジェクトによって呼び出され、該ストリーム オブジェクトは、コンポーネント間で大量のデータを送るために使用される。前 記ファクトリインターフェイスは、生成(Create)オペレーションのみを含み、 ただ1つの例外(予期されない出来事)を発生する。前記生成(Create)オペレ ーションはIDLにより次のように定義される。 1番目のパラメータpathは、情報のストリームの生成が必要な資源の名前である 。2番目のパラメータは、ファクトリオペレーションが資源を見つけ、該資源の ためのストリームを生成することを必要とする、ことを示す値を含むfactorType パラメータである。前記contextBufferパラメータは、リクエストされた前記ス トリームのための“コンテキスト”を含み、前記ファクトリを異なる形態で動作 させるデータを含むことができる。例えば、前記コンテキストは、特定のタイプ (.JPEGや.GIFなど)のデータに対するリクエストを含むことができる。(コン テキストの伝播のためのコンフィギュレーション(構成設定)については後述す る)。前記Createオペレーションは3つの出力パラメータを有する。前記stream Typeパラメータは、戻されるストリームオブジェクトのストリーム方向を示す。 前記streamTypeパラメータは、前記ストリームが“Get”オペレーションのみの ためか、“Put”オペレーションのみのためか、あるいは、両前記オペレーショ ンが実行され得るか、を示す3つの値を有することができる。前記streamObject パラメータは、前記リクエストされたストリームオブジェクトについてのオブジ ェクト参照を含む。その後のすべてのストリームオペレーションは、このオブジ ェクトに対して行われなければならない。前記streamHandleパラメータは、前記 ストリームオブジェクト内において情報ストリームを指示する。前記streamHand leは、前記ストリームオブジェクトから情報を得るために該オブジェクトに与え られる。 前記ファクトリインターフェイスは、1つのエラーが発生した時にただ1つの 例外を発生する。好ましい実施の形態において、(1)ストリームテーブルが満 杯、(2)安全上の理由により、そのプロセスが必要な情報にアクセスできない 、(3)リクエストされた資源が存在しない、(4)前記リクエストされた資源 が(ロックされたファイル、故障した遠隔ホストなどの理由により)利用できな い、(5)前記リクエストされた資源がリクエストされたフォーマットで利用で きない(そのファイルが.JPEGファイルであり、コーラは.GIFファイルのみを受 け入れると明示した場合など)、および、(6)そのオペレーションは成功した が、データは存在しない、などの理由のうちの1つ又は複数のための例外が発生 される。 前記ストリームインターフェースは、1つのコンポーネントから他のコンポー ネントに対する情報のストリーム伝送(ストリーミング)をサポートする。オブ ジェクト呼出しは、使用される基本的なメカニズムおよび特定のシステムにおけ るその実行に応じて、一定のサイズに制限される。後述するように、前記ストリ ームインターフェースは、オブジェクトの“Get”オペレーションに対する多数 の呼出しを通して、通常より相当大きな情報の取出しを容易にする。 個別の情報ユニットを得るために、他のオブジェクトによってストリームオブ ジェクトが呼び出される。前記ストリームオブジェクトは、Getオペレーション 、Putオペレーション、DestroyオペレーションおよびCancelオペレーションであ る4つのオペレーションを含む。前記GetオペレーションはIDLにより次のよ うに定義される。 前記Getオペレーションは、“ハンドル”によって指示されたストリームオブジ ェクト(“ストリーム”または“データストリーム”)からデータを読み出すた めにコンポーネントによって使用される。データは順次またはランダムに読み出 されてよい。該Getオペレーションは、handle、length、buffer、end of stream 、operation識別子およびoffsetパラメータをとる。前記handleパラメータは、 リクエストされた情報ストリームを指示する。データストリームのためのハンド ルが、ファクトリオブジェクトについてのCreateオペレーションに対する呼出し から戻される。lengthパラメータは、呼出し(コーラ)側のコンポーネントが受 け入れする用意のあるデータ量を指示する。該lengthについて許可される最大値 は、前記オブジェクト呼出しのために使用されるトランスポート(移送)メカニ ズムによって定義される。戻される実際のデータ量は、処理系に応じて、より少 ない場合がある。前記bufferパラメータは、前記オペレーションからの成功した 戻り時に、リクエストされたデータを含むものである。前記end of streamパラ メータ(通常はブール論理)は、リクエストされたシステムにそれ以上のデータ が存在するか否かを示す。前記offsetパラメータは、読み出されるべきデータブ ロックのスタートを記述する。このoffsetは、(特定の処理系がランダムデータ アクセスをサポートする場合)バイト位置であり、または、前記ストリームから 読み出された前のデータブロックの直後にそのデータブロックがスタートするこ とを示す値である。前記operation識別子は、単に、読み出されたオペレーショ ンを指示するものである。 前記Putオペレーションは、前記ハンドルによって指示されたストリームに対 してデータを書き込むために使用される。データの書込みは、順次、または、処 理系が許す場合にはランダムな順序で行われてよい。該putメソッドは次のよう に定義される。 上記定義に示すように、前記Putオペレーションは4つのパラメータをとる。こ れらのパラメータは、これらがwriteオペレーションに対応するという点を除き 、前記Getメソッドのコンポーネントに類似している。前記Destroyオペレーショ ンは、前記ストリームハンドルによって指示されるストリームがもはや必要でな いときに、呼び出される。該メソッドは次のように定義される。前記Destroyオペレーションは、わずか3つのパラメータ、すなわち、operation 識別子、ストリームhandle、および、そのストリームがいかに処理されるべきか を示すdisposeパラメータ、をとる。好ましい実施の形態において、前記dispose パラメータは、ストリーミングが成功状態に完了したこと、ストリーミングが不 成功状態に完了したこと、または、例外発生によりストリーミングが成功状態に 完了しなかったこと、を示す3つの値をとる。 前記Cancelメソッドは、未完了のストリームオペレーションをキャンセルする ために使用される。該メソッドは次のように定義される。 前記Cancelメソッドは、わずか2つのパラメータ、すなわち、そのストリームに 対するhandleおよびoperation識別子、をとる。例外は、ストリーミングオペレ ーションに関する情報を戻す。好ましい実施の形態において、例外情報は、次の 理由、すなわち、(1)前記オブジェクト呼出しを受け取ったオブジェクトが、 リクエストされたハンドルを持つストリームを有さない、(2)閉じられた接続 、ファクトリ削除またはこれと同様なイベントにより、前記ストリームが、スト リーミング中のデータに対するアクセスを失った、(3)特定のオフセットが制 限外(ファイルサイズより大きい)、(4)特定のオフセットがストリーム処理 系(Getメソッド)の及ばない所にある、(5)書かれるべきストリームオブジ ェクトについて“Get”メソッドが行われた、または、取り出されるべくストリ ームオブジェクトについて“Put”メソッドが試みられた、(6)オペレーショ ンの代りにI/Oオペレーションが行われている間に発生したタイムアウトによ り、ストリームオペレーションが失敗した、および、(7)ストリーム処理系が 提供できる以上のデータをリクエストまたは供給するGetオペレーションまたはP utオペレーションが実行された、という理由のうちの1つまたは複数について戻 される。 V.コンテキスト 上述の如く、この発明によって使用されるコンポーネントは、様々異なる時に ロードされ得る処理系ライブラリとして構成設定されている。この構成設定は、 新たなコンポーネントの生成を容易にし、各コンポーネントのデフォルト機能を 容易に変更可能にする。しかし、各コンポーネントがその機能を実行する上で、 各コンポーネントは、そのタスクを実行するための特殊な情報を必要とすること がある。この発明は、コンポーネント間で予め定義された情報(“コンテキスト ”)の実行時(ランタイム)伝送を可能にするコンテキスト構造体を使用する。 好ましい実施の形態において、コンテキストは、図4に示すようなテキスト構 造体を使用して、1つのコンポーネントから他のコンポーネントに送られる。該 構造体は名前/値の対で構成されるオクテット文字列であり、前記名前は英数字 列であり、その値197はIDLで定義された任意のタイプでよいものである。 さらに、前記文字列は、コンテキスト要素の長さ191と、全文字列の長さ19 3と、前記名前の長さ195とを含む。前記値197は、IDLで定義された“ 任意”のタイプであり、Presentation Convention Utilities(“PCU”)を 使用してエンコードされている。PCUエンコード方式は、IDL定義されたデ ータ構造体の、表示形式から独立したエンコード方式である。前記Presentation Convention Utilitiesについては、後のセクションIXで説明する。 この発明において、コンテキストは、可変量のデータを含む抽象データ型とし い実現される。1つのコンポーネントは、コンテキストを生成し、該コンポーネ ントについての特定の情報などの情報をコンテキスト構造体に入れる。前記情報 はファクトリの一部として提供される。そして、前記ファクトリは、コンテキス トにより完成され、ナビゲータに発送される。該ナビゲータの決定は、コンテキ スト情報のみに基づく。前記情報のプロバイダは、前記コンテキストに提供され た情報を使用しても、しなくてもよい。トレーディングが必要な場合、そのトレ ーダは前記情報を使用する。 前記コンテキストを操作し、拡張するために、一連のCEEルーチンが提供さ れる。これらのルーチンは、該コンテキストを利用するアプリケーションに影響 することなく、前記コンテキスト構造体の変更を可能にする。これらのルーチン のうちの多くのものは、コンテキストバッファを指示するポインタをとる。前記 Put関数は、名前およびコンパクトなIDL表記(“CIN”)で書かれたデー タ構造体の記述子をとる。 コンテキスト構造体は関数IM_Context_Initializeを使用するコンポーネント によって初期化される。該関数IM_Context_Initializeのプロトタイプは次のよ うである。 前記contextパラメータは、上述のように割り当てられたコンテキスト構造体で ある。前記sizeパラメータは、前記コンテキスト構造体において利用可能なバッ ファスペースである。この関数は、前記コンテキスト構造体を初期化し、他の関 数による使用のための準備をする。 コンテキスト構造体に要素を格納するために、前記コンポーネントは関数IM_C ontext_ElememtPutを呼び出すことができ、該IM_Context_ElememtPutは値IM_Con text_RSXXXを戻す。前記contextパラメータは、初期化されたコンテキスト構造体である。該コンテ キスト構造体のサイズは、contextSizeに指示されている。格納すべき要素の名 前は、前記nameパラメータによって指示される。前記cinパラメータは、前記要 素の値のデータ型を記述する文字列である。前記bufferは、前記関数からの成功 した戻り時に格納されことになる前記要素の値を含む。このバッファは、“任意 の型”というIDL構造体を有する。 さらに、前記関数は、前記オペレーションの成功または失敗に関する情報を戻 す。前記IM_Context_RSXXX値は、前記オペレーションが成功したか否かを示す。 前記オペレーションが成功しなかった場合、その戻り値は、(1)供給された名 前をもつ要素が前記コンテキストにおいて見つからなかったこと、(2)供給さ れたコンテキストが有効なコンテキスト構造体を含まなかったこと、または、( 3)供給されたコンテキストに前記要素を格納する余裕がなかったこと、を示す 。 これらの関数IM_Context_StringPutおよびIM_Context_LongPutは、それぞれ、 文字列またはlongをコンテキスト構造体に格納するために使用される。これらの 関数は次のように定義される。 これらの関数において、前記Contextパラメータは初期化されたコンテキスト 構造体である。該構造体のサイズは、contextSizeに指示されている。格納すべ き文字列またはlongの名前は前記nameパラメータによって指示され、前記関数か らの成功した戻り時に格納されるべき前記文字列またはlongの値は、stringValu eまたはlongValueによって指示される。前記関数は、前記オペレーションが成功 または失敗を示すためにIM_Context_RSXXXを戻す。該戻し値IM_Context_RSXXX、 IM_Context_ElementPutについての戻し値と同一である。 前記コンテキスト構造体から要素を取り出すために、前記アプリケーションま たはコンポーネントは、次のように定義されるIM_Context_ElementGet、IM_Cont ext_StringGetまたはIM_Context_LongGetを呼び出すことができる。 前記パラメータはそれらのGet版に類似している。前記nameパラメータは、前 記コンテキスト構造体から取り出すべき文字列またはlongまたは要素の名前であ る。 次のように定義されるIM_Context_ElementDeleteを介して、前記コンテキスト 構造体からの要素の削除も可能である。 この関数において、contextは初期化されたコンテキスト構造体であり、nameは 削除すべき要素の名前である。これらのオペレーションの各々についての戻し値 IM_Context_RSXXXは、前のコンテキスト関数と同一である。 VI.抽象体 A.アダプタ 各抽象体、すなわち、アダプタ、ゲートウエイ、サーバまたはトレーダは、1 つまたは複数の実際のコンポーネントで構成されている。アダプタ抽象体(Adap tor Abstraction)は、リクエスタから入って来るリクエスト(例えば、クライ アントコンピュータのウエブブラウザ49からのリクエスト)を待つ。前記アダプ タコンポーネントは、前記情報伝送システムにおける情報を前記リクエスタに接 続する。図6の例に示すように、アダプタは、最高6つのまでのコンポーネント 、すなわち、(1)トランスポータコンポーネント、(2)オーセンティケータ (認証)コンポーネント、(3)ディスパッチャコンポーネント、(4)アダプ タコンポーネント(前記Adaptor Abstractionと混同しないよう)、(5)ナビ ゲータコンポーネントおよび(6)トランスフォーマコンポーネント、を含む。 前記トランスポータコンポーネントは、リクエスタに対して、異なるプラット フォームの様々なプロトコルへのインターフェイスを与える。該トランスポータ コンポーネントは、前記ファクトリインターフェイスおよびストリームインター フェイスから引き継ぐTranportFactoryおよびTranportStreamをそれぞれ実行す る。該TranportFactoryはTranportStreamオブジェクトを生成する。該TranportS treamオブジェクトは、前記トランスポータコンポーネントに到着するリクエス トのための接続を確立するために必要な資源を示す。前記TranportStreamインタ ーフェイスは、前記GetオペレーションおよびPutオペレーションをサポートする 。前記Getオペレーションおよびputオペレーションは、データの読書きまたはデ ータの送受に対応するものでよい。前記TranportStreamインターフェイスは、3 つの付加的なオペレーション、すなわち、(1)接続(Connect)、(2)受取 り(Accept)、および、(3)切断(Disconnect)を追加する。 前記Connectオペレーションは、TranportStreamオブジェクトを遠隔のホスト に接続するために1つのコンポーネントによって呼び出されるものであり、次の ように定義される。前記handleは、前記TranportStreamオブジェクトに対するハンドルである。前記 pathパラメータは、(TCPトランスポータのための“remote.host.com:80”ま たはLanマネージャのための“//remote_host/pipe/named_pipe”などの)なすべ き接続を記述する文字列である。 前記Acceptオペレーションにより、前記ストリームは新たな接続を待つ。接続 が確立されると、前記呼出しが完了する。該Acceptオペレーションは次のように 定義される。 前記handleは、前記TranportFactory生成呼出しによって戻される特定のTranpor tStreamオブジェクトのためのハンドルである。前記pathパラメータは、確立さ れた接続を記述する文字列である。 前記切断メソッドにより、前記TranportStreamオブジェクトは、それが接続さ れた遠隔のホストから断続される。該切断メソッドは次のように定義される。 前記オーセンティケータコンポーネントは、アダプタ抽象体に到着する情報リ クエストを認証する。該リクエストがユーザ情報およびパスワード情報を含む場 合、前記オーセンティケータは、その組合せが有効だということを保証するため に、提供された情報をオペレーティングシステムに対してチエックする。 前記アダプタ抽象体のディスパッチャコンポーネントは、適当な前記アダプタ コンポーネントに対して適当な順序でリクエストを送り出すことによって、該リ クエストの処理を管理する処理系ライブラリである。好ましい実施の形態におい て、前記ディスパッチャはマルチスレッド式のステートマシーンである。該ディ スパッチャは、様々なアダプタコンポーネントのファクトリインターフェイスに ついていくつかのCreateオペレーションを呼び出す。該ディスパッチャは、リク エストについて使用すべき情報プロバイダファクトリを決定するために、ナビゲ ータコンポーネントを呼び出す。該ディスパッチャは、前記情報プロバイダファ クトリを呼び出す。その後、前記ディスパッチャは、前記情報プロバイダから前 記トランスポートストリーム中にデータを送り込み、前記情報プロバイダが利用 可能なデータがそれ以上無いということを示すまでこれを続ける。 前記アダプタ抽象体はアダプタコンポーネントを含み、該アダプタコンポーネ ントは、リクエストを受入れ、該リクエストを他のコンポーネントによって使用 されるような標準形態に変換するための論理を提供する。さらに、このコンポー ネントは、前記リクエスタに対して応答を返すための論理を提供する。前記アダ プタコンポーネントは、トランスレータライブラリを使用して、特定のプロトコ ルとコンテキストとの間のリクエストおよび応答を変換する。前記トランスレー タライブラリは、リクエストおよび応答を解析し生成するための関数を含む。前 記アダプタコンポーネントは、前記トランスレータライブラリに対して解析リク エストをする。該解析リクエストは、到着するリクエストを取得し、これを解析 し、前記コンテキストに関連値を格納する(上述)。同様に、前記コンテキスト を取得し、プロトコルに固有の応答を生成する。 前記ナビゲータコンポーネントは、(前記アダプタコンポーネントによって提 供される)標準形態のリクエストを取得し、そのリクエストを履行するために使 用すべき情報プロバイダおよびトレーダを決定する。前記ナビゲータコンポーネ ントは、次のように定義される1つのNavigateオペレーションを有するNavigato rインターフェイスを実行する。前記ナビゲータは、パラメータとしてのサブジェクトおよびコンテキストをとる インターフェイスのナビゲーションを提供する。そして、該ナビゲーションは、 コンテキストに設定されるナビゲーション規則に基づいて、該コンテキストを修 正する。前記ナビゲータによって使用される規則は、複数のサブジェクトに細分 される。サブジェクトは、規則ツリーにおける1つの規則として使用される。前 記ナビゲータの構成は多くのサブジェクトを含むことができる。1つのサブジェ クトに基づくナビゲーションは、その特定のサブジェクトに関連するコンテキス トに付加的な値を加える。 ナビゲーションは規則に基づくものである。前記規則は、条件を含まなければ ならず、割当て規則および他の規則を任意に含むことができる。前記条件はアト ム条件で構成される。該アトム条件は次の形態のうちのいずれかをとる。 すなわち、contextelementname‐'regular expression':前記contextele mentnameによって示されるコンテキスト要素の値が文字列型であり、'regular e xpression'によって与えられる正規表現と一致する場合、このアトム条件は“真 ”となる。 contextelment operator‐'String constant':前記contextelementname によって示されるコンテキスト要素の値が文字列(string)型であり、'string constant'によって与えられる文字列と同様である場合、このアトム条件は“真 ”となる。オペレータ(演算子)は、“=”、“>”、“<”、“>=”または “<=”である。 contextelment operator numeric constant:前記contextelementnameに よって示されるコンテキスト要素の値が数字型であり、numeric constantによっ て与えられる値と同様である場合、このアトム条件は“真”となる。オペレータ (演算子)は、“=”、“>”、“<”、“>=”または“<=”である。 さらに、演算子“not”、“and”および“or”を使用することによってアトム 条件を組み合わせて、より複雑な条件を作ってもよい。 前記トランスフォーマコンポーネントは、1つのフォーマットから他のフォー マットにデータを変換する。該トランスフォーマは、ディスパッチャコンポーネ ントと情報プロバイダとの間に位置する。該トランスフォーマは、前記ディスパ ッチャコンポーネントには情報プロバイダに見え、前記情報プロバイダにはディ スパッチャに見える。こうして、変換は、様々なコンポーネントにとって、透明 (不可視)状態で行われる。 トランスフォーマは、前記Stream(ストリーム)インターフェイスおよびFact ory(ファクトリ)インターフェイスを利用する。前記トランスフォーマファク トリオブジェクトは、情報ストリームを生成するために、情報プロバイダファク トリオブジェクトを呼び出す。こうして、該トランスフォーマファクトリは、ト ランスフォーマストリームオブジェクトを生成し、前記情報ストリームおよびト ランスフォーマ関数を付加する。前記ファクトリは、前記トランスフォーマスト リームオブジェクトの参照およびハンドルを戻す。当該オペレーションの成功ま たは失敗を示す例外を戻すことができる。 図6は、HTTPアダプタの一例のコンポーネントを示す図。該HTTPアダ プタは、共通のインターフェースをすべてのプラットフォームのTCPに供給す るTCPトランスポータコンポーネント155を含む。該TCPトランスポータ ファクトリは、ソケットを生成し、任意に、該ソケットをポートに結び付ける。 前記TCPトランスポータStreamは、前記Acceptオペレーションを使用して、前 記ポートにおけるソケット呼出しを聞きこれを受け取る。リクエストが到着する と、前記Accept呼出しが完了する。前記Connectオペレーションは、ソケット呼 出し接続を実行するために使用される。前記Putオペレーションは、前記ソケッ トでの送出しを実行する。 オーセンティケータコンポーネント161は、アプリケーションから前記アダ プタに到着する情報リクエストを認証する。該オーセンティケータコンポーネン トは、パスワードおよび他のユーザに固有の情報をチェックするために利用され ることができる。この情報はオペレーティングシステムに対してチェックされる 。前記ディスパッチャは、前記アダプタにおける残りのコンポーネントに前記リ クエストを送る。トランスフォーマコンポーネント157は、様々異なるテキス ト情報からHypertext Markup Language(“HTML”)を生成する。 前記アダプタコンポーネント153は、前記TCPトランスポートを使用して HTTPリクエストを受け入れ、ネットワークを介して応答を返す。前記アダプ タは、関数を有する変換ライブラリを使用してHTTPリクエストおよび応答を 生成する。該アダプタは、前記HTTPリクエストヘッダを取得しこれをコンテ キスト要素に中に格納する解析リクエストを行う。 ナビゲータコンポーネント159は、一定の構成設定情報に基づいて、前記リ クエストを履行するために使用すべき情報プロバイダおよびトレーダを決定する 。以下、これらのコンポーネントの各々の機能について、各コンポーネントによ って実行されるインターフェースの説明に続いて詳述する。 B.トレーダ 前記トレーダ150は、Trader FactoryインターフェースおよびTrader Regis trationインターフェースを実行するトレーダコンポーネントと称されるだだ1 つのコンポーネントを有する。前記アダプタのディスパッチャコンポーネントは 、前記トレーダのファクトリオブジェクトを呼び出す。前記トレーダコンポーネ ントは、ロードバランス用のアルゴリズムを使用して、多くの情報プロバイダの うちの1つの情報プロバイダを選択する。前記トレーダは、情報プロバイダのた めの有効なストリームオブジェクト参照およびハンドルを戻す。スターアップ時 において、情報プロバイダは、前記トレーダに登録され、該トレーダに対してそ れらの情報伝送能力を通知する。 前記Createオペレーションがトレーダファクトリにいて前記ディスパッチャに よって呼び出されると、前記トレーダは情報プロバイダファクトリオブジェクト を選択する。該トレーダは、前記情報プロバイダのためにファクトリオブジェク トを呼び出し、前記ストリームオブジェクト参照およびストリームハンドルを前 記ディスパッチャに戻す。リクエストされたタイプの情報プロバイダファクトリ オブジェクトが前記トレーダに登録されていない場合、または、すべての利用可 能な情報プロバイダファクトリオブジェクトがビジーである場合、前記トレーダ は例外を戻すことができる。 トレーダ登録インターフェイスは、情報プロバイダがトレーダに登録されるの を可能にする。前記トレーダは、前記アダプタのディスパッチャコンポーネント によって該トレーダに提供された情報に基づいて、情報プロバイダを選択するこ とができる。前記トレーダ登録インターフェイスは、Register New Information Providerオペレーション、Un-register Information Providerオペレーション 、Change Registration Informationオペレーションを含む。前記Register New Information Provider呼出しは、情報プロバイダによりトレード用に自分自身を 登録するために使用される。各情報プロバイダは、その名前(例えば、“File” Server、“Gopher Gateway”など)、そのオブジェクト参照、そのファクトリが 生成するよう設定された最大ストリーム数、および、トレーダがロードバランス 用のアルゴリズムを実行するのを補助する他の情報を提供する。前記情報プロバ イダは、該情報プロバイダが動作停止しまたはトレード用に利用不能になる旨示 すために、前記Un-register Information Providerを呼び出す。該Un-register Information Provider呼出しは、登録された情報プロバイダが生成可能なストリ ームの数、または、トレードに影響する他のプロパティを変更するために使用さ れる。 前記トレーダコンポーネントが情報プロバイダファクトリオブジェクト呼出し 時に例外を受け取った場合、前記トレーダは故障中のファクトリから回復する可 能性を有する。1つ以上の情報プロバイダファクトリオブジェクトが利用可能で あり、該ファクトリオブジェクトのうちの1つについて例外が戻された場合、他 のファクトリオブジェクトが使用されてよい。ただ1つの情報プロバイダファク トリオブジェクトが利用可能であり、例外が該ファクトリが一時的なものである ことを示す場合、前記トレーダは、所定量の時間だけ待ち、該ファクトリオブジ ェクトの呼出しを再び試みるよう構成可能である。 C.情報プロバイダ 1.ゲートウエイ ゲートウエイ抽象体(Gateway Abstraction)は、外部情報を前記情報マトリ ックスに接続するために使用される。該Gatewayは、トランスポータコンポーネ ントとゲートウエイコンポーネントとを含む。前記トランスポータコンポーネン トは、前記アダプタ抽象体に使用されるトランスポータコンポーネントと同じ関 数を実行する。こうして、前記トランスポータコンポーネントは、様々なトラン スポートプロトコル、および、様々異なるプラットフォームのプロトコルに対す る様々なインターフェイスのための抽象体を提供する。前記ゲートウエイコンポ ーネントは、スタートアップ時に前記トレーダに登録される。前記ゲートウエイ コンポーネントは、(アダプタコンポーネントによって生成されるような)標準 形態のリクエストを取得し、該リクエストを前記トランスポートコンポーネント を使用してネットワークを介して送出可能な外部リクエストに変換するための論 理を提供する。また、該ゲートウエイコンポーネントは、遠隔のホストから応答 を受け取るための論理を提供する。 前記ゲートウエイコンポーネントは、ファクトリインターフェイスおよびスト リームインターフェイスを実行する。呼び出されると、ゲートウエイファクトリ オブジェクトは、ストリームオブジェクトとストリームコンテキストとを生成す る。その処理系に応じて、該ストリームコンテキストは、ファイルハンドル、S QLカーソル、付加的なオブジェクト参照等を含むことができる。 前記ストリームインターフェイスは、Getオペレーション、Putオペレーション およびDestroyオペレーションを使用する。前記Getオペレーションは、ストリー ムから一定範囲のバイトをリクエストするために使用される。前記Putオペレー ションは、一定範囲のバイトをストリームに格納する。前記Destroyオペレーシ ョンは、ストリームオブジェクトに対して、該オブジェクトがもはや使用されな い旨知らせる。前記ストリームオブジェクトはその資源を解放し、該オブジェク トは削除されることができる。好ましい実施の形態において、ストリームは、ス トリームオブジェクト参照およびストリーム識別子によって指示される。該スト リーム識別子は、ゲートウエイストリームファクトリに対して呼出しがなされる ときに、該ファクトリによって割り当てられる。ストリーム識別子は、ストリー ムテーブルにおけるエントリのハンドルである。前記ストリームテーブルは、提 供されるべきデータを決定するためのルックアップテーブルとして使用される。 前記ストリームテーブルは、ゲートウエイの各実行ごとに異なることができるス トリームコンテキストを含む。従って、前記ストリームコンテキストは、ファイ ルハンドル、ソケット番号、オブジェクト参照、SQLカーソル、または、スト リームオブジェクトに対する異なる呼出し間で維持されなければならない他のコ ンテキストを含むことができる。 図7は、gopherゲートウエイ139の一例を示す。該ゲートウエイ139は、 ゲートウエイコンテキスト169およびTCPトランスポータコンポーネント1 71を含む。該gopherゲートウエイ139は、HTTPアダプタに使用されてい るものと同じTCPトランスポータ171を使用する。前記gopherゲートウエイ コンテキスト169は、前記TCPトランスポータコンポーネント171を使用 して、gopherリクエストを送り、前記ネットワークを介して応答を受け取る。 2.サーバ サーバ抽象体はサーバコンポーネントのみを含む。前記サーバコンポーネント は、(前記アダプタコンポーネントによって生成される)標準形式のリクエスト を受け取り、ローカル情報にアクセスすることによって該リクエストを分解する 。前記サーバは、ファクトリインターフェイスおよびストリームインターフェイ スを実行する。サーバファクトリオブジェクトについてのCreateオペレーション は、リクエストされたファイルを開くよう試みる。前記ファイルを開くことが成 功した場合、前記ファクトリは、ストリームオブジェクトを生成し、前記ストリ ームテーブルにおけるエントリを初期化する。前記ストリームテーブルは、ファ イル名、ファイルハンドル、ファイルサイズ、ならびに、各オペレーション後に 書き込まれ読み出されるバイト数を含むものである。 前記ストリームオブについてのGetオペレーションは、開かれた前記ファイル について読出しを実行する。前記putオペレーションは該開かれたファイルに書 き込む。前記Destroyオペレーションは、前記ファイルを閉じ、前記ストリーム テーブルにおけるエントリを削除する。 VII.コンポーネント間におけるシステムレベルでのインタラクション A.トレーダ無しインタラクション 図8において、上記インターフェイスを使用する様々なコンポーネント間イン タラクションの巨視図である。各コンポーネントの実行については後で詳述する 。前記コンポーネント間のすべてのインタラクションは、オブジェクト呼出しに 基づく。該オブジェクト呼出しは、同一のカプセル内のオブジェクト間、異なる カプセル内のオブジェクト間、および、異なるマシーン上のオブジェクト間では 、透明(不可視)的に機能する。 図8〜図13の各々は、ある期間におけるオブジェクト生成およびインタラク ション(上から下への処理)を示す。特に、スタートアップ局面、セットアップ 局面、ストリーム局面、クリーンアップ局面が示されている。各コンポーネント (すなわち“処理系ライブラリ”または’“IL”)は、インターフェイスを示 す1つまたは複数の付加的なボックスを含むボックスとして示されている。オブ ジェクトの生成および破棄は、中空の円によって示されている。前記オブジェク トの寿命は、該オブジェクトから延びる縦線によって示されている。中空の先端 部を有する矢印は、オブジェクトインタラクションを示す。黒塗りの先端部を有 する矢印は、コンテキスト構造体の移送を含む。 アダプタ131,133,135および情報プロバイダ137,139,14 1,143は、トレーダ150を巻き込んで、または、トレーダ150を巻き込 むことなく対話する。ほとんどの場合、トレーダ150が巻き込まれる。しかし 、前記情報伝送システムが1つの目的を提供する1つのサーバを含む場合、前記 トレーダは不要である。先ず、図8、図9および図10を参照して、前記トレー ダ150を巻き込むことなくインタラクションする場合について説明する。ここ で、図6に示すように前記WWWブラウザ49からのリクエストがHTTPアダ プタ131に到着し、図7に示すように前記gopherゲートウエイが情報プロバイ ダとして使用される、と仮定する。しかし、例えばgopherアダプタまたはNNT Pアダプタのような他のアダプタにリクエストが到着してもよい。さらに、goph erゲートウエイまたはFTPゲートウエイまたはローカルファイルサーバが情報 プロバイダとして使用されてもよい。 図8は、スタートアップ、セットアップ、ストリームおよびクリーンアップ局 面時におけるコンポーネント間のデータストリーミングを示す。上述のように、 各抽象体のコンポーネントは個別のカプセルにロードされるのが好ましい。この 図8において、アダプタコンポーネント153、ディスパッチャコンポーネント およびナビゲータコンポーネント159を含むアダプタコンポーネントは、アダ プタカプセルにロードされている。情報プロバイダコンポーネント139は、情 報プロバイダカプセルにロードされている。 前記スタートアップ局面において、様々なコンポーネントが初期化され、ロー ドされる。ステップ803では、前記処理系ライブラリがロードされ、それらの 初期化ルーチンが呼び出される。アダプタコンポーネントおよび情報プロバイダ のための初期化ルーチンは、ファクトリオブジェクト1530,1390を生成 させる。前記ナビゲータコンポーネント159はナビゲーションオブジェクト1 590を生成させる。ステップ805において、前記ディスパッチャコンポーネ ント151は、コンテキスト構造体を生成し、該コンテキスト構造体をパラメー タとしてアダプタファクトリオブジェクトについてのCreateオペレーションを呼 び出す。クライアントコンピュータ40またはその他におけるWWWブラウザ4 9から前記アダプタ131にリクエストが到着すると、前記Createオペレーショ ンが完了し、アダプタストリームオブジェクトが生成される。 この初期的なスタートアップ局面に続いて、セットアップ局面が開始する。前 記IMコンピュータ60は、前記アダプタ131に到着するリクエストを処理す る。ステップ807において、前記クライアントコンピュータ40にロードされ たWWWブラウザ49からのリクエストが前記アダプタ131に到着する。ステ ップ809において、前記アダプタ153のファクトリは、前記リクエストのた めにアダプタストリームオブジェクト1531を生成する。該ストリームオブジ ェクト1531は、前記ウェブブラウザ49に対するインターフェイスである。 次に、ステップ811において、前記アダプタ153はステップ805からのCr eate呼出しに応答する。該Create呼出しに対する応答は、新たに生成されたスト リームオブジェクト1531に対する参照およびストリームハンドルを含み、前 記リクエストのすべての詳細は前記コンテキストバッファに格納される。ステッ プ813では、前記ディスパッチャコンポーネント151は、前記ステップ80 5からのCreate呼出しによって生成されたリクエストコンテキストにより、前記 ナビゲータコンポーネント159を呼び出す。該ナビゲータコンポーネント15 9は、前記リクエストコンテキストを使用して、前記外部リクエストを満足させ るストリームオブジェクトを生成可能な情報プロバイダファクトリオブジェクト を選択する。ステップ815では、前記ナビゲータ159は、選択された前記情 報プロバイダファクトリオブジェクト1390に関して、前記ディスパッチャ1 51に応答する。そして、前記ディスパッチャ151は、前記リクエストされた 情報についてのストリームオブジェクトを得るために前記情報プロバイダファク トリオブジェクト1390を呼び出す。ステップ819において、前記情報プロ バイダファクトリオブジェクト1390は、前記リクエストされた情報にアクセ スする。次に、ステップ821において、前記情報プロバイダファクトリは、前 記情報のためのストリームオブジェクト1391を生成する。最後に、ステップ 823において、前記情報プロバイダファクトリオブジェクト1390は、生成 された前記情報プロバイダストリームオブジェクト1391に対する参照を前記 ディスパッチャ151に戻す。 前記ストリーム局面において、オブジェクトおよびコンテキストは、相互にデ ータをストリームし合う。この情報プロバイダとリクエスタとの間において、ス トリームは双方向に行うことができる。図8に示したストリーム局面は、情報プ ロバイダからリクエスタへの情報取出しについて説明するものである。情報プロ バイダにおけるデータの格納は、データが逆方向に流れることを除き、データの 取出しと同様である。ステップ825において、前記ディスパッチャ151は、 前記Getオペレーションを使用して前記ストリームからデータブロックを得るこ とによって、前記情報プロバイダストリームオブジェクト1391を呼び出す。 ステップ827では、前記情報プロバイダ139は、リクエストされたサイズの データ片を得るために外部情報ソース(サーバの場合にはローカル情報ソース) にアクセスする。次に、ステップ829において、前記情報プロバイダストリー ムオブジェクト1391は、前記データ片、および、前記ストリームから利用可 能なデータがそれ以上あるか否かを示す値(通常、ブール論理)を戻す。前記デ ィスパッチャ151は、前記情報プロバイダストリームによって戻されたデータ を供給する前記Putオペレーションを使用して、前記アダプタストリームオブジ ェクト1531を呼び出す。ステップ833において、前記アダプタは、前記リ クエストされた情報を前記外部リクエスタ(WWWブラウザ49)に戻す。ステ ップ835において、前記アダプタはステップ831においてなされたPut呼出 しを戻す。 完了済みGetオペレーションから戻る前記情報プロバイダストリームによって 示されるようにストリーミングが完了すると、前記ストリームは破棄される。ス テップ837において、前記ディスパッチャ151は、前記情報プロバイダスト リームオブジェクト1391の前記Destroyオペレーションを呼び出す。ステッ プ839において、前記情報プロバイダは前記呼出しを戻す。次に、ステップ8 41において、前記情報プロバイダストリームオブジェクト1391は、前記ス トリームのために確保したすべての資源を閉じて解放した後、自分自身を破棄状 態にする。ステップ843では、前記ディスパッチャ151は、前記アダプタス トリームオブジェクト1531のDestroyオペレーションを呼び出す。ステップ 845において、前記アダプタストリームオブジェクト1531は前記呼出しを 戻す。最後に、ステップ847において、前記アダプタストリームオブジェクト 1531は、前記ストリームオブジェクトのために確保したすべての資源を閉じ て解放した後、自分自身を破棄状態にする。 B.トレーダを伴うインタラクション ここで、図9を参照して、前記トレーダコンポーネント150を伴うコンポー ネント間インタラクションについて説明する。前記情報プロバイダファクトリオ ブジェクト1390がスタートアップ時にトレーダオブジェクト1500に登録 される点を除き、ここでのスタートアップ局面は前記トレーダを伴わないコンテ キストにおけるスタートアップ局面と同様である。ステップ907において、前 記WWWブラウザ49からのリクエストがHTTPアダプタ131に到着する。 ステップ909では、前記アダプタ153は、前記ブラウザ49に対するインタ ラクションとして機能する前記リクエストのためのストリームオブジェクト15 31を生成する。ステップ911において、前記アダプタ153は、前記スター トアップ局面からのファクトリ呼出しに応答することによって、そのファクトリ オペレーションを完了させる。前記応答は、生成されたストリームオブジェクト 1531に対する参照を含むと共に、リクエストコンテキストにおけるリクエス トについての詳細を含むものである。ステップ913において、前記ディスパッ チャ151は、前記スタートアップ局面に生成されたリクエストコンテキストに よって前記ナビゲータ159を呼び出す。上述の規則に基づき、前記ナビゲータ 159は、前記コンテキストを使用して、前記外部リクエストを満足させるスト リームを生成可能なトレーダオブジェクト1500を選択する。(1つのトレー ダ150が使用される場合、前記ナビゲータ159は該1つのトレーダ150を 選択する。)ステップ915において、前記ナビゲータ159は、前記選択され たトレーダオブジェクト150に対するオブジェクト参照を返す。前記ディスパ ッチャ151は、リクエストされた情報についての情報プロバイダストリームオ ブジェクトを得るために、前記トレーダオブジェクト1500を呼び出す。そし て、ステップ919では、前記トレーダオブジェクト1500は、情報プロバイ ダファクトリオブジェクト1390を選択し、該オブジェクトを呼び出す。前記 ファクトリオブジェクト1390は、ロードバランス用アルゴリズムに基づいて 選択される。該ファクトリオブジェクト1390は、ステップ921で前記リク エストされた情報にアクセスは、ステップ923で前記リクエストされた情報に ついてのストリームオブジェクト1391を生成する。次に、前記情報プロバイ ダファクトリオブジェクト1390は、この生成されたストリームオブジェクト 1391に対する参照と共に前記呼出しを返す。ステップ927では、前記トレ ーダオブジェクト1500は、前記ストリームオブジェクト1391の参照を前 記ディスパッチャに戻す。データのストリーミングおよびクリーンアップは、前 記トレーダ無しの場合と同様である。前記トレーダ150は、ナビゲータではな いコンテキストにとっては透明で見えない。 VIII.コンテキスト間の抽象体レベルでのインタラクション 上述のように、各抽象体は、特定の開発者のニーズに応じて上記オペレーショ ンを実行することができる。例えば、アダプタ抽象体はオーセンティケータを含 んでいても、含んでいなくてもよい。従って、各抽象体は異なる内部構造を有し ていてよい。ここで、図10〜図13を参照して、1つの抽象体内のコンテキス ト間における好ましいインタラクションについて説明する。 A.アダプタ 図10a〜図10bは、アダプタコンポーネント間のインタラクションを示す 。ステップ1003において、前記オーセンティケータ161およびナビゲータ 159の初期化ルーチンは、リクエストを満足させるためにオブジェクト161 0および1590を生成する。前記トランスポータ155およびアダプタ53は 、ファクトリオブジェクト1550,1530を生成する。ステップ1005に おいて、前記ディスパッチャ151は、前記アダプタ153によって生成された ファクトリオブジェクト1530を呼び出す。(前記ディスパッチャは、該ディ スパッチャが満足させる用意のあるリクエストの数に応じて、多数回、前記ファ クトリオブジェクト1530を呼び出すことができる。)ステップ1007にお いて、前記ファクトリオブジェクトに対する呼出しを受け取ると、前記アダプタ は前記トランスポータファクトリオブジェクト1550を生成する。ステップ1 009において、該トランスポータファクトリオブジェクト1550は、トラン スポータストリームオブジェクト1551を生成する。該トランスポータストリ ームオブジェクト1551は、ステップ1011において、トランスポータスト リームオブジェクト参照および前記アダプタ153に対するハンドルを戻す。ス テップ1013では、前記アダプタ151は前記トランスポータストリームオブ ジェクトのAcceptオペレーションを呼び出す。上述のように、該Acceptオペレー ションは、前記トランスポータストリームオブジェクト1551が入って来るリ クエストを待つようにする。 スタートアップ局面はステップ1015において開始する。ステップ1015 において、前記ネットワークを介して、前記WWWブラウザ49からの接続リク エストが前記アダプタに到着する。詳しくは、該リクエストは、前記トランスポ ータコンポーネント155に到着し、該トランスポータコンポーネント155は 、ステップ1017において、前記トランスポータストリームオブジェクト15 51が未完了のAccept呼出しを戻すようにする。ステップ1019では、前記ア ダ プタファクトリオブジェクト1530は、ステップ1021において入って来る リクエストを読むために、前記トランスポータストリームオブジェクト1551 を呼び出す。ステップ1023では、前記トランスポータストリームオブジェク ト1551は、前記アダプタファクトリオブジェクト1530に前記データを戻 す。ステップ1025において、前記アダプタファクトリオブジェクト1530 は前記リクエストを解析する。前記リクエストがユーザ情報を含むものである場 合、該ユーザ情報は、ステップ1027において前記オーセンティケータによっ て確認される。ステップ1029では、前記アダプタファクトリオブジェクト1 530はアダプタストリームオブジェクト1531を生成する。該アダプタスト リームオブジェクト1531は、前記トランスポータストリームオブジェクト参 照およびハンドルを含むコンテキストコンポーネントを有する。ステップ103 1において、前記アダプタファクトリオブジェクト1530は、前記アダプタス トリームオブジェクト参照およびハンドルを前記ディスパッチャ151に戻すこ とによって、ステップ1005から前記Create呼出しを戻す。ステップ1033 において、前記ディスパッチャ151は、前記ナビゲータ159を呼び出し、前 記リクエストのための情報プロバイダを見つける。トレーダが使用されていない 場合、前記ナビゲータ159は、ステップ1035において、情報プロバイダの 参照を戻す。トレーダが使用されている場合、前記ナビゲータ159はトレーダ オブジェクト参照を戻す。前記ナビゲータは、さらに、トランスフォーマオブジ ェクト参照を戻してもよい。ステップ1037では、前記ディスパッチャ151 は、情報プロバイダファクトリオブジェクト(図示せず)を呼び出し、ストリー ムオブジェクトを生成する。ステップ1039において、前記情報プロバイダは 、ストリームオブジェクトおよびハンドルを戻す。 図10bは、アダプタ抽象体についてのストリーム局面およびクリーンアップ 局面を示すものである。ステップ1041において、前記ディスパッチャ151 は、前記情報プロバイダストリームオブジェクトについてのGetオペレーション を呼び出し、データブロックを得る。ステップ1043において、前記情報プロ バイダストリームオブジェクトは前記データブロックを戻す。ステップ1045 では、前記ディスパッチャ151は、前記Putオペレーションを使用して、取り 出したデータを前記アダプタストリームオブジェクト1531に書き込む。ステ ップ1047において、前記アダプタストリームオブジェクト1531は、前記 Putオペレーションを使用して、前記データを前記トランスポータストリームオ ブジェクト1551に書き込む。該トランスポータストリームオブジェクト15 51は、ステップ1049において、前記ネットワークを介して、前記データを 前記ウェブブラウザ49に書き込む。ステップ1049および1051において 、前記トランスポータストリームオブジェクト1551およびアダプタストリー ムオブジェクト1531は、各々のPutオペレーションを戻す。前記情報プロバ イダストリームオブジェクトについてのGetオペレーション、ならびに、前記ア ダプタストリームオブジェクトおよびトランスポータストリームオブジェクトに ついてのPutオペレーションを連続的に呼び出す処理は、前記情報プロバイダス トリームオブジェクトが前記ディスパッチャ151にストリームエンド指示を戻 すまで続く。 ステップ1053において、前記ディスパッチャ151は、前記Destroyオペ レーションを使用して、前記情報プロバイダストリームオブジェクトを呼び出す 。ステップ1055において、前記情報プロバイダストリームオブジェクトは、 その呼出しを戻し、これを破棄する。ステップ1057では、前記ディスパッチ ャ51は、前記Destroyオペレーションを使用して、前記アダプタストリームオ ブジエクトを呼び出す。そして、前記アダプタストリームオブジェクト1531 は、ステップ1059において、トランスポータストリームオブジェクトのDest royメソッドを呼び出す。ステップ1061において、前記トランスポータスト リームオブジェクト1551は、前記ネットワーク接続を閉じることによって前 記リクエストを終了させる。前記トランスポータストリームオブジェクト155 1は、ステップ1063において、前記トランスポータストリームオブジェクト 1551は、ステップ1059からの呼出しを完了し、ステップ1065におい て自分自身を破棄する。ステップ1067では、前記アダプタストリームオブジ ェクト1531は、ステップ1057からの呼出しを完了し、ステップ1069 においてこれを破棄する。前記ディスパッチャは、次に入って来るリクエストを 得るために、ステップ1071において前記アダプタファクトリオブジェクト1 530 を再呼出しする。ステップ1073において、前記アダプタ153は前記トラン スポータファクトリオブジェクトを呼び出す。該トランスポータファクトリオブ ジェクトは、ステップ1075においてトランスポータストリームオブジェクト 1552を生成する。ステップ1077では、前記トランスポータストリームオ ブジェクトは、生成された前記ストリームオブジェクトの参照およびハンドルを 前記アダプタ53に戻す。ステップ1079において、前記アダプタ153は前 記トランスポータストリームオブジェクトのAcceptオペレーションを呼び出す。 こうして、前記トランスポータ55は他のリクエストを受け取ることができる状 態になる。新たなリクエストが到着すると、前記アダプタは再び前記セットアッ プ局面に入る。 B.トレーダ 上述のように、Trader(トレーダ)は、トレーダファクトリインターフェイス およびトレーダ登録インターフェイスを実行するトレーダコンポーネントのみを 有する。該トレーダコンポーネントは、図11に示すようにこれらのインターフ ェイスを実行する。セットアップ局面において、ファクトリリクエストが前記ト レーダ150に到着し、該トレーダは、前記リクエストを満足させることができ る特定のクラスの情報プロバイダを選択する。そして、ステップ1105におい て、前記トレーダは、前記情報プロバイダストリームオブジェクトを生成するた めに、前記情報プロバイダファクトリを呼び出す。前記情報プロバイダは、ステ ップ1107において、ストリームオブジェクト1391を生成する。次に、ス テップ1109では、前記情報プロバイダは、前記情報プロバイダストリームオ ブジェクトの参照およびストリーム識別子を前記トレーダに戻す。ステップ11 11では、前記トレーダは、前記コーラすなわちディスパッチャに対して前記情 報プロバイダストリームを戻す。前記ストリーム局面において、前記ディスパッ チャは、前記トレーダの仲介に気付くことなく、前記情報プロバイダストリーム からストリームし続ける。前記情報プロバイダがストリーミングし終ると、該情 報プロバイダはストリームエンド指示を送る。クリーンアップ局面において、前 記ディスパッチャは生成された前記ストリームを破棄する。このクリーンアップ は、トレーダ150を使用することなく行われる。 C.情報プロバイダ 図12は、メモリ40に格納されたストリームテーブルおよびオブジェクトテ ーブルを使用したファクトリインターフェイスおよびストリームインターフェイ スの情報プロバイダ処理系を説明するものである。スタートアップ局面において 、ステップ1203では、前記処理系ライブラリの初期化ルーチンが呼び出され る。このルーチンは、情報プロバイダファクトリオブジェクト1390を生成す る。前記トレーダが使用されている場合、前記Register New Information Provi derオペレーションを使用してトレーダオブジェクトを呼び出すことによって、 前記情報プロバイダが前記トレーダに登録される。ステップ1205において、 前記情報プロバイダは、前記ディスパッチャまたはトレーダからのファクトリ呼 出しを受け取る。前記情報プロバイダファクトリの実行において、前記呼出しに おける情報は、情報ソースを選択し、その情報ソースが前記情報にアクセス可能 であることを証明するために使用される。ステップ1208において、前記ファ クトリの実行は、新たなストリームについてのストリームテーブルエントリを選 択する。前記実行は、前記ストリームのための新たなユニークなハンドルを生成 し、該ストリームコンテキストを前記テーブルエントリに書き込む。次に、ステ ップ1209において、前記ファクトリの処理系は、アドレス可能なストリーム オブジェクト1391を生成し、これを選択する。このストリームオブジェクト の参照およびハンドルは、ステップ1211において、前記コーラに戻される。 ストリーム局面において、ストリーミングは、前記GetオペレーションおよびP utオペレーションを使用して、2方向に行われることができる。ステップ121 3において、ストリーム呼出しは、Get呼出しまたPut呼出しを介して前記ストリ ームオブジェクトに到着する。前記呼出しはストリームハンドルを含む。前記ス トリームオブジェクト1391は、ステップ1214において、前記ストリーム ハンドルを確認し、該ハンドルを使用して前記ストリームテーブルのエントリに アクセスする。ステップ1215において、前記呼出しを完了させるのに必要な データをアクセスするために、前記ストリームテーブルが使用される。ステップ 1217では、前記ストリームオブジェクト1391が前記呼出しを戻す。 クリーンアップ局面において、前記ストリームハンドルを含むDestroy呼出し が、前記ストリームオブジェクト1391に到着する。ステップ1220におい て、前記ストリームハンドルが、確認され、前記ストリームテーブルのエントリ を見つけるために使用される。ステップ1223では、前記Destroy呼出しが完 了し、こうして、ステップ1225において前記ストリームオブジェクト139 1を破棄し、前記ストリームテーブルを解放する。 D.トランスフォーマ トランスフォーマは、アダプタおよびゲートウエイと共に使用されてよい。従 って、トランスフォーマコンテキストが使用される場合、データのストリームは 異なる形態で行われる。図13は、トランスフォーマコンポーネントへのおよび 該トランスフォーマコンポーネントからのインタラクションを示す。最初に、ス テップ1303において、トランスフォーマファクトリオブジェクト1570お よび情報プロバイダファクトリオブジェクトが生成される。次に、ステップ13 05において、前記アダプタコンポーネント153から前記トランスフォーマフ ァクトリオブジェクト1570に、ファクトリ呼出しが到着する。前記トランス フォーマファクトリオブジェクト1570は、ステップ1307において、情報 プロバイダファクトリオブジェクト1390を呼び出す。該情報プロバイダファ クトリオブジェクト1390は、ステップ1309において、情報プロバイダス トリームオブジェクト1391を生成する。ステップ1311において、前記情 報プロバイダファクトリオブジェクト1390は、前記トランスフォーマファク トリオブジェクト1570に対して、新たに生成されたストリームオブジェクト 参照を戻す。ステップ1313では、前記トランスフォーマファクトリオブジェ クト1570は、トランスフォーマストリームオブジェクト1571を生成し、 前記トランスフォーマストリームオブジェクトのコンテキストの一部として前記 情報プロバイダストリームオブジェクト参照を維持する。そして、前記トランス フォーマファクトリオブジェクト1570は、前記トランスフォーマストリーム オブジェクトの参照およびハンドルをそのコーラに戻す。 ステップ1317において、Get呼出しが前記トランスフォーマストリームフ ォブジェクト1571に到着する。ステップ1319において、前記トランスフ オーマは、データを得るためのGet呼出しを使用して、前記情報プロバイダスト リ ームオブジェクト1391を呼び出す。ステップ1321では、前記情報プロバ イダストリームオブジェクト1391はデータを戻す。該トランスフォーマは、 変換関数を使用して、このデータを変換する。前記変換関数は、変換すべきデー タ用の取出しバッファを調べる。変換すべき十分なデータが前記バッファに含ま れる場合、そのデータは、前記バッファから取り出され、変換され、応答バッフ ァに格納される。前記応答バッファおよび取出しバッファが満杯状態ではなく、 前記情報プロバイダのストリームオブジェクトが“これ以上データ無し(no mor e data)”を示していない場合、前記情報プロバイダに対するGet呼出しが再び 行われる。前記トランスフォーマストリームオブジェクトのGetメソッドは、前 記応答バッファからデータを戻す。前記情報プロバイダのストリームオブジェク ト上に“これ以上データ無し(no ore data)”指示が無く、前記取出しバッフ ァが空状態であって、前記応答バッファの残りの部分が戻れされた場合、前記ス トリームオブジェクト1571は“これ以上利用可能なデータ無し”を指示する ことになる。ステップ1323において、前記データが前記ディスパッチャに戻 される。データが格納中である場合、ステップ1317では、Put呼出しが前記 トランスフォーマに到着することになる。前記Put呼出しは、情報の流れが逆方 向である点を除いて、前記Get呼出しと同様に作用する。 クリーンアップ局面において、前記Destroyメソッドは、ステップ1325で 、前記トランスフォーマストリームオブジェクト1571に到着する。前記トラ ンスフォーマ157は、ステップ1327において、前記情報プロバイダストリ ームオブジェクト1391についてDestroy呼出しを実行する。ステップ132 9において、前記情報プロバイダストリームオブジェクトは前記呼出しを戻す。 該情報プロバイダは、ステップ1331において、前記情報プロバイダストリー ムオブジェクト1391を破棄する。ステップ1333において、前記トランス フォーマストリームオブジェクト1571は、前記呼出しを戻す。ステップ13 35では、前記トランスフォーマは前記ストリームオブジェクト1571を破棄 する。 IX.表示変換ユーティリティ 図14aはIDLで書かれたデータ構造体の一例501を示すものである。I DLで書かれた構造体“MyStruct”は、3つのコンポーネント、即ち、charデー 型コンポーネントと、long(長)データ型コンポーネントと、boolean(ブール )データ型コンポーネントを含む。この型定義は、インターフェイス定義と共に 、例えばIDLソースファイル101に含まれる。 コードジェネレータは、IDLソースファイルを解析し、CIN記述1402を含む へッダファイルを生成する。CIN記述子は、(構造体名などの)識別子を使わず に構造体を簡潔に記述する一連のASCII文字を含む。この例においてb3文字は、 データ構造体を、3つの要素を含むIDL struct型として識別する。Cは、IDL cha r型を示す。F文字は、IDL long型を識別し、B文字は、ブールデータ型を識別す る。 関数PCU_PREPAREは、一定のデータ型のCIN記述を、CIN記述よりもランタイム に使いやすい“準備CIN”形式に変換する。ルーチンPCU_PACKおよびPCU_UNPACK の使用に先立って、コードジェネレータ111によって生成された、へッダファ イル119に含まれる各データ構造体のCIN記述が“準備”されなければならな い。PCU_PREPAREがクライアントとサーバの双方から呼び出される。この呼び出 しには費用が比較的かかるので、初期化時のPCU_PREPAREに対する一回の呼び出 しにより、貴重なシステム資源をセーブすることができる。上記呼び出しは、好 ましくは、クライアントアプリケーションおよびサーバアプリケーションの初期 化ルーチン時に行われる。PCU_PREPAREは、C言語において次のように定義され る。 この関数において、cinbufは、上記データ構造体のCIN記述を含むバッファを示 すポインタである。パラメータcinlenは、CINのサイズである。PCU_PREPAREは、 prepbufが指すアドレスに格納された“準備CIN”を戻す。prepbufの最大長を指 定するため、prepbufmaxlenを特定の値に設定する。また、この関数は、prepbuf に含まれる準備CINのサイズを指定するprepbuf_lenを戻す。NULL値は、この値が 必要とされない場合、上記パラメータとして送られてよい。cinbufから読み出さ れた実際のバイト数はパラメータcin_usedにて戻されcin_usedが必要とされ ない場合は、NULLもこのパラメータとして使用してもよい。 PCU_PREPAREを使用して、CIN記述データ構造体のアラインメント、サイズ、オ フセット、データ型を記述するop_tagデータ構造体のテーブルである準備CINを 作成する。PCU_PREPAREは、PCU_PREPAREでその各内部関数に対してコンテキスト を送るのに使用するctxデータ構造体を最初に作成することにより、それらのop_ tagを作成する。ctx構造体を使用することは、個々のパラメータを各種の内部関 数に送ることより望ましい。ctx構造体はC言語で次のように定義される。前記ctx構造体のフィールドは次のとおりである。上記opポインタは、準備CIN内 の現在のオペレーションを指す。このポインタは、PCU_PREPAREが各CINアイテム (後述)を解析するときにインクリメントされる。前記op_endポインタは、準備 CIN+1における最後のオペレーションを指す。Cinptrポインタは、準備中の全C IN文字列から読み込まれる次のバイトを指示する。cinendポインタは、準備中の CIN文字列の最終バイト+1を指示する。このctx構造体のoffset、alignおよびs izeフィールドは、CIN記述データ構造体における処理済フィールドのオフセット 、必要なアラインメント(境界整列)およびサイズを指定するprocess_cin_item (後述)の出力パラメータである。処理済みCIN文字列において遭遇する無限シ ーケンス(unbounded sequences)および文宇列(string)の個数のランニング カウントはnr_unboundedに含まれている。IDL“any”データ型を使用するフィー ルドのランニングカウントは、nr_anysフィールドに含まれている。フィールドp rev_branchは、前に処理された共用体ブランチ(union branch)オペレーション を指示する。このフィールドのリストは、そのヘッドが主共用体オペレーション に含まれるブランチオペレーションのリストの構築に使用される。共用体オペレ ーションはmain_unionによって指示される。 ctx構造体が作成されると、PCU_PREPAREは、CIN文字列中の各文字ごとにPROCE SS_CIN_ITEM、CIN文字列の各符号付きlong整数に対するTAKE_LONGおよびCIN文字 列の各無符号long整数に対するTAKE_ULONGを呼び出す。PROCESS_CIN_ITEMは、CI N文字列の単一のアイテムを処理する。ctx構造体はPROCESS_CIN_ITEMに渡される 。PROCESS_CIN_ITEMは多くの形態で実行可能である。好ましくは、当該関数は、 CIN文字列の各文字ごとに“case”を含むC言語“switch”文を使用する。さら に、case文を使用して自分自身を巡回的に呼び出し、struct型のシーケンスまた は複数の共用体からなる共用体などの複雑な構造体を処理してもよい。 TAKE_LONGおよびTAKE_ULONGは、数字(アレイの次元数等)が後続する特定の データ型と共に使用される。TAKE_LONGは、CINバッファから1つの符号付きlong 整数を抜き出し、その値をPCU_PREPAREに戻す。TAKE_ULONGは、CINバッファから 1つの符号無しlong整数を抜き出し、その値をPCU_PREPAREに戻す。これらの値 は、PCU_PREPAREがop_tagデータ構造体のテーブルを作成するのに使用される。 各呼出し毎に、PROCESS_CIN_ITEMはctxデータ構造体を変更する。先ず、PROCE SS_CIN_ITEMがopポインタをインクリメントして上記構造体の他のフィールドを 適正CINアイテムに対応させる。さらに、ctx構造体のsize、alignおよびoffset フィールドが変更される。各データ型のためのアラインメントは、以下のアライ ンメント規則に基づいて決定される。基本データ型がそのサイズに合わされる。 従って、sortデータ型は2バイトのアラインメントを有し、long型は4バイトア ラインメントを有し、等々である。struct型および共用体型は、最高アラインメ ント要求付きの包含フィールドと同じアラインメントを有する。ともかく、stru ct型および共用体型は、好ましくは、少なくとも2バイトのアラインメント要求 を有する。最後に、struct型および共用体型は、好ましくは、多数のアラインメ ント要求に埋め込まれる。 PROCESS_CIN_ITEMへの呼出しが戻るたびに、PCU_PREPAREは変更されたctx構造 体に基づいてop_tagデータ構造体を作成する。次いで、これらのop_tag構造体の アレイが、PCU_PREPAREの呼出し後に、準備CINバッファであるprepbufに格納さ れる。このop_tag構造体は、他の関数によって簡単に操作できる線形構造体であ る。構造体op_tagは、以下のように定義される。 前記type(型)パラメータは、上記データ構造体のIDLデータ型を表す。type_de f型定義は、考えられる全データ型を列挙するものである。パラメータoffsetは 、 そのデータ構造体がある構造体または共用体の一部である場合、包含する構造体 または共用体の始端からの該コンポーネントデータ型のオフセットである。デー タ型(1、2、3、4または8バイト)が要求するアラインメントは、alignパ ラメータによって指定される。sizeパラメータは、丸めを含むバイトでデータ構 造体のサイズを示す。nr_elementsパラメータは、様々異なる目的に使用される 。アレイについて、このパラメータは、全次元の要素の総数を示す。シーケンス について、上記パラメータは、最大出現回数を示す。文字列について、上記パラ メータは、ゼロ終了を除く最大サイズを指定する。構造体について、上記パラメ ータは、その構造体中の主フィールドの数を示す。共用体については、上記パラ メータは、共用体中のフィールド数を示す。パラメータbranch_labelおよびis_d efault_branchは、共用体ブランチのみのためのものである。branch_labelパラ メータは、上記共用体のIDL仕様において指定されたcaseラベル値を含み、is_de fault_branchパラメータは、エントリが既定共用体ブランチを記述する場合、真 (true)である。is_simpleパラメータは、データ構造体がIDL基本データ型の場 合は真で、該データ構造体が混成型の場合は偽(false)のブール論理である。* next_branchパラメータは、共用体および共用体ブランチに使用され、該共用体 に属する次のブランチエントリのアドレスを指示する。共用体エントリの場合、 上記パラメータは、第1のブランチを指す。最後のブランチの場合、上記パラメ ータは値NULLを含む。*union_endパラメータは、最後のブランチの結論に続く次 のエントリのアドレスを指示する。*sequence_endパラメータは、シーケンスに のみ使用され、シーケンス型(sequnced_type)に続く次エントリのアドレスを 指し示す。*default-branchパラメータは、デフォルトのブランチエントリのア ドレスを指示する。これは、ブランチリストのどのブランチも共用体識別子と一 致しない場合に使用される。デフォルトがない場合、default_branchの値はNULL である。パラメータreserve_XXXは、準備CINのサイズを誤推定する既存プログラ ムにおいてエラーを起こすことなくop_tag構造体にフィールドを追加することを 可能にする。 図14bは、CIN文字列502のための生成op_tag構造体アレイを示す。第1 の構造体1420は、MyStruct構造体の型、オフセット、サイズ、アラインメン トおよびメンバの個数を指定する。次の3つのop_tag構造体1430、1440 、1450は、上記MyStruct構造体の各フィールドごとの型、オフセット、サイ ズおよびアラインメントを含む。この構造体アレイは、構造化データをファイル 内でまたはネットワークに送るのにPCU_PACKおよびPCU_UNPACKが使用するバッフ ァprepbufに格納されている。 上記データ構造体が“準備”され、op_tag構造体アレイがprepbufに格納され ると、そのデータ構造体に格納された各種のメッセージをバッファに詰め込み、 PCU_PACKを用いて移送することができる。PCU_PACKは、構造化データ型をファイ ルまたはネットワークに移送する間に出力バッファにコピーするのに使用される 。PCU_PACKは、共用体を含む全IDLコンポーネント、無限列/文字列および“any (任意)”型を支援する。 PCU_PACKは、指定されたフォーマットに基づいて構造化データ型のコンポーネ ントを出力バッファに格納する。PCU_PACKは、C言語で次のように定義される。 最初の3つのパラメータは、出力バッファへのデータの詰め込み方を指定する。 これらのパラメータは、コーラ(呼出し側)によって提供された変換を実行する ためのコーラ定義関数でよい。第1のパラメータdst_integer_fmtは、出力バッ ファにおいてshort型、long型およびlongデータ型に使用するフォーマットを指 定する。このフォーマットに関して可能な値の例は、バイト重要度がアドレスの 増加につれて減少する場合の整数表現を指定するPCU_INTEGER_BIGENDIAN、又は 、 バイト重要度がアドレスの増加につれて増加する場合の整数表現を指定するPCU_ INTEGER_LITTLEENDIANである。パラメータdst_real_fmtは、出力バッファでフロ ートおよび倍データ型に使用するフォーマットを指定する。このパラメータのサ プル値は、例えばTandem T16フォーマットを使用する浮動小数点数表現を指定す るPCU_REAL_T16などの、標準IEEEフォーマットまたはベンダ指定値を使用する浮 動小数点数表現を指定するPCU_REAL_IEEEである。第3のパラメータdst_char_fm tは、出力バッファでchar型および文字列型に使用するフォーマットを指定する 。このパラメータの1つの可能値は、ISOラテン−1フォーマット(Latin-1 form at)、ASCIIのスーパーセットを使用する文字表現である。もう1つの可能な値 はIBMホストと互換性のあるEBCDICである。 上述のprepbufパラメータは、PCU_PREPAREによって戻された準備CIN記述を 含むアドレスを指示するポインタである。inbufパラメータは、出力バッファ に格納される構造化データのアドレスを指示するポインタである。*outbufパラ メータは、実際のパックされたデータを受け取る出力バッファのアドレスを指示 するポインタである。outbufに収容可能なバイトの最大数はoutbuf_max_lenパラ メータに含まれている。実際にoutbufに書き込まれるバイト数は、outbuf_lenパ ラメータによって戻される。バイト数が必要でない場合、NULLの値は、このパラ メータとして渡せばよい。PCU_SHORTOUTBUFが上記関数によって戻された場合、o utbuf_lenパラメータは必要なoutbufサイズを取得する。 従って、出力バッファにメモリを動的に割り当てるため、クライアントアプリ ケーションは、PCU_PACKを2回呼び出すことができる。最初の呼出しで、outbuf _max_lenがゼロに設定される。次いでPCU_PACKがPCU_SHORTBUFを戻し、outbuf_l enが必要な出力バッファサイズを含むこととなる。ここで出力バッファの正しい メモリ量をPCU_PACKの2回目の呼出しに先立って割り当てることができる。 PCU_PACKは最初にctx構造体を生成する。このctx構造体は、PROCESS_CIN_ITEM によって使用されるコンテキスト構造体と同様の関数を提供する。上記構造体は 、大量のコンテキストがPCU_PACKと、PCU_PACK_ENGINEによって呼び出される低 水準ルーチンとの間で共用されることを可能にする。上記ctx構造体は、PCU_PAC Kに対する下位関数によって使用され、次のように定義される。 PCU_PACKへの呼出しに指定されたリクエストされたあて先フォーマットはctx構 造体に渡される。これら3つのフィールドはIDL“任意”型を処理するためPCU_P ACKを巡回的に呼び出さなければならない場合に必要になる。outptrポインタは 、出力バッファに書き込まれる次のバイトを指示する。出力バッファが満杯であ ってもこのポインタは継続して更新される。これにより、オーバーフローの場合 に正しいサイズをコーラに戻すことが可能となる。かくしてコーラは出力バッフ ァのサイズを調整可能となる。ポインタoutbuf_endは、出力バッファの最終バイ ト+1を指し示す。 PCU_PACKは、内部関数PCU_PACK_ENGINEを呼び出す。該PCU_PACK_ENGINEは、出 力バッファへのデータの実際の詰め込みを実行する低水準関数を指示するポイン タを受け取る。PCU_PACKは、さらに、prepbufを指示するポインタと、パックさ れるデータ(inbufに含まれる)を指示するポインタと、PCU_PACKによって生成 されたctxを示すポインタを受け取る。PCU_PACK_ENGINEは、prepbufバッファ内 を要素単位で進み、(op_tag構造体に含まれる型によって指定されるような)当 該要素のtypeに基づき、また、PCU_PACKを指示するdst_XXX_fmtパラメータに基 づき、その要素の適当な低水準関数を呼び出す。PCU_PACK_ENGINEは、構造化デ ータ、(CIN文字による)データ型、ctx構造体アドレスおよび(op_tag構造体の sizeフィールドによって指定されるような)出力バッファに詰め込む入力バッフ ァのデータのサイズを含む入力バッファにアドレスを提供する。 PCU_PACK_ENGINEは、op_tagデータ構造体に含まれるデータ型およびPCU_PACK への呼出し時に指定された変換に基づいて適切な低水準関数を呼び出す。この低 水準関数はデータを透明的(不可視的)にパックするか、指定された変換を実行 する公知の低水準関数である(例えば、LITTLEendianに対するBIGendianなど) 。各コーラ供給関数は、入力バッファからデータを取り出し、このデータを出力 バッファ内に格納する。入力バッファから取り出されるバイトの数は、PCU_PACK _ENGINEから上記関数に提供されるサイズパラメータによって指定される。上記 データが出力バッファに配置されると、上記低水準関数がctx構造体のoutptrを 変更し、出力バッファに書き込まれた最後バイトの次のバイトを指示する。 PCU_PACK_ENGINEは、上記の各種の低水準関数を用いてデータを出力バッファ に次のように格納する。入力バッファ中の構造化データ型は、最初にIDLで定義 されたのと同じ順序で出力バッファに密に(バイト調整して)格納される。正し いアラインメントを実現するためコードジェネレータによって挿入された任意の パディングフィールドの内容は捨てられる。同様に、上記関数はデフォルト値を 上記フィールドに配置しない。 基本型データ構造体は、PCU_PACKへの呼出し時にdst_XXX_fmtパラメータによ って指定された表現で出力バッファに格納される。典型的に、これらのパラメー タは、無変換でパッカー(packer)の固有フォーマットに設定される。従って、 サーバアプリケーション(アンパッカー)が現実の変換を行うことになる。しか し、本発明で使用するルーチンは、データ構造体の変換の実行をも可能にする。 short、符号なしshort、long、符号なしlong、long longsおよび符号なしlong longsの表現は、PCU_PACKに対するdst_real_fmtにおいて指定されている。この パラメータは、浮動小数点数字を表すフォーマットを指定する。浮動型と倍(do uble)型のアラインメントは、dst_real_fmtパラメータによって指定される。こ のパラメータは、整数を表現するフォーマットに対応する。charsの表現はdst_c har_fmtパラメータによって指定される。このdst_char_fmtパラメータは、文字 を表現するフォーマットを指定する。ブール論理およびオクテット(octets)は 再アラインされない。上記“任意”型は、(そのアラインメントがdst_integer_ fmtパラメータに基づいている)CIN記述の長さを指定する符号なしlong、型を記 述するCIN文宇列(未変換ASCII文宇列)および(この変換規則に基づいて格納さ れた)データ自体として格納される。 アレイ、共用体などの混成型も再アラインされる。アレイは要素間のパディン グなしで格納される。シーケンスは、上記出現回数の前の出現回数を示す符号な しlong整数として格納される。出現間のパディングは除去される。long整数のフ ォーマットは、上述のdst_integer_fmtパラメータによる。文字列は、charsとし て格納された特定数の文字前の文字列長を示す符号なしlongとして格納される。 前記charsのフォーマットは、dst_char_fmtパラメータによって決定される。構 造体はパディングなしでフィールド毎に格納される。共用体は活性共用体ブラン チが続くlong型として格納される。 受け取り側において、サーバアプリケーションは、PCU_PACKを使用してパック されたバッファから未構造化データ型およびその付属物を抽出しなければならな い。次いでPCU_UNPACKが、その未構造化データを、任意のデータ構造体の準備CI Nに基づいてそのデータ構造体に格納する。PCU_UNPACKは次のように定義される 。 最初の3つのパラメータは、PCU_UNPACKの最初の3つのパラメータに対応する 。これらのパラメータは、入力バッファに格納されたデータ型のフォーマットを 指定する。これらのパラメータは、好ましくは、そのPCU PACK版と同一である。 上記*prepbufパラメータは、PCU_PREPAREによって戻された準備CIN記述を含むア ドレスを示すポインタである。入力バッファのアドレスは*inbufが指示する。in bu fの長さはinbu_lenによって指定される。出力バッファのアドレスは*outbufによ って指示される。outbufによって収容されるバイト最大数はoutbuf_max_lenによ って指定される。パラメータ*outbuf_lenは、outbufに実際に書き込まれたバイ ト数を取得する。入力バッファから読み出されたバイト数は*inbuf_usedによっ て指定される。書き込みバイト数または読み出しバイト数が必要でない場合、こ れらのパラメータの値としてNULLを渡せばよい。 PCU_UNPACKは、PCU_PACKの内部関数にコンテキストを渡すのに使用するctx構 造体を生成する。このctx構造体は、PCU_UNPACKの下位関数によって使用され、 次のように定義される。 最初の3つのパラメータは、PCU_UNPACKに渡されたフォーマットである。これら のパラメータは、IDL“任意”型を処理するためPCU_PACKが巡回的に呼び出され る場合に内部関数によって必要とされる。上記inptrは、入力バッファから読み 出される次のバイトを指す。上記inbuf_endポインタは、入力バッファにおける 最終バイト+1を指す。 コンテキスト構造体の生成後、PCU_UNPACKは、PCU_UNPACKに機能性を提供する PCU_UNPACK_ENGINEを呼び出す。PCU_UNPACK_ENGINEは、入力バッファ(PCU_PACK によって提供された出力バッファ)からデータを抽出し、そのデータを出力バッ ファに配置するためのコーラ供給関数へのポインタを受け取る。準備CINバッフ ァもパラメータとして提供される。PCU_NPACK_ENGINEは、準備CIN内を要素毎に 進行して、op_tag構造体offsetおよびsizeフィールドによって指定された一定の データ構造体中に当該データを格納する。 準備CINバッファの各要素ごとに、PCU_UNPACK_ENGINEはアンパックおよび変換 を実行するため適当な低水準のユーザ定義関数を呼び出す。PCU_PACK_ENGINEは 、入力バッファから読み出されるデータのデータ型およびサイズを、該データを 書ための出力バッファのアドレスと共に送る。また、PCU_UNPACK_ENGINEは上記 関数の各々にctxデータ構造体を渡す。各コーラ定義関数が次いで入力バッファ からデータを抽出してそのデータを別のデータ構造体に格納する。入力バッファ から出力バッファに書き込まれるバイト数は、サイズパラメータによって決定さ れる。混成型については、PCU_UNPACK_ENGINEは、コーラ供給関数に追加のパラ メータを供給する。データ構造体がアレイである場合、そのアレイの要素数が提 供される。データ構造体がシーケンスである場合、PCU_UNPACK_ENGINEは要素の 実際の数とともにそのシーケンスの要素最大数を提供する。データ構造体が文字 列である場合、その文字列の最大サイズおよび実サイズがコーラ供給関数に提供 される。混成型がstructデータ型である場合、その構造体のメンバ数が提供され る。 次に図6および図7を参照して本発明の方法を説明する。図6は本発明の方法 に係るクライアント側のフローチャートである。本発明の方法の実行に先立って 、データ構造体のコンパクト記述がコードジェネレータ111によって生成され 、クライアントスタブおよびサーバスタブに含められる。この記述は、アプリケ ーションXXXに記述されたメソッドを使用して生成することができる。クライア ントスタブおよびサーバスタブはコンパイルされてクライアントアプリケーショ ンおよびサーバアプリケーションにリンクされる。第1のステップ1501にお いて、クライアントスタブがクライアントアプリケーションにリンクされると、 クライアントアプリケーションは関数PCU_PREPAREを呼び出すことにより準備CIN 記述を生成する。PCU_PREPAREは、データ構造体のCIN記述を取り出し、ステップ 1503において、そのCIN記述の各要素のためのPROCESS_CIN_ITEMを呼び出す ことによってCINをop_tagデータ構造体のアレイに変換する。各構造体は、CIN記 述データ構造体の型、オフセット、アラインメントおよびサイズに関する情報を 含む。次いでこれらの構造体のテーブルが、ステップ1505においてprepbuf と呼ばれるメモリバッファに記憶される。 ステップ1507において、クライアントアプリケーションは、各op_tagのサ イズフィールドによって指定されたサイズに基づいて当該データを出力バッファ にコピーすることによって、データ構造体をパックするPCU_PACKを呼び出す。PC U_PACKは、データ構造体からアラインメントパディングフィールドを除去し、ス テップ1509においてそのデータ構造体を出力バッファに送り込む。データ構 造体が出力バッファに詰め込まれると、当該データがステップ1511で移送さ れる。上記データ構造体はワイヤを通してサーバアプリケーションまたはディス クファイルなどのファイルに移送すればよい。同じデータ構造体を伴う別のリク エストがなされた場合、このリクエストはパックされ、クライアントアプリケー ションがその新規リクエストのためステップ1505〜1511を繰返す。上記 データ構造体のCIN記述は再度“準備”する必要はない。 図16は本発明の方法に係るサーバ側を示す。ステップ701において、サー バアプリケーションは、CINの準備記述を取得するためPCU_PREPAREを呼び出す。 この“準備”ステップは、上述のステップ1501に類似する。次にサーバが、 ステップ1603において、PCU_PACKを使用してパックされたバッファから構造 化データ型およびその付属物を抽出するためにPCU_UNPACKを呼び出す。ステップ 1605において、上記構造体は上記関数に渡されたパラメータ(PCU_PACK関数 に渡されたパラメータと同じ)に基づいてアンパックされる。データ構造体の抽 出時に、上記構造体はステップ1607でサーバの入力バッファで指定されたフ ォーマットからサーバの固有のアラインメントに再調整される。別のリクエスト がサーバに到着すれば、サーバはデータ構造体を準備することなくそのリクエス トをアンパックするためPCU_UNPACKを呼び出すことができる。 X.コンパクトIDL表記法 図17は、IDLソースファイルに含まれるIDLデータ型、オペレーション およびインターフェースからのCIN記述子生成を示すフローチャートである。 なお、図17〜図19のステップは、メモリに格納されたコンピュータ命令を実 行するデータ処理システムのCPUによって実行されるものである。ステップ1 701において、コードジェネレータは、前記IDLソースファイルの最初の行 から開始し、該IDLソースファイルに記述されたデータ構造体、インターフェ ースまたはオペレーションを確認する。前記記述されたデータ構造体がインター フェースである場合、前記コードジェネレータは、図10に示された方向に従っ て処理する。前記記述されたデータ構造体がインターフェース内のオペレーショ ンである場合、前記コードジェネレータは、図9に示された方向に従って処理す る。前記記述されたデータ構造体がデータ型(または、後述するようなオペレー ションのためのパラメータ)である場合、前記ジェネレータは、定義テーブルに 基づいて1つの文字を生成する。なお、ここに含まれるチャートに示したもの以 外の文字が使用されてもよい。各チャートは、好ましいASCII文字のみを含 んでいる。チャートAは、様々なIDL基本型を示すために使用される文字列を 含む好ましい定義テーブルを示すものである。 このチャートAに示すように、CIN記述子における基本型を表現するために簡 単な文字列が使用される。 データ型がアレイまたは構造体(struct型)のような混成型である場合、一連 の異なるステップが行われる。ステップ1711では、前記混成型のスタートを 示す文字が生成される。チャートBは、様々なIDL混成型のスタートを示すた めに使用される文字列を含むサンプルテーブルを示す。 各混成型の具体的な表現は、その型に応じて異なる方法で取り扱われる。 IDLは、各基本型ごとに多次元で固定サイズのアレイを定義する。前記アレ イのサイズは、コンパイル時に決定される。アレイはCINにより次のように表 現される。 anr_dimensions size_1.[size_2,...size_n]base type 前記アレイのための文字の生成は、ステップ1713,1715,1717に示 されている。このアレイ表現において、上記文字aは(チャートBに示すように )前記アレイのスタートを示している。文字nr_dimensionsは、該アレイにおけ る次元の数を示す数字である。また、文字size_1,size_2,size_nは、それぞれ 、前記アレイの一次元、二次元およびn次元におけるサイズを示す。base-type は、 前記アレイの各アレイ要素ごとの記述子である。様々な基本型の表現は、チャー トAに示されたオリジナルの基本型テーブルから導出される。 IDLは、ユーザによって定義された構造体型を定義する。各構造体は、基本 データ型または混成データ型の1つまたは複数のフィールドで構成される。構造 体はCINにより次のように表現される。 bnr_fields field_1[field_2...field_n] 1つの構造体を記述する文字の生成は、ステップ1719およびステップ172 1に示されている。チャートBに示すように、上記文字bは前記構造体(struct )のスタートを示している。数字nr_fieldsは、前記構造体におけるフィールド の数を示す。前記構造体におけるフィールドは、field_1,field_2,field_nに よって記述される。各フィールドは基本型または混成型である。前記構造体の基 本型フィールドは、チャートAに示されているように記述される。混成型はここ に示されているように記述される(すなわち、アレイは、次元の数および各次元 のサイズ、スタート文字a等で記述される)。 IDLは、データ型のシーケンスを定義する。1つのシーケンスは、2つの特 性、すなわち、(コンパイル時に決定される)最大サイズと(実行時に決定され る)長さとを有する1次元のアレイである。シーケンスは次のように表現される 。 cnr-occurrences base_type 前記シーケンスのための文字の生成は、ステップ1723,1725に示されて いる。この表現において、上記文宇cは、チャートBに示すように、前記シーケ ンスのスタートを示している。文字nr_occurrencesは、該シーケンスにデータ型 の出現回数を示す。該出現回数の後には、前記シーケンスにおけるデータ型出現 ごとの実際の記述予base_typeが続く。データ型が基本型である場合、チャート Aの適当な記述子が使用される。前記シーケンスが混成型である場合、記述子は ここに説明されているように作成される。シーケンスのシーケンスも可能である 。 IDLは、空(null)文字を除くすべての8ビットの量(quantity)で構成さ れる文字列型を定義する。1つの文字列は、charのシーケンスに類似している。 文字列はCINにより次のように表現される。 dsize 文字列のスタートは文字dで示される。該文字列のサイズは、ステップ1727 で生成される文字sizeによって示される。 IDLにおいて、共用体(union)は、Cプログラミング言語の“共用体”と C“switch”文との間の交配体である。換言すれば、共用体シンタクスは、共用 体ブランチを示す“case”ラベルと共に“switch”文を含むものである。IDL 共用体は区別されなければならない。すなわち、共用体のヘッダは、現在の呼出 しインスタンスにどの共用体要素を使用すべきかを決定する型別タグフィールド を指定しなければならない。共用体および共用体ブランチは、CINにより次の ように表現される。 enr_fields flabel_1 field_1[flabel_2 field_2...label_n field_n] 共用体および共用体ブランチを示す文字の生成は、ステップ1729,1731 ,1733,1735に示されている。この表現において、eは共用体のスター トを示し、fは該共用体内の共用体ブランチのスタートを示す。該共用体におけ るフィールドの数は、文字nr_fieldsによって明示される。各フィールドのcase ラベル値は、文字label_1によって示される。フィールドがデフォルトである場 合、前記ラベルは省略される。次に、各フィールドごとの記述子field_1がくる 。前記共用体のフィールドは、基本型または混成型のいずれであってもよい。従 って、基本型のフィールド記述子は、チャートAに基づいて生成されてよい。混 成型はここに説明されているように生成される。 基本型および混成型の記述から分かるように、CIN記述は前記オリジナルの IDLソースファイルに含まれる識別子を含まず、汎用関数が生成される。従っ て、最も複雑なデータ構造であっても、文字列フォーマットで容易に表現され得 る。下記のものは元々IDLで記述されたサンプル構造体である。 この発明の方法を使用することにより、上記のデータ構造はCINにより次の ように表現される。 “c100+e2+f0+b2+FFf1+b2+KK” 好ましい実施の形態において、正の数字の後には正符号(“+”)が付けられて おり、負の数字の後には負符号(“−”)が付けられている。負の数は頻繁には 現れないが、負の数の使用は、例えば共用体のcaseラベルのようなデータ型に必 要となる(すなわち、case識別子は負の数であることがある)。上に示したCI N記述子について以下に説明する。データ構造は最大の100固の要素(100 +)を有する1つのシーケンス(c)で構成され、各前記要素は2個のフィール ド(2+)を有する1つの共用体(e)で構成されている。識別子がゼロ(偽) (f0+)である場合、1つの変形体は2個のフィールド(2)を含む構造体( b)である。1番目のフィールドは符号付きのlong(F)である。2番目のフィ ールドは符号付きのlong(F)である。識別子が1(真)(f1+)である場、 第2の変形体は2個のフィールド(2+)を含む構造体(b)である。1番目の フィールドは符号無しのlong(K)である。2番目のフィールドは符号無しのlo ng(K)である。 オペレーションをCINで記述する場合、前記方法はステップ1851に進む 。図18は、オペレーションのための記述子を生成するためのステップを示すフ ローチャートである。オペレーション記述子は、CINにより次のように生成さ れる。ステップ1851において、前記コードジェネレータは、前記オペレーションの 記述子の残部を構成する文字列から導出されるユニークな整数operation_synops isを生成する。該整数は、前記CIN記述子における残りの文字について例えば 巡回冗長検査を実行することによって導出される。次に、前記コードジェネレー タは、前記オペレーションの本来のIDL名から導出されるユニークな文字列op eration_idを生成する。次に、ステップ1855において、前記コードジェネレ ータは、前記オペレーションの属性(無しまたは“一方向”)を示す文字である operation_attributeを生成する。例えば、前記オペレーションが一方向属性を 有さない場合、文字Aが生成される。しかし、前記オペレーションが一方向であ る場合、前記コードジェネレータは文字Bを生成する。文字nr_paramsは、前記 オペレーション中にいくつのパラメータが含まれるかを示す整数である。前記オ ペレーションが非空き(non-void)リターン型を有する場合、1番目のパラメー タがその結果である。param_1記述子は、その後に実際のパラメータデータ型が 続くことになる前記パラメータの方向(in、out、inoutまたは関数結果)を示す 文字を含む。例えば、前記コードジェネレータは、in、out、inoutおよび関数結 果の方向について、それぞれ、文字A,B,CおよびDを生成する。これら特定 のパラメータについて、図17のステップ1707にリターンする。各パラメー タのデータ型が記述されたとき、例外の数が整数nr_exceptionsによって示され る。そして、ステップ1719にリターンすることによって、各例外の構造記述 がなされる。整数nr_contextsは、前記オペレーションによって保持されるコン テキスト名の数を示す。これらのコンテキスト名は、文字列context_1,context _2,context_nで生成される。 次のものは元々IDLで記述された2つのサンプルオペレーションである。 この発明の方法を使用することによって、上記AddオペレーションはCINに より次のように表現される。 126861413+3+ADDA3+DFAFAF0+0+ 前記オペレーションのCIN記述子は次のように説明される。最初の数字(12 6861413)は、文字列“3+ADDA3+DFAFAF0+0+”について巡回冗長検査を実行する ことによって、前記CINの残部から導出される。オペレーションidは3つの 文字(3+)を含む。これらの3つの文字は、オペレーションidとしての文字 列“ADD”である。すべてのIDL識別子は、固有のものであり、caseとは独立 でなければならない。従って、オペレーションidは大文字とされる。前記オペ レーションは、一方向性属性(A)を含まず、3つの“パラメーダ”(3+)を 含む。前記関数が結果を返すので、実際上、最初の“パラメータ”が関数結果( D)である。前記関数結果は符号付きのlong(F)である。次のパラメータ(実 際上、最初のパラメータ)はinパラメータ(A)である。該パラメータは、型 分類された符号付きのlong(F)のパラメータである。3番目のパラメータは、 型分類された符号付きのlong(F)のinパラメータである。例外およびコンテキ ストは存在しない(0+)。 同様に、上記SubtractオペレーションはCIN記述子により次のように表現さ れる。 453399302-9+SUBTRACTA3+DFAF0+0+ インターフェイスも、この発明の方法を使用することによって同様に記述され る。図10はインターフェイス記述子の生成を示す。インターフェイスは次のよ うに定義される。整数nr_operationsは、該インターフェイスに含まれるオペレーションの数を示 す。各オペレーションは、オペレーション記述子を生成するための上記方法に従 つて、operation_spec_1,operation_spec_2,operation_spec_nで記述される。 こうして、前記コードジェネレータ112は、図9のステップ951に進み、各 オペレーションを記述する。 この発明の方法を使用することによって、上記AddオペレーションはCINに より次のように表現される。 2+126861413+3+ADDA3+DFAFAF0+0+453399302-9+SUBTRACTA3+DFAF0+0+ 前記インターフェイスは2つのオペレーション(2+)を含む。上記Addオペ レーションおよびSubtractオペレーションのオペレーション記述子は、オペレー ションの数を示す文字の次にくる。 上述の如く、CIN記述子は、クライアントアプリケーションおよびサーバア プリケーションの両方にリンクされるヘッダファイルに含まれる。こうして、ク ライアントおよびサーバの両方は、各々が適当と考える記述子を利用することが できる。前記CINは様々な形態で使用可能である。例えばデータ型のCIN記 述子は、構造化されたデータ型をパックしたりアンパックしたりするための汎用 関数を作成するのに有用であろう。 さらに、CIN記述子は、迅速にインターフェイスを比較するためにも使用可 能である。例えば、サーバアプリケーションは、CINで記述された2つのイン ターフェイスを含むヘッダファイルを有してもよい。この場合、該サーバアプリ ケーションは、既知の文字列比較関数を使用してASCII文字列記述子を比較 することができる。CIN記述が同一である(または類似している)場合、サー バは、サーバアプリケーションにおいて共通の方法を使用して両インターフェイ スのオペレーションを実行することができる。こうして、上記CINを使用して 、異なる(しかし類似している)インターフェイスのための多数の時間コード化 方 法をセーブする。 XI.ピクルドIDLフォーマットデータ構造体の作成 ピクルド(pickled)IDLフォーマット(“PIF”)データ構造体は、ク ライアントメモリ23およびサーバメモリ17にロードされたIDLコンパイラ およびコードジェネレータと共に使用されるよう設計されている。該データ構造 体は、メモリ23またはメモリ17に格納されたIDLソースファイルに基づい ている。該ソースファイルも、ディスクのようなコンピュータによって読取り可 能な媒体に格納されることができる。このデータ構造体は、IDLソースファイ ルを示す解析ツリーを含んでいる。該データ構造体は、メモリ23またはメモリ 17あるいはディスクのようなコンピュータによって読取り可能な媒体に格納可 能である。前記ソースファイルを示す前記データ構造体は、ピクルドIDLフォ ーマット(“PIF”)と呼ばれている。該PIFファイルは、前記ソースファ イルに定義されたインターフェイスを使用するクライアントおよびサーバにより 実行時にアクセス可能である。該PIFファイルに含まれる解析ツリーは、ポイ ンタの代りにアレイインデックスを使用するアレイである。このアレイインデッ クスの使用により、その結果としての解析ツリーは言語とは独立したものとする ことができる。前記アレイの最初のコンポーネントは使用されない。前記アレイ の2番目のコンポーネント(インデックス1)は、前記解析ツリーの残りの部分 へのエントリポイントとして機能するルート部である。 図20にはデータ構造体tu2001が示されており、これは次のようにIDL によって定義される。 前記データ構造体2001は、その各々がentry_defタイプ(後で定義)である 解析ツリーノード2005のシーケンス(可変サイズアレイ)およびソースファ イルライン2007のシーケンスを含む。前記ソースファイルライン2007の シーケンスは、前記IDLソースファイルからの実際のソースコードラインを含 む文字列シーケンスである。 各解析ツリーノード(または“エントリ”)2005は、該ノードの名前およ びその特性を含む固定部、ならびに、前記ノードのタイプによって決まる可変部 で構成される。前記解析ツリーノードは図21に示されており、これは次のよう にIDLによって定義される。 前記解析ツリーノードの固定部はentry_index2105を含み、これは前記解 析ツリーにおけるこの特定のエントリのインデックスである符号なしlongである 。前記エントリの非修飾名は、nameフィールド2107に含まれる。オリジナル のIDLソースファイルの名前は、file_nameフィールド2111に含まれる。l ine_nrフィールド2113は、この解析ツリーノードを作成させる前記IDLソ ースファイルにおけるライン番号を含む。ブールin_main_file2115は、コマ ンドライン上に指定されたIDLソースファイルにおいてエントリがなされたか 否か、または、前記エントリが“include”ファイルの一部か否かを示す。この ファイルに続いて、前記解析ツリーは、可変部、すなわち、識別子entry_type_d efを有する共用体2117を含む。前記共用体識別子entry_type_defは、ノード のタイプおよびentry_def内のどの変数がアクティブなのかを指示する。entry_t ype_defは次のように定義される列挙である。 entry_type_defは、各種の解析ツリーエントリのリストを含む。各解析ツリー エントリは、entry_defに含まれるswitch文に使用される一定の定数を示す。各 エントリごとに、共用体u_tagは異なるタイプの構造体を含むことになる。列挙 された最初の値entry_unusedは、ゼロの値に対応し、前記共用体のタイプを決定 するのに使用されない。 前記解析ツリーエントリが(値entry_moduleによって指示された)モジュール である場合、前記解析ツリーの可変部は、モジュール定義シーケンスを含むデー タ構造である。各モジュール定義は、前記解析ツリーエントリにおけるインデッ クスとして機能する符号なしlongである。 前記解析ツリーエントリが(値entry_interfaceによって指示された)インタ ーフェイスである場合、前記解析ツリーの可変部は、ローカル定義シーケンス、 および、このインターフェイスが継承する基本インターフェイスのシーケンスを 含むデータ構造体である。前記解析ツリーエントリがインターフェイスの前向き 宣言(entry_interface_fwd)である場合、前記共用体はフル定義のインデック スを含む符号なしのlongである。 定数(entry_const)は、解析ツリーノードにおいて該定数の値を含む構造体 として表現される。好ましくは、前記ソースファイルに含まれる各種の基本タイ プ定数(ブール定数、char定数、double定数等)を識別するために、共用体およ びswitch/case文が使用される。 例外(entry_except)は、解析ツリーノードにおいてフィールドのシーケンス を含む構造体として表現される。属性(entry_attr)は、該属性が読出し専用で あるか否かを示すブール値、および、そのデータ型を示す符号なしのlongを含む データ構造として表現される。 前記解析ツリーエントリがオペレーション(op_def)である場合、前記エント リデータ構造体1105の可変部2117は図13に示されるようなデータ構造 体である。前記データ構造体2117は、前記オペレーションが一方向属性を有 するものか否かを示すブール論理2205、戻りタイプを示す符号なしのlong2 207、前記オペレーションに対する引数2209のシーケンス、前記オペレー ションに対する例外2211のシーケンス、および、前記オペレーションに含ま れるコンテキストを指示する文字列2213のシーケンスを含む。前記解析ツリ ーエントリが特定のオペレーションに対する引数(entry_argument)である場合 、該解析ツリーエントリの可変部は、該引数の方向およびデータ型を示す符号な しのlongを含む。 前記解析ツリーエントリが共用体(entry_unlon)である場合、これは解析ツ リーエントリにおいて図23に示すようなに表現される。前記データ構造体21 17は、識別子2303を示す符号なしのlong、および、その型2305を示す 符号なしのlongを含む。その型は、基本型の列挙リストを使用して指示されるの が好ましい。該データ構造体2117は、共用体フィールド2307のシーケン スをさらに含む。前記解析ツリーエントリが共用体ブランチ(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ソースが記述されると、前記データ 構造体は任意の既知の方法を使用してファイルまたはデータベースに移送される 。 以上、オブジェクト指向型の情報伝送方法および装置について説明してきたが 、この発明は様々な変更がなされてよい。例えば、1つのトレーダを使用する例 について説明したが、この発明は多数のトレーダを使用する場合にも同様に適用 可能である。実際上、多数のプロトコルおよび構成設定をサポートするために、 各コンテキストをコピーしてもよい。
───────────────────────────────────────────────────── フロントページの続き (72)発明者 エルレンケッター,アンスガー ドイツ国 D―61267 ノイアンスパッハ, アウフ デル ハイデ 44 (72)発明者 スコフィールド,アンドリュー,チャール ズ スイス連邦共和国 CH―6330 シャム, リンデンブール 27 (72)発明者 カエザー,レト,リチャード スイス連邦共和国 CH―8968 ムットシ ェレン,スタインフガイシュトラーセ 40

Claims (1)

  1. 【特許請求の範囲】 1.第1のコンピュータのメモリに格納されたリクエストされた情報を第2のコ ンピュータのメモリに格納されたリクエスタに伝送するためのオブジェクト指向 型方法であって、 前記第1のコンピュータに、前記リクエストされた情報にアクセスするための 情報プロバイダコンポーネントをロードするステップと、 前記情報プロバイダコンポーネントから、情報プロバイダファクトリオブジェ クトを生成するステップと、 前記第1のコンピュータに、前記情報プロバイダコンポーネントを選択するた めのナビゲータコンポーネントをロードするステップと、 前記ナビゲータコンポーネントからナビゲータオブジェクトを生成するステッ プと、 前記第2のメモリに、前記リクエスタからの前記リクエストされた情報につい てのリクエストを受け取るためのアダプタコンポーネントをロードするステップ と、 前記アダプタコンポーネントから、アダプタストリームオブジェクトを生成す るためのアダプタファクトリオブジェクトを生成するステップと、 前記アダプタファクトリオブジェクトから、前記リクエストについてのアダプ タストリームオブジェクトを生成するステップと、 前記情報プロバイダコンポーネントから、情報プロバイダファクトリオブジェ クトを生成するステップと、 前記ナビゲータオブジェクトを使用して、前記情報プロバイダファクトリオブ ジェクトを選択するステップと、 前記情報プロバイダファクトリオブジェクトを使用して、前記リクエストされ た情報にアクセスするステップと、 前記情報プロバイダファクトリオブジェクトから、情報プロバイダストリーム オブジェクトを生成するステップと、 前記アダプタストリームオブジェクトおよび情報プロバイダストリームオブジ エクトを使用して、前記情報プロバイダコンポーネントから前記アダプタコンポ ーネントに前記リクエストされた情報を伝送するステップと を具備する方法。 2.前記第2のコンピュータのメモリに、前記リクエストを前記アダプタコンポ ーネントおよび情報プロバイダコンポーネントに送るディスパッチャコンポーネ ントをロードするステップと、 前記リクエストに関する情報を含むリクエストコンテキストにより、前記ディ スパッチャコンポーネントから前記ナビゲータオブジェクトを呼び出すステップ と をさらに具備する請求の範囲第1項に記載の方法。 3.前記ナビゲータオブジェクトが、前記リクエストコンテキストを使用して前 記情報プロバイダファクトリオブジェクトを選択する請求の範囲第2項に記載の 方法。 4.前記リクエストコンテキストが、コンテキスト名およびコンテキスト値を含 むオクテット構造体である請求の範囲第3項に記載の方法。 5.前記情報プロバイダコンポーネントから前記アダプタコンポーネントに前記 情報をストリームするステップが、 前記リクエストされた情報の個別部分を得るために、前記情報プロバイダスト リームオブジェクトを呼び出すステップと、 前記情報プロバイダストリームオブジェクトにより、前記リクエストされた情 報の個別部分にアクセスするステップと、 前記リクエストされた情報の個別部分を戻すステップと、 前記アダプタストリームオブジェクトを呼び出し、該アダプタストリームオブ ジェクトに前記リクエストされた情報の個別部分を書き込むステップと、 前記リクエストされた情報の個別部分を前記リクエスタに戻すステップと をさらに具備する請求の範囲第1項に記載の方法。 6.前記情報プロバイダストリームオブジェクトから前記リクエストされた情報 の他の個別部分が利用可能か否かを示すステップをさらに具備する請求の範囲第 5項に記載の方法。 7.前記情報プロバイダストリームオブジェクトを破棄するステップと、 前記アダプタストリームオブジェクトを破棄するステップと をさらに具備する請求の範囲第6項に記載の方法。 8.前記情報プロバイダファクトリオブジェクトから情報プロバイダストリーム オブジェクトを生成するステップが、 前記情報プロバイダファクトリオブジェクトに対する呼出しに含まれる情報を 使用して、情報ソースを選択するステップと、 メモリに格納されたストリームテーブルから新たなストリームのためのエント リを選択するステップと、 前記ストリームのためのハンドルを生成するステップと、 前記ストリームに関するストリームコンテキスト情報を前記ストリームテーブ ルエントリに書き込むステップと、 前記情報プロバイダストリームオブジェクトを生成するステップと、 前記情報プロバイダファクトリオブジェクトのコーラに対して、情報ストリー ムオブジェクト参照および前記ハンドルを戻すステップと をさらに具備する請求の範囲第5項に記載の方法。 9.前記情報プロバイダストリームオブジェクトに対する呼出しに含まれるスト リームハンドルを確認するステップと、 確認された前記ストリームハンドルに基づいて前記ストリームテーブルにアク セスするステップと をさらに具備し、前記リクエストされた情報の個別部分にアクセスするステッ プが、アクセスされた前記ストリームテーブルエントリにおける情報を使用して 実行される請求の範囲第8項に記載の方法。 10.前記情報ソースを閉じるステップと、 前記情報プロバイダストリームオブジェクトを破棄するステップと をさらに具備する請求の範囲第8項に記載の方法。 11.特定のトランスポートプロトコルにインターフェースを提供するための少 なくとも1つのトランスポータコンテキスト、および、情報のためのリクエスト を認証するための少なくとも1つのオーセンティケータコンテキストを初期化し 、メモリにロードするステップと、 トランスポータファクトリオブジェクトを生成するステップと、 前記トランスポータファクトリオブジェクトを呼び出すステップと、 トランスポータストリームオブジェクトを生成するステップと、 前記情報のためのリクエストに応じて前記トランスポータストリームオブジェ クトを呼び出すステップと、 前記情報のためのリクエストを読み出すステップと、 前記情報のためのリクエストに関するデータを前記アダプタファクトリオブジ ェクトに戻すステップと をさらに具備する請求の範囲第4項に記載の方法。 12.前記リクエストされた情報の個別部分を前記リクエスタに戻すステップが 、 前記リクエストされた情報の個別部分を前記トランスポータオブジェクトに書 き込むステップと、 前記データを前記リクエスタに書き込むステップと、 前記情報プロバイダストリームオブジェクトを破棄するステップと、 前記アダプタストリームオブジェクトを破棄するステップと、 前記トランスポータストリームオブジェクトを破棄するステップと を含む請求の範囲第10項に記載の方法。 13.前記リクエストされた情報の個別部分を所望のフォーマットに変換するた めの少なくとも1つのトランスフォーマコンポーネントを初期化し、メモリにロ ードするステップと、 トランスフォーマファクトリオブジェクトを生成するステップと、 前記トランスフォーマファクトリオブジェクトを呼び出すステップと、 トランスフォーマストリームオブジェクトを生成するステップと、 前記リクエストされた情報の個別部分を、前記情報プロバイダストリームオブ ジェクトから前記トランスフォーマストリームオブジェクトにストリームするス テップと、 前記リクエストされた情報の個別部分を所望のフォーマットに変換するステッ プと をさらに具備する請求の範囲第4項に記載の方法。 14.コンピュータのメモリに格納されたコンポーネントから前記と同一のコン ピュータまたは他のコンピュータに格納された他のコンポーネントに対して、情 報を伝送するためのオブジェクト指向型方法であって、 リクエスタからの情報リクエストを受け取るための少なくとも1つのアダプタ コンポーネント、リクエストされた前記情報を提供するための少なくとも1つの 情報プロバイダコンポーネント、前記少なくとも1つの情報コンポーネントのう ちの1つを選択するための少なくとも1つのトレーダコンポーネント、および、 前記少なくとも1つのトレーダコンポーネントのうちの1つを選択するための少 なくとも1つのナビゲータコンポーネントを初期化し、これらをメモリにロード するステップと、 前記少なくとも1つの情報プロバイダコンポーネントを前記トレーダコンポー ネントに登録するステップと、 前記少なくとも1つのトレーダコンポーネントのためのトレーダオブジェクト を生成するステップと、 前記少なくとも1つのアダプタコンポーネントのためのファクトリオブジェク トを生成するステップと、 前記アダプタファクトリオブジェクトを呼び出すステップと、 前記アダプタファクトリオブジェクトから、前記リクエストのためのアダプタ ストリームを生成するステップと、 前記少なくとも1つの情報コンポーネントごとのファクトリオブジェクトを生 成するステップと、 前記トレーダオブジェクトにおいて、ロードバランス用のアルゴリズムを使用 して情報プロバイダファクトリオブジェクトを選択するステップと、 選択された前記情報プロバイダファクトリオブジェクトを呼び出すステップと 、 前記選択された情報プロバイダファクトリオブジェクトから、情報プロバイダ ストリームオブジェクトを生成するステップと、 前記アダプタストリームおよび前記選択された情報プロバイダストリームオブ ジェクトを使用して、前記情報プロバイダコンポーネントから前記アダプタコン ポーネントへの前記トレーダコンポーネントに、前記リクエストされた情報をス トリームするステップと を具備する方法。 15.前記情報プロバイダコンポーネントから前記アダプタコンポーネントに情 報をストリームするステップが、 前記リクエストされた情報の個別部分を得るために、前記情報プロバイダスト リームオブジェクトを呼び出すステップと、 前記情報プロバイダストリームオブジェクトにより、前記リクエストされた情 報の個別部分にアクセスするステップと、 前記リクエストされた情報の個別部分を戻すステップと、 前記アダプタストリームオブジェクトを呼び出し、該アダプタストリームオブ ジェクトに前記リクエストされた情報の個別部分を書き込むステップと、 前記リクエストされた情報の個別部分を前記リクエスタに戻すステップと をさらに具備する請求の範囲第13項に記載の方法。 16.前記情報プロバイダストリームオブジェクトから前記リクエストされた情 報の他の個別部分が利用可能か否かを示すステップをさらに具備する請求の範囲 第14項に記載の方法。 17.前記情報プロバイダファクトリオブジェクトから情報プロバイダストリー ムオブジェクトを生成するステップが、 前記情報プロバイダファクトリオブジェクトに対する呼出しに含まれる情報を 使用して、情報ソースを選択するステップと、 メモリに格納されたストリームテーブルから新たなストリームのためのエント リを選択するステップと、 前記ストリームのためのハンドルを生成するステップと、 前記ストリームに関するストリームコンテキスト情報を前記ストリームテーブ ルエントリに書き込むステップと、 前記情報プロバイダストリームオブジェクトを生成するステップと、 前記情報プロバイダファクトリオブジェクトのコーラに対して、情報ストリー ムオブジェクト参照および前記ハンドルを戻すステップと をさらに具備する請求の範囲第15項に記載の方法。 18.1つのコンピュータまたは複数のコンピュータのメモリ内の1つのコンポ ーネントから他のコンポーネントに対して、リクエストされた情報を伝送するた めのコンピュータソフトウエア情報伝送システムであって、 少なくとも1つの情報プロバイダコンポーネントと、 リクエストによって、前記少なくとも1つの情報プロバイダコンポーネントに 対して情報をリクエストする少なくとも1つのアダプタコンポーネントと、 前記情報プロバイダコンポーネントから前記アダプタコンポーネントに対して 、前記リクエストされた情報を個別的に送るためのオブジェクト指向型手段と を具備した情報伝送システム。 19.前記オブジェクト指向型手段が、 前記少なくとも1つの情報プロバイダコンポーネントおよび前記少なくとも1 つのアダプタコンポーネントによって実行されるファクトリインターフェイスと 、 前記少なくとも1つの情報プロバイダコンポーネントおよび前記少なくとも1 つのアダプタコンポーネントによって実行されるストリームオブジェクトインタ ーフェイスと を含み、ファクトリオブジェクトに対する呼出しがストリームオブジェクトを 生成し、ストリームオブジェクトに対する呼出しが前記リクエストされた情報の 個別部分を送り、または、取り出す請求の範囲第17項に記載の情報伝送システ ム。 20.前記少なくとも1つの情報プロバイダが、複数のローカルファイルのため に機能するファイルサーバを含む請求の範囲第18項に記載の情報伝送システム 。 21.前記少なくとも1つの情報プロバイダが、遠隔のホストから前記リクエス トされた情報を取り出すための手段を含む請求の範囲第18項に記載の情報伝送 システム。 22.構成設定情報に基づいて、前記少なくとも1つの情報プロバイダのうちの 1つを選択するための少なくとも1つのナビゲータコンポーネントを含む請求の 範囲第17項に記載の情報伝送システム。 23.ロードバランス用のアルゴリズムに基づいて、前記少なくとも1つの情報 プロバイダのうちの1つを選択するための少なくとも1つのトレーダコンポーネ ントと、 構成設定情報に基づいて、前記トレーダコンポーネントのうちの少なくとも1 つを選択するための少なくとも1つのナビゲータコンポーネントと をさらに具備した請求の範囲第17項に記載の情報伝送システム。
JP10506107A 1996-07-11 1997-07-10 オブジェクト指向型情報伝送方法および装置 Pending JP2000515280A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/678,317 US6173327B1 (en) 1996-07-11 1996-07-11 Object-oriented method and apparatus for information delivery
US08/678,317 1996-07-11
PCT/US1997/011887 WO1998002813A1 (en) 1996-07-11 1997-07-10 Object-oriented method and apparatus for information delivery

Publications (1)

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

Family

ID=24722313

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10506107A Pending JP2000515280A (ja) 1996-07-11 1997-07-10 オブジェクト指向型情報伝送方法および装置

Country Status (4)

Country Link
US (1) US6173327B1 (ja)
EP (1) EP0912936A1 (ja)
JP (1) JP2000515280A (ja)
WO (1) WO1998002813A1 (ja)

Families Citing this family (95)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6604144B1 (en) * 1997-06-30 2003-08-05 Microsoft Corporation Data format for multimedia object storage, retrieval and transfer
US6567861B1 (en) * 1997-09-17 2003-05-20 International Business Machines Corporation Method and apparatus for remotely running objects using data streams and/or complex parameters
US6813769B1 (en) 1997-10-28 2004-11-02 Microsoft Corporation Server application components with control over state duration
US6721740B1 (en) * 1998-05-29 2004-04-13 Sun Microsystems, Inc. Method and apparatus of performing active update notification
US7197570B2 (en) * 1998-07-22 2007-03-27 Appstream Inc. System and method to send predicted application streamlets to a client device
US20010044850A1 (en) * 1998-07-22 2001-11-22 Uri Raz Method and apparatus for determining the order of streaming modules
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US6829770B1 (en) 1999-02-23 2004-12-07 Microsoft Corporation Object connectivity through loosely coupled publish and subscribe events
US6823521B1 (en) * 1999-02-26 2004-11-23 International Business Machines Corporation Apparatus and method for communicating between computer systems using active datastreams
EP1163567B1 (en) * 1999-02-26 2008-11-19 Henry Haugland Mass generation of individual virtual servers, virtual web sites and virtual web objects
US6628607B1 (en) 1999-07-09 2003-09-30 Apple Computer, Inc. Method and apparatus for loop breaking on a serial bus
US6691096B1 (en) 1999-10-28 2004-02-10 Apple Computer, Inc. General purpose data container method and apparatus for implementing AV/C descriptors
US6959343B1 (en) 1999-11-01 2005-10-25 Apple Computer, Inc. Method and apparatus for dynamic link driver configuration
US6671768B1 (en) 1999-11-01 2003-12-30 Apple Computer, Inc. System and method for providing dynamic configuration ROM using double image buffers for use with serial bus devices
US6631426B1 (en) 1999-11-02 2003-10-07 Apple Computer, Inc. Automatic ID allocation for AV/C entities
US8762446B1 (en) * 1999-11-02 2014-06-24 Apple Inc. Bridged distributed device control over multiple transports method and apparatus
US6618750B1 (en) 1999-11-02 2003-09-09 Apple Computer, Inc. Method and apparatus for determining communication paths
US6813663B1 (en) 1999-11-02 2004-11-02 Apple Computer, Inc. Method and apparatus for supporting and presenting multiple serial bus nodes using distinct configuration ROM images
US6636914B1 (en) 1999-11-05 2003-10-21 Apple Computer, Inc. Method and apparatus for arbitration and fairness on a full-duplex bus using dual phases
US6587904B1 (en) 1999-11-05 2003-07-01 Apple Computer, Inc. Method and apparatus for preventing loops in a full-duplex bus
US6457086B1 (en) * 1999-11-16 2002-09-24 Apple Computers, Inc. Method and apparatus for accelerating detection of serial bus device speed signals
US6920636B1 (en) 1999-12-15 2005-07-19 Microsoft Corporation Queued component interface passing for results outflow from queued method invocations
US6639918B1 (en) 2000-01-18 2003-10-28 Apple Computer, Inc. Method and apparatus for border node behavior on a full-duplex bus
US7266617B1 (en) * 2000-01-18 2007-09-04 Apple Inc. Method and apparatus for border node behavior on a full-duplex bus
US6877023B1 (en) * 2000-01-28 2005-04-05 Softwired, Inc. Messaging system for delivering data in the form of portable message formats between message clients
US7165257B2 (en) * 2000-02-08 2007-01-16 Mips Technologies, Inc. Context selection and activation mechanism for activating one of a group of inactive contexts in a processor core for servicing interrupts
US7139901B2 (en) * 2000-02-08 2006-11-21 Mips Technologies, Inc. Extended instruction set for packet processing applications
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7082552B2 (en) * 2000-02-08 2006-07-25 Mips Tech Inc Functional validation of a packet management unit
US7502876B1 (en) 2000-06-23 2009-03-10 Mips Technologies, Inc. Background memory manager that determines if data structures fits in memory with memory state transactions map
US7058064B2 (en) * 2000-02-08 2006-06-06 Mips Technologies, Inc. Queueing system for processors in packet routing operations
US7155516B2 (en) * 2000-02-08 2006-12-26 Mips Technologies, Inc. Method and apparatus for overflowing data packets to a software-controlled memory when they do not fit into a hardware-controlled memory
US7032226B1 (en) * 2000-06-30 2006-04-18 Mips Technologies, Inc. Methods and apparatus for managing a buffer of events in the background
US7421507B2 (en) * 2000-02-16 2008-09-02 Apple Inc. Transmission of AV/C transactions over multiple transports method and apparatus
US7035989B1 (en) 2000-02-16 2006-04-25 Sun Microsystems, Inc. Adaptive memory allocation
US6831928B1 (en) 2000-02-17 2004-12-14 Apple Computer, Inc. Method and apparatus for ensuring compatibility on a high performance serial bus
US7050453B1 (en) 2000-02-17 2006-05-23 Apple Computer, Inc. Method and apparatus for ensuring compatibility on a high performance serial bus
US6618785B1 (en) * 2000-04-21 2003-09-09 Apple Computer, Inc. Method and apparatus for automatic detection and healing of signal pair crossover on a high performance serial bus
US6718497B1 (en) 2000-04-21 2004-04-06 Apple Computer, Inc. Method and apparatus for generating jitter test patterns on a high performance serial bus
US6546359B1 (en) 2000-04-24 2003-04-08 Sun Microsystems, Inc. Method and apparatus for multiplexing hardware performance indicators
US6647546B1 (en) 2000-05-03 2003-11-11 Sun Microsystems, Inc. Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
WO2001084377A2 (en) * 2000-05-04 2001-11-08 Kickfire, Inc. An information repository system and method for an itnernet portal system
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
US6957208B1 (en) 2000-10-31 2005-10-18 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for performance analysis using semantic knowledge
US6993604B2 (en) * 2000-11-15 2006-01-31 Seagate Technology Llc Dynamic buffer size allocation for multiplexed streaming
US7127517B2 (en) * 2000-12-27 2006-10-24 International Business Machines Corporation Protocol adapter framework for integrating non-IIOP applications into an object server container
US7257819B1 (en) * 2001-04-30 2007-08-14 General Electric Capital Corporation Method and system for dispatching service requests to sub-applications
JP2003087243A (ja) * 2001-06-28 2003-03-20 Hitachi Ltd データ検証方法、データ検証装置およびその処理プログラム製品
US7409420B2 (en) * 2001-07-16 2008-08-05 Bea Systems, Inc. Method and apparatus for session replication and failover
US7571215B2 (en) 2001-07-16 2009-08-04 Bea Systems, Inc. Data replication protocol
US6918013B2 (en) * 2001-07-16 2005-07-12 Bea Systems, Inc. System and method for flushing bean cache
US7702791B2 (en) * 2001-07-16 2010-04-20 Bea Systems, Inc. Hardware load-balancing apparatus for session replication
US7028030B2 (en) * 2001-08-30 2006-04-11 Bea Systems, Inc. Cluster caching with concurrency checking
US6826601B2 (en) * 2001-09-06 2004-11-30 Bea Systems, Inc. Exactly one cache framework
US7113980B2 (en) * 2001-09-06 2006-09-26 Bea Systems, Inc. Exactly once JMS communication
US7930704B2 (en) * 2002-02-06 2011-04-19 Oracle International Corporation J2EE component extension architecture
US7403996B2 (en) 2002-02-21 2008-07-22 Bea Systems, Inc. Systems and methods for migratable services
EP1363187A1 (en) * 2002-05-15 2003-11-19 Sony International (Europe) GmbH Dispatching application steps in a client/server environment
US7506342B2 (en) * 2002-07-23 2009-03-17 Bea Systems, Inc. System and method for implementing J2EE connector architecture
US7698434B2 (en) * 2002-08-29 2010-04-13 Bea Systems, Inc. J2EE connector architecture
US7711772B2 (en) * 2002-11-15 2010-05-04 Schlumberger Technology Corporation Web-based system and method for electronic data delivery
US7447801B2 (en) * 2002-11-18 2008-11-04 Microsoft Corporation Composable data streams for managing flows
US7417973B1 (en) 2002-12-31 2008-08-26 Apple Inc. Method, apparatus and computer program product for ensuring node participation in a network bus
US7457302B1 (en) 2002-12-31 2008-11-25 Apple Inc. Enhancement to loop healing for malconfigured bus prevention
US7475402B1 (en) * 2003-04-30 2009-01-06 Sun Microsystems, Inc. Method and apparatus to isolate changes in remoting system servers
US7487510B1 (en) * 2003-04-30 2009-02-03 Sun Microsystems, Inc. Method and apparatus to isolate changes in remoting system clients
US20040226029A1 (en) * 2003-05-09 2004-11-11 Gelme Andrew Anthony Interface for distributed objects and development platform therefor
US7668099B2 (en) * 2003-06-13 2010-02-23 Apple Inc. Synthesis of vertical blanking signal
US7353284B2 (en) 2003-06-13 2008-04-01 Apple Inc. Synchronized transmission of audio and video data from a computer to a client via an interface
US8275910B1 (en) 2003-07-02 2012-09-25 Apple Inc. Source packet bridge
JP2005108082A (ja) * 2003-10-01 2005-04-21 Okuma Corp デバイスドライバのインターフェース方法
US7788567B1 (en) 2003-11-18 2010-08-31 Apple Inc. Symbol encoding for tolerance to single byte errors
US7995606B1 (en) 2003-12-03 2011-08-09 Apple Inc. Fly-by and ack-accelerated arbitration for broadcast packets
US7237135B1 (en) 2003-12-29 2007-06-26 Apple Inc. Cyclemaster synchronization in a distributed bridge
US7308517B1 (en) 2003-12-29 2007-12-11 Apple Inc. Gap count analysis for a high speed serialized bus
JP4388427B2 (ja) * 2004-07-02 2009-12-24 オークマ株式会社 スクリプト言語で記述されたプログラムを呼出し可能な数値制御装置
US7644184B2 (en) * 2004-12-08 2010-01-05 International Business Machines Corporation Universal adapter
US7574710B1 (en) 2005-04-28 2009-08-11 Sun Microsystems, Inc. Method and apparatus for determining data encoding format in RMI-IIOP messages
US7533156B1 (en) 2005-04-28 2009-05-12 Sun Microsystems, Inc. Method and apparatus for RMI-IIOP implementation with java serialization
JP4852906B2 (ja) * 2005-06-24 2012-01-11 富士ゼロックス株式会社 連携処理システム及び装置
US8327024B2 (en) * 2006-04-29 2012-12-04 724 Solutions Software, Inc. System and method for SMS/IP interoperability
EP2016714A2 (en) * 2006-04-29 2009-01-21 724 Solutions Software Inc. Contextual based identity
EP2016717A2 (en) * 2006-04-29 2009-01-21 724 Solutions Software Inc. Platform for interoperability
US20080082690A1 (en) * 2006-09-29 2008-04-03 Dell Products L.P. System and method for the dynamic loading of protocol adapters
US20150220893A1 (en) * 2014-02-05 2015-08-06 Andrew Dale Jouffray Software marketing and trade
US10055209B2 (en) * 2015-01-12 2018-08-21 Red Hat, Inc. Resource closing
US11074070B2 (en) * 2018-11-13 2021-07-27 United States Of America, As Represented By The Secretary Of The Navy Interface effect minimization by software design
US11599551B2 (en) 2020-03-30 2023-03-07 Oracle International Corporation Deserialization of stream objects using multiple deserialization algorithms
US11477258B2 (en) 2020-03-30 2022-10-18 Oracle International Corporation Serialization of objects using multiple serialization algorithms
US11256480B1 (en) * 2021-02-09 2022-02-22 Oracle International Corporation Deserialization of stream objects using constant-foldable method handles
US11288045B1 (en) 2021-02-09 2022-03-29 Oracle International Corporation Object creation from structured data using indirect constructor invocation
US11828190B2 (en) 2021-11-18 2023-11-28 General Electric Company Airfoil joining apparatus and methods

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3886522A (en) 1974-02-28 1975-05-27 Burroughs Corp Vocabulary and error checking scheme for a character-serial digital data processor
US5664177A (en) 1988-04-13 1997-09-02 Digital Equipment Corporation Data processing system having a data structure with a single, simple primitive
EP0381645A3 (en) 1989-01-18 1992-08-05 International Business Machines Corporation System and method for communicating between a plurality of processors
US4941170A (en) 1989-03-20 1990-07-10 Tandem Computers Incorporated Facsimile transmissions system
US5247676A (en) 1989-06-29 1993-09-21 Digital Equipment Corporation RPC based computer system using transparent callback and associated method
US5551035A (en) 1989-06-30 1996-08-27 Lucent Technologies Inc. Method and apparatus for inter-object communication in an object-oriented program controlled system
US5893117A (en) 1990-08-17 1999-04-06 Texas Instruments Incorporated Time-stamped database transaction and version management system
US5204947A (en) 1990-10-31 1993-04-20 International Business Machines Corporation Application independent (open) hypermedia enablement services
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
CA2077273C (en) 1991-12-12 1996-12-03 Mike H. Conner Language neutral objects
US5860010A (en) * 1992-03-12 1999-01-12 Bull S.A. Use of language with similar representation for programs and data in distributed data processing
US6209040B1 (en) 1992-10-09 2001-03-27 Microsoft Corporation Method and system for interfacing to a type library
JPH09502547A (ja) 1992-11-13 1997-03-11 マイクロソフト コーポレイション 遠隔手続き呼び出しのためのインターフェイスポインタをマーシャリングする方法及びシステム
US5838894A (en) 1992-12-17 1998-11-17 Tandem Computers Incorporated Logical, fail-functional, dual central processor units formed from three processor units
JP3365576B2 (ja) 1993-06-14 2003-01-14 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクトの実行方法および装置
AU681433B2 (en) 1993-08-03 1997-08-28 Sun Microsystems, Inc. Flexible multi-platform partitioning for computer applications
GB9316948D0 (en) 1993-08-14 1993-09-29 Ibm Programming aid for distributed computing systems
US5568639A (en) 1993-11-24 1996-10-22 Menai Corporation Method and apparatus for providing an object-oriented file structuring system on a computer
US5515508A (en) 1993-12-17 1996-05-07 Taligent, Inc. Client server system and method of operation including a dynamically configurable protocol stack
DE69430421T2 (de) 1994-01-14 2003-03-06 Sun Microsystems, Inc. Verfahren und Gerät zur Automatisierung der Umgebungsanpassung von Rechnerprogrammen
US5761511A (en) 1994-01-28 1998-06-02 Sun Microsystems, Inc. Method and apparatus for a type-safe framework for dynamically extensible objects
US5627979A (en) 1994-07-18 1997-05-06 International Business Machines Corporation System and method for providing a graphical user interface for mapping and accessing objects in data stores
US5778228A (en) * 1994-08-16 1998-07-07 International Business Machines Corporation Method and system for transferring remote procedure calls and responses over a network
US5732270A (en) 1994-09-15 1998-03-24 Visual Edge Software Limited System and method for providing interoperability among heterogeneous object systems
US5768564A (en) * 1994-10-07 1998-06-16 Tandem Computers Incorporated Method and apparatus for translating source code from one high-level computer language to another
JPH08171482A (ja) 1994-10-29 1996-07-02 Mitsubishi Electric Corp プログラムのバージョン生成方式
US5642511A (en) 1994-12-16 1997-06-24 International Business Machines Corporation System and method for providing a visual application builder framework
US5671416A (en) 1995-02-24 1997-09-23 Elson; David Apparatus and a method for searching and modifying source code of a computer program
US5732219A (en) 1995-03-17 1998-03-24 Vermeer Technologies, Inc. Computer system and computer-implemented process for remote editing of computer files
US5724503A (en) 1995-03-31 1998-03-03 Sun Microsystems, Inc. Method and apparatus for interpreting exceptions in a distributed object system
US5742762A (en) 1995-05-19 1998-04-21 Telogy Networks, Inc. Network management gateway
US5621885A (en) 1995-06-07 1997-04-15 Tandem Computers, Incorporated System and method for providing a fault tolerant computer program runtime support environment
US5761656A (en) * 1995-06-26 1998-06-02 Netdynamics, Inc. Interaction between databases and graphical user interfaces
RU2115159C1 (ru) 1995-10-24 1998-07-10 Владимир Олегович Сафонов Способ и устройство для проверки использования полей записей во время компиляции
US5848273A (en) * 1995-10-27 1998-12-08 Unisys Corp. Method for generating OLE automation and IDL interfaces from metadata information
US5701490A (en) 1996-01-16 1997-12-23 Sun Microsystems, Inc. Method and apparatus for compiler symbol table organization with no lookup in semantic analysis
US5897636A (en) * 1996-07-11 1999-04-27 Tandem Corporation Incorporated Distributed object computer system with hierarchical name space versioning
US5860072A (en) * 1996-07-11 1999-01-12 Tandem Computers Incorporated Method and apparatus for transporting interface definition language-defined data structures between heterogeneous systems

Also Published As

Publication number Publication date
EP0912936A1 (en) 1999-05-06
WO1998002813A1 (en) 1998-01-22
US6173327B1 (en) 2001-01-09

Similar Documents

Publication Publication Date Title
JP2000515280A (ja) オブジェクト指向型情報伝送方法および装置
WO1998002813A9 (en) Object-oriented method and apparatus for information delivery
EP0912934B1 (en) Method for transporting interface definition language-defined data structures between heterogeneous systems
US7484218B2 (en) Method and apparatus for dynamically brokering object messages among object models
US7444619B2 (en) Inter-process communication using different programming languages
US8650320B1 (en) Integration server supporting multiple receiving channels
CA2001621C (en) Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes
US6633923B1 (en) Method and system for dynamic configuration of interceptors in a client-server environment
US7051032B2 (en) System and method for providing post HOC access to legacy applications and data
US7089560B1 (en) Architecture for building web applications
WO1998002810A9 (en) Method and apparatus for transporting interface definition language-defined data structures between heterogeneous systems
JPH08339355A (ja) 分散形システムでの処理タスク実行呼び出し方法及び装置
JPH1091446A (ja) Javaベースアプリケーションの発見とダウンロードのための分散オブジェクトシステムの利用
US20030055862A1 (en) Methods, systems, and articles of manufacture for managing systems using operation objects
JP2000515281A (ja) インターフェイス定義言語によって定義されたインターフェイス、オペレーションおよびデータ型を記述するための方法および装置
US6516354B2 (en) Method and apparatus for efficient representation of variable length identifiers in a distributed object system
US6308225B1 (en) Method for performing distributed object calls
US7620958B2 (en) Transaction interoperability using host-initiated processing
van Engelen gSOAP 2.7. 0 User Guide
JPH11272622A (ja) 並行分散処理システムおよびその方法
Hammer et al. YAZ User’s Guide and Reference
US7587719B2 (en) Method and apparatus for combining extended markup language and key/value pairs into the format of an interprocess message payload
Rhodes et al. Network Data and Network Errors
O’Hallaron Randal E. Bryant David R. O’Hallaron January 17, 2001
WO2002075474A2 (en) Computer application framework

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

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070817

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071001

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070918

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071029

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20071017

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071122

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20080115