(57)【特許請求の範囲】
【請求項１】
ファイアウォール外部のコンピュータからネットワークを介してファイアウォール内部のサーバコンピュータへの直接アクセスを抑止するファイアウォール機能を有するコンピュータを備えたシステムにおいて、
前記ファイアウォール外部のコンピュータとファイアウォール内部のサーバコンピュータで稼動する分散オブジェクト間の通信を中継するスケルトンオブジェクトとスタブオブジェクトとから成る中継プログラムを、前記サーバコンピュータで稼動するサーバプログラムの分散オブジェクト定義から自動生成し、前記ファイアウォール機能を有するコンピュータに転送し、分散オブジェクト間の通信を中継する機能を自動構築する中継プログラム生成コンピュータを設けたことを特徴とするコンピュータシステム。
【請求項２】
前記中継プログラムとしてファイアウォール外部の通信元のコンピュータからのデータを受信するスケルトンオブジェクトと、ファイアウォール内部で稼動する複数のサーバプログラムの分散オブジェクトに対し前記スケルトンオブジェクトで受信した受信データを選択的に送信する複数のスタブオブジェクトを生成することを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記スケルトンオブジェクトとして、ファイアウォール外部のコンピュータがファイアウォール内部のコンピュータへのアクセス権限を有するか否かをチェックするアクセスチェック機能を有するスケルトンオブジェクトを生成することを特徴とする請求項１に記載のコンピュータシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向技術に基づくソフトウェア開発の際に、ネットワークで接続された複数のコンピュータ上で稼動するプログラムが分散オブジェクト間通信を使用してデータのやり取りを行おうとして、Ｆｉｒｅｗａｌｌなどの物理的要因によって直接通信できない場合に、Ｆｉｒｅｗａｌｌ上で中継プログラムを稼動させて通信の中継をさせることによってシステムを構築する場合に適用して好適な、中継プログラムの自動生成システムに関する。
【０００２】
【従来の技術】
最初、オブジェクト指向技術に基づいたソフトウェア開発では単一のコンピュータ上にすべてのオブジェクトが存在し、オブジェクト間のデータのやりとりは、コンピュータが持つ物理メモリ内に確保された領域（スタックや共有メモリなど）を用いて行われていた。
【０００３】
ネットワークの発展に伴い、複数のコンピュータ上にあるオブジェクトの間で通信を行う必要が生じ、これを実現するための分散オブジェクト間通信の基礎として、ＣＯＲＢＡ（Ｃｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）がＯＭＧ（Ｏｂｊｅｃｔ  Ｍａｎａｇｅｍｅｎｔ  Ｇｒｏｕｐ）によって提唱された。
【０００４】
ＣＯＲＢＡでは、Ｎａｍｉｎｇ  Ｓｅｒｖｉｃｅ（ネットワーク上におけるファイル転送や、電子メール、ＷＷＷといった各種サービス）を使用することで、通信先のオブジェクトの場所をプログラマが意識することなく、同じコンピュータ上のオブジェクト間の通信と同じインタフェースを使って、分散オブジェクト間の通信を実現することができるようになっている。
【０００５】
ＣＯＲＢＡでは、ＩＤＬ（Ｉｎｔｅｒｆａｃｅ  Ｄｅｆｉｎｉｔｉｏｎ  Ｌａｎｇｕａｇｅ  ）を用いて、オブジェクトにアクセスするためのインターフェイスを定義し、この定義に対して、ＩＤＬコンパイラを用いてコンパイルすることにより、クライアント側用のスタブルーチンと、サーバ側のスケルトンルーチンを生成する。
【０００６】
クライアントプラグラムとサーバプログラムは、それぞれスタブルーチンとスケルトンルーチンをリンクすることにより、クライアントプログラムは、スタブルーチンとスケルトンルーチンを経由して、別のコンピュータ上にあるサーバオブジェクトと通信することが可能になっている。
【０００７】
同様に、Ｊａｖａ言語が提供しているＲＭＩ（Ｒｅｍｏｔｅ  Ｍｅｔｈｏｄ  Ｉｎｖｏｃａｔｉｏｎ）では、サーバ側のオブジェクトの定義からスタブとスケルトンを生成し、クライアント側で通常のメソッドを呼出すことによって、スタブ経由でスケルトンに通信してサーバ側にオブジェクトのメソッドを実行することができるようになっている。
【０００８】
これらの分散オブジェクト技術を使用して、Ｆｉｒｅｗａｌｌの内側と外側でオブジェクト間通信を行えるようにするためには、Ｆｉｒｅｗａｌｌの内側で稼働しているＮａｍｉｎｇ  Ｓｅｒｖｉｃｅやサーバプログラムのオブジェクトに対して、Ｆｉｒｅｗａｌｌの外側にあるクライアントから直接アクセスできる環境を用意する必要がある。例えば、Ｆｉｒｅｗａｌｌが稼働しているマシンがＴＣＰ／ＩＰのパケットをネットワークのトランスポート層でＦｉｒｅｗａｌｌの外側から内側へ物理的に中継する方式が知られている。
【０００９】
この場合、どのサーバプログラムに対して、どのクライアントからアクセスを許すといった制御はできないため、セキュリティホールになる可能性がある。
【００１０】
【発明が解決しようとする課題】
現在、ＥＣ分野での企業間取り引きや、アウトソーシングによる企業内コンピュータの運用管理などが盛んになりつつある。従来、これらの業務は専用線や公衆回線などを使って直接企業間を接続して通信を行っていた。しかし、専用線を準備するには大規模な設備と高額な利用料金が必要であり、インターネットの発達に伴って、安価なインターネットを利用して業務を行いたいという要求が多くなってきている。
【００１１】
これら、要求に伴い、多くの企業においては安価なインターネットを利用する企業が多くなっている。しかし、インターネットは開放されたネットワークであり、企業では社内のコンピュータに対して、社外からの不正アクセスを防ぐために、Ｆｉｒｅｗａｌｌ（不正アクセスを防ぐための防火壁と呼ばれるセキュリティシステム）を設置することで社内ネットワークを物理的にインターネットから隔離するようにしている。こういった環境では、社外と通信する必要がある場合（電子メール・ニュースのやりとりや、ＷＷＷへのアクセスなど）には、Ｆｉｒｅｗａｌｌ上で稼動する中継プログラムを経由して通信を行うようにしている。
【００１２】
現在、ＣＯＲＢＡを利用した分散オブジェクト間通信では、様々な通信プロトコル（ＴＣＰ／ＩＰ，ＯＳＩなど）上で、スタブルーチンとスケルトンルーチンとの間の通信を実現している。また、ＪａｖａのＲＭＩも、ＴＣＰ／ＩＰ上で実行されるようになっている。
【００１３】
これらの通信プロトコルを利用して通信する場合は、スタブルーチンが稼動するクライアントコンピュータとスケルトンルーチンが稼動するサーバコンピュータがネットワークで直接接続されている必要がある。
【００１４】
そのため、分散オブジェクトを利用してシステムを構築するにあたっても、前述のＦｉｒｅｗａｌｌなどによって物理的に直接通信を行うことができない場合には、システムを構築できないという問題がある。
【００１５】
また、ＣＯＲＢＡ，ＪａｖａのＲＭＩともに、通信のためのインフラは提供しているものの、システムのためのアクセス制御機能はないために、各サーバプログラムごとに、アクセス制御機能を別途用意しなければならないという問題がある。
【００１６】
本発明は、分散オブジェクト間通信の中継プログラムを自動的に生成することで開発コストを削減するとともに、中継プログラム上で中継先のサーバオブジェクトを選択させることによって、サーバプログラムが稼動しているコンピュータが複数あった場合に、負荷分散を可能にし、かつアクセス制御を中継プログラムで実行することで、各サーバプログラムごとにアクセス制御機能を用意する必要をなくすと同時にｆｉｒｅｗａｌｌ内のシステムに対するアクセス時のセキュリティを図ることを目的としている。
【００１７】
【課題を解決するための手段】
上記目的を達成するために、本発明は、ファイアウォール外部のコンピュータからネットワークを介してファイアウォール内部のサーバコンピュータへの直接アクセスを抑止するファイアウォール機能を有するコンピュータを備えたシステムにおいて、前記ファイアウォール外部のコンピュータとファイアウォール内部のサーバコンピュータで稼動する分散オブジェクト間の通信を中継するスケルトンオブジェクトとスタブオブジェクトとから成る中継プログラムを、前記サーバコンピュータで稼動するサーバプログラムの分散オブジェクト定義から自動生成し、前記ファイアウォール機能を有するコンピュータに転送し、分散オブジェクト間の通信を中継する機能を自動構築する中継プログラム生成コンピュータを設けたことを特徴とする。
【００１８】
また、前記中継プログラムとしてファイアウォール外部の通信元のコンピュータからのデータを受信するスケルトンオブジェクトと、ファイアウォール内部で稼動する複数のサーバプログラムの分散オブジェクトに対し前記スケルトンオブジェクトで受信した受信データを選択的に送信する複数のスタブオブジェクトを生成することを特徴とする。
【００１９】
また、前記スケルトンオブジェクトとして、ファイアウォール外部のコンピュータがファイアウォール内部のコンピュータへのアクセス権限を有するか否かをチェックするアクセスチェック機能を有するスケルトンオブジェクトを生成することを特徴とする。
【００２０】
【発明の実施の形態】
以下、本発明のー実施の形態を図面を用いて詳細に説明する。
図１は、本実施形態のシステム構成を示したものである。本実施形態によるシステムは、ＣＰＵ１１Ａ、メモリ１１Ｂからなる中央処理装置１１、及びクライアントプログラム１２Ａ１２Ａとスタブルーチン１２Ｂが格納されている記憶装置１２、及び中央処理装置の実行状況、処理結果を表示するための表示装置１３、及び各種プログラムの起動指示を行うための入力装置１４と通信ポート１５からなるクライアントコンピュータ１と、ＣＰＵ２１Ａ、メモリ２１Ｂからなる中央処理装置２１、及びサーバプログラム２２Ａ、Ｎａｍｉｎｇ Ｓｅｒｖｉｃｅプログラム２２Ｂ及びスケルトンルーチン２２Ｃが格納されている記憶装置２２、及び各クライアントコンピュータや、サーバコンピュータのプログラム実行状況などを表示する表示装置２３、及びプログラム起動を指示する入力装置２４、及び通信ポート２５からなるサーバコンピュータ２と、ＣＰＵ３１Ａ、メモリ３１Ｂからなる中央処理装置３１、及びＦｉｒｅｗａｌｌプログラム３２Ａ、Ｎａｍｉｎｇ Ｓｅｒｖｉｃｅプログラム３２Ｂ、中継プログラム３２Ｃ、アクセス制御のためのクライアントリスト３２Ｄを格納するための記憶装置３２、及び中継プログラム３２Ｃの起動指示を行うための入力装置３３、及び通信ポート３４からなる中継コンピュータであるＦｉｒｅｗａｌｌコンピュータ３と、ＣＰＵ４１Ａ、メモリ４１Ｂからなる中央処理装置４１、インターフェースコンパイラ４２Ａ、及び中継プログラム自動生成プログラム４２Ｂ及び、インターフェース定義４２Ｃ、クライアントプログラム１２Ａのソース４２Ｄ、サーバプログラム２２Ａのソース（４２Ｅ）が格納されている記憶装置４２と、ソースプログラムを表示するための表示装置４３、ソースプログラムやＩＤＬ（ｉｎｔｅｒｆａｃｅ ｄｅｆｉｎｉｔｉｏｎ ｌａｎｇｕａｇｅ）の編集指示、ＩＤＬコンパイラ、中継オブジェクト自動生成プログラムの起動指示、中継プログラム３２Ｃの転送指示を行うための入力装置４４と通信ポート４５からなるシステム開発用コンピュータ４と、コンピュータ間で送受信されるデータを通信するためのネットワーク５から構成されている。
【００２１】
図２は、本システムのプログラムを使用して、クライアントプラグラム１２Ａのクライアントオブジェクトから、サーバプログラム２２Ａのサーバオブジェクトに通信する際のデータの流れを示す図である。
クライアントプログラム１２Ａが起動し、サーバプログラム２２Ａに対して通信を行う時には、まず中継プログラム３２Ｃが稼動しているＦｉｒｅｗａｌｌ上にある、Ｎａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム３２Ｂに対して、名称を指定して中継プログラム３２Ｃの参照オブジェクトを要求する（２０１）。
中継プログラム３２Ｃは、起動時に自分自身のオブジェクトと、それを参照する際に使用する名称を、Ｎａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム３２Ｂに登録しているので、参照オブジェクトの要求を受けたＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム３２Ｂは、指定された名称に対応するオブジェクトへの参照オブジェクトを返す（２０２）。
一旦、参照オブジェクトを入手したクライアントプログラム１２Ａは、その参照オブジェクトをサーバプログラム２２Ａにあるオブジェクトだと想定して、通常のメソッド呼び出しを行う（２０３）。このメソッド呼び出しは、クライアントプログラム１２Ａ内にあるスタブオブジェクトに対応するメソッドを呼び出すことになる。
【００２２】
スタブオブジェクトは、Ｆｉｒｅｗａｌｌ上で稼動する中継プログラム３２Ｃのスケルトンを呼び出す（２０４）。
スケルトンはＦｉｒｅｗａｌｌ内にある中継プログラム３２Ｃ内の対応するオブジェクトのメソッドを呼び出す（２０５）。
中継プログラム３２Ｃは、Ｆｉｒｅｗａｌｌ上に登録してあるクライアントリストを読み込み、アクセス可能なマシンから、許可されたユーザがアクセスしているかをチェックする（２０６）。
【００２３】
許可されているマシンもしくは許可されているユーザでなければ、接続できない旨をスケルトンに返却する（２０７）。
メソッドが呼び出されると、サーバプログラム２２ＡのＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム２２Ｂに対して、名称を指定してサーバオブジェクトの参照オブジェクトを要求する（２０８）。
【００２４】
サーバプログラム２２Ａは、起動時に自分自身のオブジェクトと、それを参照する際に使用する名称を、Ｎａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム２２Ｂに登録しているので、参照オブジェクトの要求を受けたサーバコンピュータ２上で稼動するＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム２２Ｂは、指定された名称に対応するオブジェクトへの参照オブジェクトを返す（２０９）。
参照オブジェクトを入手した中継プログラム３２Ｃは、その参照オブジェクトをサーバプログラム２２Ａにあるオブジェクトだと想定して、メソッド呼び出しを行う（２１０）。
【００２５】
このメソッド呼び出しは、中継プログラム３２Ｃ内にあるスタブオブジェクトの対応するメソッドを呼び出すことになる。スタブオブジェクトは、サーバコンピュータ２上で稼動するスケルトンオブジェクトを呼び出す（２１１）。
スケルトンはサーバプログラム２２Ａの対応するオブジェクトのメソッドを呼び出す（２１２）。
呼び出されたオブジェクトは実行した結果をスケルトンオブジェクトに返す（２１３）。
スケルトンオブジェクトは、中継プログラム３２Ｃのスタブオブジェクトにネットワーク経由で結果を通信する（２１４）。
【００２６】
このスタブオブジェクトは、中継プログラム３２Ｃに結果を返す（２１５）。中継プログラム３２Ｃはスケルトンにその結果を渡す（２１６）。
このスケルトンオブジェクトは、ネットワーク経由で結果をクライアントコンピュータ１上のスタブオブジェクトに返す（２１７）。
最終的にクライアントプログラム１２Ａに結果が返却されることになる（２１８）。
【００２７】
図３は、本システムの中継プログラム自動生成プログラム４２Ｂを起動するときの、コマンドの書き方の例を示す図である。中継プログラム自動生成プログラム（ｐｒｏｘｙｇｅｎ）４２Ｂの名称３０１の後に、サーバプログラム２２Ａを定義したファイルの名称３０２を記述する。
【００２８】
図４は、本システムの中継プログラム自動生成プログラム４２Ｂが使用するＪａｖａプログラムでのＲＭＩ呼出しを行うためのインターフェース定義の例を示す図である。本例では、ｐｕｂｌｉｃ（４０１）とｉｎｔｅｒｆａｃｅ（４０２）キーワードの後に、インタフェース名称（４０３）を書き、ｊａｖａ．ｒｍｉ．Ｒｅｍｏｔｅ ｃｌａｓｓをｅｘｔｅｎｄすることを宣言する（４０４）。中括弧の中に、メソッド宣言（４０５）を記述している。メソッド宣言には、メソッド呼出しの結果の型（４０５１）、メソッド名（４０５２）、小括弧内に引数の型（４０５３）と引数名称（４０５４）を書き、ｊａｖａ．ｒｍｉ．ＲｅｍｏｔｅＥｘｃｅｐｔｉｏｎという例外を返す（４０５５）ことを記述する。
【００２９】
図５は、本システムのサーバプログラム２２Ａの定義の例を示す図である。
Ｊａｖａ  ＲＭＩを使用して通信するものを例として、記述している。
１行目と２行目は、Ｊａｖａ  ＲＭＩを使用する際に必ず宣言する。
３行目からのＨｅｌｌｏＩｍｐｌクラスを定義する。
５行目には、インターフェイス定義であるＨｅｌｌｏクラスを実装することを示す。
７行目は変数の宣言である。９行目からは、ＨｅｌｌｏＩｍｐｌクラスのオブジェクトのコンストラクタ定義である。
１４行目からは、ｓａｙＨｅｌｌｏメソッドの定義である。
１８行目から、中継プログラム３２Ｃ起動時の開始処理を記述している。
２０行目で  ＲＭＩ用のセキュリティ設定を行い、２２行目で、自信のオブジェクトである、ＨｅｌｌｏＩｍｐｌクラスのオブジェクトを生成する。
２３，２４行目で、生成したＨｅｌｌｏＩｍｐｌクラスのオブジェクトを、サーバ上で稼動しているＮａｍｉｎｇ  ＳｅｒｖｉｃｅにＨｅｌｌｏＳｅｒｖｅｒという名称で登録し、その後クライアントからのメソッド呼出し待ちになる。
２５，２６行目は、エラー処理である。
【００３０】
図６は、本システムの中継プログラム自動生成プログラム４２Ｂが生成する中継プログラムの記述例を示す図である。Ｊａｖａ ＲＭＩを使用して通信するものを記述している。
【００３１】
１行目と２行目は、Ｊａｖａ  ＲＭＩを使用する際に必ず宣言する。
４行目からのＨｅｌｌｏＩｍｐｌクラスを定義する。
６行目には、インターフェイス定義であるＨｅｌｌｏクラスを実装することを示す。
８行目と９行目は変数の宣言である。
１０行目からは、ＨｅｌｌｏＩｍｐｌクラスのオブジェクトのコンストラクタ定義である。
１５行目からは、ｓａｙＨｅｌｌｏメソッドの定義であり、１６行目で接続してきたクライアントがアクセスを許可されているかどうかをＣｈｅｃｋＣｏｎｎｅｃｔメソッドを呼び出してチェックし、許可されていなければ、許可されていないことを文字列で返却する。
【００３２】
１８行目でサーバオブジェクトの参照オブジェクトを入手済みかどうかをチェックし、入手していなければ、ｌｏｏｋｕｐメソッドを使ってサーバコンピュータ２のＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム２２ＢからＨｅｌｌｏＳｅｒｖｅｒという名称で登録されてあるサーバプログラム２２Ａの参照オブジェクトを入手する（１９，２０行目）。その後、参照オブジェクトのｓａｙＨｅｌｌｏメソッドを呼び出し、その結果を返却する（２２行目）。
【００３３】
２３、２４行目はエラー処理である。
２８行目から、中継プログラム３２Ｃの起動時の開始処理を記述している。
２９行目でＲＭＩ用のセキュリティ設定を行い、３１行目で、自信のオブジェクトである、ＨｅｌｌｏＩｍｐｌクラスのオブジェクトを生成する。
３２，３３行目で、生成したＨｅｌｌｏＩｍｐｌクラスのオブジェクトを、ｆｉｒｅｗａｌｌ上で稼動しているＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム３２ＢにＨｅｌｌｏＳｅｒｖｅｒという名称で登録し、その後クライアントコンピュータ１からのメソッド呼出し待ちになる。
３４，３５行目は、エラー処理である。
【００３４】
図７は、本システムの中継プログラム３２Ｃを起動するときの、コマンドの書き方の例である。
ｊａｖａというコマンド名７０１に続けて、中継プログラム３２Ｃが参照するＮａｍｉｎｇ  Ｓｅｒｖｉｃｅを実行しているサーバコンピュータの名称７０２、中継プログラム３２Ｃのクラスファイル名７０３を記述する。
【００３５】
図８は、本システムの中継プログラム３２Ｃがアクセス許可のチェックに使用するマシンリストの記述例である。
マシンの名称をそのまま記述したり（８０１）、ＩＰアドレスを記述したり（８０２）、”＊”を使用して複数のマシンを統合して表記（８０３，８０４）してもかまわない。また、それぞれのマシンの区切りは、”：”，“；”，改行文字などが利用できる。
【００３６】
以下、図９、図１０を用いて、本発明の一実施の形態の動作を説明する。
【００３７】
図９は、中継オブジェクト自動生成プログラム４２Ｂが、サーバプログラム２２Ａの定義を読み込んで中継プログラム３２Ｃのソースプログラムを生成する際の動作を示すフローチャートである。
まず、中継プログラム自動生成プログラム４２Ｂは、１つめの引数で渡されたサーバプログラム２２Ａの定義ファイルを開き、内容を読み込む（ステップ９０１）。
【００３８】
次に、このサーバプログラム２２Ａがインプリメントするインタフェースの定義ファイルを開き、内容を読み込む（ステップ９０２）。次に、インターフェース定義されているメソッドを取り出す（ステップ９０３）。
【００３９】
次に、生成したプログラムを書き込む出力ファイルを開く（ステップ９０４）。
このファイルに、サーバプログラム２２Ａの定義から読み込んだ、ｉｍｐｏｒｔ節、ｃｌａｓｓ名称、ｅｘｔｅｎｄ節、ｉｍｐｌｅｍｅｎｔ節と、開き中括弧を書き込む（ステップ９０５）。
【００４０】
次に、テンポラリ変数の宣言を書き込む（ステップ９０６）。
その後、サーバプログラム２２Ａの定義から１つの節を切り出す（ステップ９０７）。節が切り出せるかどうか判断し（ステップ９０８）、切り出せた場合、切り出した節が変数宣言かメソッド定義かを判断し（ステップ９０９）、変数宣言であれば、そのまま出力ファイルに書き込み（ステップ９１０）、ステップ９０７から繰り返す。
メソッド定義であれば、インタフェース定義があるかどうかを判断し（ステップ９１１）、定義されていれば、メソッドの本体を、接続チェックのためのルーチンを追加し、サーバプログラム２２Ａの参照オブジェクトをＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラムから入手し、同じ名称のメソッドを呼び出すように内容を書き換えて出力ファイルに書き込み（ステップ９１２）、ステップ９０７から繰り返す。
【００４１】
ｉｎｔｅｒｆａｃｅ定義がなければ、ｍａｉｎメソッドかどうかを判断し（ステップ９１３）、ｍａｉｎメソッドであれば、ｒｅｂｉｎｄメソッドの引数のうち、ＳＥＲＶＥＲという文字列をＦＩＲＥＷＡＬＬに置き換えて出力ファイルに書き込み（ステップ９１４）、ステップ９０７から繰り返す。
【００４２】
ｍａｉｎメソッドでなければそのまま出力ファイルに書き込み（ステップ９１５）、ステップ９０７から繰り返す。ステップ９０７で切り出す節がなくなれば、閉じ中括弧を出力ファイルに書き込み、出力ファイルを閉じる（ステップ９１６）。最後に、出力ファイルを、ｊａｖａ  ｃｏｍｐｉｌｅｒでコンパイルし、中継プログラム３２Ｃを作成する（ステップ９１７）。
【００４３】
図１０は、中継プログラム３２Ｃの動作を示すフローチャートである。
中継プログラム３２Ｃが起動すると、自分自身のオブジェクトを作成し（ステップ１００１）、識別名称を使ってそのオブジェクトをＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム３２Ｂに登録する（ステップ１００２）。
【００４４】
その後、クライアントコンピュータ１のスタブルーチンから、スケルトンオブジェクトが呼び出されるのを待つ（ステップ１００３）。スケルトンオブジェクトが呼び出されると、対応する中継プログラム３２Ｃのメソッドを呼び出す（ステップ１００４）。
中継プログラム３２Ｃは、接続してきたクライアントコンピュータ１が、サーバプログラム２２Ａが利用可能かどうかをチェックし（ステップ１００５）、もしアクセス権限がなければ、エラーを返却し（ステップ１００６）、ステップ１００３から繰り返す。アクセス権限がある場合は、サーバオブジェクトの参照オブジェクトを入手しているかどうかを判断し（ステップ１００７）、もし入手していなければ、サーバオブジェクトの識別名称を使用して、サーバコンピュータ２上で稼動しているＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム２２Ｂを呼出し、サーバオブジェクトの参照オブジェクトを入手する（ステップ１００８）。
【００４５】
その後、入手したオブジェクトの対応するメソッドを呼び出す（ステップ１００９）。既に参照オブジェクトを入手済みの場合は、ステップ１００９に進む。メソッド呼出しの要求を受けた参照オブジェクトは、スタブオブジェクトを経由して、サーバプログラム２２Ａのスケルトンオブジェクトに接続し、サーバプログラム２２Ａの実行結果を入手する（ステップ１０１０）。
この結果をスケルトンオブジェクトに返却し、スケルトンオブジェクトがクライアントに返却する（ステップ１０１１）ことで、一度の分散オブジェクト間通信を終了する。その後、ステップ１００３から接続待ちを繰り返す。
【００４６】
以上、本実施形態によると、Ｆｉｒｅｗａｌｌ上でＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラムを稼動させ、クライアントプログラム１２Ａは、Ｆｉｒｅｗａｌｌ上のＮａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラムに対してオブジェクトの検索を要求することで、中継プログラム３２Ｃ内のスケルトンオブジェクトのリモート参照を入手することができ、クライアントコンピュータ１のスタブルーチンがＦｉｒｅｗａｌｌ上の中継プログラム３２Ｃのスケルトンオブジェクトに通信できるようになる。
【００４７】
また、ＪＡＶＡのＲＭＩを用いてプログラミングする場合は、サーバオブジェクトの定義から、通常のスタブ・スケルトンと、中継プログラム３２Ｃを生成する。スタブとスケルトンはＦｉｒｅｗａｌｌ上で稼動させる中継プログラム３２Ｃの一部としても利用し、中継プログラム３２Ｃ内のスケルトンはクライアントのスタブから呼び出されたメソッドに対応する中継プログラム３２Ｃ内のスタブのメソッドを呼び出す。スタブは、通常のスタブルーチンと同様にサーバのスケルトンルーチンを呼び出すことで、クライアントコンピュータ１からサーバコンピュータ２に通信を中継することができるようになる。
【００４８】
この方式を採用することで、Ｆｉｒｅｗａｌｌのような物理的要因によって直接通信できないクライアントコンピュータとサーバコンピュータ間の通信を行うための中継プログラム３２Ｃを自動生成することができるようになり、開発コストを削減するとともに、中継プログラム３２Ｃ内で呼び出すスタブオブジェクトを選択する機能を追加しておくことで、複数のサーバプログラム２２Ａの中から負荷の低いものを選択することが可能になり、負荷分散を実現することができる。
【００４９】
【発明の効果】
以上説明したように本発明によると、Ｆｉｒｅｗａｌｌのような物理的要因によって直接通信できないクライアントコンピュータとサーバコンピュータ間の通信を行うための中継プログラムを自動生成することができるようになり、開発コストを削減するとともに、中継プログラム中に、スタブプログラムを選択する機能を追加しておくことで、複数のサーバプログラムの中から負荷の低いものを選択することが可能になり、負荷分散を実現することができる。
【００５０】
さらにＦｉｒｅｗａｌｌ上にサーバプログラムを利用可能なユーザのリストを用意しておき、中継オブジェクトがこれを読み込み、サーバプログラムに対するユーザのアクセス権のチェック機能を提供することで、ｆｉｒｅｗａｌｌ内にあるシステムに対してのアクセス時のセキュリティも図ることができる。
【図面の簡単な説明】
【図１】本発明に係る分散オブジェクト間通信中継システムのブロック構成図である。
【図２】本発明に係わる、中継プログラムを経由したクライアントプログラムとサーバプログラム間の通信の流れを示す図である。
【図３】本発明に係る中継プログラム自動生成プログラムを起動するときのコマンドの記述例を示す図である。
【図４】本発明に係る中継プログラム自動生成プログラムが使用するインターフェース定義の記述例を示す図である。
【図５】本発明に係わるサーバプログラムの定義の記述例を示す図である。
【図６】本発明に係る中継プログラム自動生成プログラムが生成する中継プログラムのプログラム記述を示す図である。
【図７】本発明に係る中継プログラムを起動するときの、コマンドの記述を示す図である。
【図８】本発明に係るクライアントのアクセス権をチェックするためのリストの表記例である。
【図９】本発明に係る中継プログラム自動生成プログラムの動作を示すフローチャートである。
【図１０】本発明に係る中継プログラムの動作を示すフローチャートである。
【符号の説明】
１…クライアントコンピュータ、２…サーバコンピュータ、３…Ｆｉｒｅｗａｌｌコンピュータ、１１…端末装置、１１Ａ…ＣＰＵ、１１Ｂ…メモリ、１２…外部記憶装置、１２Ａ…クライアントプログラム、１２Ｂ…スタブルーチン、１３…表示装置、１４…入力装置、１５…通信ポート、２１…端末装置、２１Ａ…ＣＰＵ、２１Ｂ…メモリ、２２…外部記憶装置、２２Ａ…サーバプログラム、２２Ｂ…Ｎａｍｉｎｇ  Ｓｅｒｖｉｃｅプログラム、２２Ｃ…スケルトンルーチン、２３…表示装置、２４…入力装置、２５…通信ポート、３１…端末装置、３２Ａ…Ｆｉｒｅｗａｌｌプログラム、３２Ｃ…中継プログラム、４２Ｂ…中継プログラム３２Ｃ自動生成プログラム。
【図１】
0003575978.tif 000002
【図２】
0003575978.tif 000003
【図３】
0003575978.tif 000004
【図４】
0003575978.tif 000005
【図５】
0003575978.tif 000006
【図６】
0003575978.tif 000007
【図７】
0003575978.tif 000008
【図８】
0003575978.tif 000009
【図９】
0003575978.tif 000010
【図１０】
0003575978.tif 000011