(57)【特許請求の範囲】
【請求項１】
ネットワーク(20)の様々なロケーション(1,2,3)で実行可能なコンピュータ命令を持つ分散アプリケーション(11.1,11.2,11.3)を前記ネットワーク(20)で実行する方法であって、
前記ロケーションは、前記命令を実行するためのプロセッサと、前記プロセッサに結合された、前記命令を格納するためのメモリ・ユニットと、前記プロセッサの前記ネットワークに対するインタフェースと、前記命令の実行を管理する実行時システムを有しており、
前記命令が、
前記様々なロケーション(1,2,3)のうちの識別ロケーション(2,3,1)を指定するアサート・コマンドであって、後続の命令(5,6,7)が前記識別ロケーション(2,3,1)で実行されるアサート・コマンド(4)、および／または
後続の命令(9,10)が前記ロケーション(1,2,3)のいずれにも束縛されないリリース・コマンド(8)、
を含む方法。
【請求項２】
前記ロケーション(1,2,3)の確定的位置、または前記ロケーション(1,2,3)での実行に必要な機能性、または前記ロケーション(1,2,3)における前記実行のためにその値が最適となるように選択しなければならないパラメータから構成されるロケーション識別子を与えることによって、または前記ロケーション識別子を探索すべきロケーションのアドレスを与えることによって、前記ロケーション(1,2,3)が識別される、請求項１に記載の方法。
【請求項３】
前記命令が前記アサート・コマンド(4)を含み、それによって、後続の命令(5,6,7)を前記識別ロケーション(2,3,1)で実行すべきときにはいつでも前記アサート・コマンド(4)が使用される、請求項１または２のいずれか一項に記載の方法。
【請求項４】
前記ロケーション(1,2,3)がアプリケーション実行のために利用できない場合に備えて、前記命令が、アプリケーションの実行を一時中断して待機する、第１アサート・コマンド（ASSERT）を含むか、または、アプリケーションの実行そのものを中断する、第２アサート・コマンド（INSIST）を含むか、または過去に使用したロケーションでアプリケーションを続行して実行できる、第３アサート・コマンド型（PREFERRED）を含む、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
ネットワーク(20)の様々なロケーション(1,2,3)で実行可能なコンピュータ命令を持つ分散アプリケーション(11.1,11.2,11.3)を前記ネットワーク(20)で実行するシステムであって、各ロケーションにおいて
前記命令を実行するためのプロセッサと、
前記プロセッサに結合された、前記命令を格納するためのメモリ・ユニットと、
前記プロセッサの前記ネットワークに対するインタフェースと、
前記命令の実行を管理する実行時システムであって、
前記命令が、
ａ．前記様々なロケーション(1,2,3)のうちの識別ロケーション(2,3,1)を指定するアサート・コマンド(4)であって、後続の命令(5,6,7)が前記識別ロケーション(2,3,1)で実行される前記アサート・コマンド(4)、および／または
ｂ．後続の命令(9,10)が前記ロケーション(1,2,3)のいずれにも束縛されないリリース・コマンド(8)
を含む、実行時システムと、
を含むシステム。
【請求項６】
ネットワーク(20)の様々なロケーション(1,2,3)で実行可能なコンピュータ命令を含む分散アプリケーション(11.1,11.2,11.3)を前記ネットワーク(20)で実行するためのコンピュータ命令を含むプログラムを記録した、コンピュータ読出し可能な記録媒体であって、前記命令が
前記様々なロケーション(1,2,3)のうちの識別ロケーション(2,3,1)を指定するアサート・コマンドであって、後続の命令(5,6,7)が前記識別ロケーション(2,3,1)で実行されるアサート・コマンド(4)、および／または
後続の命令(9,10)の実行が前記ロケーション(1,2,3)のいずれにも束縛されないリリース・コマンド(8)、
を含む、コンピュータ読出し可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・ネットワークで分散アプリケーションを実現するための方法およびシステムに関する。一般的に、アプリケーションはネットワーク内のどのロケーションでも実行可能である。
【０００２】
【従来の技術】
コンピュータおよび装置はネットワークを介して接続され、そこでアプリケーションが処理され実行される。それらの操作のための様々なアーキテクチャおよびプログラミング言語が知られている。Pascal、Ｃ、またはJavaなど従来のプログラミング言語は、ロケーション要件を識別するための標準的手段を持たない。古典的な分散コンピュータ・アプリケーションでは、そのような従属性はアプリケーション・プログラマによって識別され、プログラマはアプリケーション全体を例えば「クライアント」および「サーバ」など不可欠な部分に分割し、これらの部分を別々にプログラムし、要求されるロケーションでまたは要求される装置にそれらをインストールする。これらの部分間のやりとりは、メッセージ受渡し、遠隔手続き呼出し、またはオブジェクト指向プログラミング言語の場合には遠隔メソッド呼出しによって行われる。
【０００３】
エージェント技術またはモバイル・コード・プログラミングは最近、分散システムを実現する別の方法を導入した。アプリケーション全体を別個の部分に分けて開発する必要性は除去され、アプリケーションを全体として別のロケーションに移動させる「ＧＯ」コマンドのような簡単な言語プリミティブにとって代わられた。アプリケーションを単一の制御の流れにより書くことができるので、これにより、そのようなアプリケーションのプログラミングが平易になることが示されてきた。
【０００４】
米国特許５，６０３，０３１は、ネットワーク内のプロセスの移動、実行、および相互作用に基く分散計算のためのシステムおよび方法を記載している。エージェント・プロセスは、チケットを使用することによってネットワーク内の１つのプレース・プロセスから別のプレース・プロセスへのその移動を制御し、エージェント・プロセスのクローンを幾つかのプレース・プロセスに同時に送信する。
【０００５】
共通システムに使用されるこの単純なプログラミング・モデルには、多数の限界がある。第一に、単一の制御の流れは単純な設計および実現を可能にするが、実行時に並列性を利用するなど最適化を図るには剛直すぎる。さらに、構造は固定されたロケーション従属性を規定する。要求されたロケーションが利用できない場合、アプリケーションの実行を停止しなければならない。プログラミング・コードの大部分にとって、それらが実行されるロケーションは関連性が無いので、これは不利である。さらになお、単純な「ＧＯ」プリミティブはロケーション従属性を示すためにのみ使用可能であり、「ＧＯ」を実行しなければならない位置をコンパイル時に定義しなければならない。
【０００６】
【発明が解決しようとする課題】
本発明の目的は、ネットワーク内に分散アプリケーションを実現する方法およびシステムを提供することである。
【０００７】
本発明の別の目的は、ネットワークのためにより高いロケーション柔軟性を提供することである。
【０００８】
本発明のさらなる目的は、ネットワーク内で分散アプリケーションを実行するための簡単な方法を提供することである。
【０００９】
本発明のさらに別の目的は、ネットワークにおけるプロセスを最適化することである。
【００１０】
【課題を解決するための手段】
請求項１および請求項９に従ってネットワーク内に分散アプリケーションを実現する方法およびシステムは、アプリケーションの必要な部分だけが転送されて、関連する適切なロケーションで実行され、かつそれらは必要なときに転送するだけでよいので、より高い効率が得られるという利点を示す。これは転送時間、接続時間、および処理時間を最適化し、このことは必然的にコストを削減する。さらに、この方法は充分な柔軟性を提供して、より多くの動作の自由すなわち柔軟かつ効率的な実行を可能にし、したがって従来のエージェント・プログラミングまたはモバイル・コードによって要求される剛直な構造に対する矯正法である。そのような効率および柔軟性は、クライアント／サーバまたは伝統的なエージェント・システムなど従来の分散アプリケーション・プログラミングの方法では、達成することができない。したがって、本発明の目的は最新技術の問題点を克服することである。
【００１１】
従属請求項には、分散アプリケーションを実現するためのこの方法に対する様々な変形および改善が含まれる。
【００１２】
ロケーションが、そのロケーションについてその確定的位置またはそのロケーションでの実行に必要な機能性を含むか、あるいは利用可能なパラメータから選択されるそのロケーションでの実行に最適なパラメータを含むロケーション識別子を与えることによって、もしくは前記ロケーション識別子を見つけるためのアドレスを与えることによって識別される場合、この提案方法により幅広い範囲のロケーション識別が可能になるという利点が発生する。したがって、アプリケーションを実行するロケーションのアドレスはもはや固定位置に束縛されなくなり、これによりロケーションの選択はより柔軟になる。
【００１３】
本発明は追加命令を利用し、それは、後続の命令を識別されたロケーションで実行する効果をもたらそうとする場合にいつでも使用できるアサート・コマンドを含む。別のロケーションで実行するためのその他のコマンドは必要ではなく、これは平易さ、均一性、および正確な実行を保証する。「ＧＯ」コマンドは不要になり、これは将来の開発およびアプリケーションにとって有利である。
【００１４】
アプリケーションの命令が、ASSERT、INSIST、およびPREFERREDなど様々なアサート・コマンドを含む場合には、アプリケーションの柔軟性および動作の自由がいっそう高くなるという利点が発生する。アプリケーションの実行のためのロケーションが得られない場合、第１アサート・コマンド型（ASSERT）は、ロケーションと、実行を一時的に停止するプログラムの意向とを示す。一方、第２アサート・コマンド型（INSIST）は、そのような場合にはアプリケーションを停止するかもしれない。したがって、アプリケーションのプロセスは待機するのではなく、実行を打ち切る。第３アサート・コマンド型（PREFERRED）は、後続の命令を以前に使用したロケーションで実行することによって続行し、これは、好適なロケーションが現在利用できない場合でも、アプリケーションが続行されるという利点がある。分散アプリケーションのために幾つかのアサート・コマンド型が作成可能であり、かつ使用可能であるが、これはネットワーク内の分散アプリケーションに対するこの独創的方法の柔軟性および適合性を示している。
【００１５】
アサート・コマンド型は様々なロケーションのうちの識別ロケーションを指定することができ、それによって識別ロケーションは「随意に」選択可能であり、これは、識別ロケーションがなんらの優先性なしに選択できることを意味し、またはその他の場合、識別ロケーションは予め定められた優先性順のシーケンスに配列可能かつ選択可能であり、これはアプリケーションを移動するための多くの余裕および柔軟性を与える。それによってネットワークにおけるアプリケーションおよびプロセスの実行を最適化し、適合させることができる。
【００１６】
実行時システムは、アプリケーションをネットワーク内の識別ロケーションに移動するために使用でき、そして命令を実行する。リリース・コマンドの場合、アプリケーションの移動先のロケーションの選択は、システム条件および／または状態条件に依存する。これは、実行時システムにより多くの動作の自由を与え、実行時システムは今やネットワークの利用可能な資源を使用することができる。
【００１７】
本発明は、ネットワーク内に分散アプリケーションを実現するための一般的かつ柔軟な方法およびシステムを提供する。
【００１８】
ネットワーク内に分散アプリケーションを実現するための本発明は、位置従属性、装置従属性、またはサービス従属性の一時的アサートを可能にする方法およびシステムを記載するものであり、要求されるロケーションのふるまいを抽象的かつ直覚的に記述するためにアプリケーションで使用することができる。ネットワーク内の様々なロケーションで実行可能なコンピュータ・プロセス命令は、アサート・コマンドおよび／またはリリース・コマンドを含む。アサート・コマンドは、様々なロケーションのうちの識別ロケーションを指定し、これは、後続の命令が識別ロケーションで実行される効果をもたらす。リリース・コマンドは、後続の命令の実行が識別ロケーションに束縛されないという効果をもたらす。
【００１９】
１つのアプリケーションから２つ以上のロケーションを使用しなければならない最新技術の問題点はまだ有効であるとみなされ、それによって、位置、装置、またはサービスが割当てアドレスに従って決定されず、スワップ時、すなわちアプリケーションが別のロケーションに移動するときでさえも、事前に定義されない。
【００２０】
【発明の実施の形態】
以下で、添付の略図を参照しながら本発明を詳細に説明する。全ての図は、明快さのために実寸では示されておらず、寸法間の関係も実際の縮尺では示されていない。
【００２１】
以下で、本発明の様々な実証的実施形態を説明する。
【００２２】
ここでは、位置、装置、またはサービスの利用可能性または存在をアサートするか、あるいは以前に行われたアサートをリリースするかのいずれかである２つのコマンド・プリミティブを導入する。解説のため、これらのプリミティブをここでは「ASSERT」および「RELEASE」と呼ぶ。プリミティブは、「POSITION」型の位置または「DEVICE」型の装置または「SERVICE」型のサービスのいずれかに対して呼び出すことができる。プリミティブの意味は、次のように要約することができる。
・ロケーションASSERTは、ASSERT呼出しの後の命令をアサートされたロケーションで実行しなければならないことを決定する。
・ロケーションRELEASEは、RELEASE呼出しの後の命令をどこのロケーションでも実行できることを示す。
【００２３】
さらに、他のプリミティブを設けることができる。例えば、次のようなものがある。
・ロケーションPREFERREDは、PREFERRED呼出しの後の命令を好適なロケーションで実行することが望ましいことを示す。
・ロケーションPROXIMITYは、任意のロケーションの物理的またはネットワークの近接性が必要であることを示す。
・ロケーションLOADは、最小限の負荷が存在するロケーションが必要であることを示す。
・ロケーションSPEEDは、特別な処理時間または速度を持つロケーションが必要であることを示す。
・ロケーションSECURITYは、任意のロケーションに安全に接続することが必要であることを示す。
【００２４】
要求によって、多くのさらなるプリミティブを作成し提供することができる。したがって、プリミティブの意味は自由に選択可能である。
【００２５】
ロケーションは、そのロケーションについてその確定的位置またはそのロケーションでの実行に必要な機能性を含むか、あるいは利用可能なパラメータから選択されるそのロケーションでの実行に最適なパラメータを含むロケーション識別子を与えることによって、もしくは前記ロケーション識別子を探索するためのアドレスを与えることによって識別される。サーバ、装置、またはサービスの確定的位置が分かっている場合があり、これはネットワーク内のロケーションのアドレス指定および発見を簡単にする。
【００２６】
また、ユーザによって、システムによって、またはアプリケーションによって機能性を要求することができる。特殊装置すなわち特徴または印刷等のサービスさえも持つ装置を要求することができる。無作為再生機能を持つＣＤプレーヤまたは特殊数学プロセッサが実行のために必要であり、したがって機能性によって記述することができ、次いでこれはネットワーク内で探索される。
【００２７】
ロケーションはまた、パラメータを含むロケーション識別子によって、例えば上記のLOAD、SPEED、またはSECURITYなどのパラメータによって識別することもできる。システムは、例えば当然望ましいと思われるふるまいを提示するなど、それが予め定められた規則に従うという意味で、実行に最適なパラメータの値または値範囲を自ら選択できるように設計することができる。例えば、あるロケーションの負荷が低くなければならない場合、そのためにパラメータLOADは実行のために最適化されるように選択される。当然、低負荷が望ましく、これを実行時システムは最適化の自動的な好適方向として実現したかもしれない。代替的に、好適方向は、プログラマ、ユーザなどによって与えることができる。物事を素早く行うことができることが当然の目標である。そのために、速度は、アプリケーションの要件およびユーザの要求にとって最適になるように、できるだけ早く選択することができる。それ故にパラメータはSPEEDであり、実行時システムは最も高い処理速度値を持つロケーションを自動的に探索する傾向がある。一例を挙げる。
LOCATION v=LOCATION(SPEED,min50)
これによってパラメータSPEEDが実行時システムに導入され、それ故にこれは最大処理速度または少なくとも処理速度値５０を持つロケーションへのアクセスを模索する。セキュリティのため、実行に最適な範囲の特殊証明またはセキュリティ・レベルを選択することができる。セキュリティ・レベルは、発行権限に一致させることもできる。セキュリティ・レベル「３」を要求する位置のパラメータSECURITYの一例は、次によって示される。
LOCATION sl=LOCATION(SECURITY,"3")
また、特殊発行権限を必要とするロケーションの場合、
LOCATION sa=LOCATION(SECURITY,"VISA")
を使用することができる。
【００２８】
以下の例では、使用したプリミティブは「ASSERT」および「RELEASE」と呼ばれる。解説のため、以下のコード・セグメント内で単純な自明の構文を使用する。
／／コード・ブロックＡ
［１］LOCATION a=LOCATION(POSITION,"piot.zurich.ibm.com");
［２］a.ASSERT();
／／コード・ブロックＢ
［３］a.RELEASE();
／／コード・ブロックＣ
【００２９】
上の例では、ロケーションのアサートおよびリリースは、Ａ、Ｂ、Ｃと名付けられた３つのコード・ブロック内に埋め込まれる。これらの呼出の取扱いは、コンパイル時または好ましくは、以下で想定するように実行時のいずれかに実現することができる。コード行［１］では、特定のマシン位置が定義される。例えば、実行時システムは希望位置の存在を検証するか、または合理的に予測できる通信タスクに備えて通信リンクを確立する。コード行［２］で、以前に定義されたロケーションがASSERTによってアサートされる。実行時システムは今、次の命令行（コード・ブロックＢ）がアサート位置「piot.zurich.ibm.com」で実行されるという要件を解釈する。コード行［３］で、ロケーション制約が解除される。これは実行時システムに、コード・ブロックＣが以前にアサートされたロケーションに束縛されないことを指示する。したがって、実行時システムは今、アプリケーションを他のどのロケーションにでも自由に移動して、RELEASEの後の命令を実行することができる。
【００３０】
同様に、同じプリミティブを第２例の場合のように装置の記述に対して実行することができ、それによって機能性はここでは装置として表現される。
［５］LOCATION d=LOCATION(FUNCTIONAITY,"mpeg_player")
［６］d.ASSERT();
／／コード・ブロックＦ
［７］d.RELEASE();
【００３１】
この例は、ロケーション識別子「mpeg_player」を持つコード行［５］の機能性それぞれ装置がロケーションｄで利用可能でなければならないことを示す。コード行［６］で、前に定義されたロケーションｄが、ASSERTによってアサートされる。次いで実行時システムは、ここではコード・ブロックＦから始まる後続の命令行を、ロケーション識別子「mpeg_player」によって識別されるアサート・ロケーションで実行しなければならないという要求を解釈する。コード行［７］で、ロケーションの制約または装置の制約は解除される。これは、後続の命令行が以前にアサートされたロケーションに束縛されないという、実行時システムへの指示である。
【００３２】
アプリケーションへのフィードバックをそのようなプリミティブによって提供し、適正な打切りモードを可能にすることができる。ASSERTは、以前にアサートされたロケーションのRELEASEを暗に示すことができる。
【００３３】
ここで、ロケーション１、２、３でそれぞれ実行されるアプリケーション(11.1,11.2,11.3)の概略図を示す図１を参照しながら、破線および矢印によって示されるアプリケーション(11.1,11.2,11.3)の処理に従って、さらなる詳細を説明する。この略図は、リリース・コマンドとしてRELEASE ８を含むロケーション１の左側のボックスの最上部から始まる。このリリース・コマンドRELEASE ８は、ブロック９として示される後続の命令９の実行が、識別されたロケーションに束縛されないという効果をもたらす。したがって、次いで実行時システムは、アプリケーション１１．１をロケーション２または３などさらなるロケーションに移動するか、または左側のボックスに示すようにロケーション１でアプリケーション１１．１の実行を続けることが可能である。縦の破線は、アプリケーション１１．１の処理を示す。アプリケーション１１．１のブロック９に続くアサート・コマンドASSERT（LOC2）４は、ASSERT（LOC2）４コマンドに続く後続の命令行がロケーション２で実行されることを確実にするために、アプリケーション１１．１が実行時システムによってロケーション２に移動しなければならないときの最後のインスタンスを示す。次いで実行時システムは、ブロック５の始めから後に続く命令が、もはやロケーション１ではなく、アサート・ロケーション２で実行しなければならないという要求を解釈する。ロケーション１からロケーション２への矢印は、実行時システムがアプリケーション１１．１をロケーション２に移動する最後の可能性を示す。右側のボックスの左側の縦の破線は、そのときロケーション２に配置され実行されるアプリケーション１１．２の処理をも示す。別のRELEASE ８に続いて、ロケーション２におけるアプリケーション１１．２のブロック９の命令は、ロケーションに依存しない。これは、アプリケーション１１．２がロケーション２以外の別のロケーションで実行できることを意味する。後続のアサート・コマンドASSERT（LOC3）４により、アプリケーション１１．２は次いで、実行時システムによってロケーション３に移動し（ロケーション２からロケーション３への矢印によって示される）、そこでブロック６の命令に従ってアプリケーション１１．３が実行される。ブロック６はアサート・ロケーション３で実行しなければならず、これはASSET（LOC3）４によって指示される。さらに、ASSERT（LOC1）４によってアサートされる、ブロック７を含むアプリケーション１１．３は、アサート・ロケーション１に移動して（ロケーション３からロケーション１への矢印によって示される）、そこで実行しなければならない。左側のボックスの最下部に示されたロケーション１の次のリリース・コマンドRELEASE ８は、ブロック１０として示される後続の命令によるアプリケーション１１．１の実行がリリースされ、識別ロケーションに束縛されないという効果をもたらす。ここで、アプリケーション１１．１はさらにロケーション１で実行される。これらの最後の説明で、「移動しなければならない」という用語は、実行時システムがアプリケーションを移動しなければならない最後の可能な時点を指す。より早期の移転が可能であるが、前のRELEASEコマンドより前はだめである。
【００３４】
図２は、図１をいっそうよく理解するために、様々なロケーションおよび接続を持つネットワーク２０の略図を示す。ボックスはそれぞれ、図１のロケーション１、２、３に対応するロケーション１、ロケーション２、およびロケーション３を表す。ロケーション１、２、３は接続されており、破線で示すさらなる接続を持つことができる。
【００３５】
以下で、自明の命令コードを含む２つの特徴的な例を取り扱う。
【００３６】
例Ｉ：遠隔ＤＢアクセス
以下の例「遠隔ＤＢ（データベース）アクセス」は、コードの効率および柔軟性の向上につながる実行時環境の動的適合を実証するものであり、遠隔データベース・サーバと対話するクライアント・マシンにおけるアプリケーションに関連する。従来のクライアント／サーバ・システムでは、クライアント部分はローカル・クライアント・マシンにユーザ・インタフェースを実現し、サーバ・コンポーネントは遠隔的にデータベースに常駐する。クライアントは、次のように実現することができる。
「名前？」とプリントする
ユーザ名を入力する
サーバにコンタクトする
ＤＢに関してユーザ名を検証するようにサーバに要求する
if（サーバからユーザ名がＤＢにすでに入っていると報告される）
終了する
else
「アドレス？」とプリントする
アドレスを入力する
・・・
【００３７】
サーバ・コード（図示せず）は別個に開発される。エージェントに基くシステムは、アプリケーションを実行の単一スレッドとして開発させることによって、これを改善する。前の例と同じ関数を持つエージェントのインプリメンテーションは、次のように実現することができる。
「名前？」とプリントする
ユーザ名を入力する
ＧＯ  ＤＢサーバ
現在のローカルＤＢに関してユーザ名を検査する
if（ユーザ名がＤＢにすでに入っている）
終了する
else
ＧＯクライアント・マシン
「アドレス？」とプリントする
アドレスを入力する
・・・
【００３８】
クライアント／サーバの方法およびエージェントに基く方法の両方とも、データベースに関してユーザ名の検査を実行することを、先験的に決定しなければならない。クライアントのネットワーキング環境が、データベース・サーバとの通信が一時的に利用できないような状態である場合、検証プロセスを飛ばし、かつ／またはアドレス・データを２回入力する不便さを我慢すると有利になり得る。そのふるまいを動的に調整するようにクライアント／サーバ・コードを作成するには、通信およびネットワークキング・サブシステムへの低レベル・アクセスが必要であり、これをアプリケーション・コードに含めるのは面倒であるばかりでなく、アプリケーションの移植性および保守性をも阻害する。ＧＯコマンドは非常に剛直で柔軟性に欠けるので、適応性が得られない。
【００３９】
プリミティブ「ASSERT」および「RELEASE」を使用して、タスクは次のように実行時システムを環境に適応させることによって解決される。
LOCATION clientloc＝新しいLOCATION（「クライアント・マシン」）；
LOCATION dbloc＝新しいLOCATION（「ＤＢマシン」）；
clientloc.ASSERT();
「名前？」とプリントする
ユーザ名を入力する
clientloc.RELEASE();
if(dbloc.PREFERRED()==GRANTED)
ＤＢに関してユーザ名を検査する
dbloc.RELEASE();
If（ユーザ名がすでにＤＢに入っている）
終了する
clientloc.ASSERT();
「アドレス？」とプリントする
アドレスを入力する
clientloc.RELEASE();
【００４０】
命令はその完全な構文法で与えられるので、コードはここでは前の例より長いように見える。しかし、実行時システムは、クライアントの現在のコネクティビティ状態を前提として、クライアント・マシンから好適なデータベース・ロケーションにコードを再配置することが達成可能であるならば、自由にそうすることができる。
【００４１】
例ＩＩ：分散ＣＤプレーヤ
次の例「分散ＣＤプレーヤ」は、軽く負荷されているだけのマシンで、またはマシンをアプリケーションのタスクに特に適したものにする特殊なハードウェアを備えたマシンで複雑な作業をコンピュータを使用して実行しながら、必要なサービスまたは必要なロケーションへのアクセスができるように単一アプリケーションの実行ロケーションを動的に再配置する、実行時システムの能力を実証する。次のアプリケーションは、音楽ＣＰプレーヤを実現する。
［２０］LOCATION cd=新しいLocation(SERVICE,"CLASSIC CD MOZART")
［２１］cd.ASSERT();
／／サウンドトラックを読み出す
［２２］cd.RELEASE();
／／サウンドトラックを復号する
［２３］LOCATION loc=LOCATION(POSITION「私のマシン」）；
［２４］loc.ASSERT();
／／サウンドトラックを再生する
［２５］loc.RELEASE();
【００４２】
この例では、アプリケーションは、コード行［２０］で要求されるＣＤのように、特定のＣＤをサービスとして提供する用意のある利用可能なサーバをつき止めるように実行時システムに要求する。定義されたロケーションは、コード行［２１］でASSERTによってアサートされる。ひとたび実行時システムがそのロケーションにアクセスすると、ＣＤのサウンドトラックを読み出す次の命令が実行される。このプロセスが完了した後、アプリケーションは、サービスがそれ以上必要でないことを実行時システムに指示する。次にアプリケーションは、コンピュータを使用する高価なタスクであるサウンドトラックの復号を開始する。アプリケーションはそのように要求していないが、実行時システムは今や、それがそうすることを決定したときにはいつでも自由にアプリケーションを別のロケーション（ホスト）に移動して、そこで実行を続けることができる。コード行［２２］のRELEASEプリミティブは、特定のロケーションが必要ではないことを示しているが、コードを移動しなければならないときを示してはおらず、もし示しているとしても、それは単に再配置を行うことが「できる」「最も早い時期」を示しているにすぎない。ひとたび復号が完了すると、アプリケーションは、今はコード行［２３］に記述された「私のマシン」のように、特定のマシンでサウンドトラックを再生したいことを示し、実行時システムはこの要求を認めるように要求される。コード行［２４］のASSERTプリミティブは、コードを指定されたマシンに再配置しなければならないときを示すのではなく、これを「行わなければならない」「最終時間」を示すにすぎない。コード行［２５］のRELEASEプリミティブにより、ロケーション制約は解除される。
【図面の簡単な説明】
【図１】  本発明に係るアプリケーションの略図である。
【図２】  様々なロケーションおよび接続を持つネットワークの略図である。
【図１】
0003777092.tif 000002
【図２】
0003777092.tif 000003