(57)【要約】  オブジェクトの共有は、プログラムがローカルオブジェクトを使用するのとほぼ同じ方法で、プログラムが共有オブジェクトを使用することを可能にする方法で実施されうる。一例では、ローカルオブジェクトを作成するために使用される普通の命令を介して、プログラムがオブジェクトを作成し、プロパティーを設定する。次いで、プログラムは、そのオブジェクトを、共有オブジェクトサーバーによって維持されうる共有オブジェクトモデルに登録する。オブジェクトが使用されうる各マシンに対して、共有オブジェクトランタイムがオブジェクトに対する変化をモニターし、これらの変化をサーバーに通知する。サーバーは、オブジェクトをアップデートし、オブジェクトの状態に対する変更を他のマシンに通知する。それらのマシン上の共有オブジェクトランタイムは、変更の通知を受信し、ローカルコピーをアップデートする。
2013526750.tif 000002
【特許請求の範囲】
【請求項１】
複数のマシンにわたってデータオブジェクトを共有するためのシステムであって、
プロセッサーと、
データ記憶コンポーネントと、
前記データ記憶コンポーネントにおける、前記データオブジェクトおよび前記データオブジェクトのプロパティーを記憶するオブジェクトデータベースと、
データオブジェクトが操作されるかまたは使用される複数のマシンに前記システムを通信可能に接続する通信コンポーネントと、
前記プロセッサー上で実行し、かつ、前記データオブジェクトが前記複数のマシン上で、いつ、どのようにして操作されたかの指示を前記複数のマシンから受信する、受信機コンポーネントと、
前記プロセッサー上で実行し、かつ、前記受信機コンポーネントが前記表示を受信すると、前記データベース内の前記データオブジェクトおよび前記データオブジェクトの前記プロパティーの状態をアップデートする、状態コンポーネントと、
前記プロセッサー上で実行し、かつ、前記データオブジェクトおよび前記データオブジェクトの前記プロパティーの前記状態がいつ変化したかを前記複数のマシンに通知する、通知コンポーネントと
を備えるシステム。
【請求項２】
前記受信機コンポーネントが、前記データオブジェクトのうちの第１のデータオブジェクトに対する、または前記データオブジェクトのうちの前記第１のデータオブジェクトのプロパティーに対する、同時並行制御を受信し、どれだけ多くの前記複数のマシンが、前記データオブジェクトのうちの前記第１のデータオブジェクトに、または前記データオブジェクトのうちの前記第１のデータオブジェクトのプロパティーに、同時にアクセスできるかを、前記システムが確定する、請求項１に記載のシステム。
【請求項３】
どれだけ多くの前記複数のマシンが前記データオブジェクトのうちの前記第１のデータオブジェクトにアクセスできるかとは無関係に、どれだけ多くの前記複数のマシンが前記プロパティーに同時にアクセスできるかを、前記同時並行制御が指定する、請求項２に記載のシステム。
【請求項４】
前記受信機コンポーネントが前記同時並行制御に対する時間制限を受信し、前記時間制限が経過した後、前記同時並行制御が無効になる、請求項２に記載のシステム。
【請求項５】
前記受信機コンポーネントによって受信された前記指示が、前記データオブジェクトの第１のデータオブジェクトが前記複数のマシンのうちの第１のマシン上で追加、変更、または削除されたことを表示し、前記データオブジェクトのうちの前記第１のデータオブジェクトの追加、変更または削除を反映するために、前記状態コンポーネントが前記指示に応答して前記データオブジェクトの前記状態をアップデートする、請求項１に記載のシステム。
【請求項６】
前記データオブジェクトのうちの第１のデータオブジェクトが前記複数のマシンのうちの第１のマシン上で追加、変更または削除されたことを表示するための、前記データオブジェクトの前記状態の変更に応答して、前記通知コンポーネントが、前記複数のマシンのうちの前記第１のマシンとは異なる、前記複数のマシンのうちの第２のマシンに、前記データオブジェクトのうちの前記第１のデータオブジェクトが追加、変更または削除されたことを通知する、請求項１に記載のシステム。
【請求項７】
前記システムが、前記複数のマシンに、前記データオブジェクトのコンテンツまたは種類に関係なく、前記データオブジェクトに対する変更を通知する、請求項１に記載のシステム。
【請求項８】
オブジェクトを共有する方法であって、
第１のプロパティーを含み、前記第１のマシンと、前記第１のマシンとは異なる複数の第２のマシンとにわたって共有される名前空間の一部である名前を有するオブジェクトモデルの一部である、第１のオブジェクトを登録する要求を受信するステップと、
前記第１のオブジェクトが前記第１のマシン上で第１のプログラムによって操作されたことを確定するステップと、
前記第１のオブジェクトが前記第１のマシン上で操作されたことの第１の通知を、前記複数の第２のマシンに送信するステップであって、前記確定するステップおよび前記送信するステップが発生したかまたは今後発生するかにかかわらず、前記第１のプログラムが前記第１のオブジェクトを操作する、ステップと、
前記第１のオブジェクトが前記複数の第２のマシンのうちの１つのマシン上で操作されたことの第２の通知を、前記複数の第２のマシンから受信するステップと、
前記第２の通知に従って前記第１のマシン上で前記第１のオブジェクトを変更するステップと
を含む方法。
【請求項９】
前記第１のオブジェクトまたは前記第１のプロパティーが、所与の時間において２つ以上のプログラムによって操作されうるかどうかを管理する同時並行制御を指定するステップをさらに含む、請求項８に記載の方法。
【請求項１０】
前記第１のオブジェクトが所与の時間において２つ以上のプログラムによって操作されうるかどうかとは無関係に、前記第１のプロパティーが所与の時間において２つ以上のプログラムによって操作されうるかどうかを、前記同時並行制御が管理する、請求項９に記載の方法。
【請求項１１】
前記同時並行制御に対する時間制限を受信するステップをさらに含み、前記時間制限が経過した後、前記同時並行制御が無効になる、請求項９に記載の方法。
【請求項１２】
前記第１のオブジェクトの中のプロパティーが共有可能、または共有不可能にされてよく、前記方法が、前記第１のプロパティーが共有可能にされるべきかまたは共有不可能にされるべきかを指定するステップをさらに含む、請求項８に記載の方法。
【請求項１３】
前記第１のマシンが前記方法を、前記第１のオブジェクトの種類にかかわらずに実行する、請求項８に記載の方法。
【請求項１４】
前記複数の第２のマシンに送信する前記ステップが、前記第１の通知を、前記複数の第２のマシンに前記第１の通知を送信するサーバーに送信するステップを含む、請求項８に記載の方法。
【請求項１５】
請求項８乃至１４のいずれか一項に記載の方法を実施するための、コンピューターで実行可能な命令を含む、コンピューター読み取り可能な媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オブジェクトの共有および同期に関する。
【背景技術】
【０００２】
[0001]コンピューターおよび他のデバイスの接続性が改善されてきたため、多くの場合異なるコンピューター上で実行中の異なるプログラムが同じ情報へのアクセスを共有することが一般的となった。接続されたコンピューティングの初期の時代には、データのユニットは、普通、特定の、オペレーターによって指示されたイベントを介してプログラム間および／またはマシン間で転送された。例えば、データのファイルは、電子メールまたはファイル転送プロトコル（ＦＴＰ）を介して１つの場所から別の場所に送られた。パイプはデータの共有を２つの実行中のプログラムの間で可能にする初期のメカニズムであったが、その技術は、１つの実行中のプログラムがその出力を別の実行中のプログラムに入力として送信することを可能にするに過ぎない点で、かなり限定されている。最新のプログラムのアーキテクチャーは、多くの場合、プログラム間でより豊富でより緻密なデータの共有を要求する。
【０００３】
[0002]いくつかの最新のプログラムは、互いにデータを共有するように設計されるが、データの共有の実施は、プログラマーの観点からは比較的複雑でありうる。典型的には、プログラム担当者のうちの１人は、データの共有を作動させる種々のタスクを実行するためのコードを書く必要がある。例えば、プログラムは、受信データをリッスンするため、および送信データを送信するためのコードを含むことができる。２つのプログラムが、この方式でデータを共有するとき、プログラムは、一般に、データ交換のためのメカニズムについて合意する必要がある。同意済みのメカニズムの性質は、多くの場合、共有されているデータの型に固有のものである。例えば、複数のプログラムがグラフィック情報を共有することを欲するならば、複数のプログラムは、通常、プログラム間で交換される情報の種類、この情報が送信されるフォーマット、データ間の衝突がいかにして解決されるか（例えば、プログラムのうちの２つが同じデータを同時にアップデートしようとすると何が起きるか）、およびその他の問題を考慮に入れる共有メカニズムを実施する必要がある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
[0003]したがって、プログラムがデータを共有するために、プログラムは、一般に、データを共有することを考慮に入れて実施される必要があり、通常、データの共有の詳細を実施するコードを含む必要がある。
【課題を解決するための手段】
【０００５】
[0004]ローカルデータオブジェクトを作成し使用するのとほぼ同じ方法でプログラムが共有データオブジェクトを作成し使用することを可能にする、共有オブジェクトのシステムが提供されうる。プログラムは、オブジェクトを作成し、オブジェクトに対してプロパティーを設定するためのコードを含んでよい。プログラムは、オブジェクトモデル内の共有オブジェクトであるものとしてオブジェクトを登録することができる。したがって、共通の名前空間を共有するプログラムが、オブジェクトモデルの中の共有オブジェクトにアクセスすることができる。すなわち、プログラムは、共有オブジェクトを読み出し、書き込み、そして変更することができる。プログラム（およびそのプログラマー）の視点からは、共有オブジェクトにアクセスすることは、ローカルオブジェクトにアクセスすることと同様に機能する。
【０００６】
[0005]オブジェクトを共有する能力は、一例では、以下のように実施されうる。オブジェクトサーバーは、共有オブジェクトのレジストリーを維持することができる。オブジェクトサーバーはまた、オブジェクトの「実態（truth）」を表す、共有オブジェクトのマスターコピーを維持することができる。共有オブジェクトを使用するマシンおよび／またはプログラムのそれぞれはまた、それが使用する共有オブジェクトのローカルコピーを維持することができる。各マシン上の共有オブジェクトランタイムは、いかなる変更が行われたかを確定するために、これらのローカルコピーをモニターすることができる。変更が行われるならば、ランタイムは、変更の通知をオブジェクトサーバーに送信する。オブジェクトサーバーが変更の通知を受信すると、オブジェクトサーバーはオブジェクトの実態をアップデートし、次いで、他のマシンおよび／またはプログラムがオブジェクトのそれらのローカルコピーをアップデートすることができるように、他のマシンおよび／またはプログラムに通知する。
【０００７】
[0006]共有オブジェクトが作成されると、作成者は、オブジェクトに対して、またはオブジェクトの特定のプロパティーに対してさえ、種々の種類の制御を指定することができる。例えば、オブジェクト（またはオブジェクトのプロパティー）は、オブジェクトに対する同時変更がいかに取り扱われるか、例えば、最終書き込み優先（last writer wins）かまたは楽観的同時並行性（optimisitic concurrency）、を管理する並行処理制御（concurrency control）を受けることができ、楽観的同時並行性において、クライアントが最終の実態にアクセスしていない状態でオブジェクトをアップデートすると、変更は拒絶され、クライアントは通知を受ける。あるいは、オブジェクト（またはオブジェクトのプロパティー）は、どのマシンおよび／またはプログラムがオブジェクト（またはプロパティー）にアクセスできるかを管理するアクセス制御を受けることができる。あるいは、オブジェクト作成者は、オブジェクトのいくつかのプロパティーが共有されるべきであり、その他は共有されるべきでないことを指定することができる。あるいは、別の例として、オブジェクト作成者は、特定の期間中に、排他的書き込み許可（exclusive write permission）のためにオブジェクトをロックする能力を指定することができる。
【０００８】
[0007]共有オブジェクトの使用は、いずれの特定のプログラミング言語にも限定されるものではない。一例では、プログラミング言語は、共有オブジェクトがローカルオブジェクトと同じ方法（またはほぼ同じ方法）で使用されることを可能にすることができる。したがって、そのような一例では、プログラミング言語がプログラマーに、ローカルオブジェクトに対して読み出し、書き込み、変更し、追加し、または削除する操作を実行することを可能にするのと同じ方法で、プログラマーは、共有オブジェクトを読み出し、書き込み、変更し、追加し、または消去するためにプログラミング言語を使用することができる。このようにして、プログラマーは、共有メカニズムの詳細を実施する必要なく、また、プログラムがローカルオブジェクトだけを使用する場合に書かれる方法と実質的に異なる方法でプログラムを書く必要なく、他のプログラマーによって、または他のマシン上で使用されうるオブジェクトを作成することができる。
【０００９】
[0008]この発明の概要は、以下の発明を実施するための形態の中でさらに説明される概念の抜粋を簡潔な形で紹介するために提供される。この発明の概要は、特許請求される主題の主要な特徴または本質的な特徴を識別することを意図するものではなく、特許請求される主題の範囲を限定するために使用されることを意図するものでもない。
【図面の簡単な説明】
【００１０】
【図１】[0009]オブジェクトの共有が発生することができる環境の一例のブロック図である。
【図２】[0010]オブジェクトサーバーの一例の詳細のブロック図である。
【図３】[0011]マシンが共有データオブジェクトを作成し、使用することができるプロセスの一例の流れ図である。
【図４】[0012]オブジェクトの共有を容易にするために共有オブジェクトサーバーによって遂行されうるアクションの例の流れ図である。
【図５】[0013]本明細書で説明される主題の実施に関連して使用されうるコンポーネントの例のブロック図である。
【発明を実施するための形態】
【００１１】
[0014]最新のコンピューティングでは、多くのプログラムが、同じデータのセットへのアクセスを共有することによって互いに対話する。ソフトウェアパッケージは、共通のデータのセット上で動作する、より小さいプログラムのセットとして組み立てられてよい。あるいは、それ以外には互いに関係のないプログラムが、ユーザーエクスペリエンスのある部分を効率化するために、データを共有することを欲する場合がある。例えば、財務会計ソフトウェアパッケージは、異なる財務会計機能を実行するが、財務データの共通のセット（財務データはいくつかのマシンにわたって分配されてよい）上で動作する、小さいプログラムのセットとして組み立てられてよい。あるいは、別の例では、遠隔ユーザーが情報を実時間で共有することを可能にするオンライン会議プログラムは、すべてのユーザーが同時に描き込むことができる共通のホワイトボードを提供することができる。この場合は、ホワイトボードのコンテンツは、事実上、会議プログラムのインスタンスの間で共有されるデータのセット（例えば、あるひと続きの筆跡（pen stroke）のセット）である。あるいは、一人のユーザーがデスクトップコンピューター上でデスクトップメールクライアントを実行し、スマートフォン上でモバイルメールクライアントを実行することができ、これらの２つのメールクライアントは、基礎をなす同じ電子メールボックスへのアクセスを共有することができる。したがって、ユーザーが一方のクライアント上のメッセージを削除すると、削除操作は、電子メールボックスの基本的サーバーコピーに伝わり、次いで他のメールクライアントに伝わることができる。データの共有を介して互いに対話する、多くの他のプログラムの例が存在する。
【００１２】
[0015]プログラムがデータを共有する多くのシナリオが存在するが、データの共有の実施は、多くの場合、複雑であり、かつ状況に固有のものである。同じ基本的なデータの一部が異なるプログラムおよび／またはマシンにわたって共有されうるとの概念は、抽象である。その抽象を実行に移すメカニズムは、簡単ではない。例えば、変更が１つのマシン上で行われると、変更が行われたという事実は、他のマシンに伝達される必要がある。情報が伝達されうる種々の異なる方法が存在する。変化が発生するマシンは、データをモニターしてデータが変化した時点を確定し、次いでその変化を他のマシンに送り出すことができる。次いで、他のマシンは、これらの変化の通知をリッスンして、それらのローカルコピーに対して変更を加えることができる。異なるマシンがデータの同じ部分を同時に変更する場合は、衝突する変更を解決するために規則が存在する必要がある。多くの場合では、これらのメカニズムが、これらのプログラムの作成者によってプログラムに組み入れられる必要がある。さらに、データの共有が管理される特定の方法は、データの性質に応じて決まる可能性がある。共有メカニズムは、特定の型のデータを保持する特定のデータ構造を共有するように設計されてよい。データが共有される頻度および／または信頼性は、特定のデータの性質に基づく可能性がある。一般に、データを共有することを欲するプログラムは、これらの課題を何らかの方法で管理するように組み立てられる必要がある。多くの場合、使用されるメカニズムは、再使用可能ではなく、各プログラムに対して調整される必要がある。
【００１３】
[0016]本明細書で説明される主題は、データオブジェクトがマシンにわたって共有されうる一般的メカニズムを提供する。本明細書で提供されるメカニズムは、オブジェクトがローカルオブジェクトである場合とほぼ同じ方式で、プログラムが、共有オブジェクトを作成することおよび／またはそのオブジェクトに対してプロパティーを設定することを可能にする。次いで、プログラム自体から独立している共有メカニズムは、そのオブジェクトが他のプログラムおよび／またはマシンといかにして共有されるべきかのメカニズムを管理する。反対に、それらのメカニズムはまた、プログラムがそれらのオブジェクトを使用および／または変更することができるように、他のプログラムおよび／またはマシンによって作成されたオブジェクトへのアクセスを、プログラムに提供することができる。このようにして、多くのプログラムおよび／またはマシンによって使用されうる共有オブジェクトモデルが作成される。
【００１４】
[0017]本明細書で説明されるメカニズムは、プログラムが作成するオブジェクトに対して、プログラムが種々のレベルの制御を実行することを可能にする。例えば、プログラムは、特定のオブジェクト（またはオブジェクトの特定のプロパティー）が共有可能であるか、またはローカルに保持されるべきであるか、を選択することができる。オブジェクトが共有される場合は、プログラムは、どのプログラムおよび／またはマシンがオブジェクトまたはプロパティーを使用することができ、どのプログラムおよび／またはマシンが使用することができないか、を指定することができる。プログラムはまた、どれだけ多くのプログラムおよび／またはマシンがオブジェクトまたはプロパティーを同時に操作することができるかを管理する、同時実行制御を指定することができる。（本明細書で説明されたメカニズムは、オブジェクト自体が共有可能であるかどうかとは独立に、オブジェクトのプロパティーの共有を制御するために使用されてよい。プロパティーに対するこのきめ細かい制御は、特定のプロパティーが共有されうるかどうかばかりでなく、どの同時実行および／またはアクセス制御がプロパティーに適用されるかにまで及ぶ。）
[0018]本明細書で提供されるメカニズムは、オブジェクトが純粋にローカルである場合とほぼ同じ方式で、プログラマーが共有オブジェクトを作成し、使用することを可能にすることができる。さらに、メカニズムの使用は、言語に依存するのではなく、オブジェクトモデルの使用をサポートする任意の言語で使用されうる。したがって、プログラムは、特定のプログラミング言語によって提供される普通の方法でオブジェクトを作成し、プロパティーを設定することができる。したがって、プログラムは、オブジェクトを共有オブジェクトとして登録するための命令を含むことができる。登録は、（プログラムが、特定のエンティティーによってオブジェクトの使用に対してアクセス制限を指定し、その場合に共有オブジェクトの使用が、使用が許容されるそれらのエンティティーに制限されることがない場合に）、オブジェクトを、作成者と同じ共有名前空間の中にある任意のエンティティーに対して利用可能なオブジェクトモデルの一部にする。
【００１５】
[0019]オブジェクトの共有は、サーバーによって管理されてよい。サーバーは、オブジェクト登録を受信して、オブジェクトモデルの実態を維持する。変更がオブジェクトに対してローカルに加えられると、変更は、サーバーに通信され、次いで、サーバーがオブジェクトモデルの実態をアップデートし、オブジェクトへのアクセスを共有する他のプログラムおよび／またはマシンに変更を通信することができる。オブジェクトの共有は、オブジェクトのコンテンツに依存しない方法で実行されてよく、それにより、どの型のデータがオブジェクト内に含まれているかの詳細にかかわらず、オブジェクトが共有されることが可能になる。
【００１６】
[0020]次に図を参照すると、図１は、オブジェクトの共有が発生することができる環境の一例を示す。示される例では、データオブジェクト１０２が、マシン１０４上で作成される。プロパティー１０６が、データオブジェクト１０２上に設定される。例えば、データオブジェクト１０２が車に関するデータを含むならば、プロパティー１０６は、車の作り、モデル、車齢、または色を含んでよい。１つのプロパティー１０６だけが図１に示されるが、データオブジェクトは、任意の数のプロパティーを有することができる。
【００１７】
[0021]データオブジェクト１０２は、例えば、マシン１０４上で実行するプログラムによって作成されてよい。データオブジェクトは、オブジェクトモデルをサポートする任意のプログラミング言語を使用して作成されてよく、オブジェクトモデルをサポートする任意のプログラミング環境が、本明細書で説明される技術を使用するために構成されてよい。本明細書の主題は、何らかの特定のプログラミング言語に限定されるものではない。したがって、一例では、プログラマーは、Ｊａｖａ（登録商標）またはＣ＃などの言語でプログラムを書き、そのプログラムの一部として、データオブジェクト１０２を作成しかつデータオブジェクト１０２に対してプロパティー１０６を設定するための命令を含める。オブジェクトを作成しかつプロパティーを設定するための命令は、事実上、適用できるプログラミング言語でローカルプロパティーを作成するために発行されるものと同じ命令であってよい。
【００１８】
[0022]データオブジェクト１０２が作成されるプログラムはまた、データオブジェクト１０２を共有オブジェクトとして登録するための命令を含んでよい。本明細書の主題は、オブジェクトが純粋にローカルに留まることを可能にするが、同様に、オブジェクトが共有されることを可能にする。したがって、プログラマーがオブジェクトを共有オブジェクトにすることを欲するならば、プログラマーは、オブジェクトを共有オブジェクトモデル１０８の一部として登録するための命令を発行することができる。オブジェクトの共有を実施するために、マシン１０４は、共有オブジェクトモデルの中へのオブジェクトの登録と、マシンにわたるオブジェクトの同期とをネゴシエートする共有オブジェクトランタイム１１０を有することができる。（図１は、マシン間で共有されるオブジェクトを示すが、本明細書で説明される技術は、同様に、同じマシン上の複数のプログラムがオブジェクトを共有することを可能にするために使用されてよいことに留意されたい。）したがって、登録命令は、オブジェクト１０２を共有オブジェクトモデル１０８の一部として登録するための適切なアクションを実行する、共有オブジェクトランタイム１１０によって処理される。プログラマーは、オブジェクトを種々の制御と共に登録することができる。そのような制御の例は、どのマシンおよび／またはプログラムが共有オブジェクト（または共有オブジェクトの特定のプロパティー）を使用することができるかを管理するアクセス制御と、どれだけ多くのマシンおよび／またはプログラムが、共有オブジェクト（または共有オブジェクトの特定のプロパティー）を同時にアップデートすることができるかを管理する同時実行制御とである。あるいは、オブジェクトは、そのような制御なしに登録されてよく、それにより、オブジェクトを、名前空間をマシン１０４と共有する任意のプログラムおよび／またはマシンにアクセス可能にする。（アクセス制御および同時実行制御は、以下に、より詳細に説明される。）
[0023]共有オブジェクトモデル１０８は、サーバー１１２によって管理されてよい。サーバー１１２は、いくつかのオブジェクトモデルを管理することができるが、簡単にするため、オブジェクトモデル１０８だけが図１に示される。サーバー１１２は、オブジェクトモデルの「実態」、すなわち、どのオブジェクトが現在存在するか、およびそれらのプロパティーは何であるかについての現在の情報を維持する。図１の例では、オブジェクトモデル１０８の実態は、オブジェクトモデル１０８が、複数のデータオブジェクト１１４を含むことを示す（ここで、データオブジェクト１１４のセットはデータオブジェクト１０２を含む）。加えて、プロパティーが、これらのデータオブジェクトのそれぞれに対して設定される（データオブジェクト１０２に対して設定されるプロパティー１０６など）。
【００１９】
[0024]異なるマシンおよび／またはプログラムが１つのオブジェクトへのアクセスを共有するために、マシンおよび／またはプログラムは共通の名前空間を共有する。すなわち、共有オブジェクトにアクセスするすべてのエンティティーに対して、同じ名前は同じオブジェクトに言及する。例えば、名前空間１１６は、名前１１８、１２０および１２２を含むことができる。マシン１２４、１２６および１２８が、マシン１０４上で作成されたオブジェクト１０２へのアクセスを共有するのであるならば、そのオブジェクトの名前（例えば、名前１１８）は、マシン１０４、１２４、１２６および１２８のすべてに対して同じ意味を有する。それゆえ、あるオブジェクトが名前「ＡＢＣＤＥ」を有するならば、この名前は、そのオブジェクトがマシン１０４、マシン１２４、その他からアクセスされているかどうかにかかわらず、同じ共有オブジェクトに言及する。
【００２０】
[0025]図１に示されるコンポーネントは、以下の方式で使用されてよい。マシン１０４上のプログラムは、オブジェクト１０２を作成し、プロパティー１０６を設定し、オブジェクト１０２を共有オブジェクトモデルの一部として登録する。プログラムはまた、オブジェクト１０２上および／またはプロパティー１０６上で同時実行および／またはアクセス制御を設定することができる。次いで、登録済みオブジェクトのコピーがサーバー１１２によって記憶される。オブジェクトについてサーバーコピーが伝えることと、オブジェクトについてローカルコピーが伝えることとの間の差が、サーバーコピーを支持することで解決されうるという意味で、サーバー１１２によって記憶されたコピーがオブジェクトの「実態」を表す。
【００２１】
[0026]次いで、サーバーは、オブジェクトの実態をマシン１０４以外のマシン、例えばマシン１２４乃至１２８、に伝達する。これらの他のマシンは、オブジェクトのローカルコピーを記憶することができる。オブジェクトに対する変更がいずれかのマシン上で（例えば、オブジェクト上の既存のプロパティーを変更すること、新しいプロパティーを設定すること、オブジェクトを削除すること、などによって）加えられると、そのマシン上の共有オブジェクトランタイムがサーバー１１２に通知する。（各マシンは、そのマシン上に発生するオブジェクトの変更をサーバー１１２に通知する、共有オブジェクトランタイム１１０の一バージョンを有してよい。サーバー１１２がそのマシンに、オブジェクトに対する状態の変更が他のマシン上で発生したことを通知すると、共有オブジェクトランタイム１１０は、同様に、そのマシン上のオブジェクトのローカルコピーを変更することができる。）次いで、サーバー１１２は、加えられた変更を反映するために、オブジェクトの実態を調整する。２つのマシンがオブジェクトに対する変更を同時に加える場合は、競合の解決ルールが、オブジェクトに対する矛盾する変更を解決するために使用されてよい。オブジェクトの実態がサーバー１１２によって確定されると、マシンは、オブジェクトの状態に対するアップデートを通知される。アクセス制御がオブジェクト上で設定されているならば、オブジェクトの現在の状態が、オブジェクトにアクセスすることを許可されたマシンにのみ提供される。アクセス制御がオブジェクト上で設定されていなければ、オブジェクトの現在の状態が、同じ名前空間の中のすべてのマシンに提供される。同様に、アクセス制御ルールが、オブジェクトに書き込むためのアクセス許可、オブジェクトを削除するためのアクセス許可、などを持たないクライアントからのアップデートを拒否するために使用されてよい。
【００２２】
[0027]オブジェクトの実態が変化したという通知をマシンが受信すると、各マシン上の共有オブジェクトランタイムは、オブジェクトの実態を反映するために、そのマシンのオブジェクトのローカルコピーをアップデートする。
【００２３】
[0028]共有オブジェクトは、ローカルオブジェクトとほぼ同じ方式で作成および／またはアクセスされてよい。オブジェクトサーバーおよび種々のマシンの共有オブジェクトランタイムは、マシンのオブジェクトのローカルコピーをモニターし、アップデートすることによってオブジェクトの共有および同期を管理する。それゆえ、ローカルコピーが他のマシンと共有および／または同期されない場合とほぼ同じ方式で、ローカルコピーがプログラムによってアクセスされうる。したがって、共有オブジェクトランタイムが、オブジェクトが変更されたことを確定し、オブジェクトが変更されているという事実の通知を共有オブジェクトサーバーに送信することができるにもかかわらず、プログラムは、共有オブジェクトランタイムによるこれらのアクションを考慮することなく、データを操作することを継続することができる。実際に、本明細書の主題によって組み立てられたシステムを使用することによって、プログラムが純粋にローカルデータを使用することができるほどの簡単さで、プログラムは共有データを使用することができる。
【００２４】
[0029]図２は、オブジェクトサーバー１１２の一例の詳細を示す。オブジェクトサーバー１１２は、種々の構成を取ることができるが、示される例では、オブジェクトサーバー１１２は、オブジェクトデータベース２０２、通信コンポーネント２０４、受信機２０６、通知部２０８および状態コンポーネント２１０を備える。
【００２５】
[0030]通信コンポーネント２０４は、オブジェクトサーバー１１２を種々のマシン１２４、１２６および１２８に接続する。例えば、通信コンポーネント２０４は、サーバー１１２がサーバー１１２の外の世界と通信することを可能にするハードウェアおよび／またはソフトウェア（例えば、ネットワークカードおよびそのドライバー）を備えることができる。サーバー１１２は、オブジェクト１１４に対する状態の変更の通知をマシン１２４乃至１２８に送信するために、通信コンポーネント２０４を使用する。加えて、サーバー１１２は、それらのマシン上で発生したオブジェクトに対する変化の通知をマシン１２４乃至１２８から受信するために、通信コンポーネント２０４を使用する。
【００２６】
[0031]オブジェクトに対する変化がマシン（例えば、マシン１２４）上に発生すると、そのマシン上の共有オブジェクトランタイムは、サーバー１１２への通知を生成する。その通知は通信コンポーネント２０４によって受信され、次いで、受信機２０６に渡される。受信機２０６は、変化の通知を状態コンポーネント２１０に提供する。状態コンポーネント２１０は、オブジェクト１１４の実態２１２を維持する。状態コンポーネント２１０は、オブジェクトの実態２１２が通知に基づいて変更されるべきかどうかを確定する。例えば、オブジェクトがマシン１２４上で（例えば、プロパティーをある値から別の値に変更することによって）変更され、サーバー１１２がその変更を通知されるならば、状態コンポーネント２１０は、そのオブジェクトの実態が変化したことを確定することができる。したがって、状態コンポーネント２１０は、オブジェクトデータベース２０２の中のオブジェクトに対して適切なアップデートを行うことによって、その変更をオブジェクトの実態に加える。状態コンポーネント２１０はまた、衝突を解決するためのルールを実施することができる。例えば、２つのマシンが同じオブジェクトを同時に変更しようと試みるならば、状態コンポーネント２１０は、どちらの変更が遂行されるべきかを確定することができる。あるいは、両方の変更が遂行されるべきであるならば、状態コンポーネント２１０は、いかにしてその２つの変更がオブジェクトの新しい実態を作成するために組み合わされるべきかを確定することができる。
【００２７】
[0032]加えて、状態コンポーネント２１０は、同時実行２１４および／またはアクセス制御２１６に関連する問題を管理することができる。同時実行２１４は、どれだけ多くのエンティティーが、一オブジェクト（または一オブジェクトの一プロパティー）に同時にアクセスできるかを確定する。アクセス制御２１６は、エンティティー（マシンまたはプログラム）が所与のオブジェクトまたは所与のオブジェクトのプロパティーにアクセスすることができる制限（もし存在するならば）を指定する。オブジェクトおよび／またはプロパティーに対する同時実行およびアクセス制御は、オブジェクトが共有オブジェクトとして登録される時点で指定されてよい。（一例では、オブジェクトおよび／またはプロパティーは、アクセス制御がそのオブジェクトに対して指定されないならば、デフォルトによって公開されてよい。）同時実行２１４は、時間制限によって指定されてよく、例えば、特定のエンティティーが、制限された時間の間だけ、あるオブジェクトへの単独書き込みアクセス（sole write access）を請求することができ、その時間が経過した後は単独アクセス制約（sole access constraint）が無効になることを、同時実行制御が指定することができる。
【００２８】
[0033]オブジェクトの実態が変化すると、通知部２０８は、オブジェクトへのアクセスを共有するマシンに送信される通知を生成することができる。通知部２０８は、そのようなメッセージを通信コンポーネント２０４を使用して送信することができる。例えば、状態コンポーネント２１０が、オブジェクトの実態２１２が変化したことを確定するならば、通知部２０８は、マシン１２４、１２６および１２８に通知を送出することができる。それらのマシンは、それらのマシンがアクセスを共有するオブジェクトのローカルコピー２１８、２２０および２２２のそれぞれを維持することができる。通知に応答して、マシンは、それに応じて、それらのローカルコピー２１８乃至２２２をアップデートすることができる。
【００２９】
[0034]図３は、マシンが共有データオブジェクトを作成し、使用することができるプロセスの一例を示す。図３の説明を参照する前に、本明細書に含まれる流れ図（図３および図４の両方）は、例として、図１および図２に示されるコンポーネントに関連して説明されるが、これらのプロセスは、任意のシステムにおいて遂行されてよく、図１および図２に示されるシナリオに限定されるものではないことに留意されたい。加えて、図３および図４の流れ図のそれぞれは、プロセスのステージが、ブロックを接続する線によって示される特定の順序で遂行される一例を示すが、これらの図に示される種々のステージは、任意の順序で、または任意の組合せもしくは下位の組合せで実行されてよい。
【００３０】
[0035]３０２で、データオブジェクトが指定される。データオブジェクトの指定は、プログラム内の命令の一部として実行されてよい。例えば、プログラマーがデータオブジェクトを作成し、そのオブジェクトに対してプロパティーを設定するメカニズムをプログラミング言語が提供するならば、そのデータオブジェクトは、そのメカニズムを使用して指定されてよい。使用されるメカニズムは、ローカルオブジェクトを指定するために使用されるメカニズムと同じであってよい。
【００３１】
[0036]３０４で、データオブジェクトが、オブジェクトモデルの一部として登録されてよい。例えば、オブジェクトを共有オブジェクトモデルの一部として登録するための命令をプログラマーが発行することを可能にするプログラミングインターフェースを提供することができる、上で説明したようなローカルな共有オブジェクトランタイムが存在してよい。そのような命令が、３０４で与えられてよい。
【００３２】
[0037]３０６で、同時実行制御が、オブジェクトに対して、またはオブジェクトのプロパティーに対して指定されてよい。同時実行制御は、例えば、一度に単一のエンティティーだけが所与のオブジェクト（またはオブジェクトの所与のプロパティー）に書き込むことができることを指定することができる。あるいは、より広い一般性において、同時実行制御は、どれだけ多くのエンティティーが所与の一オブジェクトに一度にアクセスすることができるかを指定することができる。３０８で、アクセス制御が、オブジェクトに対して、またはオブジェクトのプロパティーに対して指定されてよい。アクセス制御は、どのエンティティーがオブジェクトにアクセスすることができるか（またはできないか）を指定することができる。
【００３３】
[0038]３１０で、オブジェクトを操作する命令が、作成されてよい。オブジェクトの操作は、オブジェクトに対する任意の変更、例えば、オブジェクトを作成すること、オブジェクトを削除すること、オブジェクトに対するプロパティーを追加、削除または変更すること、他を含む。これらの命令は、オブジェクトを使用するプログラムが書かれるプログラミング言語を介して与えられてよい。一例では、命令は、ローカルオブジェクトを操作するために使用される命令と同じである。
【００３４】
[0039]図３で説明されるプロセスは、１つのマシンの上で実行されてよい。しかし、そのプロセスの一部として、３１２で、（図３のプロセスが実行されているマシンとは異なってよい）他のマシンが、オブジェクトにアクセスすることを許容されてよい。例えば、そのマシン上の共有オブジェクトランタイムが、オブジェクト（およびオブジェクトに対する任意の変更）が共有オブジェクトサーバーに送信されることをもたらすことができる。次いで、サーバーは、オブジェクトの実態を決めることができ、上で説明されたように、オブジェクトの実態に対する変更を、他のマシンに通知することができる。共有オブジェクトサーバーの使用は、共有オブジェクトの一実施である。しかし、ピアツーピアの実装形態もあり、それらの実装形態は、本明細書の主題によって包含される。
【００３５】
[0040]プログラムによって作成されたオブジェクトに他のマシンがアクセスすることを可能にする行為は、そのプログラムが共有命令のいずれかを実施する必要なしに発生しうることに留意されたい。上述の通り、マシンにわたるデータの共有は、一般に、変化に対してデータをモニターし、その変化を他のマシンに送信し、他のマシンから変化を受信するなどのメカニズムを伴う。しかし、これらのメカニズムは、共有オブジェクトランタイムによって実施されてよい。したがって、共有オブジェクトを作成するプログラムの視点から、プログラムは、オブジェクトを、それがローカルオブジェクトであるかのように処理することができ、プログラム自体は、オブジェクトを共有するためのメカニズムを実施する特定のコードを含まない。一例では、プログラムは、単に、オブジェクトを共有オブジェクトモデルの一部として登録するための命令を発行することによってオブジェクトを共有することができ、プログラムは、それ以外は、共有オブジェクトを、それがローカルオブジェクトであるかのように処理することができる。すなわち、プログラムは、（オブジェクトを共有オブジェクトとして登録するための初期命令以外は）オブジェクトの共有に関する命令を含むことなく、オブジェクトを共有できることを可能にする。加えて、オブジェクトのスキーマはクライアントにとって意味があるが、サーバーは、オブジェクトが含むデータに対して不可知であってよい。
【００３６】
[0041]図４は、オブジェクトの共有を容易にするために、共有オブジェクトサーバーによって遂行されうるアクションの例を示す。
[0042]４０２で、サーバーは、オブジェクトを登録する要求を受信する。この要求は、例えば、プロパティー１０６を有するデータオブジェクト１０２が作成されているマシン１０４から来ることができる。
【００３７】
[0043]４０４で、サーバーは、オブジェクトがマシン１０４上で操作されたことを確定することができる。例えば、マシン１０４上の共有オブジェクトランタイムが、そのマシン上のオブジェクトのローカルコピーをモニターすることができる。オブジェクトが何らかの方式で操作されると、共有オブジェクトランタイムは、オブジェクトが操作されたという通知をサーバーに送信することができる。この通知が、サーバーによって受信されうる。
【００３８】
[0044]通知がサーバーによって受信されると、サーバーは、サーバーが通知を受けたローカルで加えられた変更を反映するために、オブジェクトの実態をアップデートすることを確定することができる。このアップデートは４０６で発生することができる。ある時点でオブジェクトの共有使用がなされているマシンが、リッスン要求（listening request）をサーバーに送信することができ、リッスン要求は、特定のオブジェクトまたはオブジェクトのセットに対する変更をサーバーがそれらのマシンに通知することを、要求する。これらのリッスン要求は、４０８で受信される。（リッスン要求の受け取りは、４０８と４１０との間が発生することによって示されるが、オブジェクトに対する変更が通知されることの要求は、任意の時点で受信されてよく、図４に示されるシーケンスは、本明細書の主題を限定するものではない。オブジェクトの実態が確定されると、４１０で、オブジェクトの状態が変更されたことの通知が、オブジェクト１０２へのアクセスを共有する他のマシン（例えば、マシン１２４、１２６および１２８）に送信されてよい。次いで、これらのマシンは、それら自体のオブジェクトのローカルコピーをアップデートすることができる。アクセス制御がオブジェクト（またはオブジェクトのプロパティー）に対して存在するならば、オブジェクト（またはプロパティー）へのアクセスが許可されているそれらのマシンに通知が送られてよい。
【００３９】
[0045]図５は、本明細書で説明される主題の態様が配備されうる環境の一例を示す。
[0046]コンピューター５００は、１つまたは複数のプロセッサー５０２および１つまたは複数のデータ記憶コンポーネント５０４を含む。プロセッサー（複数可）５０２は、通常は、個人向けのデスクトップまたはラップトップコンピューターに見られるようなマイクロプロセッサー、サーバー、ハンドヘルドコンピューター、または別の種類のコンピューティングデバイスである。データ記憶コンポーネント（複数可）５０４は、短期間または長期間のいずれかに対してデータを記憶することができるコンポーネントである。データ記憶コンポーネント（複数可）５０４の例は、ハードディスク、リムーバブルディスク（光ディスクおよび磁気ディスクを含む）、揮発性および不揮発性のランダムアクセスメモリー（ＲＡＭ）、リードオンリーメモリー（ＲＯＭ）、フラッシュメモリー、磁気テープ、他を含む。データ記憶コンポーネント（複数可）は、コンピューター読み取り可能な記憶媒体の例である。コンピューター５００は、陰極線管（ＣＲＴ）モニター、液晶ディスプレイ（ＬＣＤ）モニター、もしくは任意の他の種類のモニターであってよいディスプレイ５１２を備えるかまたは付随することができる。
【００４０】
[0047]ソフトウェアは、データ記憶コンポーネント（複数可）５０４内に記憶されてよく、１つまたは複数のプロセッサー（複数可）５０２上で実行されてよい。そのようなソフトウェアの一例は、図１乃至図４に関連して上で説明された機能性のいくつかまたはすべてを実施することができる、オブジェクト共有ソフトウェア５０６であるが、任意の種類のソフトウェアが使用されてよい。ソフトウェア５０６は、例えば、分散システム、独立したファイル、独立した機能、独立したオブジェクト、独立したコード行、他の中のコンポーネントであってよい、１つまたは複数のコンポーネントを介して実施されてよい。プログラムがハードディスク上に記憶され、ＲＡＭにロードされ、コンピューターのプロセッサー（複数可）上で実行されるコンピューター（例えば、パーソナルコンピューター、サーバーコンピューター、ハンドヘルドコンピューター、他）が、図５に描かれるシナリオを象徴するが、本明細書で説明される主題は、この例に制限されるものではない。
【００４１】
[0048]本明細書で説明される主題は、１つまたは複数のデータ記憶コンポーネント（複数可）５０４内に記憶され、１つまたは複数のプロセッサー（複数可）５０２上で実行されるソフトウェアとして実施されてよい。別の例として、主題は、１つまたは複数のコンピューター読み取り可能な記憶媒体上に記憶される命令として実施されてよい。光ディスクまたは磁気ディスクなど、有形媒体が、記憶媒体の例である。命令は、持続媒体上に存在することができる。そのような命令は、コンピューターまたは他のマシンによって実行されると、コンピューターまたは他のマシンに、方法の１つまたは複数の行為を実行させることができる。行為を実行するための命令は、１つの媒体上に記憶されてよく、または、命令のすべてが偶然に同じ媒体上に存在するかどうかにかかわらず、その命令が１つまたは複数のコンピューター読み取り可能な記憶媒体上にトータルで出現するように、複数の媒体にわたって展開されてよい。
【００４２】
[0049]加えて、本明細書で説明される任意の行為（図に示されるか否かは問わず）は、方法の一部としてプロセッサー（例えば、１つまたは複数のプロセッサー５０２）によって実行されてよい。したがって、Ａ、ＢおよびＣの行為が本明細書で説明されるならば、Ａ、ＢおよびＣの行為を含む方法が実行されてよい。さらに、Ａ、ＢおよびＣの行為が本明細書で説明されるならば、Ａ、ＢおよびＣの行為を実行するためのプロセッサーを使用するステップを含む方法が実行されてよい。
【００４３】
[0050]環境の一例では、コンピューター５００は、ネットワーク５０８を介して１つまたは複数の他のデバイスと通信可能に接続されてよい。構造がコンピューター５００に類似するコンピューター５１０が、コンピューター５００に接続されうるデバイスの一例であるが、他の種類のデバイスもまた、そのように接続されてよい。
【００４４】
[0051]主題が、構造特性および／または方法論的行為に特有の言語において説明されたが、添付の特許請求の範囲において定義される主題は、上で説明された特定の特性または行為に必ずしも限定されないことを理解されたい。そうではなく、上で説明された特定の特徴および行為は、特許請求の範囲の実施の例示的形態として開示されるものである。
【図１】
2013526750.tif 000003
【図２】
2013526750.tif 000004
【図３】
2013526750.tif 000005
【図４】
2013526750.tif 000006
【図５】
2013526750.tif 000007
【国際調査報告】
2013526750.tif 000008
2013526750.tif 000009