(57)【要約】【課題】  断続的接続によって接続されたアプリケーション・インスタンス間においてイベントを配信するための装置、システム、及び方法を提供する。【解決手段】  アプリケーション・インスタンスには、インターフェースに従って互いに及びそれぞれのアプリケーション・インスタンスと通信するブローカが提供される。アプリケーション・インスタンスは、ブローカにイベントを提供し、ブローカはイベントをシステムにおける他のブローカに転送する。特定のブローカに届かない場合は、ブローカは、ローカル・データ・ストアにおいてイベントをキューに入れ、接続を監視し、接続が再確立されるとそれらを送信する。同様に、ブローカは、接続が非アクティブであった間に通信することができなかった遠隔ブローカと関連するアプリケーション・インスタンスによって生成されたイベントを受信する。その結果、システムのユーザには、所与の時間におけるシステムの所与の接続状態を利用可能な、アプリケーション全体の最良で最も完全な状態が提供される。【選択図】      図１
2011076603.tif 000002
【特許請求の範囲】
【請求項１】
断続的接続によってブローカと接続されているアプリケーション・インスタンスにイベントを配信するブローカのためのコンピュータ実装方法であって、
永続的接続によって前記ブローカに接続された第１のアプリケーション・インスタンスからイベントを受信することと、
前記第１のアプリケーション・インスタンスから受信された前記イベントをローカルにキューに入れることと、
前記ブローカと第２のアプリケーション・インスタンスとの間の前記断続的接続の接続状態をチェックすることと、
前記ブローカと前記第２のアプリケーション・インスタンスとの間の前記接続状態がアクティブであることに応答して、前記ローカルにキューに入れられたイベントを前記断続的接続によって前記第２のアプリケーション・インスタンスに送信することと、
を含む方法。
【請求項２】
前記ブローカと前記第２のアプリケーション・インスタンスとの間の前記接続状態がアクティブであることに応答して、前記第２のアプリケーション・インスタンスによって生成された遠隔的にキューに入れられたイベントを前記断続的接続によって受信することをさらに含む、請求項１に記載の方法。
【請求項３】
前記遠隔的にキューに入れられたイベントを前記第１のアプリケーション・インスタンスに送信することをさらに含む、請求項２に記載の方法。
【請求項４】
前記第１のアプリケーション・インスタンスからの前記イベントを、アクティブな断続的接続によって前記ブローカに接続された第３のアプリケーション・インスタンスに配信することをさらに含む、請求項１に記載の方法。
【請求項５】
前記ローカルにキューに入れられたイベントは、前記第２のアプリケーション・インスタンスと永続的に接続されている遠隔ブローカを通じて前記第２のアプリケーション・インスタンスに送信され、前記遠隔的にキューに入れられたイベントは、前記遠隔ブローカを通じて前記第２のアプリケーション・インスタンスから受信される、請求項１に記載の方法。
【請求項６】
前記ローカルにキューに入れられたイベント及び前記遠隔的にキューに入れられたイベントを交換する１つ又は複数の遠隔ブローカの配信リストを保持することをさらに含む、請求項５に記載の方法。
【請求項７】
イベントを前記第２のアプリケーション・インスタンスに配信することは、前記ローカルにキューに入れられたイベントを前記遠隔ブローカに送信し、前記遠隔ブローカが前記ローカルにキューに入れられたイベントを前記第２のアプリケーション・インスタンスに配信することを含む、請求項５に記載の方法。
【請求項８】
前記ブローカがイベント・インターフェースを前記第１のアプリケーション・インスタンスに提供することをさらに含み、前記受信されたイベントは、前記イベント・インターフェースに従って、前記第１のアプリケーション・インスタンスによって前記ブローカに提出される、請求項１に記載の方法。
【請求項９】
前記イベント・インターフェースに従って、前記遠隔的にキューに入れられたイベントを前記第１のアプリケーション・インスタンスに送信することをさらに含む、請求項８に記載の方法。
【請求項１０】
断続的接続によってブローカと接続されているアプリケーション・インスタンスにイベントを配信するブローカであって、
永続的接続によって前記ブローカに接続された第１のアプリケーション・インスタンスからイベントを受信するためのイベント・モジュールと、
前記第１のアプリケーション・インスタンスから受信された前記イベントをローカルにキューに入れるためのキュー・モジュールと、
前記ブローカと第２のアプリケーション・インスタンスとの間の前記断続的接続の接続状態をチェックするための接続モジュールと、
前記ブローカと前記第２のアプリケーション・インスタンスとの間の前記接続状態がアクティブであることに応答して、前記ローカルにキューに入れられたイベントを前記断続的接続によって前記第２のアプリケーション・インスタンスに送信するための送信モジュールと、
を含むブローカ。
【請求項１１】
前記ブローカと前記第２のアプリケーション・インスタンスとの間の前記接続状態がアクティブであることに応答して、前記第２のアプリケーション・インスタンスによって生成された遠隔的にキューに入れられたイベントを前記断続的接続によって受信するための受信モジュールをさらに含む、請求項１０に記載のブローカ。
【請求項１２】
前記第１のアプリケーション・インスタンスにイベント・インターフェースを提供するインターフェース・モジュールをさらに含み、前記イベント・モジュールは、前記イベント・インターフェースに従って提出されたイベントを前記第１のアプリケーション・インスタンスから受信する、請求項１０に記載のブローカ。
【請求項１３】
前記イベント・インターフェースに従って、前記遠隔的にキューに入れられたイベントを前記第１のアプリケーション・インスタンスに送信する転送モジュールをさらに含む、請求項１０に記載のブローカ。
【請求項１４】
断続的接続によって１つ又は複数のブローカと接続されているアプリケーション・インスタンスにイベントを配信するシステムであって、
第１の永続的接続によって第１のアプリケーション・インスタンスに接続された第１のブローカであって、
前記第１のアプリケーション・インスタンスからイベントを受信するためのイベント・モジュールと、
前記第１のアプリケーション・インスタンスから受信された前記イベントをローカルにキューに入れるためのキュー・モジュールと、
前記第１のブローカと第２のブローカとの間の断続的接続の接続状態をチェックするための接続モジュールと、
前記第１のブローカと前記第２のブローカとの間の前記接続状態がアクティブであることに応答して、前記ローカルにキューに入れられたイベントを前記断続的接続によって前記第２のブローカに送信するための送信モジュールと、
前記第１のブローカと前記第２のブローカとの間の前記接続状態がアクティブであることに応答して、遠隔的にキューに入れられたイベントを前記断続的接続によって前記第２のブローカから受信するための受信モジュールと、
を含む第１のブローカと、
前記第１のブローカと前記第２のブローカとを接続する前記断続的接続と、
第２の永続的接続によって第２のアプリケーション・インスタンスに接続された第２のブローカであって、
前記第２のアプリケーション・インスタンスからイベントを受信するためのイベント・モジュールと、
前記第２のアプリケーション・インスタンスから受信された前記イベントをローカルにキューに入れるためのキュー・モジュールと、
前記第１のブローカと前記第２のブローカとの間の断続的接続の接続状態をチェックするための接続モジュールと、
前記第１のブローカと前記第２のブローカとの間の前記接続状態がアクティブであることに応答して、前記ローカルにキューに入れられたイベントを前記断続的接続によって前記第１のブローカに送信するための送信モジュールと、
前記第１のブローカと前記第２のブローカとの間の前記接続状態がアクティブであることに応答して、遠隔的にキューに入れられたイベントを前記断続的接続によって前記第１のブローカから受信するための受信モジュールと、
を含む第２のブローカと、
を含むシステム。
【請求項１５】
前記断続的接続によって前記第１のブローカ及び前記第２のブローカと通信する１つ又は複数の付加的なブローカをさらに含む、請求項１４に記載のシステム。
【請求項１６】
前記システムにおける各々のブローカは、イベントが交換される他のブローカの配信リストを保持する、請求項１５に記載のシステム。
【請求項１７】
１つ又は複数のブローカに接続されたハブ・ブローカをさらに含み、各々のブローカは、遠隔的にキューに入れられたイベントを前記ハブ・ブローカを通じて他のブローカから受信し、各々のブローカは、ローカルにキューに入れられたイベントを前記ハブ・ブローカを通じて送信する、請求項１４に記載のシステム。
【請求項１８】
前記システムにおける各々のブローカは、前記イベント・インターフェースに従って、前記遠隔的にキューに入れられたイベントを前記第１のアプリケーション・インスタンスに送信する転送モジュールをさらに含む、請求項１４に記載のシステム。
【請求項１９】
前記システムにおける各々のブローカは、前記第１のアプリケーション・インスタンスから受信された前記イベントを、前記ブローカにローカルに付属するデータ・ストアに格納するためのストレージ・モジュールをさらに含む、請求項１４に記載のシステム。
【請求項２０】
永続的接続によってブローカに接続されたアプリケーション・インスタンスによって生成されたイベントを、移動体接続によって前記ブローカに接続された遠隔ブローカを用いて配信するブローカのための命令を含む、コンピュータ・プログラムであって、前記命令は、
前記ブローカが、前記永続的接続によって前記ブローカに接続された前記第１のアプリケーション・インスタンスからイベントを受信することと、
前記ブローカが、前記第１のアプリケーション・インスタンスから受信された、前記移動体接続による前記遠隔ブローカへの伝送が成功しなかったイベントを、ローカルにキューに入れることと、
前記ブローカが、前記ブローカと前記遠隔ブローカとの間の前記移動体接続の接続状態を所定のインターバルでチェックすることと、
前記ブローカが、前記ブローカと前記遠隔ブローカとの間の前記接続状態がアクティブであることに応答して、以前に前記移動体接続によって伝送が成功しなかったローカルにキューに入れられたイベントを前記遠隔ブローカに送信することと、
前記ブローカが、前記ブローカと前記遠隔ブローカとの間の前記接続状態がアクティブであることに応答して、前記ブローカが以前に前記移動体接続によって受信を成功しなかった遠隔的にキューに入れられたイベントを前記遠隔ブローカから受信することと、
を含む、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、断続的接続によって接続された複数ソースからのリアル・タイム・データを必要とするアプリケーションの性能を改善することに関する。
【背景技術】
【０００２】
ますます接続度を高める世界において、多くのアプリケーションがインターネット接続を利用して動作している。電子メールなどの特定のアプリケーションは、その性質上、接続が断続的な場合であっても良好に動作することができる。例えば、ユーザが電子メールを作成し、送信するとする。電子メールは同期的に又は瞬間的に動作するように設定されていないので、その瞬間に電子メール・クライアントがインターネットに接続できなければ、電子メール・クライアントは後で接続が確立されるまで待ち、その後、電子メールを送信すると同時に、ユーザへの電子メールを受信することができる。従って、ネットワークが断続的に利用可能な場合であっても、特定のアプリケーションは、接続がアクティブであるときに機会に合わせてデータを転送することによって、良好に作動することができる。
【０００３】
しかしながら、他のアプリケーションは、良好に機能するために継続的接続を必要とする。例えば、インスタント・メッセージ・プログラム（ＩＭ）は、複数ユーザがテキスト・ベースのメッセージをリアル・タイムで共有することを可能にする。ユーザ間の接続が失われた場合、ＩＭプログラムを使うことは困難である。そして、接続がユーザのサブセット間のみで失われた場合（例えば、ユーザＡとユーザＢは引き続き接続されており、ユーザＣとユーザＤは引き続き接続されているが、この２つのグループの間の接続が失われた場合）、どちらのサブセットも他のサブセットで何が起きているかを知ることはできない。一旦接続が回復されると、会話の状態を同期することは困難である。
【０００４】
断続的接続は、ますます一般的になりつつある。例えば、電話及びネットブックといったモバイル・デバイスの数が増すにつれて、ユーザが他者との接続に入り込んだり、他者との接続から出て行ったりする可能性も増す。別の例においては、海上の船舶がローカル・ネットワークを実装して、他の船舶が通信範囲内にあるときに接続できる場合がある。しかしながら、船舶は、互いの通信範囲内に進入することもあればそこから出て行くこともあり得る。
【０００５】
ＩＭの会話ストリームは貴重なリソースとなり得るので、そのストリームを将来の用途のために保持し保存することは有用であろう。さらに、ユーザのサブセットが、接続が失われていた間に他のサブセット間で何が論じられたのかについての更新を受け取ることができるようにすることは有益であろう。オンライン・ミーティング及びスクリーン共有といった他のアプリケーションは、同様に、接続が修復されたときにログを作成する能力又はユーザを更新する能力によって利益を得ることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
以上の議論から、接続が断続的である場合に高度に分散された同期的協働システムを配置することを可能にする装置、システム、及び方法に対する必要性が存在することは明らかである。
【課題を解決するための手段】
【０００７】
本発明は、当該技術分野の現在の状態に対応して開発されたものであり、特に、現在利用可能なシステムによって未だ完全には解決されていない当該技術分野における問題及び必要性に対応して開発されたものである。従って、本発明は、断続的接続によってブローカと接続されているアプリケーション・インスタンスにイベントを配信するための装置、システム、及び方法を提供するように開発された。
【０００８】
一実施形態においては、本発明は、断続的接続によってそのブローカと接続されているアプリケーション・インスタンスにイベントを配信するブローカのためのコンピュータ実装方法として実現される。本方法は、ブローカが、そのブローカに永続的接続によって接続された第１のアプリケーション・インスタンスからイベントを受信し、そのイベントをローカルにキューに入れることを含むことができる。次いで、ブローカは、そのブローカと第２のアプリケーション・インスタンスとの間の断続的接続の接続状態をチェックし、断続的接続がアクティブになったときに、ローカルにキューに入れられたイベントを断続的接続によって第２のアプリケーション・インスタンスに送信することができる。同様にして、ブローカは、断続的接続がアクティブであるときに、第２のアプリケーション・インスタンスによって生成されて遠隔的にキューに入れられたイベントを第２のアプリケーション・インスタンスから受信することができる。第２のアプリケーション・インスタンスは、これらのイベントを、遠隔ブローカを通じて送信することができる。ブローカは、遠隔的にキューに入れられたイベントを、永続的接続によってそのブローカに接続された第１のアプリケーション・インスタンスに送信する。
【０００９】
特定の実施形態においては、特定の断続的接続は、他の断続的接続がアクティブでない間にアクティブになり得る。ブローカは、第１のアプリケーション・インスタンスからのイベントを、現在アクティブである断続的接続によって接続されたアプリケーション・インスタンスに配信する一方で、そのブローカと通信状態にないアプリケーション・インスタンス（例えば上述された第２のアプリケーション・インスタンス）のために、後の時点で送信されることになるイベントをローカルにキューに入れることができる。
【００１０】
ブローカは、特定の実施形態においては、ローカルにキューに入れられたイベント及び遠隔的にキューに入れられたイベントを交換するシステムにおいて遠隔ブローカの配信リストを保持することができる。そのような実施形態においては、ブローカは、ローカルにキューに入れられたイベントを関連する遠隔ブローカに送信することによって、そのイベントをアプリケーション・インスタンスに配信することができる。
【００１１】
特定の実施形態においては、ブローカは、永続的に接続されたアプリケーション・インスタンス及び他のブローカに、イベント・インターフェースを提供することができる。アプリケーション・インスタンス及び遠隔ブローカは、イベント・インターフェースに従ってブローカにイベントを提出し、ブローカからイベントを受信することができる。
【００１２】
特定の実施形態においては、ブローカのシステムは、システム内のブローカと通信してブローカからイベントを受信するハブ・ブローカを含むことができる。そのような実施形態においては、ハブ・ブローカは、システム内のブローカ間のイベントの交換を管理することができる。
【００１３】
本明細書の全体を通じて、特徴、利点、又は同様の用語への言及は、本発明を用いて実現することができる特徴及び利点の全てが本発明のいずれかの単一の実施形態に存在すべきであること、又は実際に存在していることを意味しない。寧ろ、特徴及び利点に言及する用語は、一実施形態に関して述べられた特定の特徴、利点、又は特性が、本発明の少なくとも１つの実施形態に含まれることを意味するものと理解される。従って、特徴及び利点、並びに同様の用語についての議論は、本明細書の全体を通じて、必ずというわけではないが同一の実施形態を指すことがある。
【００１４】
さらにまた、本発明の説明された特徴、利点、及び特性は、１つ又は複数の実施形態においていずれかの適切な手法で組み合わせることができる。当業者であれば、特定の実施形態の１つ又は複数の特定の特徴又は利点なしでも本発明を実施することができることを認識するであろう。他の例を挙げれば、本発明の全ての実施形態に存在するとは限らない付加的な特徴及び利点が、特定の実施形態において認識される場合がある。
【００１５】
本発明のこれらの特徴及び利点は、以下の説明及び添付の特許請求の範囲から一層完全に明らかとなるか、或いは本明細書で説明する本発明の実際により理解することができる。
【図面の簡単な説明】
【００１６】
【図１】別個のアプリケーション・インスタンス間でイベントを共有するためのシステム１００の一実施形態を示す概略的なブロック図である。
【図２】イベントの共有を容易にするブローカの一実施形態を示す概略的なブロック図である。
【図３】イベントを共有する複数のブローカを含むシステムの一実施形態を示す概略的なブロック図である。
【図４】ハブ・ブローカを用いてイベントを共有する複数のブローカを含むシステムの一実施形態を示す概略的なブロック図である。
【図５】別個のアプリケーション・インスタンス間でイベントを共有するための方法の一実施形態を示す概略的なフローチャート図である。
【発明を実施するための形態】
【００１７】
本発明の利点がより容易に理解されるように、上記で簡単に説明された本発明のより具体的な説明が、添付の図面において示される特定の実施形態の参照によって示される。これらの図面は本発明の典型的な実施形態のみを示し、従って、その範囲を限定するものと見なされるものではないと理解しつつ、本発明は添付の図面の使用を通じた付加的な具体性及び詳細と共に記載され、説明されることになる。
【００１８】
当業者には認識されるように、本発明の態様は、システム、方法、又はコンピュータ・プログラム製品として実体化することができる。従って、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロ・コードなどを含む）、又は、ソフトウェアの態様とハードウェアの態様を組み合わせた実施形態の形態を取ることができ、これらは全てここでは一般に「回路」、「モジュール」、又は「システム」と呼ぶことができる。さらにまた、本発明の態様は、コンピュータ可読プログラム・コードが組み込まれた（１つ又は複数のコンピュータ可読媒体に組み込んだ）コンピュータ・プログラム（製品）の形態を取ることができる。
【００１９】
本明細書において説明される機能ユニットの多くは、それらの実施の独立性を特に強調するために、モジュールと表記されている。例えば、モジュールは、カスタムＶＬＳＩ回路若しくはゲート・アレイを含むハードウェア回路、論理チップなどの既製の半導体、トランジスタ、又は他の別個のコンポーネントとして実装することができる。モジュールは、フィールド・プログラマブル・ゲート・アレイ、プログラマブル・アレイ論理、プログラマブル論理デバイスなどといったプログラム可能なハードウェア・デバイスとして実装することもできる。
【００２０】
モジュールはまた、種々の型のプロセッサにより実行するためのソフトウェア内に実装することができる。実行可能コードの識別されるモジュールは、例えば、オブジェクト、プロシージャ、又は関数として編成することができるコンピュータ命令の、例えば１つ又は複数の物理又は論理ブロックを含むことができる。しかし識別されるモジュールの実行ファイルは物理的に一カ所に配置する必要はなく、論理的に結合されたときにモジュールを含んでモジュールの規定の目的を達成する、異なる位置に格納された異なる命令を含むことができる。
【００２１】
実際には、実行可能コードのモジュールは、単一の命令又は多数の命令とすることができ、幾つかの異なるコード・セグメントにわたって、異なるプログラムの間で、及び、幾つかのメモリ・デバイス間にわたって、分散させることもできる。同様に、動作データは、本明細書においてはモジュール内部において特定して示すことがあり、いずれかの適切な形態で組み込み、いずれかの適切なタイプのデータ構造内で編成することができる。動作データは、単一のデータ・セットとしてまとめるか、又は、異なる記憶装置を含む異なる場所にわたって分散させることができ、システム又はネットワーク上の単なる電気信号として、少なくとも部分的に存在することができる。モジュール又はモジュールの一部がソフトウェアで実装される場合は、そのソフトウェア部分は、１つ又は複数のコンピュータ可読媒体に格納されることができる。
【００２２】
１つ又は複数のコンピュータ可読媒体の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、又は、コンピュータ可読ストレージ媒体とすることができる。コンピュータ可読ストレージ媒体は、例えば、電子、磁気、光学、電磁気、赤外線、又は半導体のシステム、装置、若しくはデバイス、又は上記のいずれかの適切な組み合わせとすることができるが、これらに限定されるものではない。
【００２３】
コンピュータ可読ストレージ媒体のより詳細な例（非網羅的なリスト）は、１つ又は複数の配線を有する電気的接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ又はフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光ストレージ・デバイス、磁気ストレージ・デバイス、又は上記のいずれかの適切な組み合わせを含む。本明細書の文脈では、コンピュータ可読ストレージ媒体とは、命令実行システム、装置、若しくはデバイスによって又はこれらと接続して用いるためのプログラムを含む又は格納することができる任意の有形の媒体とすることがある。
【００２４】
コンピュータ可読信号媒体は、例えば、ベースバンドにおいて又は搬送波の一部としてコンピュータ可読プログラム・コードが組み込まれた伝搬データ信号を含むことができる。このような伝搬信号は、電磁気信号、光信号、又はそのいずれかの適切な組み合わせを含むがこれらに限定されない種々の異なる形態のうちのいずれをも取ることができる。コンピュータ可読信号媒体は、命令実行システム、装置、若しくはデバイスによって又はこれらと共に用いるためのプログラムを通信し、伝搬し、又は搬送することができて、且つコンピュータ可読ストレージ媒体ではない、任意のコンピュータ可読媒体とすることができる。コンピュータ可読媒体上に組み込まれたプログラム・コードは、ワイヤレス、有線、光ファイバ・ケーブル、ＲＦなど又は上記のいずれかの適切な組み合わせを含むがこれらに限定されない、いずれかの適切な媒体を用いて伝送することができる。
【００２５】
本発明の態様に関する操作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、ＳｍａｌｌＴａｌｋ、Ｃ＋＋などのようなオブジェクト指向型プログラミング言語、及び、「Ｃ」プログラミング言語又は同様のプログラミング言語のような従来の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで書くことができる。プログラム・コードは、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアロン型のソフトウェア・パッケージとして、一部はユーザのコンピュータ上で且つ一部は遠隔コンピュータ上で、又は、完全に遠隔コンピュータ若しくはサーバ上で実行させることができる。後者の場合には、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域エリア・ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続することができ、又は、（例えば、インターネット・サービス・プロバイダを使い、インターネットを通じて）外部コンピュータへの接続を行うことができる。
【００２６】
本明細書の全体を通じて、「１つの実施形態」、「一実施形態」、又は同様の用語への言及は、その実施形態に関連して説明された特定の特徴、構造、又は特性が、本発明の少なくとも１つの実施形態に含まれていることを意味する。従って、「１つの実施形態においては」、「一実施形態においては」といった語句、又は同様の用語の出現は、本明細書の全体を通じて、必ずというわけではないが全て同一の実施形態を指すことがある。
【００２７】
さらに、本発明の説明される特徴、構造、又は特性は、１つ又は複数の実施形態においていずれかの適切な方法で組み合わせることができる。以下の説明においては、本発明の実施形態が完全に理解されるように、プログラミング、ソフトウェア・モジュール、ユーザ選択、ネットワーク・トランザクション、データベース照会、データベース構造、ハードウェア・モジュール、ハードウェア回路、ハードウェア・チップなどの例のような多数の特定の細部が提供される。しかしながら、当業者であれば、特定の細部の１つ又は複数を用いることなく、又は、他の方法、コンポーネント、材料などを用いて、本発明を実施できることが分かるであろう。他の場合には、本発明の態様を不明瞭なものにしないように、周知の構造、材料、又は動作は、詳細に示すことも説明することもない。
【００２８】
本発明の態様は、本発明の実施形態による方法、装置、システム、及びコンピュータ・プログラム（製品）の概略的なフローチャート図及び／又は概略的なブロック図を参照して以下で説明される。概略的なフローチャート図及び／又は概略的なブロック図の各ブロック、及び、概略的なフローチャート図及び／又は概略的なブロック図におけるブロックの組み合わせは、コンピュータ・プログラム命令によって実装することができることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置のプロセッサに提供してマシンを生成し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、概略的なフローチャート図及び／又は概略的なブロック図のブロック又は複数のブロックにおいて指定される機能／動作を実装するための手段を作り出すようにすることができる。
【００２９】
これらのコンピュータ・プログラム命令はまた、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイスが特定の仕方で機能するように指示することができるコンピュータ可読媒体に格納し、それにより、コンピュータ可読媒体に格納された命令が、概略的なフローチャート図及び／又は概略的なブロック図のブロック又は複数のブロックにおいて指定される機能／動作を実装する命令を含む製品を生成するようにすることができる。
【００３０】
また、コンピュータ・プログラム命令をコンピュータ、他のプログラム可能データ処理装置、又は他のデバイスにロードして、コンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で一連の動作ステップを実施させて、それにより、コンピュータ又は他のプログラム可能データ処理装置上で実行される命令が、フローチャート及び／又はブロック図のブロック又は複数のブロックにおいて指定された機能／動作を実装するためのプロセスを提供するようにコンピュータ実装されたプロセスを生成させることができる。
【００３１】
図面の中の概略的なフローチャート図及び／又は概略的なブロック図は、本発明の種々の実施形態による装置、システム、方法、及びコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、及び操作を例示する。この点に関して、概略的なフローチャート図及び／又は概略的なブロック図の中の各ブロックは、１つ又は複数の特定の論理機能を実装するための１つ又は複数の実行可能命令を含むコードのモジュール、セグメント、又は部分を表すことができる。
【００３２】
また、幾つかの代替的な実装では、ブロックの中に表記された機能は、図面に表記された順序通りに生じない場合があることに留意されたい。例えば、関与する機能によっては、連続して示された２つのブロックを、実際には、実質的に同時に実行することができ、又は、ブロックが逆の順序で実行される場合もある。図示される図面の１つ又は複数のブロック、又はその一部に対し、機能、論理、又は効果の点で等価な他のステップ及び方法を考えることができる。
【００３３】
フローチャート及び／又はブロック図においては種々の矢印タイプ及び線種が使用されることがあるが、これらは対応する実施形態の範囲を限定するものではないと理解される。実際に、幾つかの矢印又は他のコネクタが、図示される実施形態の論理フローのみを示すために用いられることがある。例えば、矢印は、示される実施形態の列挙されたステップ間の不特定の持続時間にわたる待ち時間又は監視時間を示すことがある。また、ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図におけるブロックの組み合わせは、指定された機能又は動作を実施する専用ハードウェア・ベースのシステムによって、又は、専用ハードウェアとコンピュータ命令の組み合わせによって、実装できることに留意されたい。
【００３４】
図１は、断続的接続によってブローカ１１０及び１３０と接続されているアプリケーション・インスタンス１２０及び１４０にイベントを配信するためのシステム１００の一実施形態を示す。図示された実施形態においては、システム１００は、１つのアプリケーション・インスタンス１２０及び対応するブローカ１１０と、別のアプリケーション・インスタンス１４０及びブローカ１３０とを含む。２つのブローカを区別するために、ブローカ１１０は第１ブローカ、ブローカ１３０は第２ブローカと呼ばれる場合がある。同様に、アプリケーション・インスタンス１２０とアプリケーション・インスタンス１４０とが区別される場合がある。しかしながら、システム１００は、いずれかの特定の数のブローカ又はアプリケーション・インスタンスに限定されるものではなく、特定の実施形態においては、システム１００は多数のブローカ及びアプリケーション・インスタンスを含むことができる。
【００３５】
アプリケーション・インスタンス１２０は、ユーザ１１４ａ−ｃ及びアプリケーション・サーバ１１２を含むものとして図示される。本明細書において用いられる用語としてのアプリケーション・インスタンスは、アプリケーション・インスタンス内のユーザが永続的接続を通じて常に利用可能な１つ又は複数の同期したアプリケーション環境を指す。アプリケーション・インスタンスは、単一の場所又は単一のモバイル・ユニットに対応する。永続的接続とは、適切に機能しているときに、アプリケーション・インスタンス内のユーザとアプリケーション・サーバとの間に継続的な接続を提供する接続である。
【００３６】
例えば、ＩＭアプリケーション・インスタンス１２０は、アプリケーション・サーバ１１２として動作するサーバ・コンポーネントと、ユーザ１１４ａ−ｃの機能を果たすマシン上で動作するクライアント・コンポーネントと、を有することができる。アプリケーション・サーバ１１２は、ユーザ１１４ａ−ｃにとってローカルであり、理想的には、永続的接続を通じてユーザ１１４ａ−ｃが継続的に利用可能である。永続的接続は、例えば、有線接続又は無線接続とすることができる。従って、ユーザ１１４ａ−ｃは、アプリケーション・サーバ１１２と個々のマシン上の対応するクライアント・コンポーネントとを用いて、常に互いに連絡を取り合っている。例えば、ＩＭアプリケーション・インスタンス１２０において、アプリケーション・サーバ１１２は、リアルタイム・セッションを保持し、ユーザ１１４ａ−ｃからのポストを受け付け、ユーザ１１４ａ−ｃに更新を送信し、他のＩＭサーバ機能を実施することができる。アプリケーション・サーバ１１２はまた、ポスト、アップロード・ファイルなどといったアプリケーション・アーチファクトの永続的ストレージを提供するローカル・データ・ストアと対話することができる。
【００３７】
ブローカ１１０は、永続的接続を通じてアプリケーション・インスタンス１２０に接続している。ブローカ１１０は、ブローカ１１０が断続的接続によってアプリケーション・インスタンス１４０と通信できるようにするための必要なサービスを提供する。特定の実施形態においては、ブローカ１１０は、ブローカ１３０を通じてアプリケーション・インスタンス１４０と通信する。
【００３８】
ブローカ１１０はアプリケーション・インスタンス１２０から独立したものとして図示されるが、これら２つは同一のハードウェア上で動作することができる。他の実施形態においては、ブローカ１１０は、異なるハードウェア上で動作することができる。アプリケーション・インスタンス１２０とブローカ１１０とを別個に示しているのは、これら２つの間の論理的な区別を強調するためであり、物理的な分離又は区別を意味するものではない。
【００３９】
アプリケーション・インスタンス１２０及びアプリケーション・インスタンス１４０の内部で用いられ、アプリケーション・インスタンス１２０及び１４０をそれぞれブローカ１１０及び１３０に接続する永続的接続とは対照的に、ブローカ１１０は、断続的接続によってアプリケーション・インスタンス１４０と通信する。断続的接続は、通常の動作中にソース・デバイスと宛先デバイスとの間に接続を提供しなくなることがある接続である。例えば、移動体接続は、断続的接続である場合が多い。上記で述べたように、アプリケーション・インスタンス１２０とブローカ１１０とが一つの船舶に実装され、アプリケーション・インスタンス１４０とブローカ１３０とが別の船舶に実装されることがある。通常の航行中に、船舶が互いの通信範囲内に進入し、そこから出て行くときに、二つの船舶の間の断続的接続が得られ、失われることがある。
【００４０】
一実施形態においては、ブローカ１１０は、アプリケーション・インスタンス１２０によって生成されたイベントを受信する。この用途で用いられるときには、イベントは、アプリケーション・インスタンスによって生成されたトランザクションのカプセル化である。一実施形態においては、トランザクションの各々は、単なる最新状態ではなく発生した全てのトランザクションをイベントを用いて再生成することができるように、イベントを生成する。トランザクションは、スクリーンの変更、文書の変更、追加若しくは削除、新規のアクション（新規のＩＭメッセージなど）、又は他の事象などといった変更とすることができる。イベントはまた、新規のチャット・ルームを作成するイベント又は既存のチャット・ルームの属性を修正するイベントといった管理イベントとすることができる。管理イベントの配信によって、最終的に同期化された管理モデルとなることができる。イベントは、ＸＭＬインスタンス、サービス・データ・オブジェクト（ＳＤＯ）として実現することができ、又は、別のデータ構造を用いて実装することができる。
【００４１】
ブローカ１１０は、アプリケーション・インスタンス１２０から受信したイベントをローカルにキューに入れる。一実施形態においては、ブローカ１１０はローカル・データ・ストアにアクセスする。ブローカ１１０は、揮発性メモリ（ＲＡＭなど）、不揮発性メモリ、又はその両方において、イベントをキューに入れることができる。ここで用いられるときには、ローカルにキューに入れるという用語は、バス又はネットワーク接続などの永続的接続を通じて接続されたデバイスにおいてイベントをキューに入れることを指す。本出願は、ブローカ１１０をキュー・イベントとして説明するが、「キューに入れる」という用語は、ブローカ１１０をいずれかの特定のデータ構造を用いることに制限することを意図するものではない。本出願において用いられるキューという用語もまた、イベントがＦＩＦＯシーケンスの形で編成されることを必要とするものではない。どちらかと言えば、キューという用語は、一連のデータ待ち処理のより広い概念を含むことを意図するものである。したがって、リスト、キュー、テーブル、又は他のデータ構造を用いて、イベントをキューに入れることができる。
【００４２】
一実施形態においては、ブローカ１１０は、システム１００における他のブローカの各々（例えばブローカ１３０）と通信状態ではないときに、アプリケーション・インスタンス１２０によって生成されたイベントのみをキューに入れる。例えば、ブローカ１１０がシステム１００における各ブローカと通信状態にある場合には、ブローカ１１０は、イベントをキューに入れることなく単純にイベントを各ブローカに送信することができる。ブローカ１１０は、他のブローカの１つ又は複数とのコンタクトが途絶えたときにのみ、アプリケーション・インスタンス１２０によって生成されたイベントをキューに入れることができる。他の実施形態においては、ブローカ１１０は、断続的接続の接続状態に関わりなく、イベントをキューに入れる。
【００４３】
ブローカ１１０は、ブローカ１１０とアプリケーション・インスタンス１４０との間の断続的接続の接続状態をチェックする。一実施形態においては、ブローカ１１０は、ブローカ１１０とブローカ１３０との間の断続的接続の接続状態をチェックすることによってこれを行う。接続状態がアクティブであるときに、ブローカ１１０は、ローカルにキューに入れられたイベントを、断続的接続によってアプリケーション・インスタンス１４０に送信する。特定の実施形態においては、ブローカ１１０は、ブローカ１３０を通じてイベントを送信する。
【００４４】
一実施形態においては、ブローカ１３０との断続的接続がアクティブの場合には、ブローカ１１０は、直ちにイベントをブローカ１３０に送信する。ブローカ１３０との断続的接続が失われた場合には、ブローカ１１０は、断続的接続の切断中にどのイベントがブローカ１１０によって受信されていたかの追跡を開始することができる。次いで、ブローカ１１０は、断続的接続の監視を開始することができる。断続的接続が再確立されると、ブローカ１１０は、断続的接続の切断中にアプリケーション・サーバ１１２から受信したイベントを送信する。上述されたように、ブローカ１１０はまた、接続がアクティブである間にイベントの送信をリアル・タイムで開始することもできる。ブローカ１１０はまた、どのイベントをブローカ１３０に送信したかを記録し、そのイベントが確実に再送信されないようにする。複数ブローカが関わる実施形態においては、ブローカ１１０は、ブローカ１１０との間にアクティブな接続を有するブローカにリアル・タイムでイベントを送信し、ブローカ１１０に接続されていないブローカのためのイベントをキューに入れ、どのイベントを複数ブローカに送信したか、また送信しなかったかを追跡することができる。
【００４５】
ブローカ１１０はまた、遠隔ブローカ（例えば、ブローカ１３０）によってキューに入れられた要求を受信することができる。ブローカ１１０は、ブローカ１１０とブローカ１３０との間の接続状態がアクティブであるときに、これらの遠隔的にキューに入れられたイベントを受信することができる。ブローカ１３０は、上述の方法と同様に、アプリケーション・インスタンス１４０によって生成されたイベントをキューに入れ、これらのイベントをブローカ１１０に送信することができる。ブローカ１１０は、遠隔的にキューに入れられたイベントを受信し、それらをアプリケーション・インスタンス１２０に送信することができる。
【００４６】
特定の実施形態においては、イベントは、そのイベントを引き起こしたトランザクションについてのメタデータを含む。メタデータは、ブローカ１１０がイベントについてのコンテキストを判定できるようにするものであり、例えば、メタデータは、イベントが生成された時間を含むことができる。ブローカ１１０は、時間メタデータを用いて、アプリケーション・インスタンス１４０上で生じたイベントを、アプリケーション・インスタンス１２０上で生じたイベントにインターリーブすることができる。イベント・メタデータは、同様に、アプリケーション・インスタンス１４０が、それ自体のローカル環境において、イベントがローカル・ユーザ１３４ａ−ｃによって入力されたかのようにそのイベントを実現できるようにするのに必要な情報を含むことができる。
【００４７】
特定の実施形態においては、ブローカ１１０は、システム１００におけるブローカ（ブローカ１３０など）の配信リストを保持する。配信リストは、フラット・ファイルとして、データベース・テーブルとして、又は当該技術分野で公知の他のデータ構造として、実装することができる。配信リストは、システム１００におけるブローカの完全なリスト、及び、ブローカ１１０が他のブローカと通信できるようにするアドレスなどの情報を提供することができる。
【００４８】
特定の実施形態においては、ブローカ１１０は、第１のアプリケーション・インスタンス１２０にイベント・インターフェースを提供する。例えば、ブローカ１１０は、イベントがブローカ１１０に通信される方法を指定するアプリケーション・プログラミング・インターフェース（ＡＰＩ）を提供することができる。特定の実施形態においては、アプリケーション・インスタンス１２０がブローカ１１０にイベントを送信し、ブローカ１１０からイベントを受信することを可能にするプラグ・インが、アプリケーション・インスタンス１２０に設けられる。例えば、ＩＭアプリケーション・インスタンス１２０は、ユーザ１１４ａ−ｃのうちの一つによってテキストボックスに新規のエントリが入力されるごとにイベントを生成するプラグ・インを備えることができる。同様に、プラグ・インは、ＩＭアプリケーション・インスタンス１４０からイベントを受信し、イベントを適切にアンパックし、チャット記録の適切なポイントにテキスト・エントリを挿入することができる。プラグ・インは、アプリケーション・サーバ１１２にインストールされるようにしてもよい。
【００４９】
このように、ブローカ１１０は、ブローカ１１０に永続的に接続された１つ又は複数のアプリケーション・インスタンス１２０からイベントを受け入れることができる。アプリケーション・インスタンス（例えば、アプリケーション・インスタンス１２０）からイベントを受信する際に、ブローカ１１０は、接続されたブローカにイベントを直接配信するか、又は、後で送付するためにイベントをキューに入れることができる。後の送付を容易にするために、ブローカ１１０は、システムにおける種々のブローカのネットワーク利用可能性を継続的にチェックし、必要に応じて、キューに入れられたイベントを送付することができる。ブローカ１１０はまた、システムにおけるブローカからイベントを受信し、それらを適切なアプリケーション・インスタンス１２０に伝送することができる。
【００５０】
図２は、ブローカ１１０の一実施形態を示す。ブローカ１１０は、図示された実施形態においては、イベント・モジュール２０２、キュー・モジュール２０４、接続モジュール２０６、送信モジュール２０８、受信モジュール２１０、インターフェース・モジュール２１２、及び転送モジュール２１４を含むことができる。
【００５１】
一実施形態においては、イベント・モジュール２０２は、永続的接続によってブローカ１１０に接続されたアプリケーション・インスタンスからイベントを受信する。上記のように、アプリケーション・インスタンスは、アプリケーション・インスタンスがイベントをブローカ１１０に通信することを可能にするプラグ・インを持つように構成することができる。イベント・モジュール２０２はまた、特定のタイプのイベントのみをローカルのアプリケーション・インスタンスから受信するように構成することができる。一実施形態においては、プラグ・インは、どの種類のトランザクションがイベント・モジュール２０２に送信されるイベントを生成するかを定める。例えば、ＩＭアプリケーション・インスタンスにおいて、新規のチャット・ラインのみがイベントの生成を引き起こすようにＩＭアプリケーション・インスタンスを構成することができる。ローカルなＩＭアプリケーション・インスタンスの外観の変更といった他のトランザクションは、イベントを生成しないことがある。他の実施形態においては、幾つかのチャット・ルームのみを配信用（従ってイベント生成用）として指定することができ、一方、他のチャット・ルームは、ローカルとして判断され、ブローカ１１０に送信されるイベントを生成することはない。
【００５２】
キュー・モジュール２０４は、ブローカ１１０のために、アプリケーション・インスタンスから受信されたイベントをローカルにキューに入れる。キュー・モジュール２０４はまた、システムにおけるどのブローカがどのイベントを受信したかを追跡するように構成することができ、従って、キュー・モジュール２０４は、システムにおけるブローカの各々についてキューを保持し、どのブローカがどのイベントを受信したかを追跡することができる。キュー・モジュール２０４はまた、ブローカが、そのブローカに接続されたアプリケーション・インスタンスによって生成されたイベントの複製を確実に受信しないように構成することができる。
【００５３】
接続モジュール２０６は、ブローカ１１０と遠隔アプリケーション・インスタンスとの間の断続的接続の接続状態をチェックする。ここで用いられるときには、断続的接続は、接続がアクティブである期間と接続が非アクティブである期間とを有することになるとシステム設計者が了解しているデータ転送を可能にする通信接続である。例えば、断続的接続は、移動体接続によって通信する種々のデバイスが通常の動作の一部として互いの通信範囲内に出入りする場合がある移動体接続とすることができる。一実施形態においては、接続モジュール２０６は、ブローカ１１０とシステムにおける他のブローカとの間の断続的接続の接続状態を監視することによってこれを行う。特定の時間においては、断続的接続は、断続的接続によってイベントを転送することができるアクティブか、又は、イベントを転送できない非アクティブのどちらかとなり得る。接続モジュール２０６は、配信リストを用いて、どのブローカがシステム内にあるか、従ってどの断続的接続を監視するかを判定することができる。
【００５４】
接続モジュール２０６は、種々の技術を用いて、断続的接続がアクティブであるか非アクティブであるかを判定することができる。一実施形態においては、接続モジュール２０６は、遠隔ブローカにピングを送信し、その特定のブローカに届くかどうかを判定することができる。接続モジュール２０６が応答を受信するか否かに基づき、接続モジュール２０６は、断続的接続がアクティブであるか非アクティブであるかを判定することができる。当業者に公知のネットワーク状態を判定するための他の手法を用いることもできる。
【００５５】
接続モジュール２０６はまた、ブローカ１１０とシステムにおける他のブローカとの間の接続の保持に関与することができる。接続モジュール２０６はまた、ブローカ１１０とローカルに付属するアプリケーション・インスタンスとの間の接続の保持に関与することができる。接続モジュール２０６はまた、ブローカ１１０との種々の接続の健全性を監視することができる。
【００５６】
ブローカ１１０はまた、送信モジュール２０８を含むことができる。送信モジュール２０８は、ブローカ１１０と遠隔アプリケーション・インスタンスとの間の接続状態がアクティブになったときに、永続的に接続されたアプリケーション・インスタンスによって生成されブローカ１１０によってローカルにキューに入れられたイベントを、遠隔アプリケーション・インスタンスに送信する。送信モジュール２０８は、ブローカ１１０と関連するアプリケーション・インスタンスとの間の断続的接続がアクティブになると同時にイベントを送信することができる。
【００５７】
特定の実施形態においては、送信モジュール２０８は、イベントの一部としてメタデータを含むことができる。例えば、送信モジュール２０８は、アプリケーション・インスタンスの性質（即ち、ＩＭアプリケーション・インスタンスであること）を特定し、発信元であるブローカ１１０についての情報を提供し、イベントの性質に関する情報（即ち、そのイベントが何を表すか、及び、それをどのように取り扱うべきか）を提供することができる。
【００５８】
特定の実施形態においては、送信モジュール２０８はまた、特定のイベントに優先順位を割り当てることができる。従って、特定のイベントが他のイベントより前に転送される場合があり、送信モジュール２０８は、特定のイベントを他のイベントより前に処理するように、受信側エンティティ（例えば、遠隔ブローカ）に指示する命令を含むことができる。例えば、リアル・タイム更新に対応するイベント（例えば、新規のＩＭ投稿、又はスクリーン共有セッション）には、ファイル・アップロードのような寿命が長く重要性が低い操作に関連するイベントより高い優先順位を与えることができる。
【００５９】
特定の実施形態においては、送信モジュール２０８は、ローカルにキューに入れられたイベントを、全ての遠隔的に接続されたブローカに送信する。他の実施形態においては、送信モジュール２０８は、ローカルにキューに入れられたイベントの特定のセットを特定の遠隔ブローカに送信する。
【００６０】
遠隔アプリケーション・インスタンスのうちの少なくとも１つが、アクティブである断続的接続によって接続されていないことを、接続モジュール２０６が判定した場合には、キュー・モジュール２０４は、第１のアプリケーション・インスタンスから受信されたイベントをキューに入れることができる。他の実施形態においては、キュー・モジュール２０４は、断続的接続の状態に関わりなく、第１のアプリケーション・インスタンスから受信された全てのイベントをキューに入れる。そのような実施形態においては、送信モジュール２０８は、どの遠隔アプリケーション・インスタンスがどのイベントを受信したかを追跡し、アクティブな断続的接続が存在したときに遠隔アプリケーション・インスタンスによって受信されなかったイベントのみを送信することができる。
【００６１】
特定の実施形態においては、送信モジュール２０８は、断続的接続の状態に関する情報を接続モジュール２０６から受信する。送信モジュール２０８は、この状態情報を用いて、種々の遠隔アプリケーション・インスタンスについてのイベント履歴（即ち、どのイベントが送信され、どのイベントが送信されなかったか）を追跡することができる。特定の実施形態においては、遠隔アプリケーション・インスタンス（又は、それらが接続されたブローカ）は、イベントを受信したときに応答メッセージを生成する。そのような実施形態においては、送信モジュール２０８は、どの遠隔アプリケーション・インスタンスがどのイベントを受信したかを、応答メッセージに基づいて判定することができる。そのような実施形態は、送信されたイベントの受信が成功することを確実なものとし、送信モジュール２０８が、送信されたが遠隔アプリケーション・インスタンスによって受信されなかったイベントを再送信できるようにする。
【００６２】
ブローカ１１０はまた、受信モジュール２１０を含むことができる。受信モジュール２１０は、遠隔ブローカに接続された他のアプリケーション・インスタンスによって生成されたイベントを受信する。受信モジュール２１０は、断続的接続がアクティブであるときに、これらのイベントを遠隔ブローカから受信することができる。特定の実施形態においては、遠隔ブローカは、接続が非アクティブであった間に遠隔アプリケーション・インスタンスによってどのイベントが生成されたかを判定し、これらのイベントを遠隔的にキューに入れ、次いで、接続が再びアクティブになったときにそれらを受信モジュール２１０に送信する。断続的接続がアクティブである間は、受信モジュール２１０は、遠隔アプリケーション・インスタンスによって生成されるときにイベントを遠隔ブローカから受信することができ、キューに入れるプロセスは、断続的接続が非アクティブになり次第、遠隔ブローカにおいて再開する。
【００６３】
転送モジュール２１４は、受信モジュール２１０によって受信された遠隔的にキューに入れられたイベントを、ブローカ１１０に永続的に接続されたアプリケーション・インスタンスに送信する。アプリケーション・インスタンスは、上記で述べられたように、遠隔的にキューに入れられたイベントを受信し、それらをアンパックしてアプリケーション・インスタンス・データに適切に挿入するためのプラグ・イン・コンポーネントを含むことができる。
【００６４】
ブローカ１１０はまた、インターフェース・モジュール２１２を含むことができる。インターフェース・モジュール２１２は、ローカル・アプリケーション・インスタンスにイベント・インターフェースを提供することができる。イベント・モジュール２０２は、インターフェース・モジュール２１２によって確立されたインターフェースに従って、イベントをローカル・アプリケーション・インスタンスから受信することができる。受信モジュール２１０は、同様に、インターフェース・モジュール２１２によって確立されたインターフェースに従って、遠隔ブローカによって送信された遠隔的にキューに入れられたイベントを受信することができる。転送モジュール２１４もまた、インターフェース・モジュール２１２によって指定されたとおりに、遠隔的にキューに入れられたイベントをアプリケーション・インスタンスに送信することができる。一実施形態においては、インターフェース・モジュール２１２は、ブローカ１１０とシステムにおける遠隔ブローカとの間、並びに、ブローカ１１０とローカル・アプリケーション・インスタンスとの間においてイベント及び情報の共有を容易にするＡＰＩを提供する。
【００６５】
管理モジュール２１６は、システムのユーザに、ブローカ１１０の管理的態様へのアクセスを提供することができる。例えば、ユーザは、管理モジュール２１６を用いて、遠隔ブローカ及び断続的接続に関する情報、ブローカ１１０によってサポートされることになるアプリケーション・インスタンスについての情報、並びに他の管理機能を提供することができる。一実施形態においては、管理モジュール２１６は、様々な他のコンポーネントによる設定を管理することを可能にする遠隔制御インターフェースを提供する。
【００６６】
図３は、断続的接続によってブローカと接続されているアプリケーション・インスタンスにイベントを配信するためのシステム３００の一実施形態を示す。システム３００は、ブローカ１１０及び関連するアプリケーション・インスタンス１２０を含み、同様に、ブローカ３１０、３１４、及び３１８と、それらに関連するそれぞれのアプリケーション・インスタンス３１２、３１６、及び３２０とを含む。システム３００において、ブローカとそれぞれのアプリケーション・インスタンスとの間の永続的接続は、実線によって表される。ブローカ間の断続的接続は、破線によって表される。
【００６７】
一実施形態においては、システム３００におけるブローカは、各ブローカが利用可能な他の全てのブローカとの接続を保持する網目状ネットワークを形成する。他の実施形態においては、図４に示されるように、ブローカは、網目状ネットワークとして構成し、ハブ・ブローカにも接続させることができる。さらに他の実施形態においては、ブローカのサブセットが網目状ネットワークを形成し、各サブセットがハブ・ブローカに接続する。
【００６８】
システム３００におけるブローカは、システム３００におけるアプリケーション・インスタンス１２０によって生成されたイベントを共有することができる。例えば、ブローカ１１０は、アプリケーション・インスタンス１２０からイベントを受信するためのイベント・モジュール２０２と、アプリケーション・インスタンス１２０から受信されたイベントをローカルにキューに入れるためのキュー・モジュール２０４と、ブローカ１１０とシステム３００におけるブローカ３１０などの他のブローカとの間の断続的接続の接続状態をチェックするための接続モジュール２０６と、を含むことができる。ブローカ１１０の送信モジュール２０８は、ローカル・アプリケーション・インスタンス１２０によって生成されたローカルにキューに入れられたイベントを、特定の断続的接続の接続状態がアクティブであるときにブローカ１１０と他のブローカとの間の断続的接続によって送信することができる。同様に、受信モジュール２１０は、他のブローカから遠隔的にキューに入れられたイベントを、ブローカ１１０と他のブローカとの間の接続状態がアクティブであるときに断続的接続によって受信することができる。システム３００における他のブローカは、これらと同じ操作を実施するための同一のモジュールを有することができる。
【００６９】
システム３００におけるブローカの各々は、システムにおける他のブローカに関する接続情報を提供する配信リストを保持することができる。例えば、配信リストは、システムにおける各遠隔ブローカ（例えば、ブローカ１１０の配信リストは、システム３００にはブローカ３１４、３１０、及び３１８が存在することを示すものとすることができる）、ブローカについてのアドレス、及び、ブローカ間の断続的接続に関する情報を含むことができる。ブローカ間の通信接続を可能にする他の手法を用いることもできる。
【００７０】
例えば、ブローカ１１０とブローカ３１０との間の断続的接続は２０分間にわたって非アクティブであったが、ブローカ１１０とブローカ３１４及び３１８との間の断続的接続はアクティブであったとする。この２０分間のあいだに、ブローカ１１０は、アプリケーション・インスタンス１２０によって生成されたイベントを、ブローカ３１４及び３１８にリアル・タイムで送信することができる。即ち、断続的接続がアクティブであるため、ブローカ１１０は、過度の遅延なしにイベントをブローカ３１４及び３１８に送信することができる。従って、それぞれのアプリケーション・インスタンス３１６及び３２０は、イベントをリアル・タイムで受信する。
【００７１】
ブローカ１１０とブローカ３１０との間の断続的接続は非アクティブであったため、接続が非アクティブであった２０分間に、ブローカ１１０は、アプリケーション・インスタンス１２０によって生成されたイベントをブローカ３１４及び３１８に送信することに加えて、これらのイベントをローカルにキューに入れることができる。ブローカ１１０はまた、ブローカ１１０とブローカ３１０との間の断続的接続の接続状態を継続して監視することができる。ブローカ１１０とブローカ３１０との間の接続が再確立されると、ブローカ１１０は、２０分間にアプリケーション・インスタンス１２０のためにキューに入れたイベントをブローカ３１０に送信する。
【００７２】
ブローカ３１０もまた、２０分間にわたってブローカ１１０と通信できない状態にあったため、ブローカ３１０は、同様に、アプリケーション・インスタンス３１２のためにイベントをキューに入れておくことができる。接続が再確立されると、ブローカ３１０は、これらのキューに入れられたイベント（ブローカ１１０の視点からは、遠隔的にキューに入れられたイベント）を、ブローカ１１０に送信する。ブローカ１１０及び３１０は、次いで、これらの受信されたイベントを、それぞれのアプリケーション・インスタンス１２０及び３１２に送信することができ、アプリケーション・インスタンスはユーザに対してそれらを提示することができる。
【００７３】
一実施形態においては、１つのブローカ及び対応するアプリケーション・インスタンスは、船舶に実装される。他の実施形態においては、ブローカ及び対応するアプリケーション・インスタンスは、携帯電話又はラップトップなどのモバイル・デバイス上で実現することができる。ブローカ間の断続的接続は、ブローカ／アプリケーション・インスタンスの対をサポートする機器間の移動体接続を表すことができる。ブローカが互いに通信状態に出入りするとき、各ブローカは、ブローカの接続に基づき、所与の時間において利用可能な「最良の像（best possible picture）」を提示する。本来的に非同期的な環境における同期の改善を提供するために、システム３００は、可能な限り像を更新する。
【００７４】
図４は、ブローカ間でイベントを配信するためのシステム４００の一実施形態を示す。図４は、ブローカと、上述されたように永続的接続によって接続されたアプリケーション・インスタンスとを含む。図４はまた、ハブ・ブローカ４１０を含む。図４に示されるような特定の実施形態においては、ブローカは、ハブ・ブローカ４１０を通じて互いに（従って、システム４００におけるアプリケーション・インスタンスとも）通信する。
【００７５】
特定の実施形態においては、ハブ・ブローカは、システム４００におけるブローカの１つ又は複数と接続し、各ブローカは、ハブ・ブローカ４１０を通じて、システム４００における他のブローカからの遠隔的にキューに入れられたイベントを受信する。同様に、システム４００における各ブローカは、ハブ・ブローカ４１０を通じて、ローカルに付属するアプリケーション・インスタンスからローカルにキューに入れられたイベントをシステムにおける他のブローカに送信することができる。
【００７６】
ハブ・ブローカ４１０は、システムにおけるブローカ（例えば、ブローカ１１０、３１０、３１４、及び３１８）のみと通信し、どのアプリケーション・インスタンスとも直接通信しないように構成することができる。ハブ・ブローカ４１０は、適切にイベントを配信する機能を提供することができる。そのような実施形態においては、ブローカ１１０は、ブローカ１１０とハブ・ブローカ４１０との間の通信接続がアクティブであるときに、イベントをハブ・ブローカ４１０に送信することができる。接続が非アクティブであるときは、ブローカ１１０は、イベントをローカルにキューに入れ、接続の状態を監視することができる。断続的接続が再びアクティブになると、ブローカ１１０は、ローカルにキューに入れられたイベントをハブ・ブローカ４１０に送信し、遠隔的にキューに入れられたイベントをハブ・ブローカ４１０から受信する。
【００７７】
そのような実施形態においては、システム４００全体にわたってイベントの受信及び配信を管理するのに必要な論理及びストレージを用いて、ハブ・ブローカ４１０を構成することができる。ハブ・ブローカ４１０は、各ブローカが有するアプリケーション・インスタンスの「像」を追跡し、最良の像を提供するために各ブローカにどのイベントを送信する必要があるかを判定することに関与することができる。例えば、ハブ・ブローカ４１０は、ブローカから受信されたイベントをローカル・ストレージにおいてキューに入れること、ハブ・ブローカ４１０とシステム４００における各ブローカとの接続状態を監視すること、及び、ハブ・ブローカ４１０との断続的接続が非アクティブであった間に特定のブローカ４１０が受信しなかったイベントを編集して送信することに関与することができる。ハブ・ブローカ４１０はまた、配信リストを保持することができ、そのような実施形態においては、個々のブローカは、ハブ・ブローカのみと接続すればよいため、個々のブローカについての接続を簡略化することができ、システム４００の根本的な複雑性は隠される。
【００７８】
図５は、ブローカに接続されたアプリケーション・インスタンスによって生成されたイベントを配信するための方法５００の一実施形態を示す。一実施形態においては、方法は、永続的接続によってブローカに接続された第１のアプリケーション・インスタンスからブローカがイベントを受信すること５０２を含む。ブローカは、アプリケーション・インスタンスによって生成された、受信されたが伝送できないイベントを、ローカルにキューに入れる５０４。例えば、断続的接続が非アクティブであり、従ってブローカがイベントを遠隔ブローカに伝送するのに成功しない。
【００７９】
方法５００はまた、ブローカが断続的接続の接続状態をチェックすること５０６を含む。上記で述べられたように、断続的接続は移動体接続とすることができる。ブローカは、ブローカと遠隔ブローカとの間の断続的接続を所定のインターバルでチェックすることができる。
【００８０】
次いで、ブローカは、断続的接続がアクティブになったときに、ローカルにキューに入れられたイベントを遠隔ブローカに送信する５０８。特定の実施形態においては、以前に断続的接続によって伝送が成功しなかったローカルにキューに入れられたイベントのみが、断続的接続がアクティブになったときに送信される。同様に、ブローカは、そのブローカが以前に断続的接続によって受信が成功しなかった遠隔的にキューに入れられたイベントを、断続的接続がアクティブになったときに、遠隔ブローカから受信することができる５１０。遠隔的にキューに入れられたイベントは、上記で述べられたように、遠隔ブローカに永続的に接続されたアプリケーション・インスタンスによって生成されたものである。
【００８１】
本発明は、その主旨及び本質的な特徴から逸脱することなく、他の特定の形態で具体化することができる。記載された実施形態は、全ての点において、例示的であると見なされるものであり、限定的なものではない。従って、本発明の範囲は、上記の説明によってではなく特許請求の範囲によって示される。特許請求の範囲の均等物の意味及び範囲内にある全ての変更は、特許請求の範囲内に含まれるものである。
【図１】
2011076603.tif 000003
【図２】
2011076603.tif 000004
【図３】
2011076603.tif 000005
【図４】
2011076603.tif 000006
【図５】
2011076603.tif 000007