(57)【要約】【課題】キューに入れられたアプリケーションメッセージを確実かつ安全に転送するための方法、システム、およびコンピュータプログラム製品を提供する。【解決手段】アプリケーションメッセージは、コード化され、次いで転送メッセージ、エンキューメッセージ、およびデキュー応答内にカプセル化され、これによって、アプリケーションメッセージ内で使用される構成可能なプロトコル要素を、転送メッセージ、エンキューメッセージ、およびデキュー応答内で再利用することができる。転送メッセージのヘッダをコード化し、次いでコード化されたアプリケーションメッセージと共にカプセル化し、これによって、転送ヘッダおよびアプリケーションメッセージ内で使用される構成可能なプロトコル要素を、保存および回送メッセージ内で再利用することができる。カプセル化された要素は、コード化されているため、ラップしているメッセージの構成には干渉しない。【選択図】図１Ａ
2006172454.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数の他のコンピュータシステムと共にネットワークへのネットワーク接続が可能なコンピュータシステムにおいて、メッセージを確実にキューに入れる方法であって、
メッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する行為と、
前記アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する行為と、
前記メッセージングプロトコルに従ってエンキューメッセージを構成する行為であって、前記エンキューメッセージは、前記アプリケーションメッセージをキューに入れることになるメッセージキューを識別する行為と、
前記コード化されたアプリケーションメッセージを前記エンキューメッセージ内にカプセル化する行為と、
前記アプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れることができるように、前記識別されたキューを制御するキューマネージャーへ前記エンキューメッセージを送信する行為と
を含むことを特徴とする方法。
【請求項２】
メッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する前記行為は、キューチャネルが、前記アプリケーションメッセージを含むサブルーチンコールを受信するという行為を含むことを特徴とする請求項１に記載の方法。
【請求項３】
メッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する前記行為は、ＳＯＡＰエンベロープを受信する行為を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する前記行為は、前記アプリケーションメッセージをバイナリコード化する行為を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記アプリケーションメッセージをバイナリコード化する前記行為は、前記アプリケーションメッセージをｂａｓｅ６４でコード化する行為を含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する前記行為は、前記アプリケーションメッセージをテキストコード化する行為を含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する前記行為は、
前記受信したアプリケーションメッセージ、コード化タイプ、およびコンテンツタイプをラッピングアルゴリズムへの入力として提供する行為と、
コード化されたアプリケーションメッセージを前記ラッピングアルゴリズムからの出力として受信する行為と
を含むことを特徴とする請求項１に記載の方法。
【請求項８】
セッション識別子を前記アプリケーションメッセージと共にコード化する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項９】
前記メッセージングプロトコルに従ってエンキューメッセージを構成する前記行為は、ＳＯＡＰエンベロープを構成する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１０】
前記メッセージングプロトコルに従ってエンキューメッセージを構成する前記行為は、前記アプリケーションメッセージに対応するメッセージセッションを識別するように、前記エンキューメッセージを構成する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記メッセージングプロトコルに従ってエンキューメッセージを構成する前記行為は、ＳＯＡＰアプリケーションメッセージからの少なくとも１つの構成可能なプロトコル要素を再利用する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１２】
前記コード化されたアプリケーションメッセージを前記エンキューメッセージ内にカプセル化する前記行為は、コード化されたＳＯＡＰアプリケーションメッセージをＳＯＡＰエンキューメッセージ内にカプセル化する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１３】
コード化されたＳＯＡＰアプリケーションメッセージをＳＯＡＰエンキューメッセージ内にカプセル化する前記行為は、前記コード化されたＳＯＡＰアプリケーションメッセージを復号するための復号情報を前記ＳＯＡＰエンキューメッセージ内に含める行為を含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記識別されたキューを制御するキューマネージャーへ前記エンキューメッセージを送信する前記行為は、アトミックトランザクションコンテキストを使用して、他のアプリケーションの状態の変化に伴って前記アプリケーションメッセージのキューへの挿入を調整する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１５】
前記識別されたキューを制御するキューマネージャーへ前記エンキューメッセージを送信する前記行為は、二相コミットに参加する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１６】
前記識別されたキューを制御するキューマネージャーへ前記エンキューメッセージを送信する前記行為は、信頼できるメッセージングプロトコルを使用して前記エンキューメッセージを送信する行為を含むことを特徴とする請求項１に記載の方法。
【請求項１７】
前記アプリケーションメッセージをカプセル化する前に前記コード化されたアプリケーションメッセージの暗号化および電子署名のうち少なくとも１つを実行する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１８】
前記エンキューメッセージを送信する前に前記エンキューメッセージの暗号化および電子署名のうち少なくとも１つを実行する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項１９】
前記キューマネージャーからエンキュー応答を受信する行為をさらに含むことを特徴とする請求項１に記載の方法。
【請求項２０】
エンキュー応答を受信する前記行為は、信頼できるメッセージングプロトコルを使用して前記エンキュー応答を受信する行為を含むことを特徴とする請求項１９に記載の方法。
【請求項２１】
エンキュー応答を受信する前記行為は、アトミックトランザクションコンテキストを使用して、他のアプリケーションの状態の変化に伴って前記アプリケーションメッセージのキューへの挿入を調整する行為を含むことを特徴とする請求項１９に記載の方法。
【請求項２２】
エンキュー応答を受信する前記行為は、二相コミットに参加する行為を含むことを特徴とする請求項１９に記載の方法。
【請求項２３】
エンキュー応答を受信する前記行為は、暗号化および電子署名のうち少なくとも１つを施されているエンキュー応答を受信する行為を含むことを特徴とする請求項１９に記載の方法。
【請求項２４】
１つまたは複数の他のコンピュータシステムと共にネットワークへのネットワーク接続が可能なコンピュータシステムにおいて、メッセージを確実に転送する方法であって、
メッセージングプロトコルに従って構成されたアプリケーションメッセージがアプリケーションへの配信用として利用可能であることを示すメッセージ利用可能メッセージを受信する行為と、
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する行為であって、前記デキューメッセージは、前記アプリケーションメッセージが前記アプリケーションへの配信用としてキューから外されることになることを示す行為と、
前記メッセージングプロトコルに従って構成されたデキュー応答を受信する行為であって、前記デキュー応答は、コード化されたアプリケーションメッセージをカプセル化している行為と、
前記コード化されたアプリケーションメッセージを前記アプリケーションメッセージへと復号する行為と、
前記アプリケーションメッセージを前記アプリケーションへ送信する行為と
を含むことを特徴とする方法。
【請求項２５】
アプリケーションメッセージが配信用として利用可能であることを示すメッセージ利用可能メッセージを受信する前記行為は、キューリスナーがメッセージ利用可能メッセージを受信するという行為を含むことを特徴とする請求項２４に記載の方法。
【請求項２６】
アプリケーションメッセージが配信用として利用可能であることを示すメッセージ利用可能メッセージを受信する前記行為は、ＳＯＡＰアプリケーションメッセージが配信用として利用可能であることを示すＳＯＡＰメッセージ利用可能メッセージを受信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項２７】
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する前記行為は、メッセージキューおよび前記アプリケーションメッセージを識別するデキューメッセージを送信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項２８】
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する前記行為は、アトミックトランザクションコンテキストを使用して、他のアプリケーションの状態の変化に伴って前記アプリケーションメッセージのキューからの削除を調整する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項２９】
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する前記行為は、二相コミットに参加する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３０】
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する前記行為は、信頼できるメッセージングプロトコルを使用して前記デキューメッセージを送信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３１】
デキュー応答を受信する前記行為は、コード化されたＳＯＡＰアプリケーションメッセージをカプセル化しているＳＯＡＰデキュー応答を受信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３２】
デキュー応答を受信する前記行為は、前記デキュー応答内にカプセル化されているコード化されたアプリケーションメッセージを復号するための情報を含むデキュー応答を受信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３３】
デキュー応答を受信する前記行為は、前記デキュー応答内にカプセル化されているコード化されたＳＯＡＰアプリケーションメッセージからの少なくとも１つの構成可能なプロトコル要素を再利用するＳＯＡＰデキュー応答を受信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３４】
デキュー応答を受信する前記行為は、アトミックトランザクションコンテキストを使用して、他のアプリケーションの状態の変化に伴って前記アプリケーションメッセージのキューからの削除を調整する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３５】
デキュー応答を受信する前記行為は、二相コミットに参加する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３６】
デキュー応答を受信する前記行為は、信頼できるメッセージングプロトコルを使用して前記デキュー応答を受信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３７】
前記コード化されたアプリケーションメッセージを前記アプリケーションメッセージへと復号する前記行為は、テキストコード化されたアプリケーションメッセージを復号する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３８】
前記コード化されたアプリケーションメッセージを前記アプリケーションメッセージへと復号する前記行為は、バイナリコード化されたアプリケーションメッセージを復号する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項３９】
バイナリコード化されたアプリケーションメッセージを復号する前記行為は、ｂａｓｅ６４でコード化されたアプリケーションメッセージを復号する行為を含むことを特徴とする請求項３８に記載の方法。
【請求項４０】
前記コード化されたアプリケーションメッセージを前記アプリケーションメッセージへと復号する前記行為は、
前記コード化されたアプリケーションメッセージ、コード化タイプ、およびコンテンツタイプをアンラッピングアルゴリズムへの入力として提供する行為と、
前記アプリケーションメッセージを前記アンラッピングアルゴリズムからの出力として受信する行為と
を含むことを特徴とする請求項２４に記載の方法。
【請求項４１】
前記デキュー応答の完全性を復号すること、および検証することのうち少なくとも１つを実行する行為をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４２】
前記コード化されたアプリケーションメッセージを復号する前に、前記コード化されたアプリケーションメッセージの完全性を復号すること、および検証することのうち少なくとも１つを実行する行為をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４３】
前記アプリケーションメッセージを前記アプリケーションへ送信する前記行為は、ＳＯＡＰメッセージを前記アプリケーションへ送信する行為を含むことを特徴とする請求項２４に記載の方法。
【請求項４４】
前記アプリケーションメッセージを前記アプリケーションへ配信する前に、注意喚起通知を前記アプリケーションへ送信する行為をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４５】
前記メッセージ利用可能メッセージを受信する前にセッション利用可能メッセージを受信する行為であって、前記セッション利用可能メッセージは、そのメッセージがアプリケーションセッションの一部であることを示す行為と、
前記セッション利用可能メッセージに応答してセッション受け入れメッセージを送信する行為と、
前記セッション受け入れメッセージを送信した後にセッション受け入れ応答を受信する行為と
をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４６】
前記メッセージ利用可能メッセージを受信する前に、前記アプリケーションに対応するメッセージへの関心を示す登録メッセージを送信する行為と、
前記登録が成功したことを示す登録応答を受信する行為と
をさらに含むことを特徴とする請求項２４に記載の方法。
【請求項４７】
１つまたは複数の他のコンピュータシステムと共にネットワークへのネットワーク接続が可能なコンピュータシステムにおいて使用するためのコンピュータプログラム製品であって、メッセージを確実にキューに入れる方法を実施するためのコンピュータプログラム製品であって、プロセッサによって実行されると、
メッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する行為と、
前記アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する行為と、
前記メッセージングプロトコルに従ってエンキューメッセージを構成する行為であって、前記エンキューメッセージは、前記アプリケーションメッセージをキューに入れることになるメッセージキューを識別する行為と、
前記コード化されたアプリケーションメッセージを前記エンキューメッセージ内にカプセル化する行為と、
前記アプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れることができるように、前記識別されたキューを制御するキューマネージャーへ前記エンキューメッセージを送信する行為と
を前記コンピュータシステムに実行させるコンピュータ実行可能命令をその上に有している、１つまたは複数のコンピュータ読取り可能記憶媒体を含むことを特徴とするコンピュータプログラム製品。
【請求項４８】
１つまたは複数の他のコンピュータシステムと共にネットワークへのネットワーク接続が可能なコンピュータシステムにおいて使用するためのコンピュータプログラム製品であって、メッセージを確実に転送する方法を実施するためのコンピュータプログラム製品であって、プロセッサによって実行されると、
メッセージングプロトコルに従って構成されたアプリケーションメッセージが、アプリケーションへの配信用として利用可能であることを示すメッセージ利用可能メッセージを受信する行為と、
前記メッセージ利用可能メッセージに応答してデキューメッセージを送信する行為であって、前記デキューメッセージは、前記アプリケーションメッセージが前記アプリケーションへの配信用としてキューから外されることになることを示す行為と、
前記メッセージングプロトコルに従って構成されたデキュー応答を受信する行為であって、前記デキュー応答は、コード化されたアプリケーションメッセージをカプセル化している行為と、
前記コード化されたアプリケーションメッセージを前記アプリケーションメッセージへと復号する行為と、
前記アプリケーションメッセージを前記アプリケーションへ送信する行為と
を前記コンピュータシステムに実行させるコンピュータ実行可能命令をその上に有している１つまたは複数のコンピュータ読取り可能記憶媒体を含むことを特徴とするコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、電子メッセージングに関し、より詳細には、キューに入れられたアプリケーションメッセージを確実に転送することに関する。
【背景技術】
【０００２】
コンピュータシステムおよび関連するテクノロジーは、社会の多くの側面に影響を与えている。実際、コンピュータシステムの情報処理能力によって、我々の生活および職業のあり方は変貌を遂げてきた。コンピュータシステムが出現する前は手作業で行われていた多くのタスク（たとえば文書処理、スケジューリング、およびデータベース管理）が、現在では一般に、コンピュータシステムによって行われている。より最近では、コンピュータシステムは相互に、および他の電子デバイスと結合されて、有線および無線の双方のコンピュータネットワークを形成し、コンピュータシステムおよび他の電子デバイスは、これらのネットワークを介して電子データを転送することができる。結果として、コンピュータシステムにおいて実行される多くのタスク（たとえば音声通信、電子メールへのアクセス、ホームエレクトロニクスの制御、ウェブの閲覧、および文書の印刷）には、有線および／または無線コンピュータネットワークを介した複数のコンピュータシステムおよび／または他の電子デバイス間における電子メッセージの交換が含まれる。
【０００３】
実際にネットワークは非常に豊かになっているため、簡単なネットワーク対応型コンピューティングシステムは、しばしば「インターネット」と呼ばれるネットワークの集合体を介して、全世界に広がる数百万に及ぶ他のコンピューティングシステムの任意の１つと通信することができる。このようなコンピューティングシステムは、デスクトップパーソナルコンピュータ、ラップトップパーソナルコンピュータ、またはタブレットパーソナルコンピュータ、携帯情報端末（ＰＤＡ）、電話、あるいはデジタルネットワークを介して通信できる他の任意のコンピュータまたはデバイスを含むことができる。
【０００４】
ネットワークを介して通信するために、あるコンピューティングシステム（本明細書では「送信側コンピューティングシステムと呼ぶ」）は、電子メッセージを作成し、または電子メッセージにアクセスし、ネットワークを介して別のコンピューティングシステム（本明細書では「受信側コンピューティングシステム」と呼ぶ）にその電子メッセージを送信する。この電子メッセージは、電子メールまたはインスタントメッセージである場合、人間のユーザが読み取ることができ、あるいは代わりに、受信側コンピューティングシステム上で作動するアプリケーションが読み取ることもできる。この電子メッセージは、おそらくは人間のユーザの助けを借りて、送信側コンピューティングシステム上で作動するアプリケーションによって作成することができる。
【０００５】
環境によっては、アプリケーションは、キューに入れられた通信（queued communication）を使用して、相互に通信する。キューに入れられた通信は、メッセージをキューに書き込むための送信側アプリケーション用、およびメッセージをキューから読み取るための受信側アプリケーション用のメカニズムを含む。このキューは、通信中の当事者の外側で通信状態を維持し、その当事者の間に一定レベルの迂回路を提供する。キューに入れられた通信は、耐障害性を高めることができるため、有益である。
【０００６】
たとえば、キューに入れられた通信のメカニズムは、障害の分離を提供することができ、これによって通信中のアプリケーションは、通信状態を失うことなく、個々に失敗および再開することができる。すなわち、送信側アプリケーションまたは受信側アプリケーションは、送信側アプリケーションと受信側アプリケーションの間の通信に関連する通信状態を失うことなく、失敗および再開することができる。さらに、キューに入れられた通信のメカニズムは、接続性の分離を提供することができ、これによって通信中のアプリケーションは、必要に応じて出入りすることができる。したがって、送信側アプリケーションは、メッセージをキューに書き込んだ後、キューに入れられたメッセージを読み取る受信側アプリケーションの能力に影響を与えることなく、停止することができる。
【０００７】
可用性を高めるため、いくつかのキューメカニズムは、分散型のキューモデルを実装している。たとえば送信側アプリケーションは、自分の近くのキューに書き込みを行い、受信側アプリケーションは、自分の近くの（場合によっては別の）キューから読み取りを行う。分散型のキュー環境では、キューは、他のキューとの間で相互にメッセージを転送することができ、これによって、たとえば（送信側アプリケーションに対応する）送信側のキューに書き込まれたメッセージは、（受信側アプリケーションに対応する）受信側のキューに配信される。
【０００８】
残念なことに、ほとんどのメッセージキューイングシステムは、相互運用性を制限する独自のプロトコルを使用している。たとえば比較的大型の分散型ネットワークなど、いくつかの環境では、さまざまなエンティティが多様なキューシステムを所有している可能性がある。したがってこれらの環境では、すべてのキューシステムが、他のキューシステムと互換性のある１つのプロトコルを必ず実装できるようにする方法がない場合がある。したがってキューシステムは、同じ独自のプロトコルを実装している他のキューシステムのみとの通信に限定される場合がある。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
その上、キュー環境（単独のキューおよび分散型のキューの双方）は、アプリケーションメッセージを送信側アプリケーションから受信側アプリケーションへ安全かつ確実に転送することを保証するためのメカニズムがある場合、そのメカニズムに制限を課す。たとえば、アプリケーションまたはキューの失敗によって、メッセージが失われる場合がある。さらに通常は、メッセージを複数の中間物に保存しおよび回送して、その保存および回送用の中間物の１つにおいて失敗からの回復を行うためのメカニズムがある場合、そのメカニズムに対する制限もある。その上、中間物が必ずメッセージ上のセキュリティに関する制約を保証し、メッセージ用に指定された信頼できる確実性を満たすようにすることは困難である。したがって、キューに入れられたアプリケーションメッセージを確実に転送するためのシステム、方法、およびコンピュータプログラム製品があれば、有利であろう。
【課題を解決するための手段】
【００１０】
従来技術に伴う上記の問題は、本発明の原理によって克服され、この本発明の原理は、キューに入れられたアプリケーションメッセージを確実に転送するための方法、システム、およびコンピュータプログラム製品を対象とする。キューチャネルは、たとえばシンプルオブジェクトアクセスプロトコル（「ＳＯＡＰ」）などのメッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する。キューチャネルは、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、エンキューメッセージを構成する。エンキューメッセージは、アプリケーションメッセージをキューに入れることになるメッセージキューを識別し、場合によっては、アプリケーションメッセージに対応するメッセージセッションを識別する。キューチャネルは、アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する。キューチャネルは、コード化されたアプリケーションメッセージをエンキューメッセージ内にカプセル化する。キューチャネルは、そのエンキューメッセージをキューマネージャーへ送信し、キューマネージャーは、アプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れることができるように、識別されたキューを制御する。
【００１１】
送信側転送層は、コード化されたアプリケーションメッセージをキューから外す。送信側転送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、転送メッセージを構成する。送信側転送メッセージは、受信側コンピュータシステムを識別し、適切な場合は、対応するメッセージセッションを識別する。送信側転送層は、コード化されたアプリケーションメッセージを転送メッセージ内にカプセル化する。送信側転送層は、その転送メッセージを受信側コンピュータシステムへの配信用として送信する。
【００１２】
送信側の保存および回送層（store and forward layer）は、転送メッセージにアクセスする。送信側の保存および回送層は、転送メッセージの転送ヘッダをコード化して、対応するコード化された転送ヘッダを作成する。送信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、保存および回送メッセージ（store and forward message）を構成する。送信側の保存および回送メッセージは、アプリケーションメッセージを受信することになる受信側コンピュータシステムに対する送信側の保存および回送層のシステムの相対的な位置に基づいて、次の保存および回送サービス（中間物または受信側コンピュータシステム）へ配信するためのものである。送信側の保存および回送層は、コード化された転送ヘッダおよびコード化されたアプリケーションメッセージを、保存および回送メッセージへとカプセル化する。送信側の保存および回送サービス（store and forward service）は、その保存および回送メッセージを次の保存および回送サービスへ回送する。
【００１３】
いくつかの実施形態では、１つまたは複数の中間の保存および回送サービスは、コード化された転送ヘッダおよびコード化されたアプリケーションメッセージをカプセル化する保存および回送メッセージを処理する。中間の保存および回送サービスは、メッセージングプロトコル（たとえばＳＯＡＰ）に従って構成された保存および回送メッセージにアクセスする。中間の保存および回送サービスは、受信側コンピュータシステムに対する自分の相対的な位置に基づいて、コード化されカプセル化された転送ヘッダおよびコード化されカプセル化されたアプリケーションメッセージを受信することになる、次の保存および回送サービス（別の中間の保存および回送サービスまたは受信側コンピュータシステム）を識別する。中間の保存および回送サービスは、メッセージングプロトコルに従って、新たな保存および回送メッセージを構成する。中間の保存および回送サービスは、保存および回送メッセージの本文を、新たな保存および回送メッセージの本文へコピーする。保存および回送サービスは、新たな保存および回送メッセージを、次の保存および回送サービスへ回送する。
【００１４】
受信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って構成された保存および回送メッセージを受信する。受信側の保存および回送層は、コード化された転送ヘッダを、対応する転送ヘッダへと復号する。受信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、転送メッセージを構成する。受信側の保存および回送層は、転送メッセージがアプリケーションへどのように転送されるかを示すために、その転送メッセージ内に転送ヘッダを含む。保存および回送層は、コード化されたアプリケーションメッセージを転送メッセージ内にカプセル化し、その転送メッセージを受信側転送層へ送信する。
【００１５】
受信側転送層は、転送メッセージを処理する。この転送層は、コード化されたアプリケーションメッセージをアプリケーションへの配信用としてキューに入れる。この転送層は、アプリケーションメッセージがキューに入れられたことを示すために、メッセージ利用可能メッセージを送信する。キューリスナーは、そのメッセージ利用可能メッセージを受信し、受信側転送層へデキュー（dequeue）メッセージを送信する。受信側転送層は、そのキューから外されたメッセージを受信し、メッセージプロトコル（たとえばＳＯＡＰ）に従って、デキュー応答を構成する。受信側転送層は、コード化されたアプリケーションメッセージを、そのキューから外された応答内にカプセル化する。
【００１６】
受信側転送層は、デキュー応答をアプリケーションへ送信する。キューリスナーは、そのデキュー応答を受信する。キューリスナーは、コード化されたアプリケーションメッセージをアプリケーションメッセージへと復号し、そのアプリケーションメッセージをアプリケーションへ送信する。本発明のこれらおよび他の目的および特徴は、以降の説明および添付の特許請求の範囲から、より完全に明らかになるであろうし、あるいは以降で説明するように本発明を実施することによって、理解することができる。
【００１７】
本発明の上記および他の利点および特徴をさらに明らかにするために、添付の図面に示されている本発明の個別の実施形態を参照することによって、本発明のより具体的な説明を行う。これらの図面は、本発明の典型的な実施形態を示しているにすぎず、したがってその範囲を限定するものとみなすべきではないことが理解できる。本発明について、添付の図面を使用することによって、さらに具体的かつ詳細に記載および説明する。
【発明を実施するための最良の形態】
【００１８】
本発明の原理は、キューに入れられたアプリケーションメッセージの確実な転送を提供する。キューチャネルは、たとえばシンプルオブジェクトアクセスプロトコル（「ＳＯＡＰ」）などのメッセージングプロトコルに従って構成されたアプリケーションメッセージを受信する。キューチャネルは、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、エンキューメッセージを構成する。エンキューメッセージは、アプリケーションメッセージをキューに入れることになるメッセージキューを識別し、場合によっては、アプリケーションメッセージに対応するメッセージセッションを識別する。キューチャネルは、アプリケーションメッセージをコード化して、対応するコード化されたアプリケーションメッセージを作成する。キューチャネルは、コード化されたアプリケーションメッセージをエンキューメッセージ内にカプセル化する。キューチャネルは、そのエンキューメッセージをキューマネージャーへ送信し、キューマネージャーは、アプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れることができるように、識別されたキューを制御する。
【００１９】
送信側転送層は、コード化されたアプリケーションメッセージをキューから外す。送信側転送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、転送メッセージを構成する。送信側転送メッセージは、受信側コンピュータシステムを識別し、適切な場合は、対応するメッセージセッションを識別する。送信側転送層は、コード化されたアプリケーションメッセージを転送メッセージ内にカプセル化する。送信側転送層は、その転送メッセージを受信側コンピュータシステムへの配信用として送信する。
【００２０】
送信側の保存および回送層は、転送メッセージにアクセスする。送信側の保存および回送層は、転送メッセージの転送ヘッダをコード化して、対応するコード化された転送ヘッダを作成する。送信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、保存および回送メッセージを構成する。送信側の保存および回送メッセージは、アプリケーションメッセージを受信することになる受信側コンピュータシステムに対する送信側の保存および回送層のシステムの相対的な位置に基づいて、次の保存および回送サービス（中間物または受信側コンピュータシステム）へ配信するためのものである。送信側の保存および回送層は、コード化された転送ヘッダおよびコード化されたアプリケーションメッセージを保存および回送メッセージへとカプセル化する。送信側の保存および回送サービスは、その保存および回送メッセージを、次の保存および回送サービスへ回送する。
【００２１】
いくつかの実施形態では、１つまたは複数の中間の保存および回送サービスは、コード化された転送ヘッダおよびコード化されたアプリケーションメッセージをカプセル化する保存および回送メッセージを処理する。中間の保存および回送サービスは、メッセージングプロトコル（たとえばＳＯＡＰ）に従って構成された保存および回送メッセージにアクセスする。中間の保存および回送サービスは、受信側コンピュータシステムに対する自分の相対的な位置に基づいて、コード化されカプセル化された転送ヘッダおよびコード化されカプセル化されたアプリケーションメッセージを受信することになる、次の保存および回送サービス（別の中間の保存および回送サービスまたは受信側コンピュータシステム）を識別する。中間の保存および回送サービスは、メッセージングプロトコルに従って、新たな保存および回送メッセージを構成する。中間の保存および回送サービスは、保存および回送メッセージの本文を、新たな保存および回送メッセージの本文へコピーする。保存および回送サービスは、新たな保存および回送メッセージを、次の保存および回送サービスへ回送する。
【００２２】
受信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って構成された保存および回送メッセージを受信する。受信側の保存および回送層は、コード化された転送ヘッダを、対応する転送ヘッダへと復号する。受信側の保存および回送層は、メッセージングプロトコル（たとえばＳＯＡＰ）に従って、転送メッセージを構成する。受信側の保存および回送層は、転送メッセージがアプリケーションへどのように転送されるかを示すために、その転送メッセージ内に転送ヘッダを含む。保存および回送層は、コード化されたアプリケーションメッセージを転送メッセージ内にカプセル化し、その転送メッセージを受信側転送層へ送信する。
【００２３】
受信側転送層は、転送メッセージを処理する。この転送層は、コード化されたアプリケーションメッセージをアプリケーションへの配信用としてキューに入れる。この転送層は、アプリケーションメッセージがキューに入れられたことを示すために、メッセージ利用可能メッセージを送信する。キューリスナーは、そのメッセージ利用可能メッセージを受信し、受信側転送層へデキューメッセージを送信する。受信側転送層は、そのキューから外されたメッセージを受信し、メッセージプロトコル（たとえばＳＯＡＰ）に従って、デキュー応答を構成する。受信側転送層は、コード化されたアプリケーションメッセージをそのキューから外された応答内にカプセル化する。
【００２４】
受信側転送層は、デキュー応答をアプリケーションへ送信する。キューリスナーは、そのデキュー応答を受信する。キューリスナーは、コード化されたアプリケーションメッセージをアプリケーションメッセージへと復号し、そのアプリケーションメッセージをアプリケーションへ送信する。
【００２５】
本発明の範囲内の実施形態は、コンピュータ実行可能命令またはデータ構造を搬送するかまたはその上に保存するためのコンピュータ読取り可能記憶媒体を含む。このようなコンピュータ読取り可能記憶媒体は、汎用または専用のコンピュータシステムによってアクセスできる利用可能な任意のメディアとすることができる。たとえばこのようなコンピュータ読取り可能記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＣＤ−ＲＯＭ、もしくは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイスなどの物理的ストレージメディア、あるいは所望のプログラムコード手段をコンピュータ実行可能命令、コンピュータ読取り可能命令、またはデータ構造の形態で搬送または保存するために使用可能で、かつ汎用または専用のコンピュータシステムによってアクセスできる他の任意のメディアを含むことができるが、これらには限定されない。
【００２６】
この説明および添付の特許請求の範囲においては、「ネットワーク」は、コンピュータシステムおよび／またはモジュールの間で電子データの移送を可能にする１つまたは複数のデータリンクと定義される。情報がネットワークまたは別の通信接続（有線、無線、あるいは有線または無線の組合せのいずれか）を介してコンピュータシステムに転送または提供される場合、この接続は、コンピュータ読取り可能記憶媒体とみなすことが適切である。したがって、このような接続は、すべてコンピュータ読取り可能記憶媒体と呼ぶことが適切である。上記の組合せも、コンピュータ読取り可能記憶媒体の範囲内に含まれるべきである。コンピュータ実行可能命令は、たとえば汎用コンピュータシステムまたは専用コンピュータシステムに特定の機能または機能のグループを実行させる命令およびデータを含む。このコンピュータ実行可能命令は、たとえばバイナリ、アセンブリ言語などの中間フォーマットの命令、あるいはソースコードにさえすることができる。
【００２７】
この説明および添付の特許請求の範囲においては、「コンピュータシステム」は、電子データ上でオペレーションを実行するために共に作動する１つまたは複数のソフトウェアモジュール、１つまたは複数のハードウェアモジュール、またはそれらの組合せと定義される。たとえばコンピュータシステムの定義は、パーソナルコンピュータのハードウェアコンポーネント、ならびにパーソナルコンピュータのオペレーティングシステムなどのソフトウェアモジュールを含む。これらのモジュールの物理的なレイアウトは重要ではない。コンピュータシステムは、ネットワークを介して結合された１つまたは複数のコンピュータを含むことができる。同様にコンピュータシステムは、（メモリおよびプロセッサなどの）内部のモジュールが電子データ上でオペレーションを実行するために共に作動する（携帯電話や携帯情報端末「ＰＤＡ」などの）単一の物理的なデバイスを含むことができる。
【００２８】
本発明は、パーソナルコンピュータ、ラップトップコンピュータ、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースの家庭用電化製品またはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレームコンピュータ、携帯電話、ＰＤＡ、ページャーなどを含む多くのタイプのコンピュータシステム構成と共にネットワークコンピューティング環境内で実施できることを当業者なら理解するであろう。本発明は、ネットワークを介して（有線データリンク、無線データリンク、または有線データリンクと無線データリンクの組合せのいずれかによって）リンクされるローカルコンピュータシステムおよびリモートコンピュータシステムが共にタスクを実行する分散システム環境において実施することもできる。分散システム環境では、プログラムモジュールは、ローカルメモリストレージデバイスおよびリモートメモリストレージデバイスの双方に配置することができる。
【００２９】
図１Ａおよび１Ｂは、キューに入れられたアプリケーションメッセージの確実な転送を容易にするコンピュータアーキテクチャ１００の一例を示している。コンピュータアーキテクチャ１００内には、コンピュータシステム１０１、保存および回送サービス１２１および１２２、ならびにコンピュータシステム１１１が示されている。コンピュータシステムならびに保存および回送サービスのそれぞれは、たとえばローカルエリアネットワーク（「ＬＡＮ」）やワイドエリアネットワーク（「ＷＡＮ」）などのネットワーク、またはインターネットにさえ接続することができる。ネットワークに接続されたコンピュータシステムならびに保存および回送サービスは、そのネットワークに接続された他のコンピュータシステムならびに保存および回送サービスとの間でデータを受信および送信することができる。したがって、コンピュータシステム１０１および１１１ならびに保存および回送サービス１２１および１２２と、他の接続されたコンピュータシステムならびに保存および回送サービス（図示せず）は、ネットワークを介して、メッセージに関連するデータおよび交換メッセージに関連するデータ（たとえばＩＰ（「Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ」）データグラム、およびＴＣＰ（「Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ」）、ＨＴＴＰ（「Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ」）、ＳＭＴＰ（「Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ」）などのＩＰデータグラムを利用する、他のより高い層のプロトコル）を作成することができる。たとえば、コンピュータシステム１０１および１１１ならびに保存および回送サービス１２１および１２２は、ＳＯＡＰエンベロープを作成し、ネットワークを介してＳＯＡＰエンベロープを交換し、ＳＯＡＰエンベロープを受信することができる。
【００３０】
図１Ａでは、コンピュータシステム１０１は、アプリケーション１０２、キューチャネル１０３、およびキューマネージャー１０８を含む。アプリケーション１０２は、たとえば、アプリケーション１１２に対応するクライアントプロキシなどの分散アプリケーションの一部とすることができる。したがって場合によっては、アプリケーション１０２は、アプリケーション１１２へ配信するためのアプリケーションメッセージを有することがある。キューチャネル１０３は、キューマネージャー１０８によって制御されるキュー内に保存するために、アプリケーションメッセージをキューに入れる。キューチャネル１０３は、メッセージをキューに入れるために呼び出されるＡＰＩ（「Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ」）を含むことができる。したがって、アプリケーション１０２は、アプリケーションメッセージをメッセージキュー１０７に入れるためのＡＰＩサブルーチンを呼び出すことができる。
【００３１】
キューマネージャー１０８は、メッセージキュー１０７、転送層１０４、および保存および回送層１０６を含む。メッセージキュー１０７は、コンピュータシステム１０１におけるアプリケーション（たとえば、アプリケーション１０２）から他のコンピュータシステムへ送信されるアプリケーションメッセージをキューに入れるように、またコンピュータシステム１０１においてアプリケーションへ送信される他のコンピュータシステムからのアプリケーションメッセージをキューに入れるように構成される。転送層１０４は、他のキューマネージャー（たとえば、キューマネージャー１１８）との間で転送メッセージを送信および受信するように構成される。保存および回送層１０６は、他の保存および回送層（たとえば、保存および回送層１１６）ならびに保存および回送サービス（たとえば、保存および回送サービス１２１および１２２）との間で保存および回送メッセージを送信および受信するように構成される。
【００３２】
コンピュータアーキテクチャ１００内では、キューマネージャー１０８およびアプリケーション１０２は、双方ともコンピュータシステム１０１に常駐するものとして示されている。しかしこの説明を吟味すれば、キューマネージャーと、そのキューマネージャーを利用するアプリケーションは、別々のコンピュータシステムに常駐できることが当業者には明らかになるであろう。たとえばキューマネージャー１０８は、コンピュータシステム１０１にネットワークを介して接続可能な他のコンピュータシステムに常駐することができる。いくつかの実施形態では、複数の異なるコンピュータシステムにおけるアプリケーションが、単独のキューからメッセージを読み取り、負荷のバランスをとる。
【００３３】
保存および回送サービス１２１および１２２は、中間の保存および回送サービスであり、保存および回送メッセージを他の保存および回送サービスならびに保存および回送層へ送信し、保存および回送メッセージを他の保存および回送サービスならびに保存および回送層から受信する。
【００３４】
図１Ｂでは、コンピュータシステム１１１は、アプリケーション１１２、キューリスナー１１３、およびキューマネージャー１１８を含む。アプリケーション１１２は、たとえば、アプリケーション１１２に対応するサービスなどの分散アプリケーションの一部とすることができる。したがって場合によっては、アプリケーション１１２は、アプリケーション１０２から受信するアプリケーションメッセージを有することがある。キューリスナー１１３は、キューマネージャー１１８によって制御されるキューから、アプリケーションメッセージを外す。したがってキューリスナー１１３は、アプリケーションメッセージをメッセージキュー１１７から外すことができる。キューリスナー１１３はまた、他のキューマネージャーからのセッションを受け入れ、指定されたセッションに対応するアプリケーションメッセージへの関心を登録し、関心のあるアプリケーションへ注意喚起通知を送信することもできる。
【００３５】
キューマネージャー１１８は、メッセージキュー１１７、転送層１１４、ならびに保存および回送層１１６を含む。メッセージキュー１１７は、コンピュータシステム１１１におけるアプリケーション（たとえば、アプリケーション１１２）から他のコンピュータシステムへ送信されるアプリケーションメッセージをキューに入れるように、またコンピュータシステム１０１においてアプリケーションへ送信される他のコンピュータシステムからのアプリケーションメッセージをキューに入れるように構成される。転送層１１４は、他のキューマネージャー（たとえば、キューマネージャー１０８）との間で転送メッセージを送信および受信するように構成される。保存および回送層１１６は、他の保存および回送層（たとえば、保存および回送層１０６）ならびに保存および回送サービス（たとえば、保存および回送サービス１２１および１２２）との間で保存および回送メッセージを送信および受信するように構成される。
【００３６】
コンピュータアーキテクチャ１００内では、キューマネージャー１１８およびアプリケーション１１２は、双方ともコンピュータシステム１１１に常駐するものとして示されている。しかしこの説明を吟味すれば、キューマネージャーと、そのキューマネージャーを利用するアプリケーションは、別々のコンピュータシステムに常駐できることが当業者には明らかになるであろう。たとえばキューマネージャー１１８は、コンピュータシステム１１１にネットワークを介して接続可能な他のコンピュータシステムに常駐することができる。前述のように、複数の異なるサーバにおけるアプリケーションが、単独のキューからメッセージを読み取り、負荷のバランスをとる。
【００３７】
一般に、コンピュータアーキテクチャ１００内のモジュールは、キューに入れられたアプリケーションメッセージの確実な転送を容易にするために相互運用することができる。本発明の実施形態は、キューに入れられたアプリケーションメッセージの確実な転送を実施するために、さまざまな異なるプロトコルを活用することができる。
【００３８】
アプリケーションセッション管理プロトコルを実装して、アプリケーション間の（たとえば、アプリケーション１０２とアプリケーション１１２の間の）キューに入れられたセッションを、確立および破棄することができる。１つのセッション内のすべてのメッセージは、対象のアプリケーションへの厳密に１回の整然とした配信など、関連付けられた確実性を共有する。アプリケーションは、クライアントライブラリ内に実装されているキューに入れられたチャネルのＡＰＩを使用して、キューに入れられたセッション上のメッセージを送信および受信することができる。キューに入れられたセッションの状態は、対応するキュー内で維持することができ、その一方で、取り込みおよび配信用に使用されたキューに入れられたチャネルは、アプリケーションのアドレススペース内で維持されるが、一時的なものである。セッションの取り付けおよび取り外しメカニズムを（たとえば、取り込み／配信プロトコルの一部として）使用して、キューに入れられたチャネルの存続期間と、そのキュー内のセッションとを切り離すことができる。
【００３９】
肯定応答プロセスは、保存／回送肯定応答、転送肯定応答、および配信肯定応答を送信することができ、送信側は、これらに対してさまざまなアクションを起こすことができる。たとえばキューマネージャーは、保存／回送肯定応答を受信すると、メッセージの回送を試みるのをやめることができる。また、転送または配信中にエラーを返すこともでき、これによってメッセージは、期限切れを待つことなく、すぐにデッドキューへ移動する。
【００４０】
一般に、キューに入れられたセッションは、一組のメッセージを相互に関連付けるために使用される。アプリケーションの作成者は、一組のメッセージを、キューに入れられたセッションの一部として定義する。キューに入れられたセッションは、長く続く場合があり、キュー内の識別子によって一意に識別される。したがって、キューに入れられたセッションは、キューに入れられたセッションとの間で読み取りまたは書き込みを行うアプリケーションの存続期間よりも長く続くことができる。キューに入れられたセッションは、回復可能でもある。すなわち、アプリケーションは、失敗し、回復し、そしてキューに入れられたセッションに再び取り付けられて、セッション上でそのオペレーションを継続することができる。
【００４１】
キューに入れられた通信を使用するアプリケーションは、メッセージの期限切れによってメッセージを転送するための信頼性要件と、配信肯定応答を求めるメッセージ要求とを設定する。メッセージは、ユーザによって設定される期限切れ時間に基づいて失効させることができる。メッセージが失効すると、送信側のキューは、そのメッセージをデッドキューへ移動する。配信肯定応答は、受信側アプリケーションがメッセージを首尾よく読み取ると、対応する受信側キューマネージャーによって作成される。配信肯定応答は、そのメッセージがアプリケーション（たとえば、アプリケーション１１２）へ首尾よく配信されたことを、送信側キューマネージャー（たとえば、キューマネージャー１０８）に示すものである。
【００４２】
キュー取り込みプロトコルを、キューチャネル（たとえば、キューチャネル１０３）とキューマネージャー（たとえば、キューマネージャー１０８）の間に実装して、アプリケーションメッセージ（たとえば、アプリケーションメッセージ１３１）を、送信側アプリケーション（たとえば、アプリケーション１０２）から送信側メッセージキュー（たとえば、メッセージキュー１０７）へ同時に確実に転送できる非常に高い可能性を提供することができる。キュー取り込みプロトコルは、メッセージのカプセル化を利用して、エンキューメッセージ要求（たとえば、エンキューメッセージ１４１）内のアプリケーションメッセージを、キューマネージャーへトンネルさせることができる。カプセル化されたアプリケーションメッセージが、首尾よくメッセージキューに書き込まれると、キューマネージャーは、エンキュー応答（たとえば、エンキュー応答１４２）をキューチャネルへ返す。エンキューメッセージ要求と、対応するエンキュー応答は、二相コミットプロトコルの一部とすることができる。エンキューメッセージ要求は、エンキューオペレーションと他のアプリケーションの状態の変化との調整を容易にする、アトミックトランザクションコンテキストを含むことができる。
【００４３】
転送プロトコルを、送信側キューマネージャー（たとえば、キューマネージャー１０８）と受信側キューマネージャー（たとえば、キューマネージャー１１８）の間に実装することができる。転送プロトコルは、メッセージのカプセル化を利用して、１つのキューマネージャーから送信された転送メッセージ（たとえば、転送メッセージ１５１）内のアプリケーションメッセージを、別のキューマネージャーへトンネルさせることができる。送信側キューマネージャーは、対応する受信側キューマネージャーとの安全かつ確実な転送セッションを開始すること、メッセージとセッションとを相互に関連付けて順序付けること、および受信側キューマネージャーからの転送肯定応答を処理することを容易にする。受信側キューマネージャーは、転送セッションを受け入れること、セッション上のメッセージを受信すること、および転送肯定応答を送信することを容易にする。
【００４４】
転送プロトコルは、メッセージシーケンス内の欠番を検知するためのメカニズムを含むこともできる。一般に、交換されるメッセージには番号が付けられ、期限切れのメッセージによって、メッセージシーケンス内に欠番が生じることになる。したがって、送信側キューは、その肯定応答の範囲内の欠番を埋めるために、転送キャンセルメッセージを受信側キューに送信することができる。
【００４５】
保存および回送プロトコルを実装して、保存および回送層の間で（たとえば、保存および回送層１０６と１１６の間で）、保存および回送中間物と保存および回送層の間で（たとえば、保存および回送層１０６と保存および回送サービス１２１の間で）、ならびに保存および回送サービスの間で（たとえば、保存および回送サービス１２１と保存および回送サービス１２２の間で）、メッセージを転送することができる。転送プロトコルは、拡張性モデルを提供することができ、これによって中間の保存および回送サービスは、送信側キューと受信側キューの間に透過的に挿入される。メッセージは、転送メッセージのエンドツーエンドの信頼性に重大な影響を与えることなく、中間の保存および回送サービスを介して回送することができる。保存および回送プロトコルは、メッセージのカプセル化を利用することができ、このメッセージのカプセル化は、転送ヘッダおよびアプリケーションメッセージを、保存および回送メッセージ（たとえば、回送メッセージ１６１）内に組み込み、その回送メッセージを次のホップへ回送する。保存および回送メッセージを受信したことに応答して、適切に構成されたモジュールが、保存および回送応答（たとえば、回送応答１６２）を返すことができる。
【００４６】
配信プロトコルを実装して、受信側キュー（たとえば、メッセージキュー１１７）から対応するアプリケーション（たとえば、アプリケーション１１２）へ、アプリケーションメッセージを配信することができる。配信プロトコルは、セッション利用可能メッセージ（たとえば、セッション利用可能メッセージ１７２）またはメッセージ利用可能メッセージ（たとえば、メッセージ利用可能メッセージ１７４）を、キューリスナー（たとえば、キューリスナー１１３）へ送信することができる。キューリスナーは、デキューメッセージ要求（たとえば、デキューメッセージ１７６）に応答して、キューからアプリケーションメッセージ（または他の適切なメッセージ）を読み取る。デキューイングは、たとえばＷＳ−ＥｎｕｍｅｒａｔｉｏｎなどのＷｅｂ  Ｓｅｒｖｉｃｅｓ仕様に従って実行することができる。デキューメッセージ要求に応答して、キューマネージャー（たとえば、キューマネージャー１１８）は、アプリケーションメッセージ（または他の適切なメッセージ）を含むデキュー応答を送信することができる。デキューメッセージ要求と、対応するデキュー応答は、二相コミットプロトコルの一部とすることができる。デキューメッセージ要求は、デキューオペレーションと他のアプリケーションの状態の変化との調整を容易にする、アトミックトランザクションコンテキストを含むことができる。
【００４７】
注意喚起通知プロトコルを実装して、アプリケーションメッセージが利用可能な場合に、受信側アプリケーション（たとえば、アプリケーション１１２）の注意を喚起することができる。たとえば、キューからメッセージを読み取るアプリケーションは、コンテナ内にホストすることができる。アプリケーションは、さまざまな理由から実行されていない場合がある。たとえば、アプリケーションが失敗している場合や、アプリケーションが休止している場合、あるいはリサイクルされている場合などがある。注意喚起通知プロトコルのメカニズムは、キュー内のメッセージが利用可能であることをホスティング環境に通知することを提供する。ホスティング環境は、これを使用して、アプリケーションを開始するか、またはアプリケーションの別のインスタンスを開始するか、あるいはそれを実行するようにスケジュールすることができる。
【００４８】
いくつかの実施形態では、キューマネージャーは、１つまたは複数のキューをホストする。したがってキューマネージャーは、自分がホストするすべてのキュー用に、取り込み、配信、転送、および保存／回送プロトコルを実装することができる。キューマネージャーは、単一の転送セッション上の同じ２つのキューマネージャーの間で、キューからキューへの転送を多重化するように構成することができる。
【００４９】
前述のように、キューに入れられたアプリケーションメッセージの確実な転送を実施するためのプロトコルは、メッセージのカプセル化を利用することができる。一般に、メッセージのカプセル化は、第１のメッセージ（たとえば、アプリケーションメッセージ）（の少なくとも一部）を、第２のメッセージ（たとえば、転送メッセージ）内にラップすることを含む。いくつかの実施形態では、第１および第２のメッセージは、たとえばシンプルオブジェクトアクセスプロトコル（「ＳＯＡＰ」）などの同一のメッセージングプロトコルに従って構成される。したがって、１つまたは複数の前述のプロトコルは、たとえば拡張マークアップ言語（「ＸＭＬ」）要素などの第１のＳＯＡＰエンベロープ（の少なくとも一部）を、第２のＳＯＡＰエンベロープ内にカプセル化する場合がある。したがってカプセル化を利用して、ＳＯＡＰエンキューメッセージ内のＳＯＡＰアプリケーションメッセージを取り込み、ＳＯＡＰ転送メッセージ内のＳＯＡＰアプリケーションメッセージを転送し、ＳＯＡＰデキュー応答内のＳＯＡＰアプリケーションメッセージを配信することができる。同様のカプセル化メカニズムを使用して、転送ヘッダおよびアプリケーションメッセージを、保存および回送メッセージ内にカプセル化することができる。
【００５０】
内部のＸＭＬ要素（たとえば、アプリケーションＳＯＡＰエンベロープ）を、別のＸＭＬ要素（たとえば、転送ＳＯＡＰエンベロープ）の内側にカプセル化する場合、内部の、またはラップされたＸＭＬ要素は、ラッピングアルゴリズムに従ってコード化（またはシリアライズ）することができる。たとえば、バイナリコード化およびテキストコード化など、さまざまなコード化技術を使用することができる。いくつかの実施形態では、ラッピングアルゴリズムは、ｂａｓｅ６４のバイナリコード化を利用して、ラップされたＸＭＬ要素をコード化する。たとえば、ｎｑ： ＷｒａｐｐｅｄＸｍｌＢａｓｅ６４などのＸＭＬ要素を使用して、コード化されたＸＭＬ要素のコード化タイプを示すことができる。コード化されたＸＭＬ要素は、たとえばｎｑ：ＣｏｎｔｅｎｔＴｙｐｅなど、対応する属性を有することもでき、これは元のコンテンツタイプを定義する。したがってラッピングによって、（バイナリまたはテキストで）コード化されたＳＯＡＰエンベロープを、別のＳＯＡＰエンベロープの内側にカプセル化することが容易になる。
【００５１】
アンラッピング（unwrapping）アルゴリズムは、コード化されたＸＭＬ要素を復号（またはデシリアライズ（deserialize））することができる。たとえば、アンラッピングアルゴリズムは、コード化タイプおよび元のコンテンツタイプを、対応するＸＭＬリーダーに提供することができる。したがって、ｂａｓｅ６４でコード化されたＸＭＬ要素の値をバイナリＸＭＬリーダーに提供して、その値を、対応するコード化されていないＸＭＬ要素へと復号することができる。
【００５２】
メッセージのカプセル化によって、異なるメッセージング層の間でＷｅｂ  Ｓｅｒｖｉｃｅｓプロトコル要素を再利用することが容易になる。たとえばカプセル化によって、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素を、アプリケーション層、転送層、ならびに保存および回送層の間で再利用することが容易になる。たとえば転送ＳＯＡＰエンベロープが、コード化されたアプリケーションＳＯＡＰエンベロープをカプセル化する場合、アプリケーションＳＯＡＰエンベロープの構成可能なプロトコル要素は、転送エンベロープの構成可能なプロトコル要素に干渉しない（これは、構成可能な要素がコード化されているためである）。しかし、アプリケーションＳＯＡＰエンベロープの構成可能なプロトコル要素には、復号を介して効率よくアクセスすることができる。
【００５３】
図２は、キューに入れられたアプリケーションメッセージを確実に送信する方法２００の一例の流れ図を示している。方法２００を、コンピュータアーキテクチャ１００内のモジュールおよびデータを参照して説明する。
【００５４】
方法２００は、アプリケーションメッセージを取り込んで、そのアプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れるための、機能的な結果志向のステップ（ステップ２１５）を含む。ステップ２１５は、アプリケーションメッセージを取り込んで、そのアプリケーションメッセージを受信側コンピュータシステムへの配信用としてキューに入れるという結果を達成するための、対応する任意の行為を含むことができる。しかし、図２に示されている例では、ステップ２１５は、アプリケーションメッセージを受信するという、対応する行為（行為２０１）を含む。たとえば、キューチャネル１０３は、アプリケーション１０２からアプリケーションメッセージ１３１を受信することができる。アプリケーションメッセージ１３１は、アプリケーションメッセージ１３１をメッセージキューに入れるための、（キューチャネル１０３への）サブルーチンコール内に含めることができる。アプリケーションメッセージ１３１は、たとえばＳＯＡＰなどのメッセージングプロトコルに従って構成することができる。したがって、アプリケーションメッセージ１３１は、アプリケーションＳＯＡＰエンベロープを含むことができ、このアプリケーションＳＯＡＰエンベロープは、アプリケーション１１２へ送信することになるアプリケーションデータを含む。一般に、アプリケーションＳＯＡＰエンベロープは、次のフォーマットとすることができる。
【００５５】
【表１】
2006172454.tif 000003
【００５６】
ステップ２１５は、アプリケーションメッセージをコード化するという、対応する行為（行為２０２）を含む。たとえば、キューチャネル１０３は、（構成可能なプロトコル要素を含む）アプリケーションメッセージ１３１をコード化して、対応する（たとえば、バイナリまたはテキストで）コード化されたアプリケーションメッセージ１３１Ｅを作成することができる。キューチャネル１０３は、ラッピングアルゴリズムを実行することができ、このラッピングアルゴリズムは、アプリケーションメッセージ、コード化タイプ、およびコンテンツタイプを入力として受け取り、コード化されたアプリケーションメッセージを出力として返す。たとえば、ラッピングアルゴリズムは、アプリケーションメッセージ１３１、ｂａｓｅ６４のコード化タイプ、および文字列のコンテンツタイプを入力として受け取ることができ、コード化されたアプリケーションメッセージ１３１Ｅを出力として返すことができる。
【００５７】
キューチャネル１０３は、コード化されたアプリケーションメッセージ１３１Ｅを、任意選択で暗号化し、および／または電子署名することもできる。コード化されたアプリケーションメッセージ１３１Ｅを暗号化し、および／または電子署名することは、アプリケーションメッセージ１３１Ｅが伝送中に修正または妨害されないよう確実を期す上で役に立つ。コード化されたアプリケーションメッセージ１３１Ｅは、たとえばＷＳ−Ｓｅｃｕｒｉｔｙなどのさまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【００５８】
ステップ２１５は、エンキューメッセージを構成するという、対応する行為（行為２０３）を含む。たとえば、キューチャネル１０３は、エンキューメッセージ１４１を構成することができる。エンキューメッセージ１４１は、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、エンキューメッセージ１４１は、ＳＯＡＰエンベロープを含むこともできる。エンキューメッセージ１４１は、コード化されたアプリケーションメッセージ１３１Ｅをキューに入れることになる、メッセージキューを識別することができ、アプリケーションメッセージ１３１に対応するメッセージセッションを識別することができる。たとえば、エンキューメッセージ１４１は、メッセージキュー１１７を識別することができ、アプリケーション１０２とアプリケーション１１２の間のメッセージセッションを識別することができる。キューマネージャー１０８は、メッセージキュー１０７を転送キューとして使用することができる。
【００５９】
アプリケーションメッセージ１３１の構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１の構成可能なプロトコル要素は、エンキューメッセージ１４１の構成には干渉しない。したがって、アプリケーションメッセージ１３１内に含まれる構成可能なプロトコル要素は、すべてエンキューメッセージ１４１内で再利用することができる。
【００６０】
ステップ２１５は、コード化されたアプリケーションメッセージをエンキューメッセージ内にカプセル化するという、対応する行為（行為２０４）を含む。たとえば、キューチャネル１０３は、コード化されたアプリケーションメッセージ１３１Ｅをエンキューメッセージ１４１内にカプセル化することができる。一般に、エンキューメッセージは、（保護される前に）次のフォーマットとすることができる。
【００６１】
【表２】
2006172454.tif 000004
【００６２】
エンキューメッセージ内では、/s:Envelope/s:Header/nq:Sequence要素を使用して、エンキューメッセージをアプリケーションセッションに関連付けることができる。/s:Envelope/s:Header/nq:Sequence/@Ordered要素を使用して、アプリケーションセッションがオーダーされているかどうかを示すことができる（たとえば「１」または「真」が、オーダーされたアプリケーションセッションを示す）。/s:Envelope/s:Header/nq:Sequence/wsu:Identifier要素を使用して、セッション識別子を含めることができる。/s:Envelope/s:Header/nq:Sequence/wsrm:MessageNumber要素を使用して、（コード化された）アプリケーションメッセージのシーケンス番号をアプリケーションセッション内に含めることができる。シーケンス番号は、たとえば１などの初期値で始まり、たとえば１ずつインクリメントする。/s:Envelope/s:Header/nq:Sequence/wsrm:LastMessage要素を使用して、（コード化された）アプリケーションメッセージが、そのアプリケーションセッションにおける最終メッセージであることを示すことができる。
【００６３】
/s:Envelope/s:Header/wscoor:CoordinationContext要素を使用して、エンキューメッセージがアトミックトランザクションの一部として実行されることになるかどうかを示すことができる。そうである場合、/s:Envelope/s:Header/wscoor:CoordinationContext要素は、アトミックトランザクションコンテキストを含むことができる。/s:Envelope/s:Header/nq:QueueName要素を使用して、リスナー（たとえば、キューリスナー１１３）がリッスンしたい論理キューの名前（ＵＲＩ）を含む参照パラメータを示すことができる。/s:Envelope/s:Header/wsu:Expires要素を使用して、（コード化された）アプリケーションメッセージ用の期限切れのタイムスタンプを示すことができる。/s:Envelope/s:Header/nq:Volatile要素を使用して、（コード化された）アプリケーションメッセージの配信が肯定応答されるために、そのアプリケーションメッセージを永続的なストアに書き込む必要はないことを示すことができる。/s:Envelope/s:Header/wsu:ErrorQueueName要素を使用して、配信エラーの場合に（コード化された）アプリケーションメッセージの書き込み先となるべき論理キューのキュー名ＵＲＩを示すことができる。/s:Envelope/s:Body/*/nq:WrappedXmlBase64要素は、（コード化された）アプリケーションメッセージの適切にラップされた完全なＳＯＡＰエンベロープを含む。/s:Envelope/s:Body/*/nq:WrappedXmlBase64/@nq:ContentType要素は、（コード化された）アプリケーションメッセージのコンテンツタイプを示す。
【００６４】
コード化されたアプリケーションメッセージ１３１Ｅをカプセル化した後、エンキューメッセージ１４１を暗号化し、および／または電子署名することができる。エンキューメッセージ１４１を電子署名することによって、エンキューメッセージ１４１の信頼性に対するいくらかの保証がキューマネージャー１０８に提供され、さらなるメッセージがメッセージキュー１０７へ注入されるのを防止することができる。エンキューメッセージ１４１は、ＷＳ−Ｓｅｃｕｒｉｔｙや、たとえばＳＳＬ（「Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ」）などのトランスポート層セキュリティを含む、さまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【００６５】
ステップ２１５は、コード化されたアプリケーションメッセージをキューに入れるためのエンキューメッセージを送信するという、対応する行為（行為２０５）を含む。たとえば、キューチャネル１０３は、エンキューメッセージ１４１をキューマネージャー１０８へ送信することができる。適切な場合、キューチャネル１０３は、エンキューメッセージ１４１をキューマネージャー１０８へ送信する前に暗号化することができる。キューマネージャー１０８は、メッセージキュー１０７を制御し、コード化されたアプリケーションメッセージ１３１Ｅを、アプリケーション１１２への配信用としてキューに入れることができる。
【００６６】
キューマネージャー１０８は、エンキューメッセージ１４１を受信し、コード化されたアプリケーションメッセージ１３１Ｅをメッセージキュー１０７内に保存することができる。
【００６７】
コード化されたアプリケーションメッセージ１３１Ｅをメッセージキュー１０７内に保存した後、キューマネージャー１０８は、（場合によっては、暗号化され、および／または電子署名された）エンキュー応答１４２をキューチャネル１０３へ送信して、エンキューメッセージ１４１を受信したことを知らせることができる。キューチャネル１０３は、エンキュー応答１４２を受信することができる。エンキュー応答１４２は、キューマネージャー１０８が、コード化されたアプリケーションメッセージ１３１Ｅを首尾よくキューに入れたことをキューチャネル１０３に示す。一般にエンキュー応答は、（保護される前に）次のフォーマットとすることができる。
【００６８】
【表３】
2006172454.tif 000005
【００６９】
一般に、エンキュー応答内の要素は、エンキューメッセージに関して前述したのと同じ意味（meaning）を有する。さらに、要素/s:Envelope/s:Header/wsa:RelatesToを使用して、エンキュー応答を、対応するエンキューメッセージに関連付けることができる。たとえば、エンキュー応答１４２は、エンキューメッセージ１４１を識別する関連付けた先の値を含むことができる。いくつかの実施形態では、エンキューメッセージと、対応するエンキュー応答は、二相コミットプロトコルの一部である。
【００７０】
方法２００は、アプリケーションメッセージを受信側コンピュータシステムへ転送するための機能的な結果志向のステップ（ステップ２１６）を含む。ステップ２１６は、アプリケーションメッセージを受信側コンピュータシステムへ転送するという結果を達成するための、対応する任意の行為を含むことができる。しかし、図２に示されている例では、ステップ２１６は、コード化されたアプリケーションメッセージをキューから外すという、対応する行為（行為２０６）を含む。たとえば、転送層１０７は、コード化されたアプリケーションメッセージ１３１Ｅをメッセージキュー１０７から外すことができる。
【００７１】
ステップ２１６は、転送メッセージを構成するという、対応する行為（行為２０７）を含む。たとえば、転送層１０４は、転送メッセージ１５１Ａを構成することができる。転送メッセージ１５１Ａは、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、転送メッセージ１５１Ａは、ＳＯＡＰエンベロープを含むこともできる。転送メッセージ１５１Ａは、コード化されたアプリケーションメッセージ１３１Ｅに対応するメッセージセッションを識別することができ、そのメッセージセッションに参加している受信側コンピュータシステムを識別することができる。たとえば、転送メッセージ１５１Ａは、アプリケーション１０２とアプリケーション１１２の間のメッセージセッションを識別することができる。
【００７２】
転送層１０４は、エンキューメッセージ１４１の暗号化された（たとえば、ＷＳ−Ｓｅｃｕｒｉｔｙによって暗号化された）部分をすべて復号し、エンキューメッセージ１４１の平文を再構成することができる。転送層１０４は、たとえばnq:QueueName; nq:Volatile; wsu:Expires; nq:Sequenceなどの適切なヘッダを、エンキューメッセージ１４１から転送メッセージ１５１Ａへコピーする。たとえば、ｎｑ：Ｓｅｑｕｅｎｃｅなどのアプリケーションセッション識別子要素が存在する場合、転送層１０４は、このセッションにおける次のシーケンシャルメッセージ番号を計算し、それをＭｅｓｓａｇｅＮｕｍｂｅｒ要素の値としてｎｑ：Ｓｅｑｕｅｎｃｅ要素に追加し、ローカルの状態をすべて更新する。
【００７３】
アプリケーションメッセージ１３１の構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１の構成可能なプロトコル要素は、転送メッセージ１５１Ａの構成には干渉しない。したがって、アプリケーションメッセージ１３１内に含まれる構成可能なプロトコル要素は、すべて転送メッセージ１５１Ａ内で再利用することができる。
【００７４】
転送層１０４は、転送メッセージ１５１Ａを任意選択で暗号化し、および／または電子署名することができる。転送メッセージ１５１Ａを保護することによって、転送メッセージ１５１Ａの信頼性に対するいくらかの保証がキューマネージャー１０８に提供され、さらなるメッセージがメッセージキュー１０７へ注入されるのを防止することができる。転送メッセージ１５１Ａは、たとえばＷＳ−Ｓｅｃｕｒｉｔｙなどのさまざまな異なるセキュリティのいずれかを使用して保護することができる。
【００７５】
ステップ２１６は、コード化されたアプリケーションメッセージを転送メッセージ内にカプセル化するという、対応する行為（行為２０８）を含む。たとえば、転送層１０４は、コード化されたアプリケーションメッセージ１３１Ｅを転送メッセージ１５１Ａ内にカプセル化することができる。したがって、いくつかの実施形態では、転送層１０４は、エンキューメッセージ１４１のｎｑ：ＡｐｐｌｉｃａｔｉｏｎＭｅｓｓａｇｅ本文要素を、転送メッセージ１５１Ａの本文へコピーする。一般に、転送メッセージは、（保護される前に）次のフォーマットとすることができる。
【００７６】
【表４】
2006172454.tif 000006
【００７７】
一般に、転送メッセージ内の要素は、エンキューメッセージおよびエンキュー応答に関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Header/wsu:ErrorService要素を使用して、配信エラーの場合に（コード化された）アプリケーションメッセージの送信先となるべき場所を示すことができる。
【００７８】
ステップ２１６は、転送メッセージを受信側コンピュータシステムへの配信用として送信するという、対応する行為（行為２０９）を含む。たとえば、転送層１０４は、転送メッセージ１５１Ａをアプリケーション１１２への配信用として送信することができる。
【００７９】
方法２００は、アプリケーションメッセージを受信側コンピュータシステムへ回送するための機能的な結果志向のステップ（ステップ２１７）を含む。ステップ２１７は、アプリケーションメッセージを受信側コンピュータシステムへ回送するという結果を達成するための、対応する任意の行為を含むことができる。しかし、図２に示されている例では、ステップ２１７は、転送メッセージにアクセスするという、対応する行為（行為２１０）を含む。たとえば、保存および回送層１０６は、転送メッセージ１５１Ａにアクセスすることができる。
【００８０】
ステップ２１７は、転送メッセージの転送ヘッダをコード化するという、対応する行為（行為２１１）を含む。たとえば、保存および回送層１０６は、転送ヘッダ１５２をコード化して、コード化された転送ヘッダ１５２Ｅを作成することができる。保存および回送層１０６は、ラッピングアルゴリズムを実行することができ、このラッピングアルゴリズムは、コード化タイプ（たとえばｂａｓｅ６４）、コンテンツタイプ（たとえば文字列）、および転送ヘッダを入力として受け取り、コード化された転送ヘッダを出力として返す。いくつかの実施形態では、転送メッセージ１５１Ａの他の部分もコード化される。
【００８１】
ステップ２１７は、保存および回送メッセージを構成するという、対応する行為（行為２１２）を含む。たとえば、保存および回送層１０６は、回送メッセージ１６１を構成することができる。回送メッセージ１６１は、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、回送メッセージ１６１は、ＳＯＡＰエンベロープを含むこともできる。回送メッセージ１６１は、コンピュータアーキテクチャ１００内のアプリケーション１１２（またはコンピュータシステム１１１）に対するアプリケーション１０２（またはコンピュータシステム１０１）の相対的な位置に基づいて、次の保存および回送サービス（または保存および回送層）へ配信するためのものとすることができる。保存および回送層１０６は、たとえば、ｎｑ：Ｖｏｌａｔｉｌｅヘッダなどの転送メッセージ１５１Ａの適切なヘッダを、回送メッセージ１６１へコピーする。
【００８２】
アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素は、保存および回送メッセージ１６１の構成には干渉しない。したがって、アプリケーションメッセージ１３１および転送メッセージ１５１Ａ（たとえば、そのヘッダ）内に含まれる構成可能なプロトコル要素は、すべて回送メッセージ１６１内で再利用することができる。
【００８３】
ステップ２１７は、コード化された転送ヘッダおよびコード化されたアプリケーションメッセージを、保存および回送メッセージ内にカプセル化するという、対応する行為（行為２１３）を含む。たとえば、保存および回送層１０６は、コード化された転送ヘッダ１５２Ｅおよびコード化されたアプリケーションメッセージ１３１Ｅを、回送メッセージ１６１内にカプセル化することができる。適切な場合、転送メッセージ１５１Ａの他の部分をカプセル化することもできる。
【００８４】
保存および回送層１０６は、転送メッセージ１５１Ａのｓ：Ｈｅａｄｅｒ要素をコード化し、このコード化したｓ：Ｈｅａｄｅｒを、ｎｑ：ＴｒａｎｓｆｅｒＨｅａｄｅｒ本文要素の、ｎｑ：ＷｒａｐｐｅｄＸｍｌＢａｓｅ６４という名前の子要素としてカプセル化することができる。保存および回送層１０６は、転送メッセージ１５１Ａのｎｑ：ＡｐｐｌｉｃａｔｉｏｎＭｅｓｓａｇｅ本文要素を、回送メッセージ１６１へコピーすることもできる。一般に、保存および回送メッセージは、（保護される前に）次のフォーマットとすることができる。
【００８５】
【表５】
2006172454.tif 000007
【００８６】
一般に、保存および回送メッセージ内の要素は、エンキューメッセージ、エンキュー応答、および転送メッセージに関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Header/nq:Volatile要素を使用して、保存および回送メッセージの配信が肯定応答されるために、その保存および回送メッセージを永続的なストアに書き込む必要はないことを示すことができる。/s:Envelope/s:Body/*/nq:TransferHeader/nq:WrappedXmlBase64要素を使用して、送信側キューサービスによってアセンブルされた、転送メッセージのカプセル化されたｓ：Ｈｅａｄｅｒ要素を示すことができる。/s:Envelope/s:Body/*/nq:ApplicationMessage/nq:WrappedXmlBase64要素を使用して、適切にラップされた、カプセル化されたアプリケーションメッセージを示すことができる。
【００８７】
保存および回送層１０６は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他のコード化された部分）、ならびにコード化されたアプリケーションメッセージ１３１Ｅを、一時的な記憶場所に保存することができる。
【００８８】
ステップ２１７は、保存および回送メッセージを、次の保存および回送サービスへ回送するという、対応する行為（行為２１４）を含む。たとえば、保存および回送層１０６は、回送メッセージ１６１を保存および回送サービス１２１へ回送することができる。代わって、保存および回送サービス１２１は、受信側の保存および回送層（たとえば、保存および回送層１１６）を識別することができる。適切な場合、保存および回送層１０６は、回送メッセージ１６１を、保存および回送サービスまたは他の保存および回送層へ送信する前に、暗号化し、および／または電子署名することができる。回送メッセージ１６１を保護することは、不正な読み取りを試みる者が回送メッセージ１６１にアクセスするのを防止する上で役に立つ。回送メッセージ１６１は、ＷＳ−Ｓｅｃｕｒｉｔｙや、たとえばＳＳＬ（「Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ」）などのトランスポート層セキュリティを含む、さまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【００８９】
図３は、キューに入れられたアプリケーションメッセージを確実に回送する方法３００の一例の流れ図を示している。方法３００を、コンピュータアーキテクチャ１００内のモジュールおよびデータを参照して説明する。
【００９０】
方法３００は、保存および回送メッセージにアクセスするという行為（行為３０１）を含む。たとえば、保存および回送サービス１２１は、回送メッセージ１６１を受信することができる。前述のように、回送メッセージ１６１は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびに（アプリケーション１１２へ配信するための）コード化されたアプリケーションメッセージ１３１Ｅを、カプセル化するＳＯＡＰエンベロープとすることができる。適切な場合、保存および回送サービス１２１は、回送メッセージ１６１の暗号化された（たとえば、ＷＳ−Ｓｅｃｕｒｉｔｙによって暗号化された）部分をすべて復号することができ、電子署名を復号して、回送メッセージ１６１の完全性を確認することができる。回送メッセージ１６１の適切に復号され、認証された部分を使用して、回送メッセージ１６１の平文を再構成することができる。
【００９１】
適切な場合、たとえば、回送メッセージがｎｑ：Ｖｏｌａｔｉｌｅヘッダを含んでいない場合、コード化された転送ヘッダ（および場合によっては、転送メッセージの他のコード化された部分）ならびにコード化されたアプリケーションメッセージを、保存および回送サービスまたは保存および回送層に保存することができる。たとえば、保存および回送サービス１２１は、コード化された転送ヘッダ１５２Ｅおよびコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域内に保存することができる。また適切な場合、保存および回送サービスまたは保存および回送層は、保存および回送応答によって、回送メッセージを受信したことを知らせることができる。たとえば、保存および回送サービス１２１は、（場合によっては、暗号化され、および／または電子署名された）回送応答１６２を保存および回送層１０６へ送信して、回送メッセージ１６１を受信したことを知らせることができる。保存および回送層１０６は、回送応答１６２を受信し、場合によっては復号し、および／または認証することができる。回送応答１６２に応答して、保存および回送層１０６は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域から削除することができる。
【００９２】
一般に、保存および回送応答は、（保護される前に）次のフォーマットとすることができる。
【００９３】
【表６】
2006172454.tif 000008
【００９４】
一般に、保存および回送応答内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、ならびに保存および回送メッセージに関して前述したのと同じ意味を有する。さらに、要素/s:Envelope/s:Header/wsa:RelatesToを使用して、保存および回送応答を、対応する保存および回送メッセージに関連付けることができる。たとえば、回送応答１６２は、保存および回送メッセージ１６１を識別する関連付けた先の値を含むことができる。保存および回送層１０６は、回送メッセージ１６１の肯定応答を示す回送応答１６２を受信することができる。
【００９５】
方法３００は、次の保存および回送サービスを識別するという行為（行為３０２）を含む。たとえば、保存および回送サービス１２１は、コンピュータアーキテクチャ１００内のアプリケーション１１２（またはコンピュータシステム１１１）に対する自分の相対的な位置に基づいて、保存および回送サービス１２２を識別することができる。代わって保存および回送サービス１２１は、保存および回送層（たとえば、保存および回送層１１６）を識別することができる。保存および回送サービス１２１は、次の保存および回送サービスまたは保存および回送層を識別する際に、回送メッセージ１６１のヘッダを参照することができる。
【００９６】
方法３００は、新たな保存および回送メッセージを構成するという行為（行為３０３）を含む。たとえば、保存および回送サービス１２１は、回送メッセージ１６３を構成することができる。回送メッセージ１６３は、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、回送メッセージ１６３は、ＳＯＡＰエンベロープを含むこともできる。回送メッセージ１６３は、コンピュータアーキテクチャ１００内のアプリケーション１１２（またはコンピュータシステム１１１）に対するアプリケーション１０２（またはコンピュータシステム１０１）の相対的な位置に基づいて、次の保存および回送サービス（または保存および回送層）へ配信するためのものとすることができる。保存および回送サービス１２１は、たとえば、ｎｑ：Ｖｏｌａｔｉｌｅヘッダなどの適切なヘッダを、回送メッセージ１６１から回送メッセージ１６３へコピーすることができる。
【００９７】
アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素は、保存および回送メッセージ１６３の構成には干渉しない。したがって、アプリケーションメッセージ１３１およびヘッダ１５２（または転送メッセージ１５１Ａの他の部分）内に含まれる構成可能なプロトコル要素は、すべて回送メッセージ１６３内で再利用することができる。
【００９８】
方法３００は、保存および回送メッセージの本文を、新たな保存および回送メッセージの本文へコピーするという行為（行為３０４）を含む。たとえば、保存および回送サービス１２１は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーションメッセージ１３１Ｅを、回送メッセージ１６１から回送メッセージ１６３へコピーすることができる。
【００９９】
適切な場合、保存および回送サービス１２１は、回送メッセージ１６３を、次の保存および回送サービスまたは他の保存および回送層へ送信する前に暗号化し、および／または電子署名することができる。回送メッセージ１６３を保護することは、不正な読み取りを試みる者が回送メッセージ１６３にアクセスするのを防止する上で役に立つ。回送メッセージ１６３は、ＷＳ−Ｓｅｃｕｒｉｔｙや、たとえばＳＳＬ（「Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ」）などのトランスポート層セキュリティを含む、さまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【０１００】
方法３００は、新たな保存および回送メッセージを、次の保存および回送サービスへ回送するという行為（行為３０５）を含む。たとえば、保存および回送サービス１２１は、回送メッセージ１６３を、保存および回送サービス１２２へ回送することができる。代わって保存および回送サービス１２１は、回送メッセージ１６３を保存および回送層（たとえば、保存および回送層１１６）へ回送することができる。適切な場合、保存および回送サービス１２１は、回送メッセージ１６３を、保存および回送サービス１２２へ送信する前に暗号化することができる。一般に、回送メッセージ１６３は、回送メッセージ１６１と同様のフォーマットとすることができる。
【０１０１】
保存および回送サービス１２２は、回送メッセージ１６３を受信することができる。適切な場合、保存および回送サービス１２２は、前述のように回送メッセージ１６３の完全性を復号し、および／または検証することができる。保存および回送サービスは、コード化された転送ヘッダ１５２Ｅおよびコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域内に保存することができる。保存および回送サービス１２２は、（場合によっては、暗号化され、および／または電子署名された）回送応答１６４を保存および回送サービス１２１へ送信して、回送メッセージ１６３を受信したことを知らせることもできる。保存および回送サービス１２１は、回送応答１６４を受信し、場合によっては復号し、および／または認証することができる。回送応答１６４に応答して、保存および回送サービス１２１は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域から削除することができる。一般に、回送応答１６４は、回送応答１６２と同様のフォーマットとすることができる。
【０１０２】
保存および回送サービス１２２は、保存および回送メッセージ１６６（新たな保存および回送ＳＯＡＰエンベロープ）を、保存および回送層１１６への配信用として構成することもできる。保存および回送層１２２は、保存および回送サービス１２１が回送メッセージ１６１を処理するのと同様に、保存および回送メッセージ１６３を処理すること（たとえば、次の保存および回送モジュールを識別することなど）ができる。したがって、保存および回送サービス１２２は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーション１３１Ｅを、回送メッセージ１６４から回送メッセージ１６６へコピーすることができる。保存および回送サービス１２２は、（場合によっては、暗号化され、および／または電子署名された）回送メッセージ１６６を、保存および回送層１１６へ送信することができる。一般に、回送メッセージ１６６は、回送メッセージ１６１および１６３と同様のフォーマットとすることができる。
【０１０３】
アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１および転送メッセージ１５１Ａの構成可能なプロトコル要素は、保存および回送メッセージ１６６の構成には干渉しない。したがって、アプリケーションメッセージ１３１およびヘッダ１５２（または転送メッセージ１５１Ａの他の部分）内に含まれる構成可能なプロトコル要素は、すべて回送メッセージ１６６内で再利用することができる。
【０１０４】
図４は、キューに入れられたアプリケーションメッセージを確実に受信する方法４００の一例の流れ図を示している。方法４００を、コンピュータアーキテクチャ１００内のモジュールおよびデータを参照して説明する。
【０１０５】
方法４００は、送信側コンピュータシステムからのアプリケーションメッセージを回送するための機能的な結果志向のステップ（ステップ４１９）を含む。ステップ４１９は、送信側コンピュータシステムからのアプリケーションメッセージを回送するという結果を達成するための、対応する任意の行為を含むことができる。しかし、図４に示されている例では、ステップ４１９は、保存および回送メッセージを受信するという、対応する行為（行為４０１）を含む。
【０１０６】
たとえば、保存および回送層１１６は、回送メッセージ１６６を受信することができる。適切な場合、保存および回送層１１６は、回送メッセージ１６３の暗号化された（たとえば、ＷＳ−Ｓｅｃｕｒｉｔｙによって暗号化された）部分をすべて復号することができ、電子署名を復号して、回送メッセージ１６６の完全性を確認することができる。回送メッセージ１６６の適切に復号され、認証された部分を使用して、回送メッセージ１６６の平文を再構成することができる。保存および回送層は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域内に保存することができる。
【０１０７】
保存および回送層１１６は、（場合によっては、暗号化され、および／または電子署名された）回送応答１６７を保存および回送サービス１２２へ送信して、回送メッセージ１６６を受信したことを知らせることもできる。保存および回送サービス１２２は、回送応答１６７を受信し、場合によっては復号し、および／または認証することができる。回送応答１６７に応答して、保存および回送サービス１２２は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびにコード化されたアプリケーションメッセージ１３１Ｅを、一時記憶領域から削除することができる。一般に、回送応答１６７は、回送応答１６４および１６２と同様のフォーマットとすることができる。
【０１０８】
前述のように、回送メッセージ１６６は、コード化された転送ヘッダ１５２Ｅ（および場合によっては、転送メッセージ１５１Ａの他の部分）ならびに（アプリケーション１１２へ配信するための）コード化されたアプリケーションメッセージ１３１Ｅを、カプセル化するＳＯＡＰエンベロープとすることができる。コード化されたアプリケーションメッセージ１３１Ｅは、通信セッションに参加しているアプリケーション１０２およびアプリケーション１１２に少なくとも部分的に基づいて、アプリケーション１１２へ配信するためのものとすることができる。
【０１０９】
ステップ４１９は、コード化された転送ヘッダを復号するという、対応する行為を含む（行為４０２）。たとえば、保存および回送層１１６は、コード化された転送ヘッダ１５２Ｅを、対応する（コード化されていない）転送ヘッダ１５２（たとえば、/s:Envelope/s:Body/*/nq:TransferHeaders/nq:WrappedXmlBase64要素）へと復号することができる。保存および回送層１１６は、アンラッピングアルゴリズムを実行することができ、このアンラッピングアルゴリズムは、コード化タイプ（たとえばｂａｓｅ６４）、コンテンツタイプ（たとえば文字列）、およびコード化された転送ヘッダを入力として受け取り、（コード化されていない）転送ヘッダを出力として返す。適切な場合、保存および回送層１１６は、転送メッセージ１５１Ａの他の部分を復号することもできる。
【０１１０】
ステップ４１９は、転送メッセージを構成するという行為を含む（行為４０３）。たとえば、保存および回送層１１６は、転送メッセージ１５１Ｂを構成することができる。転送メッセージ１５１Ｂは、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、転送メッセージ１５１Ｂは、ＳＯＡＰエンベロープを含むこともできる。転送メッセージ１５１Ｂは、コード化されたアプリケーションメッセージ１３１Ｅに対応するメッセージセッションを識別することができ、そのメッセージセッションに参加しているアプリケーションを識別することができる。たとえば、転送メッセージ１５１Ｂは、アプリケーション１０２とアプリケーション１１２の間のメッセージセッションを識別することができる。いくつかの実施形態では、転送メッセージ１５１Ａは、回送メッセージ１６６内のそのカプセル化から再構成され、したがって、転送メッセージ１５１Ａおよび１５１Ｂは、基本的に同じ転送メッセージである。
【０１１１】
アプリケーションメッセージ１３１の構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１の構成可能なプロトコル要素は、転送メッセージ１５１Ｂの構成には干渉しない。したがって、アプリケーションメッセージ１３１内に含まれる構成可能なプロトコル要素は、すべて回送メッセージ１５１Ｂ内で再利用することができる。一般に、転送メッセージ１５１Ｂは、転送メッセージ１５１Ａと同様のフォーマットとすることができる。
【０１１２】
ステップ４１９は、転送ヘッダを転送メッセージ内に含めるという、対応する行為（行為４０４）を含む。たとえば、保存および回送層１１６は、転送ヘッダ１５２を転送メッセージ１５１Ｂ内に含めることができる。転送ヘッダ１５２は、転送メッセージ１５１Ｂがアプリケーション１１２へどのように転送されるかを示すことができる。
【０１１３】
ステップ４１９は、コード化されたアプリケーションメッセージを、転送メッセージ内にカプセル化するという、対応する行為（行為４０５）を含む。たとえば、保存および回送層１１６は、コード化されたアプリケーションメッセージ１３１Ｅを、転送メッセージ１５１Ｂ内にカプセル化することができる。保存および回送層１１６は、転送メッセージ１５１Ｂを任意選択で暗号化し、および／または電子署名することができる。転送メッセージ１５１Ｂを保護することによって、転送メッセージ１５１Ｂの信頼性に対するいくらかの保証がキューマネージャー１１８に提供され、さらなるメッセージがメッセージキュー１１７へ注入されるのを防止することができる。転送メッセージ１５１Ｂは、たとえば、ＷＳ−Ｓｅｃｕｒｉｔｙなどのさまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【０１１４】
ステップ４１９は、転送メッセージを送信するという、対応する行為（行為４０６）を含む。たとえば、保存および回送層１１６は、転送メッセージ１５１Ｂを転送層１１４へ（適切に暗号化して）送信することができる。一般に、転送メッセージ１５１Ｂは、転送メッセージ１５１Ａと同様のフォーマットとすることができる。
【０１１５】
方法４００は、送信側コンピュータシステムからのアプリケーションメッセージを転送するための機能的な結果志向のステップ（ステップ４２０）を含む。ステップ４２０は、送信側コンピュータシステムからのアプリケーションメッセージを転送するという結果を達成するための、対応する任意の行為を含むことができる。しかし、図４に示されている例では、ステップ４２０は、転送メッセージを処理するという、対応する行為（行為４０７）を含む。たとえば、転送層１１４は、転送メッセージ１５１Ｂを処理することができる。転送メッセージ１５１Ｂは、コード化されたアプリケーションメッセージ１３１Ｅをカプセル化することができ、またこの転送メッセージ１５１Ｂは、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、転送メッセージ１５１Ｂは、ＳＯＡＰエンベロープを含むこともできる。
【０１１６】
転送層１１４は、必要に応じて（たとえば、ＷＳ−ｓｅｃｕｒｉｔｙに従って）転送メッセージ１５１Ｂの各部の完全性を復号して確認することができる。転送メッセージ１５１Ｂを復号することによって、メッセージ１５１Ｂの平文を示すことができる。適切な場合、転送層１１４は、たとえばＯｒｄｅｒｅｄ属性が真の値（「１」または「真」）に設定されているｎｑ：Ｓｅｑｕｅｎｃｅヘッダに従って整然とした配信を確実にするために、ローカル処理を実行する。転送層１１４は、ｗｓｕ：Ｅｘｐｉｒｅｓヘッダの値を現在の日付時刻と比較して、アプリケーションメッセージ１３１がまだ有効であるかどうかを確認する。有効でない場合、受信側キューサービスは、その要求を失敗とし、たとえば次の該当する障害を引き起こすことができる。
［コード］s12:Receiver
［サブコード］nq:MessageExpired
［理由］「このメッセージは期限切れである」
【０１１７】
いくつかの実施形態では、転送層１１４は、メッセージを受け入れ、承認した後、そのメッセージが期限切れになる前にキューリスナーがそのメッセージをキューから外さない場合、該当する障害を引き起こす必要が生じることがある。これらの実施形態では、この障害は、ｎｑ：Ｓｅｑｕｅｎｃｅヘッダおよびｎｑ：ＱｕｅｕｅＮａｍｅヘッダを、その障害のｓ：ｄｅｔａｉｌ要素へコピーすることによって補うことができる。
【０１１８】
転送層１１４は、コード化されたアプリケーションメッセージ１３１Ｅを、メッセージキュー１１７内に永続的に保存することもできる。
【０１１９】
ステップ４２０は、コード化されたアプリケーションメッセージをキューに入れるという、対応する行為（行為４０８）を含む。たとえば、転送層１１４は、コード化されたアプリケーションメッセージ１３１Ｅをメッセージキュー１１７に入れることができる。転送層１１４は、ＴｒａｎｓｆｅｒＭｅｓｓａｇｅエンベロープのキューイングヘッダ（ｎｑ：ＱｕｅｕｅＮａｍｅ、ｗｓｕ：Ｅｘｐｉｒｅｓ、およびｎｑ：Ｓｅｑｕｅｎｃｅ）、ならびにｎｑ：ＡｐｐｌｉｃａｔｉｏｎＭｅｓｓａｇｅ本文要素を、さらなる処理（たとえば、アプリケーション１１２へ配信するためにキューから外すこと）のために保持することができる。
【０１２０】
いくつかの実施形態では、キューリスナーは、キュー上の利用可能なセッションに関する通知を受信することに対する関心（interest）を登録する。たとえば、キューリスナー１１３は、登録メッセージ１９１をキューマネージャー１１８へ送信して、メッセージキュー１１７上の利用可能なメッセージに対する関心を登録することができる。登録メッセージ１９１は、アプリケーション１１２がアプリケーション１０２からのセッションおよびメッセージに関心を持っていることを表すことができる。一般に、登録メッセージは、（保護される前に）次のフォーマットとすることができる。
【０１２１】
【表７】
2006172454.tif 000009
【０１２２】
一般に、登録メッセージ内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、ならびに保存および回送応答に関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Header/nq:QueueName要素を使用して、キューリスナーがリッスンしたい論理キューの名前（ＵＲＩ）を示すことができる。登録要求内のｎｑ：ＱｕｅｕｅＮａｍｅの値によって指定されたキューがない場合、キューサービスは、次の該当する障害を引き起こすことができる。
［コード］s12:Sender
［サブコード］nq:NoSuchQueue
［理由］「そのようなキューは存在しない」
【０１２３】
/s:Envelope/s:Header/nq:Volatile要素を使用して、揮発性とみなされるアプリケーションセッションに、キューリスナーが関心を持っていることを示すことができる。すなわち、メッセージを永続的なストレージに書き込むことができないアプリケーションセッションへの関心を示すことができる。この要素が現れない場合、リスナーは、永続的なアプリケーションセッションについて通知されるのみとなる。/s:Envelope/s:Body/*/nq:Filter要素を使用して、キューリスナーが自分の関心のあるアプリケーションセッションを制限するために使用するＸＰａｔｈ（「ＸＭＬ  Ｐａｔｈ  Ｌａｎｇｕａｇｅ」）の述部を示すことができる。この述部は、アプリケーションセッション内の第１のメッセージに適用することができ、キューリスナーは、この述部が真と評価された場合に通知されるのみとなる。この要素が現れない場合、キューリスナーには、すべてのアプリケーションセッションについて通知することができる。
【０１２４】
キューリスナーから登録メッセージを受信したことに応答して、対応するキューマネージャー１１８は、登録応答を作成して送信することができる。たとえば、登録メッセージ１９１を受信したことに応答して、キューマネージャー１１８は、登録応答１９２をキューリスナー１１３へ送信することができる。登録応答１９２は、首尾よく登録できたことを示す。一般に登録応答は、（保護される前に）次のフォーマットとすることができる。
【０１２５】
【表８】
2006172454.tif 000010
【０１２６】
一般に、登録応答内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、ならびに登録メッセージに関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Body/*/nq:Identifier要素を使用して、特定のＬｉｓｔｅｎコンテキストを識別するＵＲＩを含めることができる。たとえばこれは、Ｌｉｓｔｅｎ要求内で提供されたＦｉｌｔｅｒと相互に関連がある。この識別子は、リスナーが新たなアプリケーションセッションまたはセッションメッセージが利用可能であることを通知され、そのリスナーがアプリケーションセッションを受け入れた場合に使用される。
【０１２７】
さらに、アプリケーションメッセージ１３１は、通信セッション内の最初のメッセージである可能性がある。したがって、アプリケーションメッセージ１３１（キューリスナー１１３が登録しているメッセージ）を受信したことに応答して、キューマネージャー１１８は、キューリスナー１１３がアプリケーションメッセージ１３１に対する関心を登録していると判断することができる。たとえば、キューマネージャー１１８は、メッセージ１１３を、登録メッセージ１９１内に含まれるＸＰａｔｈの述部にマッチさせることができる。したがって、メッセージ１３１を受信したことに応答して、キューマネージャー１１８は、セッション利用可能メッセージ１７２を構成し、キューリスナー１１３へ送信することができる。一般に、セッション利用可能メッセージ（たとえばＳＯＡＰエンベロープ）は、次のフォーマットのヘッダを含むことができる。
【０１２８】
【表９】
2006172454.tif 000011
【０１２９】
一般に、セッション利用可能メッセージ内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、ならびに登録応答に関して前述したのと同じ意味を有する。さらに、nq:SessionAvailable/nq:QueueName要素を使用して、その上でそのセッションが利用可能である、論理キューを指定するＵＲＩを示すことができる。nq:SessionAvailable/nq:Identifierを使用して、キューリスナーへの登録応答内に入れて返される識別子を示すことができ、これをキューリスナーが首尾よく受け入れ、その上でメッセージを利用することができる。
【０１３０】
キューリスナー１１３は、セッション利用可能メッセージ１７２を受信することができる。セッション利用可能メッセージ１７２に応答して、キューリスナーは、セッション受け入れメッセージ１７３を構成し、送信する。受け入れメッセージ１７３は、メッセージをキューから外すために使用される、（たとえば、ＷＳ−ｅｎｕｍｅｒａｔｉｏｎに従った）エニュメレーションコンテキストを含む。一般に、セッション受け入れメッセージは、（保護される前に）次のフォーマットとすることができる。
【０１３１】
【表１０】
2006172454.tif 000012
【０１３２】
一般に、セッション受け入れメッセージ内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、ならびにセッション利用可能メッセージに関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Header/nq:QueueName要素は、リスナーがその上でメッセージを受信したいと希望する論理キューの名前（ＵＲＩ）を含む。登録要求内のｎｑ：ＱｕｅｕｅＮａｍｅの値によって指定されたキューがない場合、キューマネージャーは、次の該当する障害を引き起こすことができる。
［コード］s12:Sender
［サブコード］nq:NoSuchQueue
［理由］「そのようなキューは存在しない」
【０１３３】
/s:Envelope/s:Body/*/nq:Identifier要素を使用して、キューリスナーへの登録応答内に入れて返される識別子を含めることができる。要求内のｎｑ：Ｉｄｅｎｔｉｆｉｅｒの値が受信側キューサービスによって認識されない場合、そのキューサービスは、次の該当する障害を引き起こすことができる。
［コード］s12:Sender
［サブコード］nq:NoSuchListener
［理由］「そのようなＬｉｓｔｅｎ識別子は存在しない」
【０１３４】
/s:Envelope/s:Body/*/nq:MaxTime要素を使用して、アプリケーションセッションが利用可能になるのを待つように、キューリスナーが構成される最長時間を示すことができる。この要素が存在する場合、受信側キューサービスは、（受信側キューサービスがセッション受け入れメッセージを処理した時点から測定して）存続期間の終わりまでに、登録識別子にマッチするアプリケーションセッションが利用可能にならなければ、次の該当する障害を引き起こすことができる。
［コード］s12:Receiver
［サブコード］nq:NoSessionAvailable
［理由］「マッチするアプリケーションセッションで利用可能なものはない」
【０１３５】
受信側キューサービスは、この状況を検知することができず、存続期間の期限が切れるとすぐに障害を発行する可能性があるため、キューリスナーは、この障害の正確なタイミングに依存しない場合があるという点に留意されたい。
【０１３６】
セッション受け入れメッセージ１７３に応答して、キューマネージャー１１８は、セッション受け入れ応答１９３を構成し、送信することができる。一般に、セッション受け入れ応答は、（保護される前に）次のフォーマットとすることができる。
【０１３７】
【表１１】
2006172454.tif 000013
【０１３８】
一般に、セッション受け入れ応答内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、セッション利用可能メッセージ、ならびにセッション受け入れメッセージに関して前述したのと同じ意味を有する。さらに、/s:Envelope/s:Body/*/wsen:EnumerationContext要素を使用して、たとえば、ＷＳ−Ｅｎｕｍｅｒａｔｉｏｎに従った新たなエニュメレーションコンテキストのＸＭＬ表記を含めることができる。受信側アプリケーションは、デキュー応答によってエニュメレーションコンテキストが更新されない限り、また更新されるまで、このＸＭＬデータをこのアプリケーションセッション用のデキューメッセージ要求内に入れて渡すことができる。
【０１３９】
次いで再び図４を参照すると、ステップ４２０は、メッセージ利用可能メッセージを送信するという、行為（行為４０９）を含む。たとえば、キューマネージャー１１８は、（場合によっては、暗号化され、および／または電子署名された）メッセージ利用可能メッセージ１７４を、キューリスナー１１３へ送信することができる。メッセージ利用可能メッセージ１７４は、コード化されたアプリケーションメッセージ１３１がキューに入れられていることをキューリスナー１１３に示す。キューリスナー１１３が、メッセージキュー１１７に入れられたメッセージへの関心を登録した後で、および／またはキューリスナー１１３が、対応するセッションを受け入れた後で、メッセージ利用可能メッセージ１７４を、キューリスナー１１３へ送信することができる。一般に、メッセージ利用可能メッセージ（たとえばＳＯＡＰエンベロープ）は、次のフォーマットのメッセージ利用可能ヘッダを含むことができる。
【０１４０】
【表１２】
2006172454.tif 000014
【０１４１】
nq:Message Available/nq:QueueName要素を使用して、その上でそのメッセージが利用可能である論理キューを指定する、ＵＲＩを示すことができる。nq:MessageAvailable/nq:Identifierを使用して、キューリスナーへの登録応答内に入れて返される識別子を示すことができ、これをキューリスナーが首尾よく受け入れた場合、その上でメッセージを利用することができる。いくつかの実施形態では、メッセージ利用可能ヘッダは、セッション受け入れ応答またはデキュー応答に追加することができ、あるいは空の本文を有する片道のみの単体のメッセージとして送信することもできる。単体のメッセージとして送信する場合は、http://schemas.testcorp.com/queuing/MessageAvailableのｗｓａ：Ａｃｔｉｏｎと共に送信することができる。別のメッセージ上のヘッダとして送信する場合は、複数のＭｅｓｓａｇｅＡｖａｉｌａｂｌｅヘッダを単一のメッセージ内に含むことができ、これらは、１つまたは複数のセッション利用可能ヘッダと混合することもできる。
【０１４２】
方法４００は、送信側コンピュータシステムからのアプリケーションメッセージを配信するための機能的な結果志向のステップ（ステップ４２１）を含む。ステップ４２１は、送信側コンピュータシステムからのアプリケーションメッセージを配信するという結果を達成するための、対応する任意の行為を含むことができる。しかし、図４に示されている例では、ステップ４２１は、メッセージ利用可能メッセージを受信するという、対応する行為（行為４１０）を含む。たとえば、キューリスナー１１３は、メッセージ１３１がアプリケーション１１２への配信用として利用可能であることを示す、メッセージ利用可能メッセージ１７４を受信することができる。適切な場合、キューリスナーは、メッセージ利用可能メッセージ１７４の完全性を復号し、および／または検証することができる。
【０１４３】
ステップ４２１は、デキューメッセージを送信するという、対応する行為を含む（行為４１１）。たとえば、キューリスナー１１２は、（場合によっては、暗号化され、および／または電子署名された）デキューメッセージ１７６を、キューマネージャー１１８へ送信することができる。デキューメッセージ１７６は、アプリケーションメッセージ１３１が、アプリケーション１１２への配信用としてキューから外されることになることを示すことができる。デキューメッセージ１７６は、メッセージキュー１１７を識別する要素（たとえば、ｎｑ：ＱｕｅｕｅＮａｍｅ）およびアプリケーションメッセージ１３１を識別する要素（たとえば、ｎｑ：Ｓｅｑｕｅｎｃｅ）を含むことができる。一般に、デキューメッセージ（たとえばＳＯＡＰエンベロープ）は、さらなる制約を有するＷＳ−Ｅｎｕｍｅｒａｔｉｏｎのプルメッセージのフォーマットとすることができる。
【０１４４】
一般に、デキューメッセージ内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、セッション利用可能メッセージ、セッション受け入れメッセージ、ならびにメッセージ利用可能メッセージに関して前述したのと同じ意味を有する。さらに、デキューメッセージは、/s:Envelope/s:Header/nq:AbortCount要素を含むことができ、これを使用して、汚染されたメッセージ（poisoned-message）を検出するためのリトライカウントを示すことができる。デキューメッセージは、/s:Envelope/s:Header/wscoor:CoordinationContext要素を含むことができ、これを使用して、アトミックトランザクションコンテスト（たとえば、デキューメッセージ１７６およびデキュー応答１７７が、二相コミットプロトコルの一部である場合）を示すことができる。デキューメッセージは、/s:Envelope/s:Body/*/wsen:MaxElements要素を含むことができ、これを使用して、１つのデキュー要求において複数の要素をデキューできるかどうかを示すことができる。
【０１４５】
デキューメッセージ内に入れて渡されたエニュメレーションコンテキストが有効でない場合、受信側キューサービスは、その要求を失敗とし、ＷＳ−Ｅｎｕｍｅｒａｔｉｏｎにおいて指定されているように、次の障害を引き起こすことができる。
［コード］s12:Sender
［サブコード］wsen:InvalidEnumerationContext
［理由］「無効なエニュメレーションコンテキストである」
【０１４６】
ステップ４２０は、デキューメッセージを受信するという、対応する行為（行為４１２）を含む。たとえば、キューマネージャー１１８は、デキューメッセージ１７６をキューリスナー１１３から受信することができる。適切な場合、キューマネージャー１１８は、デキューメッセージ１７６の完全性を復号し、および／または検証することができる。ステップ４２０は、デキュー応答を構成するという、対応する行為（行為４１３）を含む。たとえば、キューマネージャー１１８は、デキュー応答１７７を構成することができる。デキュー応答１７７は、アプリケーションメッセージ１３１と同じメッセージングプロトコルに従って構成することができる。したがって、デキュー応答は、ＳＯＡＰエンベロープを含むこともできる。キューマネージャー１１８は、デキュー応答１７７を構成する際に、ＷＳ−ＡｄｄｒｅｓｓｉｎｇおよびＷＳ−Ｃｏｏｒｄｉｎａｔｉｏｎに従って、転送メッセージ１５１Ｂを処理することができる。キューマネージャー１１８は、セッションＩＤヘッダが存在する場合、そのセッションＩＤヘッダを、転送メッセージ１５１Ｂのｎｑ：ＴｒａｎｓｆｅｒＨｅａｄｅｒ要素からデキュー応答１７７へとコピーすることができる。そのセッションＩＤヘッダがＬａｓｔＭｅｓｓａｇｅフラグを有する場合、キューマネージャー１１８は、デキュー応答１７７の本文にｗｓｅｎ：ＥｎｄＯｆＳｅｑｕｅｎｃｅ要素を追加することができる。
【０１４７】
アプリケーションメッセージ１３１の構成可能なプロトコル要素（たとえば、アドレス指定プロトコル要素、セキュリティプロトコル要素、信頼性プロトコル要素、およびトランザクションプロトコル要素）は、コード化されているため、アプリケーションメッセージ１３１の構成可能なプロトコル要素は、デキュー応答１７７の構成には干渉しない。したがって、アプリケーションメッセージ１３１内に含まれる構成可能なプロトコル要素は、すべてデキュー応答１７７内で再利用することができる。
【０１４８】
一般に、デキュー応答（たとえばＳＯＡＰエンベロープ）は、さらなる制約を有する、ＷＳ−Ｅｎｕｍｅｒａｔｉｏｎのプル応答メッセージのフォーマットとすることができる。一般に、デキュー応答内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、セッション利用可能メッセージ、セッション受け入れメッセージ、メッセージ利用可能メッセージ、ならびにデキューメッセージに関して前述したのと同じ意味を有する。さらに、デキュー応答は、/s:Envelope/s:Header/nq:Sequence要素を含むことができ、これは、デキューメッセージ内に含まれるエニュメレーションコンテキストが、アプリケーションセッションに関連付けられていたかどうかの表示を含むことができる。デキュー応答は、/s:Envelope/s:Body/wsen:PullResponse/wsen:Items/nq:ApplicationMessage/nq:WrappedXmlBase64要素を含むことができ、これは、適切にラップされたアプリケーションメッセージのアプリケーションＳＯＡＰエンベロープを含む。デキュー応答は、/s:Envelope/s:Body/wsen:PullResponse/wsen:EndOfSequence要素を含むことができ、これを使用して、シーケンス内の最終メッセージ、または他の理由ではこのコンテキスト内においてさらなるメッセージが生じないことを、示すことができる。
【０１４９】
ステップ４２０は、コード化されたアプリケーションメッセージをデキュー応答内にカプセル化するという、対応する行為（行為４１４）を含む。たとえば、キューマネージャー１１８は、コード化されたアプリケーションメッセージ１３１Ｅを、デキュー応答１７７内にカプセル化することができる。コード化されたアプリケーションメッセージ１３１Ｅをカプセル化した後、デキュー応答１７７を暗号化し、および／または電子署名することができる。デキュー応答１７７を電子署名することによって、デキュー応答１７７の信頼性に対するいくらかの保証がキューリスナー１１３に提供される。デキュー応答１７７は、ＷＳ−Ｓｅｃｕｒｉｔｙや、たとえば、ＳＳＬ（「Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ」）などのトランスポート層セキュリティを含む、さまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【０１５０】
ステップ４２０は、デキュー応答をアプリケーションへの配信用として送信するという、対応する行為（行為４１５）を含む。たとえば、キューマネージャー１１８は、デキュー応答１７７をキューリスナー１１３へ送信することができる。ステップ４２１は、コード化されたアプリケーションメッセージをカプセル化しているデキュー応答を受信するという、対応する行為（行為４１６）を含む。たとえば、キューリスナー１１３は、コード化されたアプリケーションメッセージ１３１Ｅをカプセル化しているデキュー応答１７７を受信することができる。適切な場合、キューリスナー１１３は、デキュー応答１７７の完全性を復号し、および／または検証することができる。
【０１５１】
ステップ４２１は、コード化されたアプリケーションメッセージを復号するという、対応する行為（行為４１７）を含む。たとえば、キューリスナー１１３は、コード化されたアプリケーションメッセージ１３１Ｅを、アプリケーションメッセージ１３１へと復号することができる。キューリスナー１１３は、アンラッピングアルゴリズムを実行することができ、このアンラッピングアルゴリズムは、コード化タイプ（たとえばｂａｓｅ６４）、コンテンツタイプ（たとえば文字列）、およびコード化されたアプリケーションメッセージを入力として受け取り、（コード化されていない）アプリケーションメッセージを出力として返す。
【０１５２】
ステップ４２１は、アプリケーションメッセージをアプリケーションへ送信するという、対応する行為（行為４１８）を含む。たとえば、キューリスナー１１３は、アプリケーションメッセージ１３１をアプリケーション１１２へ送信することができる。アプリケーション１１２がアクティブでない場合、キューリスナー１１３は、アプリケーション１１２を管理するコンテナ環境へ注意喚起通知１７８を送信することができる。
【０１５３】
キューリスナー１１３は、アプリケーションメッセージ１３１を任意選択で暗号化し、および／または電子署名することもできる。アプリケーションメッセージ１３１を暗号化し、および／または電子署名することは、アプリケーションメッセージ１３１が伝送中に修正または妨害されないよう確実を期す上で役に立つ。アプリケーションメッセージ１３１Ｅは、たとえばＷＳ−Ｓｅｃｕｒｉｔｙなどのさまざまな異なるセキュリティメカニズムのいずれかを使用して保護することができる。
【０１５４】
アプリケーション１１２は、アプリケーションメッセージ１１２を受信し、処理する。適切な場合、アプリケーション１１２は、アプリケーションメッセージ１３１を復号して、アプリケーションメッセージ１３１の平文を示すことができる。アプリケーション１１２は、対応する電子署名を復号して、アプリケーションメッセージ１３１の完全性を検証することもできる。
【０１５５】
キューからメッセージを読み取るアプリケーションは、コンテナ内にホストすることができる。アプリケーションは、さまざまな理由から実行されていない場合がある。たとえば、アプリケーションが失敗している場合や、アプリケーションが休止している場合、あるいはリサイクルされている場合などがある。注意喚起通知は、キュー内のメッセージが利用可能であることを、ホスティング環境に通知することを提供する。ホスティング環境は、注意喚起通知を使用して、アプリケーションを開始するか、アプリケーションの別のインスタンスを開始するか、あるいはアプリケーションを実行するようにスケジュールすることができる。一般に、注意喚起通知は、（保護される前に）次のフォーマットとすることができる。
【０１５６】
【表１３】
2006172454.tif 000015
【０１５７】
一般に、注意喚起通知内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、セッション利用可能メッセージ、セッション受け入れメッセージ、メッセージ利用可能メッセージ、デキューメッセージ、ならびにデキュー応答に関して前述したのと同じ意味を有する。さらに、注意喚起通知メッセージは、/s:Envelope/s:Header/nq:QueueName要素を含むことができ、これは、処理対象のメッセージを含む論理キューの名前（ＵＲＩ）を含むことができる。注意喚起通知メッセージは、/s:Envelope/s:Header/nq: Volatile要素を含むことができ、これを使用して、処理されるのを待っているキューメッセージが揮発性であることを示すことができる。
【０１５８】
適切な場合、送信側キューマネージャー（たとえば、キューマネージャー１０８）は、肯定応答のシーケンス内の欠番を埋めるために、キャンセル転送メッセージを受信側キューマネージャー（たとえば、キューマネージャー１１８）へ送信することができる。送信側キューマネージャーは、ＷＳ−ＲｅｌｉａｂｌｅＭｅｓｓａｇｉｎｇシーケンス内の１つまたは複数のＭｅｓｓａｇｅＮｕｍｂｅｒが、受信側キューマネージャーに受信されることがないと判断した場合、キャンセル転送オペレーションを引き起こす。受信側キューマネージャーは、キャンセル転送メッセージを受信すると、あたかも識別されたメッセージが受信されているかのように、処理を継続する。受信側キューマネージャーは、ＷＳ−ＲｅｌｉａｂｌｅＭｅｓｓａｇｉｎｇシーケンス上の１つまたは複数のＭｅｓｓａｇｅＮｕｍｂｅｒｓを実際に受信した場合、それらのＭｅｓｓａｇｅＮｕｍｂｅｒを受信したことを知らせることができる。一般に、キャンセル転送メッセージは、（保護される前に）次のフォーマットとすることができる。
【０１５９】
【表１４】
2006172454.tif 000016
【０１６０】
一般に、キャンセル転送メッセージ内の要素は、エンキューメッセージ、エンキュー応答、転送メッセージ、保存および回送メッセージ、保存および回送応答、登録メッセージ、登録応答、セッション利用可能メッセージ、セッション受け入れメッセージ、メッセージ利用可能メッセージ、デキューメッセージ、デキュー応答、ならびに注意喚起通知に関して前述したのと同じ意味を有する。さらに、キャンセル転送メッセージは、転送メッセージ用に指定された制約を順守するように構成することができる。
【０１６１】
キャンセル転送メッセージは、/s:Envelope/s:Body/*/wsu:Identifer要素を含むことができ、これは、キャンセル転送メッセージによって参照されているＷＳ−ＲＭ  Ｓｅｑｕｅｎｃｅを一意に識別する［ＲＦＣ２３９６］に準拠するＵＲＩを含むことができる。キャンセル転送メッセージは、/s:Envelope/s:Body/*/wsrm:AcknowledgementRange要素を含むことができ、これを使用して、もはや送信されることはないために受信側キューサービスがあたかも受信したかのように扱うべき、ＷＳ−ＲＭメッセージＳｅｑｕｅｎｃｅ  ＭｅｓｓａｇｅＮｕｍｂｅｒｓの範囲を示すことができる。キャンセル転送メッセージは、１つまたは複数のEnvelope/s:Body/*/wsrm:AcknowledgementRange要素を含むことができる。キャンセル転送メッセージは、/s:Envelope/s:Body/*/wsrm:AcknowledgementRange/@Upper要素を含むことができ、これを使用して、Ｓｅｑｕｅｎｃｅの範囲内の最も高い隣接するメッセージのメッセージ番号を示すことができる。キャンセル転送メッセージは、/s:Envelope/s:Body/*/wsrm:AcknowledgementRange/@Lowerを含むことができ、これを使用して、Ｓｅｑｕｅｎｃｅの範囲内の最も低い隣接するメッセージのメッセージ番号を示すことができる。
【０１６２】
１つのセッション用のアプリケーションメッセージの転送が完了すると、キューチャネルは閉じることができる。しかし、キューチャネルは、（たとえば、セッション識別子およびキュー名を含む）デタッチメッセージを送信側キューマネージャーへ送信して、そのセッションを引き続き開いたままにすべきであることを示すことができる。送信側キューマネージャーは、そのセッションを開いたまま保持し、そのセッションを引き続き開いたままにすることを了解するデタッチ応答を送信することができる。
【０１６３】
セッションの終わりをマークするために、キューチャネルは、そのセッション用の最終メッセージのｎｑ：Ｓｅｑｕｅｎｃｅヘッダに、ＬａｓｔＭｅｓｓａｇｅ要素を追加することができる。ＬａｓｔＭｅｓｓａｇｅ要素を検知したことに応答して、送信側キューマネージャーは、最終メッセージが送信された後に、そのアプリケーションセッション用に保持された状態をすべて破棄することができる。ＬａｓｔＭｅｓｓａｇｅ要素を検知したことに応答して、受信側キューマネージャーは、ＭｅｓｓａｇｅＮｕｍｂｅｒ要素を使用して、セッション用のメッセージをすべて受信したことを検知することができる。セッションが完了すると、受信側キューマネージャーは、そのセッション用の最終メッセージをデキュー応答内に入れて配信することができ、そのデキュー応答の本文内にｗｓｅｎ：ＥｎｄＯｆＳｅｑｕｅｎｃｅ要素を含めることができる。最終メッセージを配信した後、受信側キューマネージャーは、そのアプリケーションセッション用に保持された状態をすべて破棄することができる。キューリスナーがｗｓｅｎ：ＥｎｄＯｆＳｅｑｕｅｎｃｅ要素を受信すると、そのエニュメレーションコンテキストは無効となり、破棄することができる。
【０１６４】
図５は、送信側コンピュータシステムにおける、さまざまな信頼できるメッセージング状態の一例の状態図５００を示している。状態図５００に示されている状態は、メッセージごとのものであるという点が理解できるはずである。キューマネージャーは、自分が転送している複数のメッセージを有することができ、唯一の状態マシンを、それら複数のメッセージのそれぞれに関連付けることができる。
【０１６５】
たとえば、キューマネージャー１０８などの送信側キューマネージャーによって制御されているメッセージは、取り込み５０１の後に（すなわち、メッセージを取り込んだ後に）、取り込み済みの状態５１１へ移行することができる。転送を開始した後、送信側キューマネージャーは、保存および回送肯定応答を待つ。保存および回送肯定応答が受信されるまで、送信側キューマネージャーは、引き続き送信を試みる。
【０１６６】
保存および回送肯定応答５０２が受信されると、制御されているメッセージは、送信済みの状態５１２へ移行する。次いで送信側キューマネージャーは、転送肯定応答を待つ。転送肯定応答５０６が受信されると、制御されているメッセージは、転送済みの状態５１４へ移行する。次いで送信側キューマネージャーは、送信先キューマネージャーからの配信肯定応答を待つ。配信肯定応答５０７（肯定的な確認応答）が受信されると、制御メッセージは、配信済みの状態５１５へ移行し、対応するキューから削除することができる。
【０１６７】
制御されているメッセージが、取り込み済みの状態５１１へ移行すると、送信側キューマネージャーは、保存および回送肯定応答を受信するために指定の期限まで待つように構成することができる。保存および回送肯定応答を受信するための指定の期限が５０３において切れると、制御されているメッセージは、障害状態５１３へ移行する。制御されているメッセージが、送信済みの状態５１２へ移行すると、送信側キューマネージャーは、転送肯定応答を受信するために指定の期限まで待つように構成することができる。転送肯定応答を受信するための指定の期限が５０４において切れると、制御されているメッセージは、障害状態５１３へ移行する。さらに、送信側キューマネージャーが転送否定応答５２４を受信し、これによって、制御されているメッセージが障害状態５１３へ移行される場合もある。
【０１６８】
制御されているメッセージが、転送済みの状態５１４へ移行すると、送信側キューマネージャーは、配信肯定応答を受信するために指定の期限まで待つように構成することができる。配信肯定応答を受信するための指定の期限が５０５において切れると、制御されているメッセージは、障害状態５１３へ移行する。さらに、送信側キューマネージャーが配信否定応答５２５を受信し、これによって、制御されているメッセージが障害状態５１３へ移行される場合もある。転送および配信の肯定応答および否定応答は、送信側キューマネージャー内で作動するエラーサービスへ送信することができる。ユーザが非転送保証を要求している場合、制御されているメッセージは、保存および回送肯定応答が受信された後に削除することができる。
【０１６９】
図６は、受信側コンピュータシステムにおける、さまざまな信頼できるメッセージング状態の一例の状態図を示している。状態図６００に示されている状態は、メッセージごとのものであるという点が理解できるはずである。たとえば、キューマネージャー１１８などの受信側キューマネージャーによって制御されているメッセージは、正常な受信６０１（すなわち、メッセージの正常な受信）の後に、受信済みの状態６１１へ移行することができる。首尾よく受信したメッセージは、メッセージキュー内に取り込むことができる。受信側キューマネージャーは、保存および回送肯定応答６２４を、前の保存および回送サービスまたは保存および回送層へ返信することもできる。保存および回送肯定応答６２４を送信した後、受信側キューマネージャーは、転送肯定応答６０４を送信することができる。次いで受信側キューマネージャーは、メッセージをキューに入れる。
【０１７０】
保存および回送肯定応答６２４と転送肯定応答６０４の双方を送信すると、制御されているメッセージは、肯定応答送信済みの状態６１４へ移行する。６０５においてメッセージがキューから外されると、受信側キューマネージャーは、配信済みの状態へ移行することができる。受信側アプリケーションがメッセージを読み取ると、制御されているメッセージは、配信済みの状態６１５へ移行する。
【０１７１】
その一方で、制御されているメッセージは、エラーを伴った受信６０２（すなわち、たとえばそのようなキューが存在しない場合や、送信側がそのキューへの送信を許可されていない場合など、メッセージがエラーを伴って受信される場合）の後に、障害状態６１２へ移行することができる。受信側キューマネージャーは、保存および回送肯定応答６２３を、前の保存および回送サービスまたは保存および回送層へ返信することもできる。保存および回送肯定応答６２３を送信した後、受信側キューマネージャーは、転送否定応答６０３を送信すること（場合によっては、再送信を促すこと）ができる。保存および回送肯定応答６２３と転送否定応答６０３の双方を送信すると、制御されているメッセージは、否定応答送信済みの状態６１３へ移行することができる。転送および配信の肯定応答および否定応答は、送信側キューマネージャーにおいてホストされているエラーサービスへ送信される。
【０１７２】
図７は、本発明の原理用の適切な動作環境を示している。図７および以降の考察は、本発明を実装できる適切なコンピューティング環境の簡潔で一般的な説明を提供することを意図している。必須ではないが、本発明を、コンピュータシステムによって実行される、プログラムモジュールなどのコンピュータ実行可能命令という一般的文脈において説明する。一般に、プログラムモジュールは、特定のタスクを実行したり特定の抽象データ型を実装したりするルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令、関連付けられたデータ構造、およびプログラムモジュールは、本明細書で開示する方法の行為を実行するためのプログラムコード手段の例を示している。
【０１７３】
図７を参照すると、本発明を実装するためのシステムの一例は、汎用コンピューティングデバイスをコンピュータシステム７２０の形態で含み、このコンピュータシステム７２０は、処理装置７２１と、システムメモリ７２２と、システムメモリ７２２を含むさまざまなシステムコンポーネントを処理装置７２１に結合するシステムバス７２３とを含む。処理装置７２１は、本発明の特徴を含むコンピュータシステム７２０の機能を実施するように設計されたコンピュータ実行可能命令を実行することができる。システムバス７２３は、メモリバスまたはメモリコントローラと、ペリフェラルバスと、さまざまなバスアーキテクチャのいずれかを使用するローカルバスとを含む複数のタイプのバス構造のいずれにすることもできる。システムメモリは、読み取り専用メモリ（「ＲＯＭ」）７２４およびランダムアクセスメモリ（「ＲＡＭ」）７２５を含む。基本入出力システム（「ＢＩＯＳ」）７２６は、起動中などにコンピュータシステム７２０内の要素間における情報伝達を補助する基本ルーチンを含み、ＲＯＭ７２４内に格納することができる。
【０１７４】
コンピュータシステム７２０は、磁気ハードディスク７３９との間で読み取りや書き込みを行うための磁気ハードディスクドライブ７２７と、取り外し可能な磁気ディスク７２９との間で読み取りや書き込みを行うための磁気ディスクドライブ７２８と、たとえばＣＤ−ＲＯＭなどの取り外し可能な光ディスク７３１や他の光メディアとの間で読み取りや書き込みを行うための光ディスクドライブ７３０とを含むこともできる。磁気ハードディスクドライブ７２７、磁気ディスクドライブ７２８、および光ディスクドライブ７３０は、それぞれハードディスクドライブインターフェース７３２、磁気ディスクドライブインターフェース７３３、および光ドライブインターフェース７３４によってシステムバス７２３に接続される。これらのドライブおよびその関連するコンピュータ読取り可能記憶媒体は、コンピュータシステム７２０用のコンピュータ実行可能命令、データ構造、プログラムモジュール、および他のデータの不揮発性の記憶領域を提供する。本明細書に記載されている例示的環境では、磁気ハードディスク７３９、取り外し可能な磁気ディスク７２９、および取り外し可能な光ディスク７３１を採用しているが、磁気カセット、フラッシュメモリカード、デジタル多用途ディスク、ベルヌーイカートリッジ、ＲＡＭ、ＲＯＭなどを含む、データ保存用の他の種類のコンピュータ読取り可能記憶媒体を使用することもできる。
【０１７５】
オペレーティングシステム７３５、１つまたは複数のアプリケーションプログラム７３６、その他のプログラムモジュール７３７、およびプログラムデータ７３８を含む、１つまたは複数のプログラムモジュールを構成するプログラムコード手段は、ハードディスク７３９、磁気ディスク７２９、光ディスク７３１、ＲＯＭ７２４、またはＲＡＭ７２５上に格納することができる。ユーザは、キーボード７４０、ポインティングデバイス７４２、またはたとえばマイクロフォン、ジョイスティック、ゲームパッド、スキャナなどの他の入力デバイス（図示せず）を介して、コンピュータシステム７２０にコマンドおよび情報を入力することができる。これらおよび他の入力デバイスは、システムバス７２３に結合されている入力／出力インターフェース７４６を介して、処理装置７２１に接続することができる。入力／出力インターフェース７４６は、たとえばシリアルポートインターフェース、ＰＳ／２インターフェース、パラレルポートインターフェース、ユニバーサルシリアルバス（「USB」）インターフェース、またはＩＥＥＥ（「Institute of Electrical and Electronics Engineers」）１３９４インターフェース（すなわちＦｉｒｅＷｉｒｅインターフェース）などのさまざまな異なるインターフェースのいずれかに論理的に相当するか、あるいはさまざまなインターフェースの組合せに論理的に相当することさえできる。
【０１７６】
またモニタ７４７や他のディスプレイデバイスも、ビデオインターフェース７４８を介してシステムバス７２３に接続される。たとえば、スピーカおよびプリンタなど、他の周辺出力デバイス（図示せず）も、コンピュータシステム７２０に接続することができる。
【０１７７】
コンピュータシステム７２０は、たとえば、オフィス規模または企業規模のコンピュータネットワーク、ホームネットワーク、イントラネット、および／またはインターネットなどのネットワークに接続することができる。コンピュータシステム７２０は、このようなネットワークを介して、たとえばリモートコンピュータシステム、リモートアプリケーション、および／またはリモートデータベースなどの外部ソースとデータを交換することができる。
【０１７８】
コンピュータシステム７２０は、ネットワークインターフェース７５３を含み、これを介して外部ソースからデータを受信し、および／または外部ソースへデータを送信する。図７に示されているように、ネットワークインターフェース７５３によって、リンク７５１を介してリモートコンピュータシステム７８３とデータを交換することが容易になる。ネットワークインターフェース７５３は、たとえば、ネットワークインターフェースカード、および対応するＮＤＩＳ（「Network Driver Interface Specification」）スタックなどの、１つまたは複数のソフトウェアモジュールおよび／またはハードウェアモジュールに論理的に相当することができる。リンク７５１は、ネットワークの一部（たとえば、イーサネット（登録商標）の一セグメント）に相当し、リモートコンピュータシステム７８３は、そのネットワークの一ノードに相当する。
【０１７９】
同様にコンピュータシステム７２０は、入力／出力インターフェース７４６を含み、これを介して外部ソースからデータを受信し、および／または外部ソースへデータを送信する。入力／出力インターフェース７４６は、リンク７５９を介してモデム７５４（たとえば標準的なモデム、ケーブルモデム、またはＤＳＬ（「digital subscriber line」）モデム）に結合され、これを介してコンピュータシステム７２０は、外部ソースからデータを受信し、および／または外部ソースへデータを送信する。図７に示されているように、入力／出力インターフェース７４６およびモデム７５４によって、リンク７５２を介してリモートコンピュータシステム７９３とデータを交換することが容易になる。リンク７５２は、ネットワークの一部に相当し、リモートコンピュータシステム７９３は、そのネットワークの一ノードに相当する。
【０１８０】
図７は、本発明のための適切な動作環境を示しているが、本発明の原理は、必要に応じて適切な修正を施した、本発明の原理を実施できるいかなるシステムにおいても採用することができる。図７に示されている環境は、例示的なものにすぎず、本発明の原理を実施できるさまざまな環境のごく一部でさえ示すものでは決してない。
【０１８１】
本発明によれば、アプリケーション、キューチャネル、キューリスナー、キューマネージャー、転送層、保存および回送層、ならびに保存および回送サービスを含むモジュールと、アプリケーションメッセージ、コード化されたアプリケーションメッセージ、エンキューメッセージ、エンキュー応答、転送メッセージ、コード化された転送ヘッダ、保存および回送メッセージ、保存および回送応答、セッション利用可能メッセージ、受け入れメッセージ、メッセージ利用可能メッセージ、デキューメッセージ、デキュー応答、注意喚起通知、ならびにアクティブセッションＩＤを含む関連付けられたデータとは、コンピュータシステム７２０に関連付けられたコンピュータ読取り可能記憶媒体のいずれにも格納することができ、またそのいずれからもアクセスすることができる。たとえば、このようなモジュールの一部、および関連付けられたプログラムデータの一部は、システムメモリ７２２内に格納するために、オペレーティングシステム７３５、アプリケーションプログラム７３６、プログラムモジュール７３７、および／またはプログラムデータ７３８内に含めることができる。
【０１８２】
たとえば、磁気ハードディスク７３９などの大容量ストレージデバイスが、コンピュータシステム７２０に結合されている場合、このようなモジュールおよび関連付けられたプログラムデータは、その大容量ストレージデバイス内に格納することもできる。ネットワーク化された環境では、コンピュータシステム７２０に関連して示されているプログラムモジュール、またはその一部は、リモートコンピュータシステム７８３および／またはリモートコンピュータシステム７９３に関連付けられたシステムメモリおよび／または大容量ストレージデバイスなどの、リモートメモリストレージデバイス内に格納することができる。このようなモジュールの実行は、前述のように分散環境内で行うことができる。
【０１８３】
本発明は、その趣旨または本質的な特徴から逸脱することなく、他の個別の形態において具体化することができる。記載した実施形態は、すべての点で単に例示的なものとみなすべきであり、限定的なものとみなすべきではない。したがって本発明の範囲は、上述の説明ではなく、添付の特許請求の範囲によって示される。特許請求の範囲の均等物の意味および範囲内に収まる変更は、すべて特許請求の範囲内に包含される。
【図面の簡単な説明】
【０１８４】
【図１Ａ】キューに入れられたアプリケーションメッセージの確実な転送を容易にするコンピュータアーキテクチャの一例を示す図である。
【図１Ｂ】キューに入れられたアプリケーションメッセージの確実な転送を容易にするコンピュータアーキテクチャの一例を示す図である。
【図２】キューに入れられたアプリケーションメッセージを確実に送信する方法を示す例示的な流れ図である。
【図３】キューに入れられたアプリケーションメッセージを確実に回送する方法を示す例示的な流れ図である。
【図４】キューに入れられたアプリケーションメッセージを確実に受信する方法を示す例示的な流れ図である。
【図５】送信側コンピュータシステムにおいてさまざまな信頼できるメッセージング状態を示す例示的な状態図である。
【図６】受信側コンピュータシステムにおいてさまざまな信頼できるメッセージング状態を示す例示的な状態図である。
【図７】本発明の原理用の適切な動作環境を示す図である。
【図１Ａ】
2006172454.tif 000017
【図１Ｂ】
2006172454.tif 000018
【図２】
2006172454.tif 000019
【図３】
2006172454.tif 000020
【図４】
2006172454.tif 000021
【図５】
2006172454.tif 000022
【図６】
2006172454.tif 000023
【図７】
2006172454.tif 000024