(57)【要約】【課題】サブキューを使用してローカルメッセージ処理を向上させるための方法、システム、およびコンピュータプログラム製品を提供すること。【解決手段】メッセージは、親部分とサフィックス部分とから成るキューＩＤを含む。親部分は、親キューを識別し、サフィックス部分は、親キューのサブキューを識別する。メッセージは、サフィックス値を変更することにより、例えば、サブキューの間、親キューとサブキューの間、サブキューと親キューの間など、キューの間で論理的に移動させられる。アプリケーション群は、メッセージを検査し、メッセージコンテンツ（メッセージ本文およびメッセージヘッダを含む）に基づき、指定されたサブキューにメッセージをルーティングすることが可能である。サフィックス値は、現位置で変更して（例えば、メッセージが、キューの中に物理的に格納されたままで）、メッセージ送信側ＩＤを保ち、配信の確認を尚早に行うのを回避する（すなわち、リターンＡＣＫが、全く生成されない）ようにすることが可能である。【選択図】図１Ａ
2006277725.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能なコンピュータシステムにおいて、該コンピュータシステムは、前記コンピュータシステムにおける１つまたは複数のメッセージキューを制御するキューマネージャを含み、キュー内に入れられたメッセージを効率的に分割する方法であって、
前記キューマネージャが、メッセージを送信側アプリケーションから受信する動作であって、前記メッセージは、受信側アプリケーションに配信するためのメッセージであり、受信キューを識別する親値を格納する親値部分を有するキュー識別子を含む動作と、
前記キューマネージャが、前記格納された親値に基づき、前記受信キューの中に前記メッセージを入れる動作と、
前記受信側アプリケーションが、前記キューに入れられたメッセージを検査する動作と、
前記受信キューのサブキューを識別するサブキューサフィックス値を割り当てる動作と、
前記キュー識別子の前記サフィックス値部分の中に前記サブキューサフィックス値を格納して、前記メッセージ検査に従って、前記メッセージを前記受信キューから、前記受信キューの前記識別されたサブキューに論理的に移すようにする動作と
を備えることを特徴とする方法。
【請求項２】
前記キューマネージャが、前記格納された親値に基づき、前記受信キューの中に前記メッセージを入れる前記動作は、前記受信キューを識別するＵＲＩを含む前記メッセージに基づき、前記受信キューの中に前記メッセージを入れる動作を備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記受信側アプリケーションが、前記キューに入れられたメッセージを検査する前記動作は、前記メッセージに構成可能なデータ規則を適用して、前記メッセージがどのように処理されるべきかを判定する動作を備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記受信キューのサブキューを識別するサブキューサフィックス値にアクセスする前記動作は、１つまたは複数の文字の文字列に割り当てる動作を備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記キュー識別子の前記サフィックス値部分の中に前記サブキューサフィックス値を格納する前記動作は、前記メッセージのコンテンツに基づき、前記メッセージをサブキューにルーティングする動作を備えることを特徴とする請求項１に記載の方法。
【請求項６】
前記キュー識別子の前記サフィックス値部分の中に前記サブキューサフィックス値を格納する前記動作は、前記サフィックス値を現位置で（ｉｎ  ｐｌａｃｅ）前記キュー識別子の中に格納して、リターン受信確認の生成を防止する動作を備えることを特徴とする請求項１に記載の方法。
【請求項７】
前記キュー識別子の前記サブキューサフィックス値部分を格納する前記動作は、前記サフィックス値を現位置で前記キュー識別子の中に格納して、前記送信側アプリケーションの前記ＩＤを保つ動作を備えることを特徴とする請求項１に記載の方法。
【請求項８】
１つまたは複数の他のコンピュータシステムとともにネットワークにネットワーク接続可能なコンピュータシステムにおいて、該コンピュータシステムは、前記コンピュータシステムにおける１つまたは複数のメッセージキューを制御するキューマネージャを含み、キューの間でメッセージを移動させるための方法であって、
第１のキューを識別する第１のハンドルを受け取る動作であって、前記第１のハンドルは、キューの親部分を識別する親値と、前記キューの第１の下位部分を識別する第１のサフィックス値とを含む動作と、
前記第１のキュー内のメッセージを、前記第１のハンドルを利用して探し出す動作であって、前記メッセージは、前記親値を格納する親値部分と、前記第１のサフィックス値を格納するサフィックス値部分とを有するキュー識別子を含む動作と、
前記探し出されたメッセージを受け取るべき第２のキューを識別する第２のハンドルを受け取る動作であって、前記第２のハンドルは、前記親値と、前記キューの第２の下位部分を識別する第２のサフィックス値とを含む動作と、
前記キュー識別子の前記サフィックス値部分の中に前記第２のサフィックス値を格納して、前記メッセージを前記第１のキューから前記第２のキューに論理的に移すようにする動作と
を備えることを特徴とする方法。
【請求項９】
前記第１のキューを識別する前記第１のハンドルを受け取る前記動作は、親キューを識別する第１のハンドルを受け取る動作を備えることを特徴とする請求項８に記載の方法。
【請求項１０】
前記親キューを識別する前記第１のハンドルを受け取る前記動作は、空のサフィックス値を有する第１のハンドルを受け取る動作を備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記第１のキューを識別する前記第１のハンドルを受け取る前記動作は、前記第１のキューのサブキューを識別する第１のハンドルを受け取る動作を備えることを特徴とする請求項８に記載の方法。
【請求項１２】
前記第１のハンドルを利用して、前記第１のキュー内のメッセージを探し出す前記動作は、前記第１のサフィックス値に等しいサフィックス値を有する、前記第１のキューの中に入れられたメッセージを識別する動作を備えることを特徴とする請求項８に記載の方法。
【請求項１３】
前記第２のキューを識別する前記第２のハンドルを受け取る前記動作は、親キューを識別する第２のハンドルを受け取る動作を備えることを特徴とする請求項８に記載の方法。
【請求項１４】
前記親キューを識別する前記第２のハンドルを受け取る前記動作は、空のサフィックス値を有する第２のハンドルを受け取る動作を備えることを特徴とする請求項１３に記載の方法。
【請求項１５】
前記第２のキューを識別する前記第２のハンドルを受け取る前記動作は、前記第１のキューのサブキューを識別する第１のハンドルを受け取る動作を備えることを特徴とする請求項８に記載の方法。
【請求項１６】
前記キュー識別子の前記サフィックス値部分の中に前記第２のサフィックス値を格納して、前記メッセージを前記第１のキューから前記第２のキューに論理的に移すようにする前記動作は、前記メッセージを前記第１のキューの１つのサブキューから、前記第１のキューの別のサブキューに論理的に移す動作を備えることを特徴とする請求項８に記載の方法。
【請求項１７】
前記キュー識別子の前記サフィックス値部分の中に前記第２のサフィックス値を格納して、前記メッセージを前記第１のキューから前記第２のキューに論理的に移すようにする前記動作は、前記メッセージを前記第１のキューのサブキューから、対応する親キューに論理的に移す動作を備えることを特徴とする請求項８に記載の方法。
【請求項１８】
前記キュー識別子の前記サフィックス値部分の中に前記第２のサフィックス値を格納して、前記メッセージを前記第１のキューから前記第２のキューに論理的に移すようにする前記動作は、前記メッセージを親キューから、前記第１のキューの対応するサブキューに論理的に移す動作を備えることを特徴とする請求項８に記載の方法。
【請求項１９】
電子メッセージを表すデータ構造を格納している１つまたは複数のコンピュータ読取り可能な記録媒体であって、前記データ構造は、
電子メッセージのコンテンツを表すコンテンツ値を格納するコンテンツフィールドと、
前記コンテンツフィールドの中で表される前記電子メッセージの前記コンテンツが入れられるべきキューを識別するキュー識別子値を格納するキュー識別子フィールドであって、前記キューの親部分を識別する親値を格納する親値フィールド、および、前記キューの下位部分を識別するサフィックス値を格納するサフィックス値フィールドを含む前記キュー識別子フィールドと
を備えることを特徴とする１つまたは複数のコンピュータ読取り可能な記録媒体。
【請求項２０】
前記キューの下位部分を識別するサフィックス値を格納するサフィックス値フィールドは、前記キューのサブキューを識別する１つまたは複数の文字の文字列を格納するサフィックスフィールドを含むことを特徴とする請求項１９に記載の１つまたは複数のコンピュータ読取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子メッセージングに関し、より詳細には、サブキューを使用してローカルメッセージ処理を向上させることに関する。
【背景技術】
【０００２】
コンピュータシステム、および関連する技術は、社会の多くの態様に影響を及ぼす。実際、コンピュータシステムが情報を処理する能力は、私たちが生活し、働く形を変容させた。コンピュータシステムは、現在、コンピュータシステムの登場以前には、手作業で行われていた多数のタスク（例えば、ワードプロセッシング、スケジューリング、およびデータベース管理）を一般的に実行する。最近では、コンピュータシステムは、互いに、または他の電子デバイスに結合されて、コンピュータシステムおよび他の電子デバイスが、電子データを転送することが可能な有線コンピュータネットワークおよび無線コンピュータネットワークを形成している。その結果、コンピュータシステムにおいて実行される多くのタスク（例えば、音声通信、電子メールにアクセスすること、ホームエレクトロニクスを制御すること、Ｗｅｂブラウズ、およびドキュメントを印刷すること）には、有線コンピュータネットワークおよび／または無線コンピュータネットワークを介した、いくつかのコンピュータシステムおよび／または他の電子デバイスの間における電子メッセージの交換が含まれる。
【０００３】
ネットワークは、実際、単純なネットワーク対応コンピューティングシステムが、「インターネット」と、しばしば、呼ばれるネットワークの集合を介して、地球全体に広がった数百万の他のコンピューティングシステムのいずれの１つとも通信することができるほど豊かになっている。そのようなコンピューティングシステムは、デスクトップコンピュータ、ラップトップコンピュータ、またはタブレットパーソナルコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、電話機、あるいはデジタルネットワークを介して通信することができる他の任意のコンピュータまたはデバイスを含むことができる。
【０００４】
ネットワークを介して通信するため、１つのコンピューティングシステム（本明細書で、「送信側コンピューティングシステム」と呼ぶ）が、電子メッセージを構築するか、または別の形で電子メッセージにアクセスして、その電子メッセージを、ネットワークを介して別のコンピューティングシステム（本明細書で、「受信側コンピューティングシステム」と呼ぶ）に送信する。電子メッセージは、電子メッセージが電子メールまたはインスタントメッセージである場合のように、人間のユーザによって読み取られることも、代わりに、受信側コンピューティングシステム上で実行されているアプリケーションによって読み取られることもできる。電子メッセージは、場合により、人間のユーザの助けを借りて、送信側コンピューティングシステム上で実行されているアプリケーションによって構築されることもできる。
【０００５】
一部の実施形態では、アプリケーションは、キュー（ｑｕｅｕｅｄ）メッセージ通信を使用して互いに通信する。キュー通信は、送信側アプリケーションが、メッセージを送信キューに書き込み、送信キューが、そのメッセージを受信キューに転送する機構、および受信側アプリケーションが、受信キューからメッセージを読み取る機構を含む。キューは、通信する当事者の外部に通信状態を保持し、通信する当事者間に、あるレベルの間接化（ｉｎｄｉｒｅｃｔｉｏｎ）をもたらす。したがって、キューメッセージングは、緩く結合されたアプリケーション間で、信頼できる通信を提供する。メッセージの送信側と受信側は、中間キューマネージャを使用して通信し、シャットダウンおよび再スタートを独立に行うことができ、重なり合わない存続期間（ｌｉｆｅｔｉｍｅ）を有することさえできる。また、キューイング（ｑｕｅｕｉｎｇ）は、クライアントとサーバが、「独自のペースで」メッセージの送受信を行うことも可能にし、キューが、いずれの終端において、それぞれのペースを調整する（ｔａｋｅ  ｕｐ  ｔｈｅ  ｓｌａｃｋ）。
【０００６】
しばしば、受信側コンピュータシステムは、単一の受信キュー名を公開して、他のコンピュータシステムが、その受信キューにメッセージを送り込むことができるようにする。メッセージは、その後、受信キューから適切なアプリケーションに配信されることが可能である。一部の実施形態では、メッセージは、受信キューから、受信側コンピュータシステムにおける他のキューの中に移される。例えば、キューマネージャが、キューに入れられたメッセージが、一時的に処理可能でないと判定することができる（例えば、適切なアプリケーションが利用可能でない場合）。このため、キューマネージャは、キューに入れられたメッセージを受信キューから、別のキューの中に移して、他のキューに入れられたメッセージを、処理のために利用可能にすることが可能である。いくらか後の時点で、キューマネージャは、キューに入れられたメッセージを受信キューの中に戻して、キューに入れられたメッセージが、その時点で、処理可能であるかどうかを判定することが可能である。
【０００７】
ときどき、キューマネージャが、受信キューの中のメッセージを並べ替えて、別々のグループにして、例えば、メッセージを異なる処理装置にルーティングするようにすることも必要である可能性がある。しかし、キューは、通常、モノリシック（ｍｏｎｏｌｉｔｈｉｃ）であり、組織化された構造を全く有さない。このため、受信キューの中のメッセージの適切な並べ替えは、受信キューからメッセージを出して、受信側コンピュータシステムにおける他のキューの中に入れることによってのみ、達成することができる可能性がある。
【０００８】
また、アプリケーションが、メッセージにアクセスし、その後、そのメッセージを異なるキューに移すこともできる。例えば、アプリケーションは、有害なメッセージを検出すると（例えば、指定された回数の読み取り失敗、またはメッセージを処理する試みの失敗の後）、その有害なメッセージを別のキュー（例えば、有害メッセージキュー）に一時的に移して、受信キューの中の他のメッセージを処理し続けることが可能である。次に、いくらか後の時点で、アプリケーションは、その有害なメッセージを受信キューの中に戻して、その有害なメッセージを読み取り、処理することを再び試みることが可能である。
【０００９】
しかし、「移動」操作は、リソースを大量に使用する可能性がある。例えば、移動操作により、メッセージが、１つのメモリロケーションから別のメモリロケーションに物理的に移されることが生じる可能性がある。
【００１０】
さらに、受信側アプリケーションが、キューの間でメッセージを移動させる際、以前に割り当てられていたＩＤ情報（最初の送信側のＩＤ）が失われる可能性がある。あるキューから別のキューにメッセージを移すための通常の機構は、一方のキューから「Ｒｅｃｅｉｖｅ」を行い、他方のキューに「Ｓｅｎｄ」を行うことである。しかし、メッセージ移動中、メッセージは、通常、メッセージングシステムを離れ（Ｒｅｃｅｉｖｅが呼び出された際）、メッセージングシステムに再び入る（Ｓｅｎｄが呼び出された際）。このため、メッセージングシステムは、ある時間にわたってメッセージを見失い、再び入ってくるメッセージを新規メッセージとして扱う。メッセージングシステムは、そのメッセージを新規メッセージとして扱うため、移動元（ｍｏｖｅｒ）のＩＤをメッセージに割り当てて、最初の送信側のＩＤを失う可能性がある。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
メッセージ移動中のメッセージングシステムからのメッセージの取り出しは、少なくとも１つの理由で問題がある。メッセージが、メッセージングシステムを離れるので、Ｒｅｃｅｉｖｅは、配信受信確認（「ＡＣＫ」）を送信する。最初の送信側が、そのＡＣＫを受信し、そのＡＣＫを、配信保証が満たされたことの指示と見なすことができる。つまり、ＡＣＫは、受信側アプリケーションが、メッセージを処理したことを送信側アプリケーションに示す。しかし、メッセージが、キューの間で転送された場合、受信側アプリケーションへの実際の配信は、行われていない可能性がある。このため、送信側アプリケーションは、そのメッセージを処理済みとして不適切に扱う可能性がある。ＡＣＫに応答して、送信側アプリケーションは、そのメッセージをローカルキャッシュから取り除き、メッセージシーケンスにおける他のメッセージを送信することに取りかかることができる。
【００１２】
あいにく、受信側アプリケーションが、メッセージを受信キューの中に戻し、そのメッセージを再び処理しようと試みた後、さらなる失敗が生じる可能性がある。最終的に、指定された回数の失敗（および、場合により、キューの間のさらなる移動）の後、受信側アプリケーションは、受信側アプリケーションが、そのメッセージを処理することができなかったと送信側アプリケーションに通知する可能性がある。送信側アプリケーションは、これに応答して、メッセージを再送信しようと試みる可能性がある。しかし、送信側アプリケーションは、ＡＣＫに応答して、以前にキャッシュから、そのメッセージを取り除いたので、そのメッセージを識別する、またはそのメッセージのコンテンツにアクセスする方法を全く有さない可能性がある。
【００１３】
また、さらなる問題も生じる可能性がある。例えば、ポリシー上の理由（例えば、セキュリティ設定またはクォータ（ｑｕｏｔａ）設定）のため、新たなキューが、移動元（ｍｏｖｉｎｇ）キューからメッセージを受け入れられない可能性がある。新たなキューがメッセージを受け入れられないことにより、メッセージは、代わりに、移動元（ｍｏｖｅｒ）におけるデッド（ｄｅａｄ）メッセージキューに移されることが生じる可能性がある。
【００１４】
したがって、より効率的で、より正確に受信確認が行われるローカルメッセージ処理のためのシステム、方法、およびコンピュータプログラム製品が、有利であろう。
【課題を解決するための手段】
【００１５】
先行技術の抱える以上の諸問題が、サブキューを使用して、ローカルメッセージ処理を向上させるための方法、システム、およびコンピュータプログラム製品を対象とする、本発明の諸原理によって克服される。一部の実施形態では、受信されたメッセージは、複数のサブキューの中に分けて入れられる。例えば、キューマネージャが、送信側アプリケーションから受信側アプリケーションへの配信のためにメッセージを受信する。メッセージは、受信キューを識別する親値を格納する親値部分を有するキュー識別子を含む。
【００１６】
キューマネージャは、格納された親値に基づき、メッセージを受信キューの中に入れる。受信側アプリケーションが、キューに入れられたメッセージを検査する。受信側アプリケーションは、受信キューのサブキューを識別するサブキューサフィックス値を割り当てる。アプリケーションは、そのサブキューサフィックス値を、キュー識別子のサフィックス値部分の中に格納して、メッセージ検査に従って、メッセージを受信キューから、受信キューの識別されたサブキューに論理的に移すようにする。
【００１７】
他の諸実施形態では、メッセージが、キューの間で移動される。例えば、キューマネージャが、第１のキューを識別する第１のハンドルを受け取る。第１のハンドルは、キューの親部分を識別する親値と、キューの第１の下位部分を識別する第１のサフィックス値とを含む。キューマネージャは、第１のハンドルを利用して、第１のキュー内のメッセージを探し出す。メッセージは、親値を格納する親値部分と、第１のサフィックス値を格納するサフィックス値部分とを有するキュー識別子を含む。
【００１８】
キューマネージャは、探し出されたメッセージを受け取るべき第２のキューを識別する第２のハンドルを受け取る。第２のハンドルは、同一の親値と、キューの第２の下位部分を識別する第２のサフィックス値とを含む。キューマネージャは、第２のサフィックス値をキュー識別子のサフィックス値部分の中に格納して、第１のキューから第２のキューにメッセージを論理的に移すようにする。
【００１９】
本発明の諸原理に従って分けられ、移動されたメッセージは、コンピュータ読取り可能媒体上に格納することが可能である。メッセージは、電子メッセージのコンテンツを表すコンテンツ値を格納するコンテンツフィールドを含むことが可能である。メッセージは、コンテンツフィールドの中で表される電子メッセージのコンテンツが入れられるべきキューを識別するキュー識別子値を格納する、キュー識別子フィールドを含むことが可能である。キュー識別子フィールドは、キューの親部分を識別する親値を格納する親値フィールドと、キューの下位部分を識別するサフィックス値を格納するサフィックス値フィールドとをさらに含むことが可能である。
【００２０】
本発明の上述した、およびその他の目的および特徴は、以下の説明、および添付の特許請求の範囲から、より完全に明らかとなるか、または以下に提示する本発明の実施によって知ることができる。
【００２１】
本発明の上述した、およびその他の利点および特徴をさらに明確にするため、本発明のより詳細な説明を、添付の図面に示す本発明の特定の諸実施形態を参照して行う。それらの図面は、本発明の代表的な諸実施形態を示しているに過ぎず、したがって、本発明の範囲を限定するものと考えられるべきでないことを理解されたい。本発明を、添付の図面の使用を介して、さらに具体的に、さらに詳細に示し、説明する。
【発明を実施するための最良の形態】
【００２２】
本発明の諸原理は、サブキューを使用してローカルメッセージ処理を向上させることを提供する。一部の実施形態では、受信されたメッセージは、サブキューの中に分けて入れられる。例えば、キューマネージャが、送信側アプリケーションから受信側アプリケーションへの配信のために、メッセージを受信する。メッセージは、受信キューを識別する親値を格納する親値部分を有するキュー識別子を含む。
【００２３】
キューマネージャは、格納された親値に基づいて、メッセージを受信キューの中に入れる。受信側アプリケーションが、キューに入れられたメッセージを検査する。受信側アプリケーションは、受信キューのサブキューを識別するサブキューサフィックス値を割り当てる。アプリケーションは、そのサブキューサフィックス値を、キュー識別子のサフィックス値部分の中に格納して、メッセージ検査に従って、そのメッセージを受信キューから、受信キューの識別されたサブキューに論理的に移すようにする。
【００２４】
他の諸実施形態では、メッセージは、キューの間で移動される。例えば、キューマネージャは、第１のキューを識別する第１のハンドルを受け取る。第１のハンドルは、キューの親部分を識別する親値と、キューの第１の下位部分を識別する第１のサフィックス値とを含む。キューマネージャは、第１のハンドルを利用して、第１のキュー内のメッセージを探し出す。メッセージは、親値を格納する親値部分と、第１のサフィックス値を格納するサフィックス値部分とを有するキュー識別子を含む。
【００２５】
キューマネージャは、探し出されたメッセージを受け取るべき第２のキューを識別する第２のハンドルを受け取る。第２のハンドルは、同一の親値と、キューの第２の下位部分を識別する第２のサフィックス値とを含む。キューマネージャは、第２のサフィックス値を、キュー識別子のサフィックス値部分の中に格納して、第１のキューから第２のキューにメッセージを論理的に移すようにする。
【００２６】
本発明の諸原理に従って分けられ、移動されたメッセージは、コンピュータ読取り可能媒体上に格納することが可能である。メッセージは、電子メッセージのコンテンツを表すコンテンツ値を格納するコンテンツフィールドを含むことが可能である。メッセージは、コンテンツフィールドの中で表される電子メッセージのコンテンツが入れられるべきキューを識別するキュー識別子値を格納する、キュー識別子フィールドを含むことが可能である。キュー識別子フィールドは、キューの親部分を識別する親値を格納する親値フィールドと、キューの下位部分を識別するサフィックス値を格納するサフィックス値フィールドとをさらに含むことが可能である。
【００２７】
本発明の範囲内の諸実施形態には、コンピュータ実行可能命令またはデータ構造を担持するため、または格納しておくためのコンピュータ読取り可能媒体が含まれる。そのようなコンピュータ読取り可能媒体は、汎用または専用のコンピュータシステムがアクセスできる、任意の利用可能な媒体であることができる。例として、限定としてではなく、そのようなコンピュータ読取り可能媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージまたは他の磁気記憶装置などの物理的記憶媒体、あるいはコンピュータ実行可能命令、コンピュータ読取り可能命令、またはデータ構造の形態で、所望のプログラムコードを担持する、または格納するのに使用することができ、汎用または専用のコンピュータシステムがアクセスすることができる他のあらゆる媒体を含むことが可能である。
【００２８】
この説明、および添付の特許請求の範囲では、「ネットワーク」は、コンピュータシステムおよび／またはモジュールの間における電子データのトランスポートを可能にする１つまたは複数のデータリンクと定義される。情報が、ネットワーク、または別の通信接続（有線、無線、または有線または無線の組み合わせ）を介してコンピュータシステムに転送される、または提供される場合、その接続が、コンピュータ読取り可能媒体と適切に見なされる。このため、いずれのそのような接続も、コンピュータ読取り可能媒体と適切に呼ばれる。また、前述した媒体の組み合わせも、コンピュータ読取り可能媒体の範囲内に含められなければならない。コンピュータ実行可能命令は、例えば、汎用コンピュータシステムまたは専用コンピュータシステムが、ある機能、またはあるグループの機能を実行するようにさせる命令およびデータを含む。コンピュータ実行可能命令は、例えば、バイナリ、アセンブリ言語などの中間形式の命令、あるいはソースコードであってもよい。
【００２９】
この説明、および添付の特許請求の範囲では、「コンピュータシステム」は、電子データに対して操作を実行するように協働する、１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはソフトウェアモジュールとハードウェアモジュールの組み合わせと定義される。例えば、コンピュータシステムの定義には、パーソナルコンピュータのハードウェアコンポーネントだけでなく、パーソナルコンピュータのオペレーティングシステムなどの、ソフトウェアモジュールも含まれる。モジュールの物理的レイアウトは、重要ではない。コンピュータシステムは、ネットワークを介して結合された１つまたは複数のコンピュータを含むことが可能である。同様に、コンピュータシステムは、内部モジュール群（メモリやプロセッサなど）が協働して、電子データに対する操作を実行する、単一の物理的デバイス（移動電話またはパーソナルデジタルアシスタント「ＰＤＡ」など）を含むこともできる。
【００３０】
本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品、またはプログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、移動電話、ＰＤＡ、ポケットベルなどを含め、多くのタイプのコンピュータシステム構成を有するネットワークコンピューティング環境で実施できることが当業者には理解されよう。また、本発明は、ネットワークを介してリンクされた（ハードワイヤドデータリンク、無線データリンク、またはハードワイヤドデータリンクと無線データリンクの組み合わせで）ローカルコンピュータシステムとリモートコンピュータシステムがともに、タスクを実行する、分散システム環境で実施することもできる。分散システム環境では、プログラムモジュール群は、ローカルメモリ記憶装置とリモートメモリ記憶装置の両方の中に格納することができる。
【００３１】
図１Ａ、図１Ｂ、および図１Ｃは、サブキューを使用してローカルメッセージ処理を向上させることを円滑にするコンピュータアーキテクチャ１００（またはアーキテクチャ１００の諸部分）の一例を示す。コンピュータアーキテクチャ１００（図１Ａ）に示すのは、コンピュータシステム１０１、ネットワーク１０５、およびコンピュータシステム１１１である。コンピュータシステム１０１および１１１のそれぞれは、例えば、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、またはインターネットなどの、ネットワーク１０５に接続される。ネットワーク１０５に接続されたコンピュータシステム群は、ネットワーク１０５に接続された、他のコンピュータシステム群からデータを受信し、そのような他のコンピュータシステム群にデータを送信することが可能である。したがって、コンピュータシステム１０１および１１１、ならびに他の接続されたコンピュータシステム群（図示せず）は、メッセージ関連データを作成し、ネットワークを介して、メッセージ関連データ（例えば、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）データグラム、ならびに、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、ＳＭＴＰ（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などの、ＩＰデータグラムを利用する、他のより高位のレイヤのプロトコル）を交換することが可能である。例えば、コンピュータシステム１０１および１１１は、ＳＯＡＰエンベロープを作成し、ネットワーク１０５を介してＳＯＡＰエンベロープを交換し、ＳＯＡＰエンベロープを受信する。
【００３２】
コンピュータシステム１０１は、アプリケーション１０２およびキューマネージャ１０８を含む。アプリケーション１０２は、例えば、Ｗｅｂサービスなどの、分散アプリケーションの一部分であることが可能である。キューマネージャ１０８は、送信キュー１０７を含み、キュー１０７の動作を制御する。例えば、キューマネージャ１０８は、メッセージを送信キュー１０７に入れること、およびメッセージを送信キュー１０７から出すことを制御する。
【００３３】
コンピュータシステム１１１は、アプリケーション１０２およびキューマネージャ１１８を含む。アプリケーション１１２は、例えば、Ｗｅｂサービスなどの、分散アプリケーションの一部であることが可能である。キューマネージャ１１８は、受信キュー１１７を含み、キュー１１７の動作を制御する。例えば、キューマネージャ１１８は、メッセージを受信キュー１１７に入れること、およびメッセージを受信キュー１１７から出すことを制御する。
【００３４】
アプリケーション１０２とアプリケーション１１２は、同一の分散アプリケーションの部分である可能性がある。このため、ときどき、アプリケーション１０２は、メッセージをアプリケーション１１２に送信する（また、場合により、アプリケーション１１２からメッセージを受信する）。アプリケーション１１２にメッセージを送信するのに、アプリケーション１０２およびキューマネージャ１０８は、例えば、キャプチャプロトコルに従って、メッセージ１２２が送信キュー１０７に入れられるようにすることが可能である。次に、適切な時点で、キューマネージャ１０８が、ネットワーク１０５を介して、メッセージ１２２をキューマネージャ１１８に転送する。
【００３５】
一般に、メッセージは、１つまたは複数のデータフィールドを有するヘッダ部分と、１つまたは複数のデータフィールドを有する本文部分と含むデータ構造であることが可能である。例えば、メッセージ（例えば、メッセージ１２２）は、電子メッセージのコンテンツ（例えば、コンテンツ１２７で表される）を表すコンテンツ値を格納するコンテンツフィールドを含むことが可能である。また、メッセージは、コンテンツフィールドの中で表される電子メッセージのコンテンツが入れられるべきキューを識別するキュー識別子値（例えば、キューＩＤ１２３で表される）を格納する、キュー識別子フィールドも含むことが可能である。キュー識別子フィールドは、キューの親部分を識別する親値（例えば、親値１２４で表される）を格納する親値フィールドと、キューの下位部分を識別するサフィックス値（例えば、サフィックス値１３６で表される）を格納するサフィックス値フィールドとをさらに含むことが可能である。また、その他のフィールドも、メッセージを表すためにデータ構造の中に含めることが可能である。
【００３６】
キュー識別子は、様々な異なる名前付けスキームに従ってフォーマットすることが可能である。一部の実施形態では、キュー識別子は、固定長の親値と固定長のサフィックス値とを含む。他の諸実施形態では、キュー識別子は、可変長の親値と固定長のサフィックス値とを含む。それらの他の諸実施形態は、親値にさらなる柔軟性を与え、サフィックス値の現位置での（ｉｎ−ｓｉｔｕ）変更を可能にする。さらなる諸実施形態では、キュー識別子は、可変長のサフィックス値を含む。それらのさらなる諸実施形態では、可能な最大サフィックス値のための十分なスペースが確保される。
【００３７】
アプリケーションは、各キューに関して、任意の数のローカルサブキューを定義することが可能である。例えば、アプリケーション１１２は、キュー１１７に関して、サブキュー１１７Ａおよびサブキュー１１７Ｂを定義することが可能である。サブキューは、そのサブキューが派生したキューのすべてのプロパティを保持する。例えば、サブキュー１１７Ａおよびサブキュー１１７Ｂは、クォータプロパティ、セキュリティプロパティ、トランザクション型プロパティ、認証プロパティ、プライバシーレベルプロパティを含め、キュー１１７のすべてのプロパティを保持する。
【００３８】
サブキューは、新たな（または、それ以外で現在、使用されていない）サフィックス値をキューＩＤの中に格納することにより、作成することが可能である。このため、サブキューを作成するのに、別個のキュー作成機構は、必要とされない。例えば、新たなサブキューは、新たなサフィックス値を含むＭｅｓｓａｇｅＭｏｖｅアプリケーションプログラミングインターフェース（「ＡＰＩ」）を呼び出すことにより、作成することが可能である。新たなサフィックスが、キューＩＤにコピーされると、新たなサブキューが、論理的に作成され、その結果、対応するメッセージが、サブキューの中に論理的に格納される。いずれのメッセージも、以前に使用されたサフィックス値を含まない場合（例えば、サブキューを以前に占有していたすべてのメッセージが、他のサブキューに移された、または受信側アプリケーションによって消費されている場合）、サブキューは、論理的に削除される。
【００３９】
図２は、キュー内に入れられたメッセージを分けるための方法の例示的な流れ図を示す。方法２００は、図１Ａのコンポーネントおよびメッセージに関連して説明する。
【００４０】
方法２００は、受信側アプリケーションに配信するためのメッセージを送信側アプリケーションから受信する動作（動作２０１）を含む。例えば、キューマネージャ１１８が、キューマネージャ１０８からメッセージ１２２を受け取ることが可能である。メッセージは、キュー識別子を含むことが可能である。例えば、メッセージ１２２は、キューＩＤ１２３を含む。キュー識別子は、受信キューを識別する親値を格納する親値部分を有する。例えば、キューＩＤ１２３は、受信キュー１１７を識別する親値１２４を含む。
【００４１】
方法２００は、格納された親値に基づき、受信キューの中にメッセージを入れる動作（動作２０２）を含む。例えば、キューマネージャ１１８は、メッセージ１２２を受信キュー１１７の中に入れることが可能である。キューマネージャ１１８は、親値１２４（例えば、アプリケーション１０２によってメッセージの中に含められたＵＲＩ）に基づき、受信キュー１１７を識別することが可能である。
【００４２】
方法２００は、キューに入れられたメッセージを検査する動作（動作２０３）を含む。キューに入れられたメッセージを検査することには、例えば、キューに入れられたメッセージのメッセージ本文および／またはメッセージヘッダなどの、コンテンツを検査することを含めることが可能である。例えば、アプリケーション１１２は、コンテンツ１２７を検査する（またはコンテンツ１２７のＰＥＥＫを行う）ことが可能である。指定された管理者構成可能なデータ規則に基づき、メッセージ１２２が、対応するサブキューに分けられる、つまり、ルーティングされることを判定することが可能である。例えば、メッセージ１２２の検査により、メッセージ１２２が、有害なメッセージであることが明らかにされた場合、メッセージ１２２は、有害メッセージサブキューに移すことが可能である（また、後に、親キューに戻すことが可能である）。代替として、データルーティングを使用して、大きいデータ部分を、そのより大きいデータ部分のサブセットをそれぞれが含む、いくつかのサブキューにわたって分割する、つまり、分けることも可能である。例えば、メッセージ１２２の検査により、０００−００００から３９９−９９９９までの範囲に入る電話番号が明らかにされた場合、メッセージ１２２は、第１のサブキューにルーティングすることができ、４００−００００から６９９−９９９９までの範囲に入る電話番号が明らかにされた場合、メッセージ１２２は、第２のサブキューにルーティングすることができ、７００−００００から９９９−９９９９までの範囲に入る電話番号が明らかにされた場合、メッセージ１２２は、第３のサブキューにルーティングすることが可能である。
【００４３】
方法２００は、受信キューのサブキューを識別するサブキューサフィックス値を割り当てる動作（動作２０４）を含む。例えば、アプリケーション１１２は、親値１２４との組み合わせで、サブキュー１１７Ａを識別するサフィックス値１２６を割り当てることが可能である。アプリケーション１１２は、メッセージ検査の結果に基づき、サブキューを識別することが可能である。例えば、メッセージ１２２の検査に基づき、アプリケーション１１２は、メッセージ１２２が、サブキュー１１７Ａにルーティングされるべきであると判定することが可能である。
【００４４】
このため、一般に、キューＩＤは、以下の表記法を使用して表すことが可能である。すなわち、親値が、キューを識別し、サフィックス値が、識別されたキューの下位部分を識別する「親値；サフィックス値」である。親値は、キュー（例えば、キュー１１７）を識別するのに外部モジュール群（例えば、アプリケーション１２２）によって使用されるＵＲＩであることが可能である。サフィックス値は、親キューの下位部分を識別するのにローカルアプリケーション（例えば、アプリケーション１１２）によって使用される文字（例えば、Ｕｎｉｃｏｄｅ文字）列であることが可能である。
【００４５】
キューの識別される下位部分は、サブキューであることが可能である。例えば、「親値１２４；サフィックス値１２６」をローカルで使用して、サブキュー１１７Ａを識別することが可能である。しかし、キューの識別される下位部分は、親キューであることも可能である。例えば、「親キュー１２４；サフィックス値１３６」をローカルで使用して、親キュー１１７Ｐを識別することが可能である。一部の実施形態では、予約サフィックス値（例えば、０）またはＮＵＬＬサフィックス値（「親キュー１２４；」として表される）を使用して、親キューがローカルで識別される。
【００４６】
方法２００は、キュー識別子のサフィックス値部分の中にサブキューサフィックス値を格納する動作（動作２０５）を含む。例えば、アプリケーション１１２は、サフィックス値１２６をキューＩＤ１２３の中に格納して、サフィックス値１３６に上書きすることが可能である。メッセージの中に新たなサフィックス値を格納することは、そのメッセージを受信キューから、受信キューの識別されたサブキューに論理的に移す効果を有する。例えば、キューＩＤ１２３の中にサフィックス値１２６を格納することは、メッセージを親キュー１１７Ｐからサブキュー１１７Ａに論理的に移す効果を有する。
【００４７】
前述したとおり、キュー識別子は、固定長であることが可能である。アプリケーション１１２は、親値と、対応するサフィックス値との結合（または連結）が、その固定長を超えないようにサフィックス値を使用するように、構成されることが可能である。このため、アプリケーション１１２は、サフィックス値をメッセージの中に現位置で（ｉｎ  ｐｌａｃｅ）（すなわち、メッセージが、キューの中に物理的に含まれたままで）格納することが可能である。したがって、アプリケーション１１２は、メッセージをキューから物理的に外に出して、そのメッセージを別のサブキューに論理的に移さなくてもよい。その結果、サフィックス値を格納すること、更新すること、上書きすることなど（およびサブキューの間でメッセージを論理的に移動すること）は、キューマネージャ１０８に戻される受信確認メッセージ（「ＡＣＫ」）を生成することなしに、実行することが可能である。さらに、メッセージを更新するのにＳｅｎｄ  ＡＰＩが使用されないので、キューに入れられたメッセージの最初の送信側のＩＤが、そのメッセージがサブキューの間で移動された場合でも、保持される。
【００４８】
図１Ａは、メッセージ１２２とともに受信キュー１１７の中に物理的に含まれるメッセージ１２８、１３３、および１３８をさらに示す。メッセージ１２８は、親値１２４およびサフィックス値１２６を有するキューＩＤ１２９と、コンテンツ１３２とを含む。メッセージ１３３は、親値１２４およびサフィックス値１３６を有するキューＩＤ１２４と、コンテンツ１３７とを含む。メッセージ１３８は、親値１２４およびサフィックス値１４１を有するキューＩＤ１３９と、コンテンツ１４２とを含む。また、メッセージ１２２、１２８、１３３、および１３８は、その他のフィールド（例えば、メッセージＩＤフィールド）も含むことが可能である。しかし、簡明にするため、それらの他のフィールドは、図１Ａに示さない。
【００４９】
論理トポロジ１９１は、アプリケーション１１２のローカルの見地からのキューの例示的なトポロジを表す。論理トポロジ１９１は、親キュー１１７Ｐ（例えば、「親値１２４；」によって識別される）、サブキュー１１７Ａ（「親値１２４；サフィックス値１２６」によって識別される）、およびサブキュー１１７Ｂ（「親値１２４；サフィックス値１４１」によって識別される）を含む。このため、アプリケーション１１２から見て、メッセージ１３３は、親キュー１１７Ｐの中に含まれ、メッセージ１２２および１２８は、サブキュー１１７Ａの中に含まれ、メッセージ１３８は、サブキュー１３８の中に含まれる。しかし、メッセージは、受信キュー１１７の中に物理的に格納されたままである。
【００５０】
図１Ｂおよび図１Ｃは、コンピュータシステム１１１のさらなる図を示す。アプリケーション１１２は、キューハンドル（例えば、キューハンドル１６０および１６４）を作成し、キューハンドルにアクセスし、キューマネージャ１１８に（例えば、対応する（「ＡＰＩ」）への呼び出しを介して）、キューハンドルを送信するように構成される。キューマネージャ１１８は、キューハンドルを使用して、キューの間でメッセージを移動させることが可能である。簡明にするため、メッセージ１２２、１３３、および１３８の内部のフィールドは、明示しない。しかし、メッセージ１２２、１３３、および１３８は、図１Ａに示したフィールド群を保持する。
【００５１】
図３は、キューの間でメッセージを移動させるための方法の例示的な流れ図を示す。方法３００は、図１Ｂおよび図１Ｃのコンポーネントおよびメッセージに関連して説明する。
【００５２】
方法３００は、第１のキューを識別する第１のハンドルを受け取る動作（動作３０１）を含む。第１のハンドルは、キューの親部分を識別する親値と、キューの第１の下位部分を識別する第１のサフィックス値とを含む。例えば、キューマネージャ１１８が、ハンドル１６０およびメッセージＩＤ１６１を受け取ることが可能である。ハンドル１６０は、親値１２４と、サブキュー１１７Ａを識別するサフィックス値１２６とを含む。前述したとおり、キュー親値１２４は、キュー１１７を識別し、サフィックス値１２６は、サブキュー１１７Ａを識別する。メッセージＩＤ１６１は、メッセージ１２８のメッセージＩＤであることが可能である。メッセージ１２８が、キューマネージャ１１８において最初に受信されると、アプリケーション１１２は、メッセージＩＤ１６１にアクセスし、メッセージＩＤ１６１を格納していることができる。
【００５３】
方法３００は、第１のハンドルを利用して、第１のキュー内のメッセージを探し出す動作（動作３０２）を含む。メッセージは、親値を格納する親値部分と、第１のサフィックス値を格納するサフィックス値部分とを有するキュー識別子を含む。例えば、キューマネージャ１１８は、ハンドル１６０を利用して、サブキュー１１７Ａ内のメッセージ１２８を探し出すことが可能である。メッセージ１２８は、親値１２４とサフィックス値１２６とを有するキューＩＤ１２９を含む。
【００５４】
メッセージ１２８を探し出すのに、キューマネージャ１１８は、サブキュー１１７Ａの中に論理的に格納されたメッセージのサブセットをキュー１１７から識別することが可能である。例えば、キューマネージャ１１８は、サフィックス値１２６を含むメッセージを探索することが可能である。次に、識別されたメッセージのサブセットから、キューマネージャ１１８は、ハンドル１６０からのメッセージＩＤ１６１をメッセージ１２８の中に含まれるメッセージＩＤ１６１とマッチさせることにより、メッセージ１２８を探し出すことが可能である。
【００５５】
方法３００は、探し出されたメッセージを受け取るべき第２のキューを識別する第２のハンドルを受け取る動作（動作３０３）を含む。第２のハンドルは、親値と、キューの第２の下位部分を識別する第２のサフィックス値とを含む。例えば、キューマネージャ１１８が、サブキュー１１７Ｂを識別するハンドル１６４を受け取ることが可能である。ハンドル１６４は、親値１２４とサフィックス値１４１とを含む。
【００５６】
方法３００は、キュー識別子のサフィックス値部分の中に第２のサフィックス値を格納して、メッセージを第１のキューから第２のキューに論理的に移す動作（動作３０４）を含む。例えば、キューマネージャ１１８は、サフィックス値１４１を現位置でキューＩＤ１２９の中に格納することが可能である。サフィックス値１４１を格納することにより、メッセージ１２８が、サブキュー１１７Ａからサブキュー１１７Ｂに論理的に移される。図１Ｃは、サブキュー１１７Ｂの中に格納されたメッセージ１２８を示す。サブキューの間でメッセージを移動させることにより、キュー１１７の中でメッセージの順序が変えられることはない。
【００５７】
前述したとおり、アプリケーションは、キューマネージャＡＰＩを呼び出して、サブキューの間でメッセージを移動させることが可能である。以下は、Ｍｏｖｅ  ＡＰＩの一例である。すなわち、
【００５８】
【表１】
2006277725.tif 000003
【００５９】
例示的なＭｏｖｅ  ＡＰＩで、ｈＱｕｅｕｅＦｒｏｍ値は、メッセージ（入力値）を含むキューに対するＨａｎｄｌｅを表し、ｕｌＬｏｏｋｕｐＩｄ値は、例えば、トランザクションにおいて以前に受け取られているメッセージ（入力値）のＬｏｏｋｕｐＩｄを表し、ｈＱｕｅｕｅＴｏ値は、ＣｏｍｍｉｔまたはＲｅｃｅｉｖｅの後にメッセージを含むことになるキューに対するＨａｎｄｌｅを表す。キューは、同一の親キューのサブキューとして関連していること、または親キュー自体であることが可能である。ｐＴｒａｎｓａｃｔｉｏｎ値は、トランザクションオブジェクトまたは定数（入力値）に対するポインタを表す。トランザクションオブジェクトは、メッセージキューイングから内部で獲得されること、分散トランザクションコーディネータから外部で獲得されること、または現在のコンテキストから暗黙に獲得されることが可能である。例示的なＭｏｖｅ  ＡＰＩは、例えば、アプリケーションが、メッセージを即時に処理しないであろうことを決定し、後の処理のためにメッセージを別のローカルキューに移すことを望む場合に、呼び出されることが可能である。
【００６０】
また、アプリケーションは、他のＡＰＩを利用して、キュー情報を獲得することも可能である。例えば、アプリケーションは、例えば、キューの中のサブキューの数や、サブキュー名のアレイなどのサブキュー情報を戻すＧｅｔ  Ｉｎｔｏ  ＡＰＩを呼び出すことが可能である。そのような情報は、メッセージを作成する際、およびサブキューの間でメッセージを移動させる際に、アプリケーションによって使用されることが可能である。
【００６１】
このため、本発明の諸実施形態は、キューＩＤのサフィックス値を変えることにより、キューの間でメッセージを移動させることを円滑にする。したがって、メッセージは、メッセージが、メッセージングシステムを実際に離れ、メッセージングシステムに再び入ることなしに、リソース効率の高い形で、サブキューの間で移動させることが可能である。その結果、最初の送信側のＩＤが、保持されることが可能である。さらに、メッセージが、メッセージングシステム内部に留まると、メッセージがキューの間で移動される際に、配信受信確認は、最初の送信側に送り返されない。このため、メッセージが、キューの間で実際に転送された際、最初の送信側には、メッセージが受信側アプリケーションに配信されたことを示す、不正確である可能性がある情報が与えられない。
【００６２】
図４を参照すると、本発明を実施するための例示的なシステムが、処理装置４２１、システムメモリ４２２、ならびにシステムメモリ４２２から処理装置４２１までを含む、様々なシステムコンポーネントを結合するシステムバス４２３を含む、コンピュータシステム４２０の形態で、汎用コンピューティングデバイスを含む。処理装置４２１は、本発明の諸特徴を含め、コンピュータシステム４２０の諸特徴を実施するように設計されたコンピュータ実行可能命令を実行することが可能である。システムバス４２３は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含め、いくつかのタイプのバス構造のいずれであってもよい。システムメモリは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）４２４およびＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４２５を含む。起動中などに、コンピュータシステム４２０内部の要素間で情報を転送するのを助ける基本ルーチンを含むＢＩＯＳ（Ｂａｓｉｃ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｓｙｓｔｅｍ）４２６が、ＲＯＭ４２４の中に格納されることができる。
【００６３】
また、コンピュータシステム４２０は、磁気ハードディスク４３９に対して読み取りおよび書き込みを行うための磁気ハードディスクドライブ４２７、リムーバブルな磁気ディスク４２９に対して読み取りまたは書き込みを行うための磁気ディスクドライブ４２８、および、例えば、ＣＤ−ＲＯＭまたは他の光媒体などの、リムーバブルな光ディスク４３１に対して読み取りまたは書き込みを行うための光ディスクドライブ４３０も含むことができる。磁気ハードディスクドライブ４２７、磁気ディスクドライブ４２８、および光ディスクドライブ４３０は、それぞれ、ハードディスクドライブインターフェース４３２、磁気ディスクドライブインターフェース４３３、および光ディスクドライブインターフェース４３４で、システムバス４２３に接続される。ドライブ群、および関連するコンピュータ読取り可能媒体により、コンピュータ実行可能命令、データ構造、プログラムモジュール、およびその他のデータの不揮発性ストレージが、コンピュータシステム４２０に提供される。本明細書で説明する例示的な環境は、磁気ハードディスク４３９、リムーバブルな磁気ディスク４２９、およびリムーバブルな光ディスク４３１を使用するが、磁気カセット、フラッシュメモリカード、デジタルバーサタイルディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどを含め、データを格納するための他のタイプのコンピュータ読取り可能媒体も使用することが可能である。
【００６４】
オペレーティングシステム４３５、１つまたは複数のアプリケーションプログラム４３６、その他のプログラムモジュール群４３７、およびプログラムデータ４３８を含め、１つまたは複数のプログラムモジュールを含むプログラムコード手段が、ハードディスク４３９、磁気ディスク４２９、光ディスク４３１、ＲＯＭ４２４、またはＲＡＭ４２５に格納されることができる。ユーザは、キーボード４４０、ポインティングデバイス４４２、または、例えば、マイクロフォン、ジョイスティック、ゲームパッド、スキャナなどの他の入力デバイス群（図示せず）を介して、コマンドおよび情報をコンピュータシステム４２０に入力することができる。上述したおよびその他の入力デバイスは、システムバス４２３に結合された入出力インターフェース４４６を介して、処理装置４２１に接続することが可能である。入出力インターフェース４４６は、例えば、シリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）インターフェース、またはＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃ  Ｅｎｇｉｎｅｅｒｓ）１３９４インターフェース（すなわち、ＦｉｒｅＷｉｒｅインターフェース）などの、多種多様な異なるインターフェースのいずれかを論理的に表し、異なるインターフェースの組み合わせを論理的に表すことさえできる。
【００６５】
また、モニタ４４７、または他のディスプレイデバイスも、ビデオインターフェース４４８を介してシステムバス４２３に接続される。また、スピーカやプリンタなどの、他の周辺出力デバイス（図示せず）も、コンピュータシステム４２０に接続することが可能である。
【００６６】
コンピュータシステム４２０は、例えば、オフィス全体、または企業全体のコンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットなどの、ネットワーク群に接続可能である。コンピュータシステム４２０は、そのようなネットワーク群を介して、例えば、リモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータを交換することが可能である。
【００６７】
コンピュータシステム４２０は、ネットワークインターフェース４５３を含み、インターフェース４５３を介して、コンピュータシステム４２０は、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。図４に示すとおり、ネットワークインターフェース４５３は、リンク４５１を介するリモートコンピュータシステム４８３とのデータの交換を円滑にする。ネットワークインターフェース４５３は、例えば、ネットワークインターフェースカードや、対応するネットワークドライバインターフェース仕様（「ＮＩＤＳ」）スタックなどの、１つまたは複数のソフトウェアモジュールおよび／またはハードウェアモジュールを論理的に表すことが可能である。リンク４５１は、ネットワークの一部分（例えば、イーサネット（登録商標）セグメント）を表し、リモートコンピュータシステム４８３は、ネットワークのノードを表す。
【００６８】
同様に、コンピュータシステム４２０は、入出力インターフェース４４６を含み、インターフェース４４６を介して、コンピュータシステム４２０は、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。入出力インターフェース４４６は、リンク４５９を介してモデム４５４（例えば、標準のモデム、ケーブルモデム、またはデジタル加入者線（「ＤＳＬ」）モデム）に結合され、モデム４５４を介して、コンピュータシステム４２０は、外部ソースからデータを受信し、かつ／または外部ソースにデータを送信する。図４に示すとおり、入出力インターフェース４４６およびモデム４５４は、リンク４５２を介するリモートコンピュータシステム４９３とのデータの交換を円滑にする。リンク４５２は、ネットワークの一部分を表し、リモートコンピュータシステム４９３は、ネットワークのノードを表す。
【００６９】
図４は、本発明のための適切な動作環境を表すが、本発明の諸原理は、必要な場合、適切な変更を加えて、本発明の諸原理を実施することができる任意のシステムで使用することができる。図４に示した環境は、単に例示的であり、本発明の諸原理を実施することができる多種多様な環境のごく一部さえ表すものではない。
【００７０】
本発明によれば、アプリケーション群、キューマネージャ群、送信キュー群、受信キュー群を含むモジュール群、ならびにアプリケーションメッセージ、キュー識別子、親値、サフィックス値、コンテンツ、およびメッセージＩＤを含む、関連するデータが、コンピュータシステム４２０に関連するコンピュータ読取り可能媒体のいずれに格納され、アクセスされることも可能である。例えば、そのようなモジュール群の諸部分、および関連するプログラムデータの諸部分は、システムメモリ４２２の中に格納するために、オペレーティングシステム４３５、アプリケーションプログラム群４３６、プログラムモジュール群４３７、および／またはプログラムデータ４３８の中に含まれてもよい。
【００７１】
例えば、磁気ハードディスク４３９などの大容量記憶装置が、コンピュータシステム４２０に結合されると、そのようなモジュール群、および関連するプログラムデータも、その大容量記憶装置の中に格納されることができる。ネットワーク化された環境では、コンピュータシステム４２０に関連して示したプログラムモジュール群、またはプログラムモジュール群の諸部分は、リモートコンピュータシステム４８３および／またはリモートコンピュータシステム４９３に関連する、システムメモリおよび／または大容量記憶装置群などの、リモートメモリ記憶装置群の中に格納することが可能である。そのようなモジュール群の実行は、前述したとおり、分散環境で行われることができる。
【００７２】
本発明は、本発明の趣旨または基本的な特性から逸脱することなく、他の特定の形態で実施することもできる。説明した諸実施形態は、すべての点で、単に例示的であり、限定的ではないものと見なされるべきである。したがって、本発明の範囲は、以上の説明によってではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等の趣意および範囲に含まれるすべての変更は、特許請求の範囲に包含されるものとする。
【図面の簡単な説明】
【００７３】
【図１Ａ】サブキューを使用して、ローカルメッセージ処理を向上させることを円滑にするコンピュータアーキテクチャの一例を示す図である。
【図１Ｂ】サブキューを使用して、ローカルメッセージ処理を向上させることを円滑にするコンピュータアーキテクチャの一例を示す図である。
【図１Ｃ】サブキューを使用して、ローカルメッセージ処理を向上させることを円滑にするコンピュータアーキテクチャの一例を示す図である。
【図２】キュー内に入れられたメッセージを分けるための方法を示す例示的な流れ図である。
【図３】キューの間でメッセージを移動させるための方法を示す例示的な流れ図である。
【図４】本発明の諸原理のための適切な動作環境を示す図である。
【符号の説明】
【００７４】
１００  コンピュータアーキテクチャ
１０１、１１１  コンピュータシステム
１０２、１１２  アプリケーション
１０５  ネットワーク
１０７  送信キュー
１０８  キューマネージャ
１１７  受信キュー
１１７Ａ、１１７Ｂ  サブキュー
１１７Ｐ  親キュー
１１８  キューマネージャ
１２２、１２８、１３３、１３８  メッセージ
１２３、１２９、１３４、１３９  キューＩＤ
１２４  親値
１２６、１３６、１４１  サフィックス値
１２７、１３２、１３７、１４２  コンテンツ
１９１  論理的トポロジ
【図１Ａ】
2006277725.tif 000004
【図１Ｂ】
2006277725.tif 000005
【図１Ｃ】
2006277725.tif 000006
【図２】
2006277725.tif 000007
【図３】
2006277725.tif 000008
【図４】
2006277725.tif 000009