(57)【要約】カスタムインターフェースを介してサーバオブジェクトへのリモートアクセスを可能にするための、オブジェクトリクエストブローカ抽象層および方法。このオブジェクトリクエストブローカ抽象層は、カスタムインターフェース、ソースコードを生成する方法に関する命令を有するテンプレート、および１組のライブラリルーチンを有するコード生成プログラムを含む。このコード生成プログラムは、クライアント側およびサーバ側のコードを生成して、非汎用インターフェースを介してサーバオブジェクトを生成しかつサーバオブジェクトにアクセスすることができるようにする。これは、コード生成プログラムがクライアントおよびサーバのためのソースコードを生成することを命令するテンプレートを獲得すること、ユーザ定義のインターフェースを読み取ること、およびこのインターフェースのためのソースコードを生成することを含む方法によって実行される。この生成されたソースコードによって、このユーザ定義された非汎用インターフェースを介してプッシュベースの分散が実装される。
2006516774.tif 000002
【特許請求の範囲】
【請求項１】
サーバオブジェクトへのリモートアクセスを可能にするためのオブジェクトリクエストブローカ抽象層であって、
少なくとも１つのユーザ定義インターフェースと、
前記少なくとも１つのユーザ定義インターフェースのためのソースコードを生成する命令を有する、少なくとも１つのコードテンプレートと、
少なくとも１つのルーチンを含むコード生成プログラムとを含み、
前記コード生成プログラムが、クライアント側およびサーバ側のソースコードを生成し、前記ソースコードによって、前記少なくとも１つのユーザ定義インターフェースを介して前記サーバオブジェクトを生成しかつ前記サーバオブジェクトにアクセスすることができる、オブジェクトリクエストブローカ抽象層。
【請求項２】
前記サーバ側のソースコードが、受信されたイベントを登録済みリモートクライアントに通知する、請求項１に記載のオブジェクトリクエストブローカ抽象層。
【請求項３】
前記クライアント側のソースコードが、前記イベントをキャッシュに入れる、請求項２に記載のオブジェクトリクエストブローカ抽象層。
【請求項４】
前記クライアント側のソースコードが、前記ユーザ定義インターフェースを介して前記受信されたイベントを提示する、請求項３に記載のオブジェクトリクエストブローカ抽象層。
【請求項５】
分散システムでクライアント側のポートおよびサーバ側の実行プログラムを生成する方法であって、
コード生成プログラムがクライアントおよびサーバのためのソースコードを生成することを命令するように操作可能なテンプレートを獲得すること、
ユーザ定義インターフェースを獲得すること、および
前記ソースコードを前記ユーザ定義インターフェース用に生成することを含み、
前記ソースコードが、前記ユーザ定義インターフェースを介してプッシュベースの分散を提供する方法。
【請求項６】
前記ソースコードが、登録済みリモートクライアントへのイベントの通知を実装する、請求項５に記載の方法。
【請求項７】
前記ソースコードが、受信されたイベントのキャッシングを実装する、請求項６に記載の方法。
【請求項８】
コンピュータ可読媒体に格納されたコンピュータ実行可能プロセスであって、該コンピュータ実行可能プロセスは、事前定義されたインターフェースおよびテンプレートを有するコード生成プログラムでソースコードを生成するように操作可能であり、前記コンピュータ実行可能プロセスが、
前記コード生成プログラムのための命令を有する前記テンプレートを獲得すること、
少なくとも１つの非汎用属性を有する前記インターフェースを獲得すること、および
高レベル言語でソースコードを生成することを含み、ソースコードが、前記事前定義されたインターフェースを使用してサーバオブジェクトへのリモートアクセスを実装する、コンピュータ実行可能プロセス。
【請求項９】
生成されたソースコードが、登録済みクライアントすべてにイベントを通知するように操作可能である、請求項８に記載のコンピュータ実行可能プロセス。
【請求項１０】
生成されたソースコードが、クライアントで受信されたイベントのキャッシングを実装する、請求項８に記載のコンピュータ実行可能プロセス。
【請求項１１】
分散システムでクライアント側のポートおよびサーバ側の実行プログラムを生成する方法であって、
コード生成プログラムがクライアントおよびサーバのためのソースコードを生成することを命令するように操作可能なテンプレートを獲得すること、
非汎用インターフェースを獲得すること、および
前記ソースコードを前記非汎用インターフェース用に生成することを含み、
前記ソースコードが、前記非汎用インターフェースを介してプッシュベースの分散を提供する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、開示の全体を参照により本明細書に組み込む、２００３年１月１５日に出願の米国特許仮出願第６０／４４０，０２５号、名称「ＯＲＢＡＬ：ａ  Ｐｕｓｈ−Ｂａｓｅｄ  Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ」の恩典を主張するものである。
【０００２】
本発明に合致するシステムおよび方法は、イベント通知のためのオブジェクトリクエストブローカに関する。より詳細には、本発明は、生成されたコードがその後にコンパイル可能であり、分散コンピューティングにおける多数のリモートクライアントにサーバオブジェクトイベントへのアクセスを提供するような、コードの自動生成を提供することに合致する。
【背景技術】
【０００３】
コンピュータネットワークの広範な展開により、パーソナルコンピュータ（ＰＣ）の有用性が大幅に向上した。インターネットのワールドワイドウェブの急激な成長に伴って、内部のメインフレームコンピュータに限定されていた大量のデータベースアプリケーションが、比較的小さい低コストのサーバワークステーションおよびＰＣに移行された。分散コンピューティングは、サーバおよびクライアントの機械にわたるソフトウェアアプリケーションを区分にすることによって、中央サーバのコンピューティングの負担を低減した。分散コンピューティングでは、クライアントとサーバのプログラムを実行する機械が、異なっており、かつインターネットまたは企業イントラネットあるいはエクストラネットなどネットワークを介して接続される。クライアントとサーバの機械は、共に標準通信プロトコルを使用して、互いに通信しなければならない。
【０００４】
クライアント／サーバコンピューティングに使用される従来のプロトコルの１つは、Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ（「ＲＰＣ」）である。ＰＲＣでは、プログラマが、モジュール（例えばプロシージャ呼出し）を符号化する場合、そのモジュールがプログラムのコンパイル中に生成されるため、「スタブ」だけを符号化する。「スタブ」は、プログラムが参照されたプロシージャのアドレスを解決せずに、コンパイルを完了することができるようにする特殊構成になされている。プロシージャが実行時間中に実際に呼び出された場合、コードの実行を求める要求は、モジュールが使用可能なサーバに転送される。このサーバは、プロシージャの機能を実行し、その結果をクライアントに透過的に戻す。
【０００５】
より高度な分散コンピューティングモデルおよびアプリケーションでは、オブジェクト志向の方法が使用され、より大きいアプリケーションが、小さいコンテナまたはプログラムコードおよびデータの「オブジェクト」に分割される。プログラムオブジェクトは、サーバとクライアントの両方に分散され、ネットワーク通信の詳細は、ネットワークを介して情報を転送するプロキシおよびスタブオブジェクトを使用してオブジェクトから隠蔽される。Ｏｂｊｅｃｔ  Ｍａｎａｇｅｍｅｎｔ  ＧｒｏｕｐのＣｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＣＯＲＢＡ）、およびＭｉｃｒｏｓｏｆｔのＤｉｓｔｒｉｂｕｔｅｄ  Ｃｏｍｐｏｎｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ（ＤＣＯＭ）は、分散コンピューティングの２つの競合する規格である。
【０００６】
例えば、ＣＯＲＢＡは、オブジェクトで構成され、各オブジェクト型には、特定のオブジェクト型にアクセスするためのインターフェースおよび実装コードがある。図１で示したように、インターフェースは、その特定のオブジェクト型のために呼び出すべき、属性１、２．．．ｎ（例えば名前、社会保障番号、生年月日）のリスト、およびメソッド１、２．．．ｎ（例えば、ｇｅｔ＿ｓｏｃｉａｌ＿ｓｅｃｕｒｉｔｙ（）；ｃｈａｎｇｅ＿ｓｏｃｉａｌ＿ｓｅｃｕｒｉｔｙ（）；ａｄｄ＿ｓｏｃｉａｌ＿ｓｅｃｕｒｉｔｙ（））のリストを含む。インターフェースは、カプセル化、多相性（ｐｏｌｙｍｏｒｐｈｉｓｍ）、および継承（ｉｎｈｅｒｉｔａｎｃｅ）を提供する、Ｉｎｔｅｒｆａｃｅ  Ｄｅｆｉｎｉｔｉｏｎ  Ｌａｎｇｕａｇｅ（ＩＤＬ）で定義される。インターフェースは、サーバオブジェクトが、インターフェースを呼び出すクライアントに提供するコントラクトの構文部分である。オブジェクトの操作を呼び出すことを望むクライアントはすべて、このＩＤＬインターフェースを使用して実行したい操作を特定し、送信される引数を整列化（ｍａｒｓｈａｌ）しなければならない。呼出しがターゲットオブジェクトに到達した場合、同じインターフェース定義が使用されて、引数が非整列化（ｕｎｍａｒｓｈａｌ）され、オブジェクトが、その引数で要求された操作を実行することができる。次いで、インターフェースの定義が使用されて、引数のトリップバックの結果が整列化され、宛先に到達したときに非整列化される。
【０００７】
図１で示したように、ＩＤＬ  ＣＯＲＢＡツールは、このＩＤＬファイルを使用して、それぞれクライアントおよびサーバのプロキシとして働くスタブおよびスケルトンを生成する。ＩＤＬは、プログラミング言語から独立しており、一般のプログラミング言語をすべてマップする。ＩＤＬはインターフェースを非常に厳密に定義付けるため、クライアント側のスタブは、その２つが、異なるプログラミング言語にコンパイルされ、または異なるサーバプラットフォームで実行されても、サーバ側のスケルトンと問題なく完全に一致する。例えば、図１で示したように（例えばリモートサーバの）オブジェクト実装１、２．．．ｎは、インターフェースとは別に位置付けられる。
【０００８】
分散コンピューティングの開発を容易にするには、コード生成プログラム（ｃｏｄｅ  ｇｅｎｅｒａｔｏｒ）が使用されることが多い。例えば、Ｇｏｏｄｗｉｎ他の米国特許第６，１９９，１９５号は、コード生成プログラムを教示しており、このコード生成プログラムは、スキーマサーバからのオブジェクト要素を読み取るモデル駆動型アプリケーションであり、スキーマサーバは、特定のデータシステムまたはデータベースを定義する使用可能なメタ情報を生成し、かつ所与のフレームワーク用の１組の知られているサービステンプレートをオブジェクトの要素に適用して、１組のソースコードを生成する。このコード生成プログラムは、ユーザのプリファランスおよび選択に基づく様々な言語（例えば、Ｃ＋＋、Ｊａｖａ（登録商標））でコードを生成することができる。コード生成プログラムは、クライアントスタブを置換する特定の操作のためのＣＯＲＢＡ  ＯＲＢサービスも生成する。この引用文献を、背景情報が有用であるために参照により本明細書に組み込む。
【０００９】
図１で示したように、オブジェクトリクエストブローカ（ＯＲＢ）は、クライアントの要求をターゲットオブジェクト実装に通信するための機構を提供する。ＯＲＢは、クライアントからの要求をオブジェクトにルーティングし、かつ応答をその宛先にルーティングすることに関する詳細のすべてを管理する。ＯＲＢは、オブジェクト実装を見つけ、それをクライアントに配信し、それによってプロセスをクライアントに対して透過的にする。図１で示したように、クライアントは、オブジェクト参照、例えばｐｅｒｓｏｎ．ｇｅｔ＿ｓｏｃｉａｌ＿ｓｅｃｕｒｉｔｙ（「Ｊｏｈｎ  Ｓｍｉｔｈ」）を使用して、呼出しを送信し、ＯＲＢに対して呼出しを望む正確なインスタンスを同定する。呼出しは、クライアント側のスタブを通り、続いてＯＲＢを通る。ＯＲＢが、オブジェクト実装がリモートサーバにあることを確認した場合、ＯＲＢは、例えばＩＩＯＰ（Ｉｎｔｅｒｎｅｔ  Ｉｎｔｅｒｏｐｅｒａｂｌｅ  ＯＲＢ  Ｐｒｏｔｏｃｏｌ）、ＧＩＯＰ（ＴＣＰを介して実装されるＧｅｎｅｒａｌ  Ｉｎｔｅｒｏｐｅｒａｂｌｅ  ＯＲＢ  Ｐｒｏｔｏｃｏｌ）など標準プロトコルを介して、要求をそのリモートオブジェクトのＯＲＢにルーティングする。リモートオブジェクト実装のＯＲＢは、要求をスケルトンに渡し、実装側のスケルトンは、オブジェクトが実装される場所でオブジェクトを開始する。このＯＲＢは、クライアントの透明性をもたらす。
【００１０】
一般に、ＣＯＲＢＡは、属性をそのインターフェースを介して取り出すために、プルベースのオブジェクト分散を使用する。すなわち、要求は常にクライアント側で発信される。しかし、プッシュベースのイベント通知も使用可能であるが、汎用／標準インターフェース（例えば「ストリング」型用のインターフェース）または任意の型のインターフェースだけに使用可能である。
【００１１】
ＣＯＲＢＡイベントモデル
イベントは、提供者によって生成され、消費者によって消費される。提供者と消費者は完全に分離されている。すなわち、提供者は、消費者の数または消費者のＩＤを認識せず、消費者は、どの提供者が所与のイベントを生成したかを認識しない。
【００１２】
このモデルをサポートするため、ＣＯＲＢＡ  Ｅｖｅｎｔ  Ｓｅｒｖｉｃｅは、ＣＯＲＢＡにイベントチャネルと呼ばれる新しいアーキテクチャの要素を導入した。図２で示したように、イベントチャネルは、以下のように提供者と消費者との間のイベントの転送を仲介する。
１．ステップ２０１で、イベントチャネルは、消費者がイベントにインタレストを登録することができるようにし、この登録情報を格納する。
２．ステップ２０２で、イベントが発生すると、供給者はイベント通知をチャネルに送信する。
３．ステップ２０３で、チャネルは提供者から入力されたイベントを受信する。
４．ステップ２０４で、チャネルは、提供者が生成したイベントを登録済み消費者に転送する。
【００１３】
提供者および消費者は、イベントチャネルに接続され、互いに直接接続されない。提供者から見ると、イベントチャネルは単一の消費者に見え、消費者から見ると、イベントチャネルは単一の提供者に見える。このように、イベントチャネルは、提供者と消費者を分離する。
【００１４】
２つのタイプのイベント提供者、すなわちパブリッシャおよびエミッタがある。
【００１５】
イベントソース：パブリッシャ
イベントは、イベントパブリッシャで発信され、任意の数のイベント消費者に転送される。パブリッシャは、そのチャネルにイベントを発行する唯一のソースであることが保証される。
【００１６】
イベントソース：エミッタ
イベントは、イベントエミッタで発信され、単一の消費者に転送される。１つの消費者だけが、加入してエミッタからイベントを受信することができる。しかし、複数のエミッタが、同時に同じイベントチャネルを使用することができる。イベント通信は、型付きまたは型なしの２つの形態の１つをとることができる。
【００１７】
型なしイベント
型なしイベント通信では、イベントは、一連の汎用ｐｕｓｈ（）またはｐｕｌｌ（）オペレーション呼出しによって伝搬される。ｐｕｓｈ（）オペレーションでは、イベントデータを格納する単一のパラメータを取得する。イベントデータパラメータは、任意の型のものであり、それによって任意のＩＤＬ定義データ型が、提供者と消費者との間で渡されることができるようになされている。ｐｕｌｌ（）オペレーションは、パラメータを持たないが、やはり任意の型である戻り値のイベントデータを伝送する。確かにｐｕｓｈ（）またはｐｕｌｌ（）のどちらの場合も、提供者および消費者アプリケーションは、任意のパラメータのコンテンツについて承認し、このデータが有用であれば値を戻さなければならない。
【００１８】
型付きイベント
型付イベント通信では、プログラマが、イベントが伝搬されるアプリケーション固有のＩＤＬインターフェースを定義する。プログラマは、ｐｕｓｈ（）およびｐｕｌｌ（）オペレーションを使用せず、また任意の型を使用するデータを伝送せずに、提供者および消費者がイベント通信の目的で使用するインターフェースを定義する。インターフェースに関して定義された操作は、任意の適したＩＤＬデータ型で定義されたパラメータを含むことができる。Ｐｕｓｈモデルでは、イベント通信は、単にこのインターフェースに関して定義された操作を呼び出すことによって開始される。Ｐｕｌｌモデルはさらに複雑である。なぜならイベント通信が、プログラマが定義するアプリケーション固有のインターフェースから特別に構築されたインターフェースに関する操作を呼び出すことによって開始されるからである。イベント通信は、構築されたインターフェースに関する操作を呼び出すことによって開始される。
【００１９】
イベント通信がとる形態は、イベントの転送を開始する方法とは別個のものである。その結果、ＰｕｓｈモデルとＰｕｌｌモデルの両方を使用して、型付イベントまたは型なしイベントを伝送することができる。しかし、ＣＯＲＢＡイベント通知では、送信されるデータが、カプセル化機構（ＣＯＲＢＡ：：ａｎｙ）に汎用化されることが必要である。Ｏｂｊｅｃｔ  Ｍａｎａｇｅｍｅｎｔ  Ｇｒｏｕｐ（ＯＭＧ）は、データ型すべてを予想することができないため、カスタム、タイプセーフのインターフェースを設計することができなかった。
【００２０】
例えば、以下を考慮されたい。ユーザが、文字列と整数の２つのフィールドを含むユーザ定義（カスタム）構造を渡す。この値を、ネットワークを介して整列化する目的で、イベントプロデューサは、この型を任意の型にキャスト（ｃａｓｔ）しなければならない。次いで、データがネットワークを介して消費者に送信され、受信側で型を元と思われる型にキャストする。しかし、プログラマが間違えた場合、またクライアント側で、データが任意の型から元の型以外の型（例えば、元の構造の代りに、文字列および整数を有するダブル）にキャストされた場合は、それによって実行時エラーが生じる。この種の誤りをコンパイル時に検出する方法はない。ＣＯＲＢＡでは、こうした誤りが実行時にしか検出されない。
【００２１】
Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃｏｍｐｏｎｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌは、ＣＯＲＢＡに非常に類似したものである。ＣＯＭ実行時は、オブジェクト志向サービスをクライアントおよびコンポーネントに提供し、ＲＰＣおよびセキュリティプロバイダを使用して、ＤＣＯＭワイヤプロトコル規格に準拠する標準ネットワークパケットを生成する。しかし、これも汎用インターフェースにしかプッシュベースのイベント通知を提供しない。要約すれば、ユーザ定義（非汎用）インターフェースを明らかにすることが、今日の技術の課題である。
【００２２】
ヘテロジニアスソフトウェアを明らかにすることを試みる様々な技術が、分散システム用に開発されてきた。例えば、Ｗｈｉｔｅｈｅａｄの米国特許第６，０８５，０３０号では、サーバアーキテクチャのコンポーネントが提供され、それによって、コンポーネントおよびサービスを、オブジェクト中立のグローバルコンポーネントレジストリに登録しかつ位置付けることによって、クライアントとヘテロジニアスソフトウェアとの間の分散された対話が可能になる。同様に、２００２年２月１４日に発行されたＫｉｌｌｉａｎ他の米国特許出願第０９／８４１，８４７号は、ＣＯＲＢＡを使用して、コンパイル後かつ実行前の、実装レポジトリで実行可能なインターフェース名とサーバのパス名との間の関連を登録する方法を含む、クライアントサーバシステムを記載している。ＩＤＬコンパイラも、インターフェースの各メソッドの型情報を生成し、それをインターフェースレポジトリに格納する。クライアントは、インターフェースレポジトリを照会して、特定のインターフェースに関する実行時情報を取得し、次いでそれを使用して、動的呼出しインターフェースを介してオブジェクトについてのメソッドを動的に生成しかつ呼び出すことができる。ＣＯＲＢＡを使用して、インテリジェントコンポーネントが分散コンピューティングで互いを発見できるようにする他の技術は、２００１年７月２６日に公開されたＢｅｎ−Ｓｈａｃｈａｒ他の米国特許出願第０９／８１６，２８２号を参照されたい。上述の引用文献すべてを、その有用な背景情報のために、参照により本明細書に組み込む。
【００２３】
しかし、ＣＯＲＢＡおよびＤＣＯＭによって提供されたプルベースの技術と同様のこうした技術は、スケーラビリティが低い。これらのシステムでは、非常に多数のクライアントに対して基準化することができない。これらのシステムは、ポイントツーポイントプロトコルに限定されたものである。プッシュベース技術を使用すると、１対多数のプロトコルを使用する通信が可能になる。スケーラブルマルチキャスト（ＳＲＭ）に関する基準を使用して、クライアントのインターネットスケール番号を提供することができる。一方、プッシュ技術も使用可能であるが、それは汎用標準インターフェースに関してのみ実装される。これは、静的でタイプセーフティに固有の、ユーザ定義され非汎用でカスタムインターフェースが存在しないことを指している。
【００２４】
非分散コードのために、静的タイプセーフティのユーザ定義のカスタムインターフェースの以下の例を考慮されたい。
／／ＩＴｒａｉｎはカスタムで非汎用インターフェースである。
／／ＩＴｒａｉｎ：：ＧｅｔＳｐｅｅｄ（）は型ダブルの変数を戻す
Ｔｒａｉｎ  ＊ｐＴｒａｉｎ；
ｌｏｎｇ＝ｐＴｒａｉｎ−＞ＧｅｔＳｐｅｅｄ（）；／／これはコンパイラ警告を発生する
ＧｅｔＳｐｅｅｄ（）メソッドは、型ダブルのデータを戻す。しかし、戻り値は、型ロングの変数に割り当てられる。これによってコンパイルメッセージが生成される。
【００２５】
ＣＯＲＢＡは、汎用インターフェースを使用する。これは、同様の誤りが実行時にだけ検出され、コンパイル時には検出されないことを指す。例えば、以下のコードを考慮されたい。
ＣＯＲＢＡ：：ａｎｙ  ａＶａｌ；
／／これは可変の型ダブルロング速度のイベントチャネルから得られた速度である
ｉｆ（！ａＶａｌ＞＝ｓｐｅｅｄ）／／これは警告せずにコンパイルする
この場合、ＧｅｔＳｐｅｅｄ（）メソッドは、型ロングにキャストされていた型任意の値を復帰させる。これはコンパイルメッセージを生成せず、プログラムは良好にコンパイルする。しかし実行時に、上記のフラグメントを実行すると、実行時エラーが生じる。コンパイル時にこの問題を検出する方法はない。換言すれば、静的タイプセーフティ概念では、プログラマまたは開発者が、動的可変型（ＣＯＲＢＡ：：ａｎｙ）ではなく、知られた静的な型を使用することが必要とされる。こうした不一致の問題をコンパイル時に検出することができれば、検査時間および労力が大幅に節約されるであろう。
【発明の開示】
【発明が解決しようとする課題】
【００２６】
上述の問題を解決するため、本発明の一態様では、分散ネットワークの多数のクライアントにサービスすることができるシステムおよび方法を提供する。
【００２７】
上述の問題をさらに解決するため、本発明の一態様では、クライアント側の透明性とは対照的に、サーバ側の高度の透明性を提供する。さらに、本発明の一態様では、静的タイプセーフティで固有のカスタムインターフェースを可能にする。
【課題を解決するための手段】
【００２８】
本発明によれば、サーバオブジェクトへのリモートアクセスを可能にするオブジェクトリクエストブローカ抽象層は、少なくとも１つのカスタムインターフェース、前記少なくとも１つのカスタムインターフェース用のソースコードを生成するための命令を有する少なくとも１つのコードテンプレート、および少なくとも１つのルーチンを含むコード生成プログラムを含む。コード生成プログラムは、クライアント側およびサーバ側のソースコードを生成し、それによって少なくとも１つのカスタムインターフェースを介して前記サーバオブジェクトを生成しかつそのサーバオブジェクトにアクセスすることができるようになる。
【００２９】
さらに、本発明によれば、分散システムのクライアント側のポートおよびサーバ側の実行プログラム（ｅｘｅｃｕｔｏｒ）を生成する方法は、コード生成プログラムがクライアントおよびサーバのためのソースコードを生成することを命令するように操作可能なテンプレートを獲得すること、カスタムインターフェースを獲得すること、および前記ソースコードをカスタムインターフェース用に生成することを含む。ソースコードは、カスタムインターフェースを介してプッシュベースの分散を提供する。
【００３０】
また、本発明によれば、コンピュータ可読媒体に格納されたコンピュータ実行可能プロセスが提供され、コンピュータ実行可能プロセスは、事前定義されたインターフェースおよびテンプレートを有するコード生成プログラムでソースコードを生成するように操作可能である。このコンピュータ実行可能プロセスは、コード生成プログラムのための命令を有するテンプレートを獲得すること、カスタム属性を有するインターフェースを獲得すること、および高レベル言語のソースコードを生成することを含み、ソースコードは、事前定義されたインターフェースを使用してサーバオブジェクトへのリモートアクセスを実行する。
【００３１】
本発明を理解し、実際に本発明が実施される方法を示すために、例示の非限定的な実施形態を、次に添付の図面を参照して説明する。
【発明を実施するための最良の形態】
【００３２】
次に、添付の図面を参照して、本発明の例示の非限定的な実施形態の記載によって、本発明を詳細に説明する。
【００３３】
オブジェクトリクエストブローカ抽象層（Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ  Ａｂｓｔｒａｃｔｉｏｎ  Ｌａｙｅｒ）は、自動的にコードを生成することによって、サーバオブジェクトへのリモートアクセスを可能にするプッシュベースのオブジェクト分散を提供する。具体的には、プログラマが、ＣＯＲＢＡ  ＩＤＬファイルでカスタムインターフェースを指定する。さらに、コードテンプレートは、このテンプレートが最終的に共に使用されるインターフェースのデータ型を考慮することなくインターフェースを実装する。例えば、カスタムインターフェースは、非標準の非汎用インターフェースである。すなわち、こうした例示の非限定的インターフェースは、例えばＣＯＲＢＡライブラリまたはインターフェースレポジトリで事前定義されたものとは対照的なユーザ定義型である。
【００３４】
例えば、複数のイベントサービスが、定義され、かつコードテンプレート「＊．ｔｍｐｌ」に格納される。これらは、図３で示したように、空白の形態の（このテンプレートの機能の一部が、コード生成プログラムによって充填されて、カスタムインターフェース用のこのプッシュベースルーチンを可能にする）ものである。テンプレートは、ＩＤＬファイルから適切なコードを生成する方法を単に記述するものである。テンプレートは、ターゲットソース言語用のコード、並びにコードを生成すべき方法を命令するメタコードを含む。
【００３５】
次に、コード生成プログラムは、ＩＤＬファイルに格納されたカスタムまたは非汎用インターフェースにイベントサービスのテンプレートを適用し、それによってこの特定のカスタムインターフェースのためのイベントサービス用のコードを生成する。ソースコード生成プログラムは、サーバ側の実行可能なプログラムとクライアント側のポートの両方を生成する。
【００３６】
例えば、クライアント側のポート実装を生成する以下の断片を考慮されたい。
＠ｆｏｒｅａｃｈ  ｉｎｔｅｒｆａｃｅ
＠ｆｏｒｅａｃｈ  ｏｐｅｒａｔｉｏｎ
＄ｒｅｔＴｙｐｅ＄{ｃｌａｓｓＮａｍｅ}Ｐｏｒｔ：：＄{ｏｐＮａｍｅ}（＄ａｌｌＰａｒａｍｓ）＄ｃｏｎｓｔ
{
＠ｉｆ（＄ｉｓ＿ａｔｔｉｂｕｔｅ）
／／キャッシュに入れられた値を戻し
ｒｅｔｕｒｎ  ＄ｍａｔｃｈｅｄＡｔｔｒＮａｍｅ；
＠ｅｌｓｅ
／／リモート呼出しを実行し
ＰｏｒｔＭｓｇ  ｍａｇＣａｌｌ；
／／．．．
}
＠ｅｎｄ
＠ｅｎｄ
【００３７】
上述のテンプレートは、コード生成プログラムが、インターフェースごとに、かつ与えられたＩＤＬファイル（「＠ｆｏｒｅａｃｈ  ｉｎｔｅｒｆａｃｅ」および「＠ｆｏｒｅａｃｈ  ｏｐｅｒａｔｉｏｎ」）のインターフェースの属性（操作）ごとに、クライアント側のコードを生成することを命令する。次いで、通常メソッドが宣言される。すなわち、「＄ｒｅｔＴｙｐｅ」が、コード生成プログラムによってＩＤＬファイルに記述されたメソッド用の戻りの型に置換される。＄｛ｃｌａｓｓＮａｍｅ｝は、実際のインターフェース名である（またはインターフェース名に基づくもの、例えばインターフェース名がＴｒａｉｎの場合、クラス名はＴｒａｉｎＣｌａｓｓでもよい）。＄｛ｏｐＮａｍｅ｝は、ＩＤＬで定義されたオペレーション名に置換される。＄ａｌｌＰａｒａｍｓは、コード生成プログラムが、渡されたパラメータすべての定義をメソッド宣言（例えば、ｆｌｏａｔ  ＴｒａｉｎＰｏｒｔ：：ＧｅｔＳｐｅｅｄ（ｉｎｔ  ＴｒａｉｎＮｕｍｂｅｒ，ｄｏｕｂｌｅ  Ｔｉｍｅ）に入れることを命令し、＄ｃｏｎｓｔは、コード生成プログラムが、呼び出されたメソッドの実行の結果としてオブジェクトの状態を変更できないことを命令する。次に、これが属性であるか、または実際のメソッドであるかが検査される。属性に対しては、その値がキャッシュから抽出されるが、メソッドでは、実際のリモート呼出しを行う必要がある。
【００３８】
サーバ側の実行プログラムを生成するコードについては、以下のサーバ側の例を考慮されたい。
＠ｆｏｒｅａｃｈ  ｉｎｔｅｒｆａｃｅ
＠ｆｏｒｅａｃｈ  ａｔｔｒｉｂｕｔｅ
ｖｏｉｄ  ＄{ｃｌａｓｓＮａｍｅ}Ｅｘｅｃｕｔｏｒ：：Ｕｐｄａｔｅ＄ａｔｔｒＮａｍｅ（ｃｏｎｓｔ  ＄ａｔｔｒＴｙｐｅ＆  ｖａｌ）
{
／／クライアントに伝送するために属性を変換する
／／更新のローカル通知を行う
}
＠ｅｎｄ
＠ｅｎｄ
【００３９】
サーバ側の実行可能なプログラムおよびクライアント側のポートのためのコードが生成された後、そのコードは、クライアントおよびサーバに組み込まれて、以下の機能性が提供される。すなわち、サーバが、イベントを登録済みクライアントすべてに信号で知らせ、特定のイベントの通知を受信する。クライアントは、状態の変更をキャッシュに入れ、この型に関連するカスタムインターフェースを介してキャッシュからオブジェクトのイベントを見る。
【００４０】
サーバ側の透明性は、ＣＯＲＢＡおよびＤＣＯＭでは対処されておらず、サーバ側アプリケーションは、サーバ側のコードの分散された規格に準拠しなければならない（例えばスケルトンなどを引き継がなければならない）が、ＯＲＢＡＬは、サーバ側の高度の透明性を有するコードを生成する。サーバ側のコードが、登録済みクライアントにイベントを通知する必要がある場合は、単にＯＲＢＡＬ層のＳｅｔＮｏｔｉｆｙ（）メソッドの呼出しを行う。この場合、サーバ側コードは、この通知がローカル（同じ機械）または分散されたクライアントに送信されたかどうかも認識しない。図４で示したように、ＯＲＢＡＬは、こうしたイベントを以下のように処理する。
１．ステップ４０１で、サーバは属性の変更を示す。
２．ステップ４０２で、ＯＲＢＡＬ実行プログラムはデータを整列化し、メッセージをトランスポート層に送信する。ＯＲＢＡＬ実行プログラムは、イベントをローカル通知実装に送信する。
３．次にステップ４０３で、ＴＣＰ、ＵＤＰ、またはＳＲＭなどトランスポート層が、データをクライアントポートに送信する。
４．ステップ４０４で、クライアントポートがデータを非整列化する。
５．次にステップ４０５で、クライアントポートがデータをキャッシュに入れ、イベントをローカル通知実装に送信する。
【００４１】
したがって、これによって、スレッド／通信リンクが、プルベースの実装で必要とされるようにオープンにされたままである必要がなくなるため、スケーラビリティの向上がもたらされる（より多くのクライアントにサービスを提供することができる）。あるいは、プルベースの実装では、プルオペレーションの度に通信リンクを再確立することができるが、それによって過剰なネットワーク帯域幅が消費される。さらに、データがクライアント側でキャッシュに入れられるため、クライアント側の透明性が存在し、かつ／またはこの特殊な作用（キャッシング）のカスタムコードが必要でなくなり、それがコード生成プログラムによって自動的に生成される。本発明は、タイプセーフティカスタムのユーザ定義型インターフェースのためのプッシュベース方式の利点ももたらす。
【００４２】
プロセスおよびパーツの構造の様々な新規の詳細を含む本発明の上記その他の特徴を、添付の図面を参照して詳細に記載し、特許請求の範囲で指摘した。理解されるように、本発明を実現する特定のプロセスおよびパーツの構造は、単に一例として示したものであって、本発明を限定するものではない。本発明の原理および特徴は、本発明の範囲から逸脱することなく、変形された多数の実施形態で使用することができる。
【図面の簡単な説明】
【００４３】
【図１】ＣＯＲＢＡのアーキテクチャを示すブロック図である。
【図２】ＣＯＲＢＡの提供者と消費者との間のイベントの転送を示す流れ図である。
【図３】ＯＲＢＡＬを生成する論理ブロックを示すブロック図である。
【図４】ＯＲＢＡＬの提供者と消費者との間のイベントの転送を示す流れ図である。
【図１】
2006516774.tif 000003
【図２】
2006516774.tif 000004
【図３】
2006516774.tif 000005
【図４】
2006516774.tif 000006
【国際調査報告】
2006516774.tif 000007
2006516774.tif 000008