(57)【特許請求の範囲】
【請求項１】
第二の分離された実行コンテキストにおいてプロセッサにより実行されるメモリに記憶された第二アプリケーションによりアクセス可能な、第一の分離された実行コンテキストにおいて該プロセッサにより実行される該メモリに格納された第一アプリケーションにより所有される、オブジェクトを作成するためのマシンにより実現可能な方法において、
関連付け手段が、該オブジェクトを該第一の分離された実行コンテキストと関連付け、
受取手段が、該オブジェクトを該第二アプリケーションにアクセス可能とさせる要求を受取り、
オブジェクトが可変オブジェクトの場合、移転手段が、該オブジェクトと関連付けられている該分離された実行コンテキストの識別子を該第二の分離された実行コンテキストの識別子へ変化させることにより該オブジェクトの所有を該第二アプリケーションへ移転させ、それにより該オブジェクトを該第二アプリケーションにアクセス可能とさせ、該オブジェクトがインスタンス化の後に変化することが可能な少なくとも１つの属性を有しており、且つ該オブジェクトの所有の移転により、該第二アプリケーションが該オブジェクトの該少なくとも１つの属性を変化させることが可能となる、
ことを特徴とする方法。
【請求項２】
請求項１において、該オブジェクトの所有の移転は該第一の分離された実行コンテキスト及び該第二の分離された実行コンテキストのうちの少なくとも１つを保護する共有可能なインターフェースに対するコールに応答するものであることを特徴とする方法。
【請求項３】
請求項２において、該オブジェクトが該共有可能なインターフェースに対するコールと関連しているパラメータであることを特徴とする方法。
【請求項４】
請求項１において、更に、決定手段が、該第一アプリケーションにより所有される該オブジェクトが移転可能なクラスのインスタンスであるか否かを決定し、該オブジェクトの所有の移転は該オブジェクトが移転可能なクラスのインスタンスであることに条件付けられていることを特徴とする方法。
【請求項５】
請求項４において、該移転可能なクラスが、該第一アプリケーションが実行するプラットフォームにより移転可能であるとして定義されていることを特徴とする方法。
【請求項６】
請求項１において、更に、呼出手段によって、該第一アプリケーションが該オブジェクトの該第二アプリケーションへの所有の移転を開始させるための関数を呼出すことを特徴とする方法。
【請求項７】
請求項１において、該第二アプリケーションがファイアウォールにより該第一アプリケーションから分離されていることを特徴とする方法。
【請求項８】
請求項１において、更に、コピー手段が、防衛的コピーを作成するために該オブジェクトの第一バージョンのコピーを作成し、移転される該オブジェクトが該防衛的コピーであることを特徴とする方法。
【請求項９】
第二の分離された実行コンテキストにおいてプロセッサにより実行されるメモリに記憶された第二アプリケーションによりアクセス可能な、第一の分離された実行コンテキストにおいて該プロセッサにより実行される該メモリに格納された第一アプリケーションにより所有される、オブジェクトを作成するためのプログラムであって、
関連付け手段が、該オブジェクトを第一の分離された実行コンテキストと関連付け、該オブジェクトは第一アプリケーションにより所有されており、
受取手段が、該オブジェクトを第二の分離された実行コンテキストにおいて実行する第二アプリケーションにアクセス可能とさせる要求を受取り、
オブジェクトが可変オブジェクトの場合、移転手段が、該オブジェクトと関連付けられている該分離されている実行コンテキストの識別子を該第二の分離されている実行コンテキストの識別子へ変化させることにより該オブジェクトの所有を該第二アプリケーションへ移転し、それにより該オブジェクトを該第二アプリケーションにアクセス可能とさせ、該オブジェクトがインスタンス化の後に変化することが可能な少なくとも１つの属性を有しており、且つ該オブジェクトの所有の移転により、該第二アプリケーションが該オブジェクトの該少なくとも１つの属性を変化させることが可能となる、
１組の命令を１つ以上のプロセッサに実行させるプログラム。
【請求項１０】
請求項９において、該１組の命令が、更に、１つ又はそれ以上のプロセッサにより実行される場合に該１つ又はそれ以上のプロセッサをして以下のオペレーションを実施させる命令を有しており、
決定手段が、該第一アプリケーションにより所有されている該オブジェクトが移転可能なクラスのメンバーであるか否かを決定し、該オブジェクトの所有の移転が、該オブジェクトが該移転可能なクラスのメンバーであることに条件付けられている、
ことを特徴とするプログラム。
【請求項１１】
請求項１０において、該移転可能なクラスがその上で該第一アプリケーションが実行するプラットフォームにより移転可能であるとして定義されていることを特徴とするプログラム。
【請求項１２】
請求項９において、該１組の命令が、更に、１つ又はそれ以上のプロセッサにより実行される場合に該１つ又はそれ以上のプロセッサをして以下のオペレーションを実施させる命令を有しており、
呼出手段が、該オブジェクトの該第二アプリケーションへの所有の移転を開始させる関数を呼出す、
ことを特徴とするプログラム。
【請求項１３】
請求項９において、該１組の命令が更に、１つ又はそれ以上のプロセッサにより実行される場合に該１つ又はそれ以上のプロセッサをして以下のオペレーションを実施させる命令を有しており、
移転手段が、該オブジェクトと関連付けられている該分離されている実行コンテキストを該第一の分離されている実行コンテキストから該第二の分離されている実行コンテキストへ且つ該第一の分離されている実行コンテキストへ戻すように繰返し変化させることにより該オブジェクトの所有を該第一アプリケーションから該第二アプリケーションへ且つ該第一アプリケーションへ戻すように繰返し移転させる、
ことを特徴とするプログラム。
【請求項１４】
請求項９において、該第二アプリケーションがファイアウォールにより該第一アプリケーションから分離されていることを特徴とするプログラム。
【請求項１５】
請求項９において、該オブジェクトが、インスタンス化の後に変化することが可能な少なくとも１つの属性を有しており、且つ該オブジェクトの所有の移転が、該第二アプリケーションが該オブジェクトの該少なくとも１つの属性に対して変化させることを可能とすることを特徴とするプログラム。
【請求項１６】
請求項９において、該第一アプリケーションにより所有されている該オブジェクトが該オブジェクトの第一バージョンの防衛的コピーであることを特徴とするプログラム。
【請求項１７】
請求項９において、該オブジェクトの所有の移転のオペレーションを実施する該１組の命令が、更に、１つ又はそれ以上のプロセッサにより実行される場合に該１つ又はそれ以上のプロセッサをして、該第一の分離されている実行コンテキスト及び該第二の分離されている実行コンテキストのうちの少なくとも１つを保護するファイアウォールをバイパスする共有可能なインターフェースに対するコールに応答して該オブジェクトの所有を移転させるオペレーションを実施させる命令を有していることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
互いに及びライブラリー及びランタイム環境等のその他のソフトウエアと相互作用を行うことを必要とする複数のソフトウエアアプリケーションを具備する多数の計算環境が存在している。
【背景技術】
【０００２】
相互作用を行うことを可能としながら、該アプリケーション及び該アプリケーションにより所有されているオブジェクトを保護するためのメカニズムが必要である。１つの保護メカニズムは、各アプリケーション（又はアプリケーションの束）をそれ自身の実行コンテキスト内において実行させることである。尚、これは「分離されている実行コンテキスト（ｉｓｏｌａｔｅｄ  ｅｘｅｃｕｔｉｏｎ  ｃｏｎｔｅｘｔ）」と呼称される。分離されている実行コンテキストとは、第二アプリケーション（又はシステムランタイム環境）が明示的にそのデータへのアクセスのためのインターフェースを提供するものでない限り、第一アプリケーションは別の分離されている実行コンテキストにある第二アプリケーション（又はシステムランタイム環境に属するオブジェクト）のオブジェクトへアクセスすることができないことを意味している。然しながら、オブジェクトに対するアクセスは、そのオブジェクトが作成された同一の分離されている実行コンテキスト（所有コンテキスト）において実行するアプリケーションに対して許可される。分離されている実行コンテキストはファイアウォールにより実現することが可能である。例えば、ファイアウォールは、オブジェクトを権限のないアクセスから保護するために１組の規則を施行する。
【０００３】
他の分離されている実行コンテキストにおけるアプリケーションとデータを共有するために、アプリケーションは共有可能なインターフェースオブジェクト（ＳＩＯ）を与えることが可能である。ファイアウォール規則は共有可能なインターフェースオブジェクト（ＳＩＯ）が別の分離されている実行コンテキストからアクセスすることを許容する。更に、第二アプリケーション実行コンテキストにおけるパラメータオブジェクトへの権限のないアクセスを防止するための全ての規則が遵守されているか否かをファイアウォールが決定することなしに、ＳＩＯを介して１つの分離されている実行コンテキストにおけるアプリケーションから別の分離されている実行コンテキストにおけるアプリケーションへのパラメータとして任意のオブジェクトをパスさせることが可能である。換言すると、ＳＩＯがそのオブジェクトをパスさせるために使用されているという事実に基づいて、ファイアウォールは該パラメータオブジェクトをパスさせることを許容する。オブジェクト所有制御に加えて、オブジェクトがアクセスされる場合に、他の言語アクセス制御が施行される場合がある。例えば、ジャバ（Ｊａｖａ）言語は属性タグ「ｐｕｂｌｉｃ」無しでのクラスを宣言することにより、プログラマーがそれ自身のジャバ言語パッケージ内からのアクセスに対して制限されるべきオブジェクトを指定することを可能とさせる。
【０００４】
然しながら、ＳＩＯにおけるパラメータ又は戻り値としてオブジェクト（アレイを含む）をパスさせることは、しばしば、価値が制限されている。ＳＩＯの使用可能なパラメータ又は戻り値は、プリミティブ値、グローバルアレイ、ランタイム環境エントリポイントオブジェクト、及びＳＩＯに制限されている場合がある。その制限は分離実行コンテキストの本質的な定義の一部であり、パラメータオブジェクト自身は第一アプリケーションの分離実行コンテキストに属しており、従って、第二アプリケーションの分離実行コンテキストからアクセス可能なものではない。典型的に、アレイ（グローバルアレイ以外）は１つの分離されている実行コンテキストから別の分離されている実行コンテキストへパスさせることは不可能である。アレイの要素を共有するためには、開発者は各要素へ個別的にアクセスするために「ｇｅｔ」メソッドでｗｒａｐｐｅｒＳＩＯを作成することが可能な場合がある。然しながら、このようなラッパー（ｗｒａｐｐｅｒ）を使用することは厳しい性能上の影響がある。何故ならば、アレイの全ての要素へアクセスすることは繰返し「ｇｅｔ」メソッドを呼出すことを必要とし且つ毎回ファイアウォールを通過することのコストに耐えることを必要とするからである。
【０００５】
スマートカードは、アプリケーションプログラマーが別の分離されている実行コンテキストにおける別のアプリケーションへオブジェクトをパスすることを所望する場合のある例示的なプラットフォームである。スマートカードは、クレジットカードに類似しているカードであり、且つ埋設されている集積回路（ＩＣ）を包含している。あるスマートカードは、携帯電話の内側における加入者識別モジュール（ＳＩＭ）カードとして使用されている。スマートカードは設計上高度に安全なものであり、不正変更するとそれに包含されている情報が破壊されることとなる。スマートカードは、典型的に、安全な処理及び格納のためにマイクロプロセッサとメモリとを具備している。スマートカードに類似した技術も存在している。そのような関連技術の例はスマートボタン及びＵＳＢトークンである。これらのその他の技術はスマートカードと同様の機能のために使用することが可能である。ＵＳＢトークンはＰＣのＵＳＢポート内へ直接的に挿入することが可能である。スマートボタン及びＵＳＢトークンは、両方共、スマートカードと同様にプログラミング能力を提供し且つ耐不正変更特性を有している。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
従って、分離されている実行コンテキスト等を使用する計算環境において安全であるが高性能の共有性を可能とさせることが望ましい。このセクションにおいて記載するアプローチを追及することが可能であるが、必ずしも以前に着想された又は追及されたアプローチではない。従って、本明細書においてそうでないものとして表示しない限り、このセクションにおいて記載するアプローチは本願発明に対する従来技術ではなく且つこのセクションに挿入することにより従来技術として認めたものではない。
【課題を解決するための手段】
【０００７】
第一の分離されている実行コンテキストにおいて実行する第一アプリケーションにより所有されているオブジェクトを第二の分離されている実行コンテキストにおいて実行する第二アプリケーションに対してアクセス可能なものとさせるアプローチを本明細書において記載する。１実施例によれば、該オブジェクトは該第一の分離されている実行コンテキストと関連付けられている。該オブジェクトを該第二アプリケーションに対してアクセス可能なものとさせるための要求が受取られる。該オブジェクトと関連付けられている該分離されている実行コンテキストを該第二の分離されている実行コンテキストへ変化させることにより該オブジェクトの所有が該第二アプリケーションへ移転され、それにより該オブジェクトを該第二アプリケーションに対してアクセス可能なものとさせる。
【０００８】
その他の側面によれば、本明細書に記載するアプローチは前述した機能を実施する形態とされたマシンにより読取可能な媒体を包含している。
【発明を実施するための最良の形態】
【０００９】
本明細書に記載するシステム及び方法は、分離されている実行コンテキスト間においてのオブジェクトの所有の移転に関するものである。説明の便宜上、種々のシステム及び方法の完全なる理解を与えるために多数の特定の詳細について説明する。然しながら、本明細書に記載するシステム及び方法はこれらの特定の詳細無しで実現することが可能であることは明かである。従って、本明細書及び図面は制限的な意味ではなく例示的なものとして理解すべきである。
【００１０】
外観
図１は本発明の１実施例に基づいて、異なる分離されている実行コンテキストにおけるアプリケーション間においてオブジェクトの所有を移転するためのインターフェースを具備する環境を例示している模式図である。オブジェクトの所有を移転することは、該オブジェクトを２つのアプリケーション間においてパスさせることを可能とさせる。即ち、該オブジェクトの所有を移転することなしには、該オブジェクトを異なる分離されている実行コンテキストにおける第二アプリケーションへパスすることの第一アプリケーションによるいかなる試みも、該第二アプリケーションが該オブジェクトへアクセスを有することを可能とさせるものではない。例えば、第二アプリケーションがオブジェクトが存在していることに気が付いているが、そのオブジェクトを読取るか又は修正することができない場合がある。図１は、オブジェクトＡ２  １０７の所有が、夫々、分離されている実行コンテキスト１０２Ａ及び１０２Ｂにおいて実行するアプリケーションＡ  １０６ＡからアプリケーションＢ  １０６Ｂへ移転される場合を例示している。所望により、アプリケーションＢ  １０６ＢはオブジェクトＡ２  １０７の所有をアプリケーションＡ  １０６Ａへ戻すべく移転することが可能である。
【００１１】
以下の例は、異なる分離されている実行コンテキストにおいて実行するアプリケーション間においての所有の移転即ち転送を例示するために使用する。アプリケーションＢは名前と電話番号との間のマッピングを管理する電話帳アプリケーションである場合がある。アプリケーションＢは電話番号のルックアップを実施するためのメソッド（「ルックアップメソッド（ｌｏｏｋｕｐ  ｍｅｔｈｏｄ）」）を有するインターフェースを公表している。このルックアップメソッドは名前をパスするためのストリング、及び電話番号をリターンするためのストリングを有している。アプリケーションＡは名前と電話番号との間のマッピングを実施することを所望する異なる分離されている実行コンテキスト内のアプリケーションである場合がある。１例として、アプリケーションＡはユーザの名前の入力及び電話番号に対する要求に応答して電話番号を表示するプログラムである場合がある。アプリケーションＡは該ルックアップメソッドをコールし人の名前に対するストリングをパスする。該ストリングは分離されている実行コンテキストＡにおいてインスタンス化されたので、アプリケーションＢが該ストリングを読むことが可能であるためには、アプリケーションＡはアプリケーションＢへ該ストリングの所有を移転することが必要である。即ち、該ストリングの所有がアプリケーションＢへ移転されない限り、ファイアウォール１１５はアプリケーションＢが該ストリングがアクセスすることを阻止する。
【００１２】
従って、アプリケーションＡは、先ず、該ストリングの所有をアプリケーションＢへ移転し、次いで、該ルックアップメソッドをインボーク（ｉｎｖｏｋｅ）即ち呼出し、該ストリングを該メソッドにおけるパラメータとしてパスする。アプリケーションＢが該コール（ｃａｌｌ）を受取ると、それは該ストリングへアクセスし且つその電話番号をルックアップすることが可能である。その電話番号は分離されている実行コンテキストＢにおいてインスタンス化される。従って、その電話番号ストリングをアプリケーションＡへパスするためには、アプリケーションＢは、先ず、該電話番号ストリングの所有をアプリケーションＡへ移転し、次いで、該ルックアップメソッドコールからのリターンパラメータとして該電話番号ストリングをリターン即ち戻す。アプリケーションＡは該ルックアップメソッドからリターン即ち戻されると該電話番号ストリングを読取ることが可能である。
【００１３】
オブジェクトの所有を移転するためにここで提供される方法及びシステムは既存の技術と互換性がある。例えば、本発明の１実施例に基づくオブジェクトの移転はジャバ言語及びその他の言語と互換性がある。
【００１４】
分離されている実行コンテキスト
アプリケーションＡ  １０６Ａ及びアプリケーションＢ  １０６Ｂの各々は、夫々、それら自身の分離されている実行コンテキスト１０２Ａ及び１０２Ｂにおいて実行を行う。分離されている実行コンテキストを作成する１つの技術は、その分離されている実行コンテキスト内においてインスタンス化される各オブジェクトに対し同一のコンテキスト識別子を割当てることであり、その場合に、該コンテキスト識別子は他の全ての分離されている実行コンテキストとは異なるものである。従って、アプリケーションＡ  １０６Ａ及び移転可能なオブジェクトＡ２  １０７は、これらのオブジェクトがインスタンス化される場合に、コンテキストＡ  １０２Ａのコンテキスト識別子が割当てられる。同様の態様で、アプリケーションＢ  １０６Ｂは、アプリケーションＢ  １０６Ｂがインスタンス化される場合には、分離されている実行コンテキストＢ  １０２Ｂのコンテキスト識別子が割当てられる。
【００１５】
分離されている実行コンテキストにおけるオブジェクトは、そのオブジェクトへのアクセスを要求するアプリケーションのコンテキスト識別子がそのオブジェクトのコンテキスト識別子と一致することを検証することにより保護することが可能である。１実施例においては、ファイアウォール１１５がこの検証をインプリメントするために使用される。例えば、ファイアウォール１１５は、オブジェクトＡ２がアプリケーションＡ  １０６Ａにより所有されている場合には、アプリケーションＢ  １０６ＢがオブジェクトＡ２  １０７へアクセスすることを阻止する。何故ならば、アプリケーションＢ  １０６ＢはオブジェクトＡ２  １０７とは別の分離されている実行コンテキスト内にあるからである。このことは、アプリケーションＢ  １０６ＢがオブジェクトＡ２  １０７とは異なるコンテキスト識別子を有していることをファイアウォール１１５が判別することにより強制することが可能である。
【００１６】
共有可能なインターフェース
アプリケーションＡ  １０６Ａは共有可能なインターフェース１１１を分離されている実行コンテキストＡ  １０２Ａ外部のアプリケーションに対して使用可能なものとさせる。この共有可能なインターフェース１１１は、コンテキストＡにおけるオブジェクトへのアクセスを可能とさせる。例えば、共有可能なインターフェース１１１は、アプリケーションＢ  ２０６が分離されている実行コンテキストＡ  １０２Ａにおける共有可能なインターフェースオブジェクト（ＳＩＯ）Ａ１へアクセスすることを可能とする。ＳＩＯはファイアウォール１１５の制限なしで異なる分離されている実行コンテキストにおける２つのアプリケーション間でデータの制御された共有を可能とする。従って、ファイアウォールの制限なしで、共有可能なインターフェース１１１を介してアプリケーションＢ  １０６Ｂは自由にＳＩＯ  Ａ１へアクセスする。例えば、ＡＩＯ  Ａ１のコンテキスト識別子がアプリケーションＢ  １０６Ｂのコンテキスト識別子と異なるものであったとしても、アプリケーションＢ  １０６Ｂは共有可能なインターフェース１１１を介してＳＩＯ  Ａ１へのアクセスを得ることが可能である。
【００１７】
然しながら、オブジェクトＡ２  １０７のコンテキスト識別子はアプリケーションＢ  １０６Ｂのコンテキスト識別子とは異なっており且つオブジェクトＡ２  １０７はＳＩＯではないので、ファイアウォール１１５の制限なしでアプリケーションＢ  １０６ＢはオブジェクトＡ２  １０７へアクセスすることは不可能である。アプリケーションＢ  １０６ＢがオブジェクトＡ２  １０７へのアクセスを有するためには、本発明の１実施例に基づいて、オブジェクトＡ２  １０７の所有がアプリケーションＢ  １０６Ｂへ移転される。
【００１８】
この所有の移転は、１実施例においては、共有可能なインターフェースへのコール又はそれからのリターンを介してパスされるオブジェクトに制限される。１例として、アプリケーションＢ  １０６Ｂが移転可能なオブジェクトＡ２  １０７の所有を得るためには、１実施例において、アプリケーションＢは共有可能なインターフェース１１１に対してコールを行う。更に、第一の分離されている実行コンテキストから第二の分離されている実行コンテキストへの所有の転送は、その第二の分離されている実行コンテキストからアクセスすることができないオブジェクトパラメータに関してのみ必要とされる。所有の移転が必要とされることがない場合があるオブジェクトの例は、ＳＩＯ、グローバルアレイ、プリミティブデータを包含している。グローバルアレイは全ての分離されている実行コンテキストによりアクセス可能なものであるとして指定されているアレイオブジェクトである。その移転が、例えば共有可能なインターフェース１１１等の共有可能なインターフェースへのコール又はそれからのリターン期間中にのみ発生するように移転可能なオブジェクトＡ２  １０７の所有の移転を制限するための保護対策を付加することが可能である。
【００１９】
１実施例においては、ＳＩＯ  Ａ１が共有可能なインターフェース１１１をインプリメントし且つＳＩＯ  Ａ１はＡ２  １０７等の移転可能なオブジェクトをパスするためのメソッドを提供する。ＳＩＯは外部アクセスのための制御されたアクセスビュー（ジャバ言語用語における「インプリメント（ｉｍｐｌｅｍｅｎｔ）」）を提供するオブジェクトである。この制御されたビュー（ｖｉｅｗ）は、１実施例においては、共有可能なインターフェース１１１として定義される１組のアクセスメソッドである。
【００２０】
１実施例においては、この所有の移転はアプリケーションに対してトランスペアレントである。例えば、共有可能なインターフェース１１１は、アプリケーションＡ  １０６Ａ又はアプリケーションＢ  １０６Ｂのいずれかがオブジェクト所有を移転するためのメソッド又は関数をインボーク即ち呼出すこと無しに所有を移転させるためのここにおいて「プロキシー」コードと呼称されるものを有することが可能である。１実施例においては、所有の移転は、特定の分離された実行コンテキストに対して分離を与えるファイアウォール（例えば、ファイアウォール１１５）により実施される。ファイアウォールによる所有の移転はそのオブジェクトを所有するアプリケーションに対してトランスペアレントである。
【００２１】
移転可能なクラス
本発明の１実施例に基づいて、定義された１組のクラスは異なる分離されている実行コンテキストにおいて実行するアプリケーション間において移転可能である。従って、アプリケーションＡ  １０６Ａはその組の移転可能なクラスの中にないオブジェクトの所有を移転すべきではない。この定義された組の移転可能なクラスの例は、これらに制限されるものではないが、ＳＩＯのアレイ、プリミティブのアレイ、ストリング、プリミティブラッパー（例えばＩｎｔｅｇｅｒ即ち整数等）を包含している。本発明の１実施例に基づいて、移転可能であるとして定義されていないクラス内のオブジェクトは、所有を移転することによりパスすることを阻止することが可能である。移転可能なクラスの組におけるオブジェクトは移転を許可するためにアプリケーションにより移転可能であるとして明示的にタグを付けることは必要ではない。そうではなく、１実施例においては、そのアプリケーションが実行する計算環境が移転可能なオブジェクトを定義する。移転可能なオブジェクトクラスはランタイム環境においてそのようなものとして指定することが可能である。
【００２２】
オブジェクトの所有の移転
Ａ）所有のプログラマチック移転
アプリケーションは、それが所有するオブジェクトの所有を明示的に移転し、次いで、そのオブジェクト（その分離されている実行コンテキストに束縛されている）を別の分離されている実行コンテキストにおける別のアプリケーションへパスすることが可能である。１側面においては、アプリケーションは、メソッド又は関数を呼出すことによりオブジェクトの所有を移転することが可能である。以下のものはオブジェクトの所有を移転するためのメソッドの２つの例である。
【００２３】
【表１】
0005422103.tif 000002
【００２４】
これらのメソッドの各々に対する第一の引き数はその所有が移転されるべきオブジェクトである。第二の引き数は第一の例のメソッドにおける受取アプリケーションのＵＲＩ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｉｄｅｎｔｉｆｉｅｒ）又はＡＩＤ（アプリケーション識別子）を表わしている。該第二の引き数は第二の例のメソッドにおける受取人のＳＩＯを表わしている。例えばサーバーアプリケーションとそのクライエント等の相互作用を行うアプリケーション間においてオブジェクトの所有を交互に移転させることが可能である。例えば幾つかのインタラクション即ち相互作用を介してサーバーアプリケーションとそのクライエントアプリケーションとの間でデータを転送するために同一のアレイを使用することが可能である。クライエントアプリケーションは、その中にサーバーアプリケーションがデータをコピーすべきアレイを提供することが可能である。
【００２５】
Ｂ）所有のトランスペアレント移転
所有のトランスペアレント移転は、ツールが発生するコード（例えば、ＳＩＯ内に挿入されるプロキシークラス又はコードのいずれか）によりインプリメントすることが可能である。プロキシークラスは実際のＳＩＯクラスに対するプロキシーである。プロキシークラスは全てのＳＩＯと同一のメソッドを有するクラスを発生する。プロキシークラスはオリジナルのＳＩＯクラスと同一のインターフェースを公表する。例えば、プロキシークラスは同一の組のメソッド又はスーパーセットを公表する。プロキシーオブジェクトのメソッドに対するコールはオリジナルのＳＩＯオブジェクトの同一のメソッドに対して委任される。該プロキシーは、オブジェクト（例えば、ＳＩＯコール可変オブジェクトにおけるパラメータ及び戻り値）の防衛的コピーをトランスペアレントに作成し且つこれらのコピーの所有のサーバーへの及びリターンにより、夫々、クライエントへの移転を受け持つ。該プロキシーはそのアプリケーションと共に発生し且つインストールすることが可能である。
【００２６】
例えば、電話帳ルックアップでのアプリケーションの例を参照すると、アプリケーションＢの電話帳メソッドに対してプロキシーを発生することが可能である。該プロキシーは、アプリケーションＢがインストールされる場合に発生される。該プロキシーは、必要とされる如何なるオブジェクトのコピー及びオブジェクトの所有の移転を実施することが可能である。アプリケーションＡが電話帳メソッドをコールすると、そのプロキシーメソッドが呼出される。
【００２７】
１実施例においては、アプリケーションＡがプログラマーにより開発されている場合に、コードがＳＩＯ  Ａ１クラス内に自動的に挿入される。
【００２８】
１実施例によれば、所有のトランスペアレント移転はファイアウォールにより実施される。例えば、ファイアウォールは、ＳＩＯメソッドコールにおける引き数又は戻り値としてパスされるオブジェクトの所有を移転する。該ファイアウォールは、プログラム実行期間中にアプリケーションの代わりに自動的に先に説明した所有移転ＡＰＩを呼出すことにより所有の移転を実施する。
【００２９】
可変及び不変オブジェクトの所有の移転
前述した如く、可変オブジェクトの所有の移転は不変オブジェクトとは異なって処理することが可能である。
【００３０】
可変オブジェクト
可変オブジェクトは、それらがインスタンス化された後に変化することが可能なオブジェクトである。可変オブジェクトの例はアレイ（プリミティブ、ＳＩＯ、上述した不変オブジェクト、及びここで説明する可変オブジェクトの）、ＳｔｒｉｎｇＢｕｆｆｅｒ及びＶｅｃｔｏｒである。多くのその他のタイプの可変オブジェクトが存在している。可変オブジェクトは異なる分離されている実行コンテキストにおけるアプリケーション間において直接的にパスすべきものではない。その理由は、所有の移転無しではファイアウォールがオブジェクトにアクセスすることを阻止するからである。従って、以前の所有者が可変オブジェクトを新たな所有者へパスすることを可能とするためにこのような可変オブジェクトの所有が移転される。その所有が移転されると、最初の所有は最早そのオブジェクトへアクセスするものではない。従って、ファイアウォールは先の所有者のそのオブジェクトへアクセスしようとする試みをブロックする。
【００３１】
不変オブジェクト
不変オブジェクトは、それがインスタンス化された後にオブジェクトが変化することが許可されないものである。不変オブジェクトの例は、ストリング（Ｓｔｒｉｎｇ）及びプリミティブラッパー（ｐｒｉｍｉｔｉｖｅ  ｗｒａｐｐｅｒ）である。幾つかの不変オブジェクトは、分離されている実行コンテキストに束縛されているものではない。例えば、プリミティブ値は分離されている実行コンテキストへ割当てられていない場合がある。従って、分離されている実行コンテキストへ束縛されていない不変オブジェクトの所有を移転することは必要ではない。然しながら、幾つかの不変オブジェクトは、本発明の１実施例に基づいて、分離されている実行コンテキストへ束縛されている。このような不変オブジェクトへ異なる分離されている実行コンテキストにおけるアプリケーションによりアクセスされる場合には、その不変オブジェクトの所有がそのアプリケーションの分離されている実行コンテキストへ移転される。別の側面は、そのオブジェクトの所有を移転し且つ、必要な場合には、防衛的コピーを作成するためにツールが発生するプロキシーを使用する。ツールが発生するプロキシーについて以下に説明する。従って、その技術は、アプリケーションがオブジェクトの所有を移転するためにメソッドをコールする代わりに、プロキシーを使用することが可能であるという点において非常に使い勝手が良い。
【００３２】
防衛的コピーオブジェクト作成及びオブジェクト所有の移転
Ａ）防衛的コピー動作
オブジェクトの状態を共有するために、そのオブジェクトの防衛的コピーを作成し且つこの防衛的コピーの所有を別の分離されている実行コンテキストにおいて実行するアプリケーションへ移転することが可能である。そのオブジェクトを複製するためにソフトウエアメソッドを使用することが可能である。このメソッドは複製されるべきオブジェクトの名前を引き数として取ることが可能である。このメソッドは可変オブジェクトの防衛的コピーを作成する。所有の移転は該防衛的コピー上で実施することが可能であり、それにより共有アプリケーションがオリジナルのオブジェクトでの処理を進行することを可能とする。防衛的コピーの所有を移転することの理由は、その防衛的コピーは、初期的には、オリジナルのオブジェクトと同一の分離されている実行コンテキストにおいて作成されるからである。従って、防衛的コピーは、この実施例においては、それが作成される分離されている実行コンテキストと関連するコンテキスト識別子が付けて作成される。従って、そのコンテキスト識別子は、その防衛的コピーを転送する他の分離されている実行コンテキストのコンテキスト識別子へ変化されるべきである。
【００３３】
共有されるべきオブジェクトが第二オブジェクトを参照する場合には、この実施例においては、その第二オブジェクトの防衛的コピーも作成される。その第二オブジェクトが第三オブジェクトを参照する場合には、その第三オブジェクトの防衛的コピーを作成することが可能である。オブジェクトをコピーする処理は、ここにおいては、反復的コピー処理と呼称する。然しながら、コピー処理の深さは、これに制限されるものでないが、以下の理由を包含する理由のために制限することが可能である。コピー動作の深さは、移転可能であるとして定義されているオブジェクトのクラスへ制限することが可能である。このコピー動作の深さは、これらのオブジェクトの共有を保護するその他の手段が存在する場合があるので、ＳＩＯへ到達した場合に停止することにより制限することが可能である。コピー動作の深さは、プリミティブ又は上述した不変オブジェクトに到達する場合に停止することにより制限することが可能である。このような不変オブジェクトは、そのオリジナルを共有することが可能であるので、コピーすることは必要ではない。
【００３４】
コピー動作は、コピーされるべきでないフィールドにタグ（ｔａｇ）を付けるアノテーションで更に制御することが可能である。例えば、プログラマは、どのフィールドがコピーされるべきでないかを表わすためにアノテーションをコードへ付加することが可能である。特定の例として、ジャバプログラミング言語はコードに対するこのようなアノテーションを可能とさせる。
【００３５】
Ｂ）コピーの所有の移転
別のオブジェクトを参照するオブジェクトの所有を移転するために反復的処理がオブジェクトの所有の移転に適用され、その参照されるオブジェクトの所有も移転することが可能である。然しながら、所有を移転する深さは、これに制限されるものではないが、以下の理由を包含する理由のために制限することが可能である。所有を移転する深さは、移転可能であるとして定義されているオブジェクトのクラスへ制限することが可能である。所有を移転する深さは、これらのオブジェクトの共有を保護する他の手段が存在している場合があるので、ＳＩＯに到達する場合に停止することにより制限することが可能である。ＳＩＯの共有を保護する他の手段が存在する場合があるので、所有を移転することは必要ではない。所有を移転する深さは、プリミティブ又は上述した不変オブジェクトに到達する場合に停止することにより制限することが可能である。
【００３６】
分離されている実行コンテキスト間におけるオブジェクト所有の移転の流れ
図２は本発明の１実施例に基づいて分離されている実行コンテキストの間でのオブジェクトの所有を転送するプロセス２００を例示している。アプリケーションＡがアプリケーションＢへオブジェクトの所有を移転する図１に基づく例を使用してプロセス２００を説明する。ステップ２０２において、オブジェクトが、第一アプリケーションが実行する第一の分離されている実行コンテキストと関連付けられる。例えば、アプリケーションＡがそのオブジェクトを作成すると、そのオブジェクトには分離されている実行コンテキストＡと関連するコンテキスト識別子が割当てられる（例えば、それでスタンプされる）。
【００３７】
ステップ２０４において、そのオブジェクトを、別の分離されている実行コンテキストにおいて実行する第二アプリケーションに対してアクセス可能なものとするための要求が受取られる。オブジェクトの所有の移転は、トランスペアレント的に又はプログラム的に処理することが可能である。例えば、プログラマチックな移転はメソッド又は関数を呼出すことによりインプリメントすることが可能である。特定の例として、アプリケーションＡがそのオブジェクトの所有をアプリケーションＢへ移転するためにメソッドを呼出す。所有のトランスペアレント的な移転は、ツールが発生するコードによりインプリメントすることが可能であり、後に説明する。ここでは、そのツールが発生するコードは「プロキシー（ｐｒｏｘｙ）」と呼称する。１実施例においては、ファイアウォールがそのオブジェクトの所有を転送する。
【００３８】
ステップ２０５において、そのオブジェクトが移転可能であるか否かの判定がなされる。例えば、アプリケーションＡが実行する計算環境は、定義された組の移転可能なクラスを有している場合がある。そのオブジェクトが移転可能なクラスのインスタンスでない場合には、制御がステップ２０６へ移行し、そこでそのオブジェクトが共有可能なインターフェースメカニズム（例えば、ＳＩＯ、グローバルアレイ等）により既に処理されている共有可能なオブジェクトのタイプのものであるか否かの判定が行われ、そうである場合には、そのオブジェクトは、ステップ２０７において、更なるアクションなしでパラメータ又は戻り値としてパスされる。そうでない場合には、ステップ２０８において、所有の移転は失敗する。然しながら、そのオブジェクトが、ステップ２０５において判別されたように、移転可能なクラスのインスタンスである場合には、制御がオプションのステップ２０９へ移行し、そこでそのオブジェクトが不変であるか又は可変であるかの判定が行われる。そのオブジェクトが不変である場合には、ステップ２１０において、そのオブジェクトは更なるテストなしでアクセス可能である。そのオブジェクトが可変である場合には、制御はステップ２１１へ移行し、そこでそのオブジェクトの防衛的コピーがオプションとして作成される。防衛的コピーについては本明細書において前述した。防衛的コピーが作成されることが必要とされることはない。
【００３９】
ステップ２１２において、第二アプリケーションへのそのオブジェクト（又はその防衛的コピー）の所有の移転は、そのオブジェクトと関連するコンテキスト識別子を変化させることにより達成される。例えば、そのオブジェクトのコンテキスト識別子は、分離されている実行コンテキストＡの識別子から分離されている実行コンテキストＢのコンテキスト識別子へ変化される。従って、アプリケーションＢ以外の分離されている実行コンテキストＢを実行するアプリケーションがそのオブジェクトへアクセスすることが可能である。
【００４０】
このプロセス２００はＳＩＯのメソッドに対するコールの引き数又は戻り値としてパスされる全てのオブジェクトに対して適用することが可能である。更に、オブジェクト所有の移転は、複数回のＳＩＯメソッドコールを介して同一のオブジェクトの再使用を可能とする。従って、本発明の１実施例に基づくオブジェクトの移転はプリミティブのアレイ又はＳＩＯのアレイに対して適している。然しながら、データ共有のためのオブジェクトの所有の移転はその他のタイプのオブジェクトに対しても性能上の利点を有している。
【００４１】
ハードウエア外観
１実施例においては、図２のプロセス２００は１つ又はそれ以上のプロセッサにより実行される１組の命令を有している。１実施例においては、図１におけるアプリケーション及び共有可能なインターフェース１１１は１つ又はそれ以上のプロセッサにより実行される１組の命令を有している。図３は、それらの命令を実行する１つの可能な実施例を示している。コンピュータシステム３００は、情報交換を容易化するためのバス３０２、及び情報を処理するためにバス３０２と結合されている１つ又はそれ以上のプロセッサ３０４を包含している。コンピュータシステム３００は、又、プロセッサ３０４により実行されるべき情報及び命令を格納するために、バス３０２に結合されている例えばランダムアクセスメモリ（ＲＡＭ）又はその他のダイナミック格納装置等のメインメモリ３０６を包含している。メインメモリ３０６は、又、プロセッサ３０４による命令の実行期間中に一時的な変数又はその他の中間情報を格納するために使用することが可能である。コンピュータシステム３００は、更に、プロセッサ３０４に対するスタチック情報及び命令を格納するためにバス３０２に結合されているリードオンリメモリ（ＲＯＭ）３０８又はその他のスタチック格納装置を包含することが可能である。磁気ディスク又は光学ディスク等の格納装置３１０が情報及び命令を格納するために設けられており且つバス３０２へ結合されている。
【００４２】
コンピュータシステム３００は、コンピュータユーザに対して情報を表示するためにディスプレイ３１２へバス３０２を介して結合することが可能である。英文字及びその他のキーを包含する入力装置３１４がプロセッサ３０４に対して情報及びコマンド選択を通信するためにバス３０２へ結合されている。別のタイプのユーザ入力装置は、例えばマウス、トラックボール、又はプロセッサ３０４に対して方向情報及びコマンド選択を通信するための及びディスプレイ３１２上のカーソルの動きを制御するためのカーソル方向器等のカーソル制御３１６である。この入力装置は、典型的に、該装置が平面内における位置を特定することを可能とする２つの軸、即ち第一軸（例えば、ｘ）及び第二軸（例えば、ｙ）における２つの自由度を有している。
【００４３】
コンピュータシステム３００において、バス３０２は、種々のコンポーネント間において情報、信号、データ等を交換させることを可能とする任意のメカニズム及び／又は媒体とすることが可能である。例えば、バス３０２は、電気的信号を担持する１組の導体とすることが可能である。バス３０２は、又、コンポーネントのうちの１つ又はそれ以上の間でワイヤレス信号を担持するワイヤレス媒体（例えば、空気）とすることが可能である。バス３０２は、更に、該コンポーネントのうちの１つ又はそれ以上を接続するネットワーク接続とすることが可能である。種々のコンポーネントの間で情報、信号、データ等を交換させることを可能とする任意のメカニズム及び／又は媒体をバス３０２として使用することが可能である。バス３０２は、又、これらのメカニズム／媒体の結合とすることが可能である。例えば、プロセッサ３０４はワイヤレスによって格納装置３１０と通信することが可能である。このような場合に、バス３０２は、プロセッサ３０４及び格納装置３１０の観点からは、空気等のワイヤレス媒体である。更に、プロセッサ３０４は容量的にＲＯＭ３０８と通信を行うことが可能である。更に、プロセッサ３０４はネットワーク接続を介してメインメモリ３０６と通信を行うことが可能である。この場合には、バス３０２はネットワーク接続である。更に、プロセッサ３０４は１組の導体を介してディスプレイ３１２と通信を行うことが可能である。この場合には、バス３０２は１組の導体である。従って、種々のコンポーネントがどのようにして互いに通信を行うかに依存して、バス３０２は異なる形態を取ることが可能である。図３に示したように、バス３０２は種々のコンポーネント間において情報、信号、データ等を交換させることを可能とするメカニズム及び／又は媒体の全てを機能的に表わしている。本発明はここに記載した技術をインプリメントするためのコンピュータシステム３００の使用に関連している。本発明の１実施例によれば、これらの技術はメインメモリ３０６内に包含される１つ又はそれ以上の命令からなる１つ又はそれ以上のシーケンスを実行するプロセッサ３０４に応答してコンピュータシステム３００により実施される。このような命令は例えば格納装置３１０等の別のマシンにより読取可能な媒体からメインメモリ３０６内に読込むことが可能である。メインメモリ３０６内に包含されている命令からなるシーケンスの実行は、プロセッサ３０３をしてここに記載する処理ステップを実施させる。代替的実施例においては、本発明をインプリメントするためにソフトウエア命令の代わりに又はそれと組合わせてハードワイヤード回路を使用することが可能である。従って、本発明の実施例はハードウエア回路とソフトウエアとの何等かの特定の組合わせに制限されるものではない。ここで使用されるように「マシンにより読取可能な媒体」という用語は、マシンをして特定の態様で動作させるデータを供給することに参画する任意の媒体のことを意味している。コンピュータシステム３００を使用してインプリメントされる実施例においては、例えば、実行のためにプロセッサ３０４へ命令を供給する上で種々のマシンにより読取可能な媒体が関与する。このような媒体は、これらに制限されるものではないが、非揮発性媒体、揮発性媒体、及び伝送媒体を包含する多数の形態を取ることが可能である。非揮発性媒体は、例えば、格納装置３１０等の光学的又は磁気的ディスクを包含している。揮発性媒体は、例えばメインメモリ３０６等のダイナミックメモリを包含している。伝送媒体は、バス３０２を包含するワイヤを包含して、同軸ケーブル、銅ワイヤ及びオプチカルファイバを包含している。伝送媒体は、又、無線及び赤外線通信期間中に発生されるもののような音波又は光波の形態を取ることが可能である。
【００４４】
マシンにより読取可能な媒体の一般的な形態は、例えば、フロッピィディスク、フレキシブルディスク、ハードディスク、磁気テープ、又は任意のその他の磁気媒体、ＣＤ−ＲＯＭ、ＤＶＤ、又は任意のその他の光学的格納媒体、パンチカード、孔のパターンを具備する任意のその他の物理的媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、フラッシュＥＰＲＯＭ、任意のその他のメモリチップ又はカートリッジ、後述するような搬送波、又はそれからコンピュータが読取ることが可能な任意のその他の媒体を包含している。
【００４５】
種々の形態のマシンが読取可能な媒体は、実行のためにプロセッサ３０４に対して１つ又はそれ以上の命令からなる１つ又はそれ以上のシーケンスを担持することに関与する場合がある。例えば、該命令は、初期的に、遠隔コンピュータの磁気ディスク上に担持されている場合がある。該遠隔コンピュータは、該命令をそのダイナミックメモリ内にロードし且つモデムを使用して電話線を介し該命令を送ることが可能である。コンピュータシステム３００に対してローカルなモデムは該電話線を介して該データを受取り且つ赤外線送信器を使用して該データを赤外線信号へ変換させることが可能である。赤外線検知器は該赤外線信号内に担持されるデータを受取ることが可能であり且つ適宜の回路が該データをバス３０２上に配置させることが可能である。バス３０２はメインメモリ３０６への該データを担持し、それからプロセッサ３０４が該命令を検索し且つ実行する。メインメモリ３０６により受取られる命令は、オプションとして、プロセッサ３０４による実行の前又は後のいずれかにおいて格納装置３１０上に格納させることが可能である。
【００４６】
コンピュータシステム３００は、又、バス３０２へ結合されている通信インターフェース３１８を包含している。通信インターフェース３１８はローカルネットワーク３２２へ接続されているネットワークリンク３２０へ結合する二方向データ通信を提供する。例えば、通信インターフェース３１８は対応するタイプの電話線に対してデータ通信接続を与えるための統合サービスデジタルネットワーク（ＩＳＤＮ）カード又はモデムとすることが可能である。別の例として、通信インターフェース３１８は互換性のあるＬＡＮに対してデータ通信接続を与えるためのローカルエリアネットワーク（ＬＡＮ）カードとすることが可能である。ワイヤレスリンクを実現することも可能である。任意のこのようなインプリメンテーションにおいて、通信インターフェース３１８は種々のタイプの情報を表わすデジタルデータストリームを担持する電気的、電磁的又は光学的信号を送信し且つ受信する。
【００４７】
ネットワークリンク３２０は、典型的に、１つ又はそれ以上のネットワークを介して他のデータ装置へデータ通信を提供する。例えば、ネットワークリンク３２０はホストコンピュータ３２４又はインターネットサービスプロバイダ（ＩＳＰ）３２６により操作されるデータ装置へローカルネットワーク３２２を介しての接続を与えることが可能である。ＩＳＰ３２６は現在一般的には「インターネット」３２８と呼称されているワールドワイドパケットデータ通信ネットワークを介してデータ通信サービスを提供する。ローカルネットワーク３２２及びインターネット３２８は、両方共、デジタルデータストリームを担持する電気的、電磁的又は光学的信号を使用する。種々のネットワークを介しての信号及びネットワークリンク３２０上及び通信インターフェース３１８を介しての信号は、コンピュータシステム３００への及びそれからのデジタルデータを担持しており、情報を輸送する搬送波の例示的な形態である。
【００４８】
コンピュータシステム３００は、ネットワーク、ネットワークリンク３２０及び通信インターフェース３１８を介して、メッセージを送信し且つプログラムコードを包含するデータを受信することが可能である。インターネットの例においては、サーバー３３０はインターネット３２８、ＩＳＰ３２６、ローカルネットワーク３２２及び通信インターフェース３１８を介して、アプリケーションプログラムに対する要求されたコードを送信する場合がある。
【００４９】
受信されたコードは、それが受信されるとプロセッサ３０４により実行される場合があり、及び／又は、後に実行するために格納装置３１０又はその他の非揮発性格納部内に格納される場合がある。このように、コンピュータシステム３００は搬送波の形態におけるアプリケーションコードを得ることが可能である。この点において、注意すべきことであるが、本発明を特定の実施例を参照して説明したが、そのように制限されたものとして解釈されるべきではない。本発明の精神から逸脱することなしに本開示に鑑み当業者により種々の修正を行うことが可能である。従って、本発明はそれを例示するために使用した特定の実施例により制限されるべきものではなく、許可された特許請求の範囲及びその均等物によってのみ制限されるべきものである。
【図面の簡単な説明】
【００５０】
【図１】本発明の１実施例に基づいて分離されている実行コンテキスト間においてのオブジェクトの所有の移転動作を例示した模式図。
【図２】本発明の１実施例に基づいて分離されている実行コンテキスト間におけるオブジェクトの所有を移転するプロセスを例示したフローチャート。
【図３】本発明に基づく実施例をインプリメントすることが可能なコンピュータシステムを例示したブロック図。
【符号の説明】
【００５１】
１０２  分離されている実行コンテキスト
１０６  アプリケーション
１０７  オブジェクト
１１５  ファイアウォール
【図１】
0005422103.tif 000003
【図２】
0005422103.tif 000004
【図３】
0005422103.tif 000005