(57)【要約】ユーザー定義エージェントとコネクタを定義して、メッセージングアプリケーションのためのメッセージを処理する。ユーザー定義エージェントを構成して、メッセージングアプリケーションの機能を拡張する。各ユーザー定義エージェントを、指定されたプロトコルに従って特定のアドレス空間へメッセージをルーティングするように構成されているコネクタに関連付ける。特定のアドレス空間内でルーティングされたメッセージを受け取ると、サーバー上のメッセージングアプリケーションは、関連付けられたユーザー定義エージェントを呼び出して、メッセージを処理する。ユーザー定義エージェントは、メッセージングアプリケーションに関連付けられているＡＰＩを利用してメッセージの処理をサポートする。
2012529087.tif 000002
【特許請求の範囲】
【請求項１】
電子メッセージを処理するための方法であって、
メッセージにアクセスするステップ（４１０）と、
前記メッセージのためのコネクタを選択するステップ（４２０）と、
メッセージングアプリケーションを使用して、前記選択されたコネクタに前記メッセージをルーティングするステップ（４２０）と、
前記メッセージングアプリケーションが前記メッセージを処理するための前記コネクタへユーザー定義エージェントを呼び出すステップ（４３０）とを含み、
前記ユーザー定義エージェントは、前記メッセージングアプリケーションのサポートされていないプロトコルのためのサポートを提供することを特徴とするコンピュータのプロセッサ上で実行する方法。
【請求項２】
前記コネクタは、前記メッセージングアプリケーションの開発者と異なる第三者によって定義されるアドレス空間のプロパティ及びサポートされているプロトコルのプロパティを含むこと（３２０）を特徴とする請求項１に記載の方法。
【請求項３】
前記メッセージのための前記コネクタを選択するステップは、前記アドレス空間のプロパティと一致する前記メッセージのためのルーティングアドレスを決定すること及び複数のコネクタから前記コネクタを選択すること（４２０）を含むことを特徴とする請求項２に記載の方法。
【請求項４】
前記ユーザー定義エージェントは、リモートネットワークアドレスに前記メッセージを配信すること、及び前記メッセージの配信の成功と失敗の前記メッセージングアプリケーションを通知すること（６４０）を含む動作を実行することを特徴とする請求項２に記載の方法。
【請求項５】
前記通知は、前記メッセージングアプリケーションに関連付けられているアプリケーションプログラミングインターフェイス（ＡＰＩ）を通じて発生すること（２１）を特徴とする請求項４に記載の方法。
【請求項６】
前記ユーザー定義エージェントを、前記メッセージングアプリケーションによって立ち上げられるオープンコネクションイベント、配信メールのイベント、及びクローズコネクションイベント上に呼び出すこと（５１０）を特徴とする請求項４に記載の方法。
【請求項７】
前記オープンコネクションイベントを、前記ユーザー定義エージェントのインスタンスがないこと及び前記ユーザー定義エージェントの複数のインスタンスにとって必要なことに応じて、前記メッセージングアプリケーションで立ち上げて、前記ユーザー定義エージェントに関連付けられているメッセージの処理を動作すること（５１０）を特徴とする請求項４に記載の方法。
【請求項８】
前記ユーザー定義エージェントは、前記メッセージと診断のキュー管理用の前記ＡＰＩを使用すること（２１）を特徴とする請求項５に記載の方法。
【請求項９】
メッセージングアプリケーションに関連付けられているユーザー定義の配信エージェントを使用して、メッセージを処理するためのコンピュータが実行可能な命令を有するコンピュータ読み取り可能な記憶媒体であって、
第１のプロトコルを使用して配信されるメッセージにアクセスするステップであってし、前記第１のプロトコルが前記メッセージングアプリケーションによってサポートされていないステップ（４１０）と、
前記メッセージのためのコネクタのグループからコネクタを選択するステップ（４２０）と、
前記選択されたコネクタに前記メッセージをルーティングするステップ（４２０）と、
前記メッセージングアプリケーションが前記コネクタ用のユーザー定義エージェントを呼び出して、前記第１のプロトコルを使用して前記メッセージを処理するステップ（４３０）であって、前記ユーザー定義エージェントが前記第１のプロトコルを使用して前記メッセージを配信するためのサポートを提供するステップと、
前記ユーザー定義エージェントが前記メッセージングアプリケーションによって提供されたＡＰＩ（２１）を利用して、メッセージ配信のステータスを提供するステップと
を備えたことを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項１０】
前記コネクタのそれぞれは、アドレス空間及びサポートされたプロトコルを定義すること（３２０）を特徴とする請求項９に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１１】
前記コネクタの選択は、前記メッセージのためのルーティングアドレスを決定すること、並びに前記ルーティングアドレスと一致する前記コネクタ及びアドレス空間を選択することを含むこと（４２０）を特徴とする請求項１０に記載のコンピュータ読み取り可能な記憶媒体。
【請求項１２】
メッセージングアプリケーションのためのプロトコルのサポートを拡張するユーザー定義エージェントを使用してメッセージを処理するためのシステムであって、
プロセッサ（５）及びコンピュータ読み取り可能な媒体（１４）と、
前記コンピュータ読み取り可能な媒体で記憶され、かつプロセッサ上で実行するオペレーティング環境（１６）と、
ネットワーク接続（２０）と、
リモートアドレスへの配信のためのメッセージを記憶するように構成されるメッセージキュー（２３０）と、
サーバー上で動作するメッセージングアプリケーション（２４）及び接続マネージャ（２９）とを備え、
前記メッセージキューからのメッセージにアクセスし（４１０）、
前記リモートアドレスに基づいて、前記メッセージのためのコネクタを選択し（４２
０）、
前記選択されたコネクタに前記メッセージをルーティングし（４２０）、
サードパーティで定義されたユーザー定義エージェントを呼び出し（４３０）、
前記ユーザー定義エージェントは、前記リモートアドレスへの接続を開放し（５３０
）、前記メッセージを配信し（５４０）、前記メッセージの配信が成功するときに前記  接続を閉じ（７３０）、前記メッセージ（６４０）の前記配信に関連する前記メッセー  ジングアプリケーションの成功を通知することを含むタスクを実行するように構成され  ることを特徴とするシステム。
【請求項１３】
前記コネクタの選択は、前記メッセージのアドレス空間及びプロトコルと一致する複数のコネクタからコネクタを決定することを含むこと（４２０）を特徴とする請求項１２に記載のシステム。
【請求項１４】
前記ユーザー定義エージェントを、前記メッセージングアプリケーションによって立ち上げられるオープンコネクションイベント、配信メールのイベント、及びクローズコネクションイベント上に前記メッセージングアプリケーションによって呼び出し、前記ユーザー定義エージェントは、前記オープンコネクションイベント、前記配信メールのイベント、及び前記クローズコネクションイベントへハンドラを提供すること（５１０）を特徴とする請求項１２に記載のシステム。
【請求項１５】
前記オープンコネクションイベントを、前記ユーザー定義エージェントのインスタンスがないこと及び前記ユーザー定義エージェントの複数のインスタンスにとって必要なことに応じて、前記メッセージングアプリケーションで立ち上げて、前記ユーザー定義エージェントに関連付けられているメッセージの処理を動作すること（５１０）を特徴とする請求項１４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザー定義エージェントを使用するメッセージの配信に関する。
【背景技術】
【０００２】
メッセージングシステムは、通常、サーバーコンポーネントとクライアントコンポーネントを含んでいる。コンポーネント間のメッセージの通信を容易にするために、コンポーネントは通信プロトコルに合意する。プロトコルの合意は、通信中に各当事者の期待される動作を定義するルールを構成する。別のメッセージングシステムは、異なるプロトコルに合意する。
【発明の概要】
【０００３】
この発明の概要を提供して、下記の発明の詳細な説明でさらに記載されている簡略化した形の概念の選択を導入する。この発明の概要は、特許請求の範囲の主題の重要な機能又は本質的な特徴を識別することを意図するものではなく、特許請求の範囲の主題を決定する際の補助として使用することを意図するものでもない。
【０００４】
ユーザー定義エージェントとコネクタを定義して、メッセージングアプリケーションのためのメッセージを処理する。ユーザー定義エージェントを構成して、メッセージングアプリケーションの機能を拡張する。例えば、メッセージングアプリケーションで自然にサポートされていないプロトコルに従ってメッセージを処理する機能を追加するユーザー定義エージェント及びコネクタを作成することができる。各ユーザー定義エージェントを、指定されたプロトコルに従って特定のアドレス空間へメッセージをルーティングするように構成されているコネクタに関連付ける。特定のアドレス空間内でルーティングされたメッセージを受け取ると、サーバー上のメッセージングアプリケーションは、関連付けられたユーザー定義エージェントを呼び出して、メッセージを処理する。ユーザー定義エージェントは、メッセージングアプリケーションに関連付けられているＡＰＩを利用してメッセージの処理をサポートし、ならびにメッセージングアプリケーションへの処理に関する情報を提供している。
【図面の簡単な説明】
【０００５】
【図１】コンピュータのためのコンピュータアーキテクチャを説明する図である。
【図２】メッセージを処理するためのユーザー定義エージェントを使用する実施例のメッセージングシステムを示す図である。
【図３】ユーザー定義エージェントを使用するメッセージングアプリケーションを初期化するためのプロセスを説明する図である。
【図４】ユーザー定義エージェントを使用するメッセージを処理するためのプロセスを示す図である。
【図５】ユーザー定義エージェントによってサポートされているプロトコルへの接続を開くためのプロセスを説明する図である。
【図６】ユーザー定義エージェントを使用するメッセージを配信するためのプロセスを示す図である。
【図７】ユーザー定義エージェントに関連付けられている接続を閉じるためのプロセスを説明する図である。
【発明を実施するための形態】
【０００６】
これから図面を参照すると、同一の符号で同一の要素を表し、様々な実施形態を説明する。特に、図１及びそれと対応する議論は、実施形態を実施できる適切なコンピューティング環境の簡単で、一般的な説明を提供することを目的とする。
【０００７】
一般に、プログラムモジュールには、特定のタスクを実行するか、又は特定の抽象データ型を実装するルーチン、プログラム、コンポーネント、データ構造、及び他のタイプの構造が含まれている。他のコンピュータシステムの構成も、マルチプロセッサシステム、マイクロプロセッサベース又はプログラム可能な家庭用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含んで使用できる。分散コンピューティング環境を、タスクが通信ネットワークを通じてリンクされたリモート処理装置によって実行される場所で使用することもできる。分散コンピューティング環境では、プログラムモジュールを、ローカル及びリモートの両方のメモリ記憶装置に配置することができる。
【０００８】
これから図１を参照して、様々な実施形態に用いられるコンピュータ１００による例示のコンピュータアーキテクチャを説明する。図１に示すように、コンピュータアーキテクチャは、サーバー（例えば、メッセージングサーバー）、デスクトップ、又はモバイルコンピュータとして構成されることができ、並びにＲＡＭ（random access memory）９とＲＯＭ（read-only memory）１０を含む、ＣＰＵ（central processing unit）５、システムメモリ７、及びＣＰＵ５のメモリと結合するシステムバス１２を含むことができる。起動時のように、コンピュータ内の要素間の情報を転送するのを助ける基本ルーチンを含む基本入力/出力システムは、ＲＯＭ１０に格納される。コンピュータ１００はさらに、オペレーティングシステム１６、アプリケーションプログラム、及び他のプログラムモジュールを格納するための大容量記憶装置１４を含み、これらを以下でより詳細に説明する。
【０００９】
大容量記憶装置１４は、バス１２に接続されている大容量記憶装置コントローラ（図示せず）を通じ手ＣＰＵ５に接続されている。大容量記憶装置１４及びその関連するコンピュータ読み取り可能な媒体は、コンピュータ１００に不揮発性記憶装置を提供する。本明細書に記載されているコンピュータ読み取り可能な媒体の説明は、ハードディスクやＣＤ−ＲＯＭドライブのような大容量記憶装置に言及しているが、コンピュータ読み取り可能な媒体は、コンピュータ１００によってアクセスできる任意の利用可能なメディアとすることができる。
【００１０】
一実施例として、限定ではなく、コンピュータ読み取り可能な媒体は、コンピュータ記憶媒体及び通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ可読命令、データ構造、プログラムモジュール又は他のデータなどのような情報を記憶するための任意の方法又は技術で実装された、揮発性及び不揮発性、リムーバブル並びに非リムーバブルメディアを含む。コンピュータ記憶媒体は、これらに限定されないが、ＲＡＭ、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他の固体のメモリ技術、ＣＤ−ＲＯＭ、ＤＶＤ（digital versatile disks）、又は他の光ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージ若しくは他の磁気記憶装置、又は所望の情報を格納するために使用でき、かつコンピュータ１００によってアクセスすることができる任意の他の媒体を含む。
【００１１】
種々の実施形態によれば、コンピュータ１００は、インターネットのようなネットワーク１８を通じてリモートコンピュータへの論理接続を使用するネットワーク環境で動作する。コンピュータ１００は、バス１２に接続されたネットワークインターフェイスユニット２０を通じてネットワーク１８に接続することができる。ネットワーク接続は、無線及び/又は有線にすることができる。ネットワークインタフェースユニット２０を利用して、ネットワーク及びリモートコンピュータシステムの他のタイプに接続することもできる。コンピュータ１００は、キーボード、マウス、又は電子スタイラス（図１に示されていない）を含む他のデバイスの数からの入力を受信して処理する入力/出力コントローラ２２を含むこともできる。同様に、入力/出力コントローラ２２は、ユーザーインターフェース２８、プリンタ、又は出力装置の他のタイプを含む表示画面への出力を提供することができる。ＵＩ（User interface）２８を設計して、１つ又は複数のユーザー定義の配送エージェントを開発し、並びにメッセージングアプリケーション２４と相互交信する視覚的な方法でユーザーに提供する。
【００１２】
上記に簡潔に述べたように、複数のプログラムモジュール及びデータファイルを、コンピュータ１００の大容量記憶装置１４及びＲＡＭ ９に格納することができ、コンピュータ１００はMICROSOFT CORPORATION of Redmond, WashingtonのWINDOWS SERVER 2008（登録商標）オペレーティングシステムのようなネットワークコンピュータの動作を制御するための適切なオペレーティングシステム１６を含む。大容量記憶装置１４及びＲＡＭ９は、１つ又は複数のプログラムモジュールを格納することもできる。特に、大容量記憶装置１４及びＲＡＭ９は、1つ又は複数のアプリケーションプログラムを格納することができる。アプリケーションプログラムの一つは、MICROSOFT EXCHANGE SERVER 2010（登録商標）のようなメッセージングアプリケーション２４である。
【００１３】
一般的に、メッセージングアプリケーション２４を構成して、さまざまなネットワークの場所へ/からのメッセージを処理する。接続マネージャ２９を構成して、メッセージアプリケーション２４へのメッセージを処理する間、ユーザー定義エージェント２６及びコネクタ２５を管理する。各ユーザー定義エージェント２６を作成して、特定のアドレス空間内の指定されたプロトコルに従ってメッセージを処理する。一般的に、ユーザー定義エージェントを作成して、メッセージングアプリケーション２４によりネイティブサポートされていないプロトコルに従ってメッセージを処理する。例えば、メッセージングアプリケーション２４をネイティブに構成して、第一及び第二のプロトコルを使用するメッセージを処理することができ、それに対してユーザー定義エージェントをサードパーティで構成して、第３のプロトコルを使用するメッセージを処理することができる。同様に、１つ又は複数のユーザー定義エージェントを構成して、異なるアドレス空間を利用するが、他のエージェントとして同じプロトコルを使用するメッセージを処理することができる。各ユーザー定義エージェント２６は、指定されたプロトコルに従って特定のアドレス空間へのメッセージをルーティングするように構成されているコネクタ２５と関連付けられている。特定のアドレス空間内でルーティングされたメッセージを受信すると、接続マネージャ２９は、メッセージを処理するために関連付けられたユーザー定義エージェント２６を呼び出す。呼び出されたエージェントは、メッセージの処理をサポートするメッセージングアプリケーション２４に関連付けられているＡＰＩ２１を利用する。一般的に、ＡＰＩ２１は、ネイティブエージェント及びコネクタとしてのメッセージング処理機能へ同様にアクセスするユーザー定義エージェント２６を提供する。例えば、ユーザー定義エージェントは、キューの管理及び診断（すなわち、メッセージの追跡、接続ログ、待ち時間の追跡）のためのＡＰＩ２１を利用することができる。
【００１４】
図２は、処理メッセージのためのユーザー定義エージェントを使用する実施例のメッセージングシステムを示す。図示のように、システム２００は、メッセージングサーバー２０５、２５０及び２５５を含む。図示のようなサーバー２０５は、ユーザー定義エージェント１−Ｎ（２２０）、コネクタ１−Ｎ（２４０）、メッセージキュー１−Ｎ（２３０）、及び接続マネージャ２１０を含む。サーバー２５０及び２５５を同様に、サーバー２０５として構成することができる。システム２００は、電子的なメッセージを処理するように構成されている、複数のサーバー及び/又はクライアントコンピューティングデバイスを含むことができる。
【００１５】
上述のように、接続マネージャ２１０は、ユーザー定義エージェント２２０、コネクタ２４０、及びキュー２３０から処理するメッセージを管理するメッセージングアプリケーションを補助する。エージェント２２０内の各ユーザー定義エージェントは、特定のアドレス空間内の指定されたプロトコルに従って、メッセージを処理する。
【００１６】
一実施形態によれば、各ユーザー定義エージェント２２０は、オープンコネクションイベント、配信メールのイベント、及びクローズコネクションイベントを含む３つのイベントを公開する基本クラスから派生されている。ユーザー定義エージェントを定義すると、それがサポートする配信プロトコルを指定する。指定された配信プロトコルを、メッセージを処理するときに、使用可能なユーザー定義エージェントの選択の接続マネージャ２１０によって使用する。以下の記述は、ユーザー定義エージェントに関連する典型的な定義である。
【００１７】
public class FooDeliveryAgentManager : DeliveryAgentManager
{ 
public override string SupportedDeliveryProtocol
{ 
get { return "foo"; }
} 
} 
public class FooDeliveryAgentFactory 
DeliveryAgentFactory<FooDeliveryAgentManager>
{ 
public override DeliveryAgent CreateAgent(SmtpServer server)
{ 
return new FooDeliveryAgent(); 
}
} 
public class FooDeliveryAgent : DeliveryAgent
{ 
public FooDeliveryAgent()
{ 
this.OnOpenConnection ＋＝ new OpenConnectionEventHandler(this.OnOpenConnectionHandler); 
this.OnDeliverMailltem ＋＝ new DeliverMailltemEventHandler(this.OnDeliverMailltemHandler);   
this.OnCloseConnection ＋＝ new
CloseConnectionEventHandler(this.OnCloseConnectionHandler); 
} 
private void OnOpenConnectionHandler(OpenConnectionEventSource 
source, OpenConnectionEventArgs e)
{ 
// TODO: open a connection
} 
private void OnDeliverMailItemHandler(DeliverMailItemEventSource source, DeliverMailltemEventArgs e)
{ 
// TODO: deliver a mail item 
} 
private void OnCloseConnectionHandler(CloseConnectionEventSource 
source, CloseConnectionEventArgs e)
{ 
// TODO: close the connection
}
}
【００１８】
接続マネージャ２１０が、ユーザー定義エージェントの一つと等しいネクストホップ型のメッセージを有し、かつ、ユーザー定義エージェントのためのアクティブな呼び出しの数がゼロであることを決定する場合に、オープンコネクションイベントが発生する。別の実施形態によれば、ActiveQueueLength /ActiveConnectionsがMaxMessagesPerConnectionより大きく、アクティブな呼び出しの総数がAgentConnectorConfigクラスで定義されたMaxConcurrentConnections未満である場合に、オープンコネクションイベントが発生する可能性がある。
【００１９】
キューの１つに関連付けられているコネクタに合った特有の配信プロトコルのためのオープンコネクションイベントに登録されたユーザー定義エージェントがアクティブになっている。
【００２０】
一実施形態によれば、ユーザー定義エージェントが起動した後に、メッセージングアプリケーションと通信するためのＡＰＩによって提供されたRegister Connectionメソッドを呼び出していない場合、ユーザー定義エージェントのために関連付けられたキューは、ユーザー定義エージェントがキューを処理していない（「どのエージェントもキューを処理しない」）ことを表示するエラーメッセージでRETRY状態に置かれている。
【００２１】
配信メールのイベントは、Register Connectionメソッドと呼ばれ、Defer Queueメソッド又はFail Queue メソッドとは呼ばれていないオープンコネクションイベントに対して、以前に呼び出されたエージェントの後に発生する。配信メールのイベントは、接続マネージャ２１０が、関連付けられているキュー内の次のメールアイテムを取得し、メッセージが配信のために利用可能であることをエージェントに認識させるたびに発生する。一実施形態によれば、１つのイベントは、配信されるメッセージごとに生成される。配信中に、エージェントは、ＡＰＩを使用するメッセージングアプリケーションへ戻るメッセージの配信ステータスを認識する。そして、この情報を、メッセージの処理の管理をサポートするメッセージングアプリケーションによって使用することができる。加えて、エージェントがリモートシステムを持つ接続上の一時的又は永続的な失敗に出会った場合、接続がもはや利用できなないことを接続マネージャ２１０に通知する。
【００２２】
メッセージが処理されたこと（AckMailltemSuccess、AckMailltemDefer、AckMailltemFail、DeferQueue、呼び出されないFailQueueのメソッド）を確認せずにリターンを呼び出されるユーザー定義エージェントの場合、キュー内のメッセージの状態は、「エージェントはメッセージを処理せずに返した。」に構成されたエラーと共に「再試行する」に変更される。一実施形態によれば、デフォルトの時間間隔を使用して、行動を延期する（例えば、１分、２分、５分など）。ユーザー定義エージェントは、全体のメッセージを一度に確認応答するのではなく、メールアイテムを個々の受信者に配信を承認するオプションもある。これにより、メッセージを各受信者ごとに独立して配信するプロトコル（ＦＡＸやＳＭＳのような）のために役に立つことができる。受信者を確認応答するためのメソッドは、AckRecipientSuccess、AckRecipientDefer、及びAckRecipientFailが含まれる。
【００２３】
ユーザー定義エージェントを使用して処理されたメッセージは、メッセージングアプリケーションのデフォルトのネイティブ配信エージェントを使用するメッセージと同様に扱われる。このように、プロトコルが最初に電子メールサーバーによってサポートされているプロトコルではないときでさえも、メッセージを追跡することができ、かつログイベントと関連付けられる。一実施形態によれば、メッセージングアプリケーションは、デフォルトメソッドとしてのＳＭＴＰ（Simple Mail Transfer Protocol）技術を使用して、インターネットへ及びインターネットからメッセージを配信する。ＳＭＴＰは、電子メールの交換を管理するプロトコルのＴＣＰ／ＩＰスイートのメンバーである。１つ以上のユーザー定義エージェントを、メッセージングアプリケーションによってサポートされるプロトコルを拡張して定義することができる。一実施形態によれば、配信エージェントは、サードパーティによって定義される。
【００２４】
ユーザーが定義したエージェントは、これらに限定されないが、ＳＭＴＰコネクタ、ＦＡＸコネクタ、ＳＭＳコネクタ、Ｘ.４００コネクタ、非標準プロトコルのコネクタ、などを含む任意のプロトコルを指定することができる。管理者などのユーザーは、ネイティブプロトコルを使用して処理される他のすべてのメッセージのためのツールという観点から同じキューを使用するＳＭＴＰ以外のプロトコルを介して送信されているメッセージのキューを表示及び管理することができる。同様に、動作は、キューを一時停止すること、キュー内のメッセージを拒否することなど、すべての作業を行う。
【００２５】
クローズコネクションイベントは、次の場合に発生する。それは、接続マネージャ２１０が、エージェントについてキュー内に利用できるメッセージがなく、エージェントがＡＰＩによって提供されたDeferQueue、FailQueue又はUnRegister Connectionのメソッドを以前に呼び出していないと決定する場合である。呼び出されると、エージェントは、ネットワーク接続を閉じ、ＡＰＩ及びリターンで提供されたUnRegisterConnectionメソッドを呼び出すことによって接続が閉じられているメッセージングアプリケーションへ応答する。エージェントがUnRegisterConnectionメソッドを呼び出すことなくリターンする場合、又はイベントハンドラーがクローズコネクションイベントに登録されていない場合、メッセージングシステムは、接続の登録を取り消す。
【００２６】
サービスのシャットダウン時に、登録されている接続が存在する場合、クローズコネクションイベントを引き起こすことができる。これは、リモートシステムを持つすべての接続を正常に閉じるためのエージェントを許可する。
【００２７】
各ユーザー定義エージェントは、複数の接続が呼び出される関連したキュー内、並びに、そのコネクタの最大接続数内でメッセージの閾値を定義することができる。キューを処理するときに、接続マネージャ２１０は、閾値によって定義されているよりも既存の接続ごとに複数のメッセージがある場合、及び新しい接続の作成が接続の最大数を超えない場合に、新しい接続を作成する。
【００２８】
メッセージキュー２３０は、一つ以上の異なるキューを含むことができる。例えば、メッセージのすべてを１つのキュー内に格納することができ、又はメッセージを別のキューに格納することができる。一実施形態によれば、配送エージェントのタイプごとにメッセージキューが関連付けられている。各メッセージキューは、処理の次の段階に入るために待機しているメッセージのための一時的な保持の場所である。別の実施形態によれば、メッセージのキューイングを、コネクタの構成によって制御することができる。この実施例では、単一のキューを、配信エージェントコネクタの各インスタンスに対して作成する。この方法では、管理者などの権限を持つユーザーは、プロトコル（単一のキューをもたらせている）のための全体のアドレス空間を処理する単一のコネクタを作成することの選択肢を持っているか、又はそれらは、複数のコネクタ（複数のキューをもたらせている）でアドレス空間を分割することを選択できる。
【００２９】
一実施形態によると、メッセージングアプリケーションは、関連したユーザー定義エージェントによって完全に処理されるまで、及びリモートシステムへ配信されたものとしてメッセージングアプリケーションに報告されるまで、配信されたものとしてのメッセージを考慮しない。その結果、メッセージ追跡ログは、非ネイティブのプロトコル経由で配信されたメッセージに何が起きたのかの正確な表現を含む。
【００３０】
図３から図７を参照すると、処理メッセージにユーザー定義エージェントを使用するための例示的なプロセスを説明している。
【００３１】
本明細書で提示されるルーチンの議論を読むときに、（1）コンピューティングシステム上で実行する行為若しくはプログラムモジュールが実装されたコンピュータのシーケンスとして、及び/又は、（2）コンピューティングシステム内で相互接続されたマシンの論理回路若しくは回路モジュールとして、様々な実施形態の論理演算が実装されていることを理解すべきである。実施例は、本発明を実施するコンピューティングシステムの性能要件に依存する選択の問題である。したがって、本明細書に記載した実施形態を説明し及び構成する論理演算は、演算、構造装置、行為又はモジュールとして様々に呼ばれている。これらの動作、構造装置、行為及びモジュールを、ソフトウェアで、ファームウェアで、特殊な目的のデジタルロジックで、及びそれらの任意の組み合わせで、実装することができる。
【００３２】
図３は、ユーザー定義エージェントを使用するメッセージングアプリケーションを初期化するためのプロセスを図示している。
【００３３】
スタート動作後、プロセスが動作３１０へ流れ、定義された各コネクタをメッセージングアプリケーションによってロードする。一実施形態によれば、各コネクタは、アドレス空間及び配信プロトコルを定義する。接続のための最大のメッセージ、並びに最大同時接続数のような、他の定義を含むことができる。アドレス空間は、ユーザー定義エージェントのコネクタをサポートするアドレス空間を定義する。メッセージングアプリケーションによってアドレス空間を使用して、受信者のルーティングアドレスと一致するコネクタを見つける。配信プロトコルのプロパティは、コネクタによってサポートされるプロトコルを示す。これをメッセージングシステムによって使用して、コネクタの配信プロトコルのプロパティの値と一致する配信プロトコルを「アドバタイズ」するエージェントだけを呼び出す。接続のプロパティあたりの最大のメッセージは、エージェントの呼び出しを介して配信されるメッセージの最大数を示す。このプロパティは、ユーザー定義エージェントに関連した配信メールハンドラへ引き上げられる配信メールのイベントの最大数である。最大同時接続のプロパティは、エージェントで発生でき、同時にエージェントを呼び出す最大数を示す。これは、エージェントに関連したオープンコネクションイベントのハンドラへ引き上げられるオープンコネクションイベントの最大数である。
【００３４】
動作３２０に移動し、アドレス空間及びコネクタのプロトコルを決定する。
【００３５】
動作３３０に流れて、一つ以上のエージェントをロードされたコネクタに関連付ける。エージェントは、コネクタのプロトコルと比較されたエージェント、及びコネクタのアドレス空間と比較されたエージェントのアドレス空間がサポートするプロトコルに基づいて選択される。
【００３６】
プロセスはその後、終了の動作に流れ、そして他のアクションの処理に戻る。
【００３７】
図４は、ユーザー定義エージェントを使用するメッセージを処理するためのプロセスを示す。
【００３８】
スタート動作後、プロセスは動作４１０に流れ、メッセージにアクセスする。一実施形態によれば、メッセージはメッセージングシステムに関連付けられているキューからアクセスされる。
【００３９】
動作４２０に移動し、メッセージが適切なコネクタにルーティングされる。コネクタをアドレス空間及びプロトコルに基づいて選択する。
【００４０】
動作４３０に流れて、コネクタに関連付けられているエージェントを呼び出す。エージェントを呼び出すと、エージェントは、メッセージングシステムによって引き上げられたイベントに基づいてさまざまな動作を実行することができる。
【００４１】
動作４４０に移行し、メッセージを、選択されたユーザー定義エージェントによって処理する。メッセージの処理中に、ユーザー定義エージェントは、メッセージングアプリケーションに関連付けられている、サードパーティによって提供された機能並びにＡＰＩによって提供された機能、を利用している。
【００４２】
プロセスはその後、終了の動作に流れ、そして他のアクションの処理に戻る。
【００４３】
図５は、ユーザー定義エージェントによってサポートされるプロトコルの接続を開くためのプロセス５００を図示している。
【００４４】
スタート動作後、プロセスは、オープンコネクションイベントをメッセージアプリケーションによって引き上げる動作５１０に流れる。
【００４５】
動作５２０に移動し、関連するユーザー定義エージェントによって供給されるオープンコネクションのハンドラを呼び出す。
【００４６】
動作５３０に移行し、エージェントは、リモートシステムへの１つ又は複数のネットワーク接続を開く。一実施形態によれば、ユーザー定義エージェントは、接続がＡＰＩを経由して開いていることメッセージングアプリケーションに通知する。
【００４７】
動作５４０に流れて、エージェントは、エージェントに関連付けられているキュー内のすべてのメッセージの配信を試みる。
【００４８】
プロセスはその後、終了の動作に流れ、そして他のアクションの処理に戻る。
【００４９】
図６は、ユーザー定義エージェントを使用するメッセージを配信するためのプロセスを示す。
【００５０】
スタート動作後、プロセスは、ユーザー定義エージェントによって供給されるメールハンドラが、メッセージングアプリケーションによって引き上げられる配信メールアイテムのイベントに応答して呼び出される動作６１０に流れる。メールハンドラは、キュー内にメッセージがあるとき、及びユーザー定義エージェントがすでにリモートホストとのネットワーク接続を確立しているとき、に呼び出される。
【００５１】
動作６２０に移動し、エージェントは、処理されている現在のメッセージを配信しようと試みる。
【００５２】
決定の動作６３０に移行して、メッセージが正常に配信されたか否かの決定を判断する。メッセージが正常に配信されると、プロセスは、ユーザー定義エージェントがメッセージを正常に配信していることをＡＰＩ経由でメッセージングアプリケーションに通知する動作６４０へ移動する。
【００５３】
メッセージが正常に配信されていないときは、プロセスは決定の動作６３５に流れ、メッセージが一時的なメッセージの失敗のために配信されなかったのかどうかの判断をする。一時的なメッセージの失敗があるとき、プロセスがメッセージ配信を試行するブロック６２０に戻る。一実施形態によれば、メッセージを配信しようとするこのリターンを、所定の時間待機するように構成することができる。
【００５４】
一時的なメッセージの失敗がないとき、プロセスは決定の動作６４５に移動して、永続的なメッセージの失敗があるかどうかを判断する。永続的なメッセージの失敗があるとき、プロセスは、メッセージの失敗の応答がＡＰＩ経由でメッセージングアプリケーションに提供された動作６５０に移動する。永続的なメッセージの失敗がないとき、プロセスは、一時的な接続失敗があるかどうかを判断する決定の動作６５５に移動する。
【００５５】
一時的な接続失敗が発生したとき、プロセスは動作６６０に移動して、エージェントのキュー内のメッセージの配信が一定期間延期される。
【００５６】
一時的な接続失敗がないとき、プロセスは動作６６５に移動し、エージェントがキューの失敗のメッセージングアプリケーションに通知する際に、キューの配信をやめる。
【００５７】
プロセスはその後、終了の動作に流れ、そして他のアクションの処理に戻る。
【００５８】
図７は、ユーザー定義エージェントに関連付けられている接続を閉じるためのプロセスを図示している。
【００５９】
起動動作の後、プロセスは、クローズコネクションイベントをメッセージングアプリケーションで引き出す動作７１０に流れる。動作７２０に移動すると、エージェントのクローズコネクションのハンドラを呼び出す。
【００６０】
動作７３０に流れて、エージェントは、リモートホストとの接続を閉じる。プロセスはその後、動作７４０に移動し、ＡＰＩを経由するエージェントは、接続が閉じられ及びそれに応じて、メッセージングアプリケーションに通知して、メッセージングアプリケーションは接続の登録を取り消す。プロセスはその後、終了の動作に流れ、他のアクションの処理に戻る。
【００６１】
上記の仕様、実施例、及びデータは、本発明の組成物の製造及び使用の完全な説明を提供する。本発明の多くの実施形態を、本発明の趣旨及び範囲から逸脱することなく作ることができるので、本発明は、以下に添付された特許請求の範囲に存在する。
【図１】
2012529087.tif 000003
【図２】
2012529087.tif 000004
【図３】
2012529087.tif 000005
【図４】
2012529087.tif 000006
【図５】
2012529087.tif 000007
【図６】
2012529087.tif 000008
【図７】
2012529087.tif 000009
【国際調査報告】
2012529087.tif 000010
2012529087.tif 000011