(57)【特許請求の範囲】
【請求項１】
受信側へ送信すべく発信側から受信する複数のメッセージを、１つ以上の他のメッセージへの１つのメッセージの依存関係に基づくシーケンスに順序づけする方法であって：
メッセージストリームから１つ以上のメッセージを受信するステップと；
前記メッセージストリームから１つ以上のメッセージを生成して、前記生成されたメッセージの各々に対する順序、前記生成されたメッセージの各々に対する目標、および前記生成されたメッセージの各々に対するステータスフィールドのための値を決定するステップと；
前記生成されたメッセージをデータベースに格納するステップと；
一群の格納されたメッセージに共通する各メッセージの特性（ｉ及びｊに基づくＰキー順序）を識別するステップと；
前記一群のメッセージにおいて前記格納された複数のメッセージに対する１つのメッセージの依存関係を、当該メッセージのパラメータから識別するステップと；
前記格納されたメッセージが先行するメッセージに依存するかどうか決定して、前記先行するメッセージの前記ステータスフィールドの値を読み取ることにより前記先行するメッセージのステータスを決定するステップと；
前記先行するメッセージの前記ステータスに基づいて、前記格納されたメッセージの前記ステータスフィールドの前記値を更新するステップと；
前記格納されたメッセージが送信され得るかどうか決定するために、前記データベース内の特定の格納されたメッセージを見直すステップと；
前記先行するメッセージが送信された受信確認の後、前記格納されたメッセージを送信するステップと；を含み、
前記ステータスフィールドの前記値は、他のメッセージに依存することを示す値、他のメッセージに依存しないことを示す値、及び、対応するメッセージが失われているままで依存関係がまだ識別されないときの不知に対する値を含み、
前記生成されたメッセージの各々に対する順序は、ｉのみに基づき、
前記ｉは、シーケンスのタグ又はインデックスを示し、前記ｊは、メッセージの目標を示す、方法。
【請求項２】
請求項１に記載の方法であって、所定の状態になるまで前記格納されたメッセージを遅延させるステップをさらに含む、方法。
【請求項３】
請求項１に記載の方法であって、遅延時間になるまで前記格納されたメッセージを遅延させるステップをさらに含む、方法。
【請求項４】
請求項１に記載の方法であって、先行するメッセージが存在するかどうか決定する前記ステップは、前記先行するメッセージが受信側によって受信されたことを示すメッセージ受信確認を受信するステップを含む、方法。
【請求項５】
請求項４に記載の方法であって、前記格納されたメッセージをアウトバウンド待ち行列に送信するステップをさらに含む、方法。
【請求項６】
請求項４に記載の方法であって、前記格納されたメッセージと関連した任意の次のメッセージの前記ステータスフィールドの前記値を更新するために、前記格納されたメッセージの前記ステータスフィールドの前記値を更新するステップをさらに含む、方法。
【請求項７】
請求項１に記載の方法であって、前記一群のメッセージの各メッセージに対する、前記見直すステップ、更新するステップ、および送信するステップを順に繰り返すステップをさらに含む、方法。
【請求項８】
請求項１に記載の方法であって、ステータスの任意の変更とともに前記データベースを更新するステップをさらに含む、方法。
【請求項９】
受信側へ送信すべく発信側から受信するシーケンス識別子のない複数のメッセージを、当該複数のメッセージのメッセージ順序と同等のシーケンスに順序づけするメッセージシステムであって：
メッセージストリームから１つ以上のメッセージを受信するための、そして前記メッセージストリームから１つ以上のメッセージを生成するための、そして前記生成されたメッセージの各々に対する順序、前記生成されたメッセージ各々に対する目標、および前記生成されたメッセージの各々に対するステータスフィールドのための値を決定するための、そして前記生成されたメッセージをデータベースに格納するための、非一時的なコンピュータ可読媒体で具体化される受信モジュールと；
一群の前記格納されたメッセージに共通する各メッセージの特性（ｉ及びｊに基づくＰキー順序）を識別するための、そして前記メッセージのパラメータから前記一群のメッセージについてのメッセージ順序（１、２、３、４その他）に対応するシーケンスを識別するための、そして、
シーケンスにおいて格納されたメッセージよりも前に先行するメッセージが存在するかどうか決定して、前記先行するメッセージの前記ステータスフィールドの値を読み取ることにより前記先行するメッセージのステータスを決定する手段、および；
前記先行するメッセージの前記ステータスに基づいて、前記格納されたメッセージの前記ステータスフィールドの前記値を更新する手段、を用いることによって；
前記格納されたメッセージが送信され得るかどうか決定するために、前記データベース内の特定の格納されたメッセージを見直すための、非一時的なコンピュータ可読媒体で具体化されるメッセージ管理モジュールと；
前記先行するメッセージが一旦送信された前記シーケンスに従って前記格納されたメッセージを送信するための、非一時的なコンピュータ可読媒体で具体化される送信モジュールと；を備え、
前記ステータスフィールドの前記値は、他のメッセージに依存することを示す値、他のメッセージに依存しないことを示す値、及び、対応するメッセージが失われているままで依存関係がまだ識別されないときの不知に対する値を含み、
前記生成されたメッセージの各々に対する順序は、ｉのみに基づき、
前記ｉは、シーケンスのタグ又はインデックスを示し、前記ｊは、メッセージの目標を示す、システム。
【請求項１０】
請求項９に記載のシステムであって、所定の状態になるまで前記格納されたメッセージを遅延させる遅延モジュールをさらに備える、システム。
【請求項１１】
請求項９に記載のシステムであって、遅延時間になるまで前記格納されたメッセージを遅延させる遅延時間モジュールをさらに備える、システム。
【請求項１２】
実行されるときに、受信側へ送信すべく発信側から受信する複数のメッセージを、１つ以上の他のメッセージへの１つのメッセージの依存関係に基づくシーケンスに順序づけする方法をコンピュータに実行させる命令を有するコンピュータプログラムでコード化された非一時的なコンピュータ可読媒体であって、前記方法は、前記コンピュータプログラムがプログラム可能な装置上で実行されるときに：
メッセージストリームから１つ以上のメッセージを受信するステップと；
前記メッセージストリームから１つ以上のメッセージを生成して、前記生成されたメッセージの各々に対する順序、前記生成されたメッセージの各々に対する目標、および前記生成されたメッセージの各々に対するステータスフィールドのための値を決定するステップと；
前記生成されたメッセージをデータベースに格納するステップと；
一群の格納されたメッセージに共通する各メッセージの特性（ｉ及びｊに基づくＰキー順序）を識別するステップと；
前記一群のメッセージにおいて前記格納された複数のメッセージに対する１つのメッセージの依存関係を、当該メッセージのパラメータから識別するステップと；
前記格納されたメッセージが先行するメッセージに依存するかどうか決定して、前記先行するメッセージの前記ステータスフィールドの値を読み取ることにより前記先行するメッセージのステータスを決定するステップと；
前記先行するメッセージの前記ステータスに基づいて、前記格納されたメッセージの前記ステータスフィールドの前記値を更新するステップと；
前記格納されたメッセージが送信され得るかどうか決定するために、前記データベース内の特定の格納されたメッセージを見直すステップと；
前記先行するメッセージが送信された受信確認の後、前記格納されたメッセージを送信するステップと；を含み、
前記ステータスフィールドの前記値は、他のメッセージに依存することを示す値、他のメッセージに依存しないことを示す値、及び、対応するメッセージが失われているままで依存関係がまだ識別されないときの不知に対する値を含み、
前記生成されたメッセージの各々に対する順序は、ｉのみに基づき、
前記ｉは、シーケンスのタグ又はインデックスを示し、前記ｊは、メッセージの目標を示す、
非一時的なコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージの順序を管理する方法およびシステムに関し、特に、しかし限定することなく、マルチプルプロセッサ環境において外部システムに対するメッセージのシーケンス処理に関する。
【背景技術】
【０００２】
メッセージ送信システムは、多数の別々のドメインにおいて存在して、多数の別々の方法において定式化される。メッセージは、既に行ってしまったかまたはまだ来ないかいずれかの他のメッセージにしばしば関係があり、換言すれば、メッセージへのシーケンスがしばしば存在する。多くのメッセージ送信システムが現在稼動している方法に起因して、メッセージにとって、シーケンス外の中央処理環境で受信されることは、まれではない。これは、特に、プロセスが別々の速度で発生することができるマルチプロセッサ環境における場合であり、そしてそれは、非シーケンス処理につながる。これらのメッセージは、それから、目的地に先に伝わることをしばしば要求される。いくつかの目的地は、それらがその後メッセージを適切に処理することに失敗するように、順序がバラバラで受信されたメッセージに対処することができない。
【０００３】
多くの知られたメッセージ送信システムがある。そしてそれは、上記で識別される課題のいくつかを解決することを試みる。例えば、特許文献１は、メッセージを並行して処理するためにシーケンサを用いるシステムを記述する。メッセージは、固有の識別子およびシーケンス標識を有する。このシステムにおいて、そのまたは各メッセージに対して演繹的にシーケンス識別子を決定することが可能であるような状況にある。これは、同じシーケンス識別子を共有するメッセージが同じプロセスによって配分されるという、アフィニティ（親近性）の使用を容易にする。特許文献１において、シーケンス処理は、メッセージをアウトバウンド待ち行列内にロックすることによって管理される。
【０００４】
特許文献２には、メッセージが同じ資源によって処理されることを確実にするために、システムがシーケンス識別子およびシーケンス番号の組合せを使用するマルチプロセッサ環境が開示されている。この方法は、待機中のメッセージ（それらが処理されることができる前に、受信確認を要求する）のスレッドを要求する。シーケンス番号に依存する待ち行列の選択もあり、待ち行列は順序づけされることができる。
【０００５】
特許文献３には、メッセージの順序づけが、共有資源または共通スレッドを有する同じソースからのメッセージを処理することによって保護される並列処理環境が開示されている。前と同じように、これは、待機中のスレッドおよびプロセスの使用、または先に伝わるためのメッセージの順序づけられた待ち行列を要求する。
【０００６】
上述の従来技術の方法は、ある程度機能する。但し、それらは、複雑さならびに大量のメモリおよび処理パワーの使用につながる待ち行列メッセージに大きく依存する。このシステムが有する主要な問題は、メンテナンスおよび、固有のシーケンス相関に基づくシーケンス処理を有することがつねに可能とは限らないという事実である。依存関係は、同じシーケンス識別子の範囲内におけるシーケンス番号の正しい順序よりもなおさら複雑でありえる。上記の方法は機能するが、メンテナンスおよび信頼性の課題によって損なわれる。メモリ内に待機中のスレッドを有することは、持続的でなく、それで、課題が機械上に起こる場合、シーケンス処理が失われる。順序づけられた待ち行列において管理されるシーケンス処理を有することは、拡張性の課題をもたらす。より多くの待ち行列を加えることはより困難である。または、プロセスおよび待ち行列の間にアフィニティがなければならない。アフィニティはまた、管理するのにより複雑である。サービスに関して冗長性がないので、それは故障のポイントを加える。加えて、従来技術は集中化した履歴を教示しないので、複雑なシーケンス処理を扱うことは可能でない。換言すれば、固有のシーケンス識別子がない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第ＷＯ  ２００７／０６２５１０
【０００８】
【特許文献２】米国特許出願公開第ＵＳ  ２００７／０１２４３９８
【０００９】
【特許文献３】米国特許出願公開第ＵＳ  ２００３／１１０２３０
【発明の概要】
【発明が解決しようとする課題】
【００１０】
本発明の目的は、少なくとも従来技術と関連した課題のいくつかを解決することである。
【課題を解決するための手段】
【００１１】
本発明は、添付の請求の範囲において提示されるような方法およびシステムを提供する。
【００１２】
本発明の一態様によれば、受信側へ送信すべく発信側から受信する複数のメッセージを、その複数のメッセージのメッセージ順序（メッセージ順序はリアルタイムに決定される）と同等のシーケンスに順序づけする方法であって：メッセージストリームから１つ以上のメッセージを受信して、それらをデータベースに格納するステップと；一群のメッセージに共通である各メッセージの特性（Ｐキー順序）を識別するステップと；一群のメッセージに対するメッセージ順序（１、２、３、４、その他）に対応するシーケンスを、メッセージのパラメータから識別するステップと；データベース内の特定の格納メッセージを、その格納メッセージが送信され得るかどうか決定するために見直すステップと；シーケンスにおいて格納メッセージよりも前に先行するメッセージが存在するかどうか決定して、その先行するメッセージのステータスを決定するステップと；先行するメッセージのステータスに基づいて、格納メッセージのステータスを更新するステップと；先行するメッセージが一旦送信されたシーケンスにしたがって格納メッセージを送信するステップと；を含む方法が提供される。
【００１３】
本発明は、高度に拡張性のあるシステムを提供する。そしてそれは、増加した転送量に対処するために容易に拡張されることができる。本発明はまた、マルチプロセッサ環境においてメッセージが正しい順序で送信されることを保証する。メッセージの依存関係は、厳しく要求される。システムによって導入される依存関係はない。順序づけは全部でなく、独立しているメッセージは並列に送信されることができる。したがって、１つの受信器のリンクが故障した場合、メッセージが機能的に結びつけられない限り、それは他のいかなる受信器にも衝撃を与えない。加えて、別々のプロセッサ間の非同期化が多くの課題につながり得るように、正しい順序を使用することは非常に重要である。例えば、航空会社環境において、メッセージの同期に関して課題がある場合、航空機に利用可能なスペースが実際あるときに、乗客は座席を与えられることができない。これは、航空会社において金の損失および同様に他の不利益につながる。
【００１４】
スレッドおよびアフィニティがプロセスの一部を形成しないので、本発明によるプロセスは、単純な実施によって提供される。特に、システムのいかなる待ち行列およびプロセスエレメントの間にも、それらが存在しないようにアフィニティがない。加えて、エラーが処理されることのできるフレキシブル性がある。シーケンスの失われたメッセージを扱うときに、これは特に重要である。データベースを用いて、メッセージの完全な履歴および伝わりは、特定の時間ウィンドウについて維持される。時間ウィンドウはまた、閾値を提供する。閾値の前では、メッセージは１つの状態にありえて、後では、その状態は変化することができる。メンテナンス問題のために、そして、メッセージおよびそれと関連する情報を格納することを要求されるスペース量を減らすために、閾値は特に有用である。加えて、待ち行列は最小化され、拡張性はより容易になされる。
【００１５】
本発明の第２の態様によれば、受信側へ送信すべく発信側から受信する複数のメッセージを、その複数のメッセージのメッセージ順序と同等のシーケンスに順序づけするメッセージシステムであって：メッセージストリームから１つ以上のメッセージを受信して、それらをデータベースに格納する受信モジュールと；一群のメッセージに共通する各メッセージの特性（Ｐキー順序）を識別し、メッセージのパラメータから一群のメッセージについてのメッセージ順序（１、２、３、４その他）に対応するシーケンスを識別し、そして、格納メッセージが送信可能であるか決定するためにデータベース内の特定の格納メッセージを見直す、メッセージ管理モジュールと；シーケンスにおいて格納メッセージよりも前に先行するメッセージが存在するかどうか決定して、その先行するメッセージのステータスを決定する手段と；先行するメッセージのステータスに基づいて格納メッセージのステータスを更新する手段と；先行するメッセージが一旦送信されたシーケンスに従って前記格納メッセージを送信する送信モジュールと；を備えるシステムが提供される。
【図面の簡単な説明】
【００１６】
一例として、添付図面の参照がなされる。
【図１】図１は、一例として与えられる本発明の実施形態にしたがう、システムの単純な描写である。
【図２】図２は、一例として与えられる本発明の実施形態にしたがう、メッセージの通常の場合のシーケンス処理の描写である。
【図３】図３は、一例として与えられる本発明の実施形態にしたがう、図１のシステムの詳細な描写である。
【図４】図４は、一例として与えられる本発明の実施形態にしたがって用いられる、命名法を識別するための表の一部である。
【図５】図５は、一例として与えられる本発明の実施形態にしたがう、メッセージ生成を示すフローチャートである。
【図６】図６は、一例として与えられる本発明の実施形態にしたがう、メッセージ用の計算シーケンスを示すフローチャートである。
【図７】図７は、一例として与えられる本発明の実施形態にしたがう、メッセージ用の「Ｖステータス」を示すフローチャートである。
【図８】図８は、一例として与えられる本発明の実施形態にしたがう、コールバックのカスケーディングおよびシーケンス処理を示すフローチャートである。
【図９】図９は、一例として与えられる本発明の実施形態にしたがう、メッセージ依存関係の表である。
【図１０】図１０は、一例として与えられる本発明の実施形態にしたがう、乗客名簿エンベロープの例である。
【図１１】図１１は、一例として与えられる本発明の実施形態にしたがう、最初に分割する環境の場合での必要なシーケンス処理を示すフローチャートである。
【図１２】図１２は、一例として与えられる本発明の実施形態にしたがう、単一の目標用の依存関係ツリーである。
【発明を実施するための形態】
【００１７】
最高レベルで、本発明は、同期を保証するために１つのシステムから別のものへのメッセージの順序づけに関係がある。これは、例として図１に示される。図１は、メッセージ管理モジュール１０２に接続される予約システム（システムＡ）１００を示す。メッセージ管理モジュールは、後で詳しく述べるように入ってくるメッセージを管理する。その後、同期したメッセージを航空会社システム（システムＢ）１０４に送信する。予約システム１００は、任意の適切なタイプのものでよく、一例としてグローバルディストリビューションシステム（ＧＤＳ）および、他の任意の適切なタイプのうちの他の中心的資源を含む。予約システムは、オンラインウェブプロセス（例えばブラウザ、旅行代理店または他の任意の適切なボディ）によって稼動されてよい。航空会社システム１０４は、１または多くの航空会社と関連してよい。メッセージ管理モジュール１０２は、多くの別々のプロセス（例えばフィルタリング、オーダリング（順序づけ）、フォーマッティングなど）を含む。
【００１８】
メッセージ送信システムの任意のタイプにおいて、特定のシーケンス処理の必要性を満たすために、メッセージにとって要求条件があってよい。これは特に、顧客が航空券を適切なクライアント航空会社から購入している環境の場合である。航空券の購入の例の場合、メッセージは、乗客名簿（ＰＮＲ）とみなされる。乗客名簿は、その旅への起きてよい任意の変更または修正に加えて、別料金、乗客がリクエストした任意の追加的なサービスを含んでいる、乗客に対する特定の旅のすべての詳細を含む。
【００１９】
図２は、メッセージのシーケンス処理がなぜ重要であるかの例を示す。図２は、メッセージ管理モジュール１０２およびメッセージ２００の入ってくるストリームを示す。メッセージストリームは、２つの別々のレコードに関係あるメッセージを含む。第１のレコードに関するメッセージは、実線によって表され、第２のレコードに関するメッセージは、破線によって表される。レコードごとに、番号０、１、２、３、４によって表されるメッセージの特定のシーケンスがある。順序は、絶対的（０、１、２、３、４）または相対的（（０、）、（１、０）、（２，１）、（４，２）、．．．）のいずれも可能であるにもかかわらず、シーケンスは、メッセージの作成の順序に基づいてよい。メッセージ２０２が特定のレコードにフライトを追加して、メッセージ２０４が同じレコードから同じフライトをキャンセルする場合、クライアント航空会社２０６は、シーケンスまたは内容のいかなる意味ももたらすためにメッセージ２０４よりも前にメッセージ２０２を受信することを必要とする。クライアント航空会社がメッセージ２０２よりも前にメッセージ２０４を見る場合、航空会社は、メッセージのシーケンスに従ってまだ予約されなかったフライトをキャンセルしようとする。メッセージ管理モジュール１０２は、メッセージがメッセージ管理モジュールに到達する順序にかかわりなく、メッセージ２０４よりも前にメッセージ２０２がクライアント航空会社２０６によって受信されることを確実にする。換言すれば、メッセージ順序は、入ってくる順序に関係なく「オンザフライ」で計算される。これは、さらに詳細に後述される。
【００２０】
図３を参照すると、メッセージ管理モジュールのより詳細な図が示される。メッセージ管理モジュールは、入力Ｐｉ３００を受信する。そしてそれは、入力ストリームモジュール３０２によって１つ以上の入力ストリーム内に生成される。Ｐｉを形成しているメッセージは、並列処理または他の問題に起因して未定義順序にあってよい。但し、そのメッセージは高信頼システムによって生成されて、メッセージが失われることはないと目下のところ仮定される。入力ストリームは、それから、入力ストリームに含まれるメッセージを生成するために、メッセージ生成モジュール３０４によって用いられる。メッセージは、それから、記憶モジュール３０６に保存される。メッセージ生成モジュールはまた、タイマー３０８に、および出力ストリームモジュール３１０に接続される。タイマーの目的は、他のイベントが前もってこれへの与えられた浮上を有しない場合、与えられた期間の後、与えられたメッセージが再処理を受けることを確実にすることである。出力ストリームモジュール３１０は、メッセージ送信モジュール３１２に接続される。そしてそれは、出力３１４を外部システム３１６に出力する。メッセージ送信モジュールはまた、出力（一般に特定のメッセージ）が受信されたことを示すために外部システム３１６から受信確認３１８を受信することができる。受信確認は、矢印３２０で示すように、記憶モジュールへ返送される。受信確認は、もしあれば、次にどのメッセージが送信されるべきかを決定するために用いる。ボックス１〜７内の番号は、図５、図８におけるステップに対応する。これらはさらに詳細に後述される。
【００２１】
後述する処理ステップをより完全に理解するために、メッセージと関連した多くのキーポイント（メッセージ自体の性質およびタイプ、それらの命名法および、他のメッセージとのそれらの関係）を理解することが重要である。
【００２２】
本発明は、１つ以上のメッセージへの依存関係を有するメッセージを取扱う。他のものとの依存関係を有するメッセージは、メッセージのファミリーの一部を形成するといわれる。ほとんどの場合、メッセージは、概略的に正しい順序でメッセージ管理モジュール１０２に到達する。しかしながら、マルチ処理環境では、メッセージが乱れた順序で受信されることは、まれではない。これは、本発明によって取り組まれる課題のうちの１つである。メッセージがすぐに送信できるときに、それは他の任意のメッセージから独立して、できるだけ速く送信される。これは、問題のメッセージが後述するように発信されたものと仮定する。メッセージが直ちに送信できないときに、これには一般に理由がある。１つの可能な理由は、問題のメッセージに先行するメッセージがまだ受信されていないことである。これに代わる理由は、先行するメッセージが既に送信されて、そして受信確認がまだ受信されていないことである。メッセージ順序が完全に決定されなかった状況もあってよい。この場合、メッセージは、正しい順序が決定されるまで待たなければならなくてよい。メッセージが直ちに送信できないいかなる状況においても、問題のメッセージのスケジューリングを決定する追加的な基準（例えばタイマーの使用）があってよい。例えば、先行するメッセージが受信されなくて、そして「シーケンス番号に穴」がある場合である。
【００２３】
メッセージは、命名法の特殊なタイプを利用する。これは、メッセージ管理モジュールにおけるメッセージの順序またはシーケンスを決定するために、データベースのさまざまな参照および依存関係に関連して用いられる。図４を参照すると、メッセージ命名法の特定の態様が記述される。図４の表は、データベース、メッセージ参照および任意の依存関係におけるライン番号を示す。データベースは、２つのメッセージＭ９（ｊ）およびＭ１０（ｊ）を示す。メッセージＭ１０（ｊ）がＭ９（ｊ）に依存する場合、それから、メッセージＭ９（ｊ）の受信確認が受信されるときに、プロセスは、任意の依存関係情報があるかどうか決定するために、Ｍ９（ｊ）に依存している任意の格納された依存関係ラインを見つけるためにデータベースを見る。このようにして、ラインＭ１０（ｊ）は識別される。例において、ラインＮ＋１は、ラインＮへの依存関係を有する。したがって、一旦Ｍ９（ｊ）が受信確認されると、ラインＮ＋１（Ｍ１０（ｊ）に対応する）はここで送信されることができる。
【００２４】
さらなる命名法は、メッセージの由来および行き先に関係する。この点で、「ｉ」は元のシーケンスのタグまたはインデックスであり、「ｊ」はメッセージの目標である。メッセージ生成器は、Ｐｉにより示されるメッセージを送信する。ここで、ｉはメッセージの順序を示す。システムにおいてメッセージを受信するとき、目標ｊは不知である。本発明に関連したシステムは、メッセージＰｉを受信して、メッセージＭｉ（ｊ）を生成する。ここで、ｉはメッセージ（Ｐｉと同じ）の順序であり、ｊはメッセージＭｉ（ｊ）を受信すべきエンドユーザである。エンドユーザはまた、目標またはクライアントとして知られる。
【００２５】
メッセージが失われないと仮定される環境において、Ｐｉは、メッセージＭｉ（１）、Ｍｉ（２）、．．．Ｍｉ（ｎ）の生成につながる。Ｐｉは、鍵となるＰキー順序（ｉによって、そして目標またはクライアントｊによって定義される順序に従うことを要求される）によって定義されるメッセージのファミリーの起源を与える。メッセージが送信されてよい方法は、以下に述べられる。メッセージＰ０、Ｐ１、Ｐ２のファミリーは受信されて、２つの目標ｊ＝０および１があると仮定される。メッセージは、以下の順序Ｍ０（０）、Ｍ０（１）、Ｍ１（０）、Ｍ１（１）、Ｍ２（０）、Ｍ２（１）；またはＭ０（０）、Ｍ１（０）、Ｍ０（１）、Ｍ２（０）、Ｍ１（１）、Ｍ２（１）、のうちの１つにおいて送信されることができる。いずれにせよ、各目標が正しい順序のメッセージを受信するように、メッセージ順序は配慮される。メッセージ、目標などの数に応じて受け入れも可能な他の多くの順序があってよい。一例として、以下のメッセージシーケンスは、目標１については誤りであり、目標０および２については正しい。Ｍ１（１）、Ｍ０（０）、Ｍ１（０）、Ｍ０（１）、Ｍ２（０）、Ｍ２（１）。メッセージを順序づけするための方法は、さらに詳細に後述される。
【００２６】
本発明は、メッセージが正しい順序で目標に到達したことを確実にするためにメッセージを処理する方法およびシステムに関する。これは、ソフトウェアの実行およびデータベースに基づくシーケンス処理プロセスによって達成される。データベースは、上述したように、持続性の表の形態である。そしてそれは、すでに上述したようにシーケンス処理プロセスを実行するための履歴データを収容している。履歴データは、以下を含んでよい：
・識別番号（例えばライン番号）；
・キー：Ｐキー順序（例えばＡＡＡＡＡＡ；  ＢＢＢＢＢＢ；その他）；
・数のシーケンスタグ（ｉ）；
・目標（ｊ）；
・他のラインの識別番号に対応して相互参照可能な依存関係識別子ＤＥＰ−ｉｄ；
・ステータスフィールド（例えば、Ｍｉ（ｊ）は、送信されてよい（Ｓ）か、または目標に対するメッセージがない場合に無効にする（Ｖ）か、または他のメッセージに依存するとしての（Ｄ）か、依存しない（すなわち、すぐにできる）としてのＮ、および、対応するメッセージが失われているままで依存関係がまだ識別されないときの不知に対するＵ）；
・生成されたメッセージＭｉ（ｊ）；
・他のデータ：例えば、必要であれば、エラー処理等のための警告メッセージ。
【００２７】
上述した例は、メッセージが失われない理想状態に基づく。この状況において、メッセージは、必要に応じて、依存するメッセージをできるだけ長く待つために遅延されてよい。メッセージが依存関係を有しない場合、それはステータスＮを割り当てられる。これは、メッセージが依存関係を有しなくて、外部システムに送信するために直ちに待ち行列に入れられ得ることを意味する。一旦メッセージがステータスＮを与えられて、目標に送信されるために待ち行列に入れられると、メッセージのステータスはＳにセットされることができる。ステータスＳは、メッセージが首尾よく送信されて、このメッセージに依存するすべてのメッセージがリリースされ得ることを意味する。これは、後続するメッセージがステータスをＤからＮへ（関連する順序において）変更して、目標にカスケーディング様式でアウトバウンド送信するために待ち行列に入れられることを意味する。
【００２８】
実際には、特に複合システムでは、および／または、リンクの課題、システムクラッシュまたは同類の場合には、いくつかのメッセージは失われてよい。これらの状況において、上述の方法は、任意の「最善の努力」機構も含むのに適していてよい。最善の努力機構の例は、図３のタイマー３０８の使用を通じてある。
【００２９】
タイマーまたは任意の同等な催促技術の使用は、本発明の重要な一部である。これは、マルチプロセッサーアーキテクチャにおいて、特定のメッセージが失われるかまたは遅れてよいという事実に起因する。そしてそれは、クライアントに送信するメッセージのシーケンスを転倒させてよい。再処理のために直ちに送信できないメッセージの順序において、それらは、しばらくの間まず格納されなければならない。これによって、新規なメッセージが、任意の遅延メッセージに影響を与えてよいメッセージ生成モジュール３０４で受信されることができる。タイマー３０８を通過した後に、メッセージは、シーケンス処理プロセス（それは、後述する）に従って再処理されるメッセージ生成モジュールに返送される。遅延メッセージがタイマーにあったその間中、メッセージが受信された場合、遅延メッセージには別々のステータスが与えられることができて、したがって、別々の動きが可能でよい。遅延メッセージが依存しているメッセージが受信された場合、例えば、ステータスは変化してよい。タイマーに潜在的に入るメッセージは、決定される依存関係がなかった新規なメッセージである。タイマー内の任意のメッセージは、ステータス更新（例えばＤまたはＮに）のために見直される。この種のステータス変更がない場合、メッセージはタイマー内にとどまる。遅延の長さは、特定のプロセスおよび／または特定の時間遅延を通じて受信されているメッセージの数に、同調することができる。遅延の長さはまた、データベースの持続的な表においてアクティブウィンドウにリンクされてよい。このアクティブウィンドウは、図１０を参照してさらに詳細に後述される。
【００３０】
特定の時点で、遅延メッセージは、そのステータスが何であれ送信されてよい。択一的に、メッセージを削除するという決定は発生してよい。または、ホットラインなどに送信されている警告のような他のアクションは、実行されてよい。厳密な結果は、システム設定および所定のビジネス論理に依存する。
【００３１】
図５を参照すると、メッセージは失われてよいという事実を配慮した、メッセージ生成のためのプロセスが記述される。ボックス内の番号は、図３の矢印に対応する。まずステップ５００で入力Ｐｉが受信される。すると、プロセスまたは、デーモンとして知られる技術によって、待ち行列に入れられる。これらのデーモンは、本発明によればメッセージ生成モジュールとして一般に称される。これらのメッセージ生成モジュールは、それからステップ５０２で、目標に向けて前方への送信のためのメッセージＭｉ（ｊ）を生成する。Ｐキー順序および目標（ｊ）に関係するデータは、データベースから読み出されて、ステップ５０４にロックされる。送信が発生するまで、Ｐキーを含むすべてのラインは、データベース内にロックされる。これは、データベースの整合的な読取りを可能にして、シーケンス処理データ上の並列の更新を防止する。ステップ５０６で、シーケンス分析は、メッセージのシーケンスを計算するために実行される。このプロセスは、図６を参照してより詳細に記述される。ステップ５０８で、データベースは、ステップ５０４において以前に読み出された行に対応する行において更新されて、ロックは解除される。行のこの更新は、メッセージの依存関係を識別して、行が正しいシーケンス処理値によって更新されることを確実にする。
【００３２】
ステップ５１０で、メッセージがすぐに送信されることができるかどうかについて判定がなされる。Ｙｅｓの場合は、メッセージのステータスは、ステップ５１２でＮにセットされる。これは、メッセージが依存関係を有しなくて、ステップ５１４で外部システムへの送信のために直ちに待ち行列に入れられることができることを意味する。ステップ５１０の答えがＮｏの場合、メッセージの依存関係がステップ５１６で決定される。それが第１のシーケンス（真の第１のメッセージまたは「アクティブウィンドウ」の外側で受信されるメッセージ）か、または首尾よく送信された先行するメッセージであるときはいつでも、メッセージはすぐに送信されることができる。データベースの履歴は、要求されるスペースの合計を減らすために、特定の時間窓に対して維持される。特定の時間値は、互いに「変更」箇所を有する２つのメッセージ間の最大距離によって定義されることができる。例えば、メッセージ１はｔ１に到着し、メッセージ２はｔ０（ｔ０＜ｔ１）に到着する。特定の時間は、「合理的な状況」において理論的最大値（ｔ１−ｔ０）である。合理的な状況は、システムに依存する。通常の状況において、メッセージ２は、メッセージ１の到着を待たなければならない。しかしながら、特定の時間に達したあと、メッセージ２は、メッセージ１へのその依存関係から自由であると宣言されてよい。依存関係が識別される場合、ステータスは、関連する依存関係識別子を有するＤに更新される。これは、ステップ５１８に示される。ステータスＤは、現在のメッセージともう一方との間に依存関係があることを示す。したがって、現在のメッセージを送信するために、現在のメッセージが依存するメッセージから受信確認が受信されなければならない。ステップ５１６で依存関係が識別されない（すなわち、先行するメッセージが受信されなかった）場合、ステータスは、ステップ５２０でＵにセットされる。ステータスＵは、不知を表す。このステータスにおいて、依存関係がまだ計算されてない間、メッセージは送信されることができない。メッセージステータスがＵである場合、メッセージはそれからステップ５２２でタイマーに挿入される。このタイマーはメッセージを遅延させ、これにより受信されるさらなる入力に対する時間を許容する。そしてそれは、メッセージの依存関係が、上述のように次の分析において決定されることを可能にしてよい。
【００３３】
図６を参照すると、メッセージのシーケンスを計算することに関連したステップが記述される。ステップ６００で、関連する行は、持続的なデータベースの表から目標ｊおよびＰキー順序に関して読み出されて、ロックされる。ステップ６０２で、無効ステータスメッセージが生成されるかどうかについて判定がなされる。Ｙｅｓ（６０４）の場合、メッセージのステータスは、ステップ６０６で無効としてセットされる。無効メッセージが生成されない（６０８）場合、ステップ６１０で先行するメッセージがあるか否かについて判定がなされる。先行するメッセージがない（Ｎｏ、６１２）場合、メッセージのステータスは不知（ステータス「Ｕ」）にセットされる。この点で、メッセージは、先行するメッセージの到着を待つためにタイマーに挿入される（ステップ６１６）。先行するメッセージがステップ６１０（Ｙｅｓ、６１８）にある場合、先行するメッセージがステップ６２０で送信されたか否かについて判定がなされる。先行するメッセージが送信されなかった（Ｎｏ、６２２）場合、ステップ６２４に示すように、先行するメッセージが送信されたものとして受信確認されるときに、問題のメッセージのステータスは、依存（Ｄ）にセットされて、待ち行列に入れられる。先行するメッセージが送信された（Ｙｅｓ、６２６）場合、メッセージのステータスは、非依存（Ｎ）としてセットされて、ステップ６２８で前方への送信のために待ち行列に入れられる。
【００３４】
図７を参照して、特別なシーケンス処理Ｖまたは無効が記述される。無効メッセージは、送信される必要はなくてよいが、メッセージのシーケンス番号の穴を回避するために、データベースにおいて実際に使用されるものである。ステップ７００に示すように、メッセージの例えばＭｉ（ｊ）が無効ステータスにあって、Ｐｉ＋１が受信される場合、ステップ７０２でＭｉ＋１（ｊ）が無効であるかどうかの判定がなされる。Ｙｅｓ（７０４）の場合、メッセージＭｉ＋１（ｊ）についてのステータスは、ステップ７０６に示すように無効にセットされる。Ｎｏ（７０８）の場合、プロセスは、ステップ７１０へ移る。ステップ７１０で、メッセージＭｉ−１（ｊ）が送信されたかどうかについて判定がなされる。Ｙｅｓ（７１２）の場合、メッセージＭｉ＋１（ｊ）のステータスは、ステップ７１４に示すようにＮにセットされる（７１２）。そして、ステップ７１６で、メッセージＭｉ＋１（ｊ）は、送信のための待ち行列に入れられる。ステップ７１０で判定がＮｏ（７１８）の場合、メッセージＭｉ＋１（ｊ）のステータスは、Ｍｉ−１（ｊに基づく依存関係によってＤにセットされる。上述のさまざまなステップは、入ってくるメッセージまたはタイマーにあった遅延メッセージ上で実行されてよい。一旦メッセージが送信のために待ち行列に入れられると、受信確認の受信において、カスケーディングおよびシーケンス処理コールバックに関係するプロセスの第２の部分が発生する。これは図８に示される。そして再び、ボックス内の番号は図３の矢印と一致する。ステップ８００で、メッセージＭｉ（ｊ）はクライアントに送信されて、受信確認は受信された。ステップ８０２で、メッセージＭｉ（ｊ）が任意の依存関係を有するかどうかについて判定がなされる。Ｙｅｓ（８０４）の場合、ステップ８０６でＭｉ＋ｎ（ｊ）はメッセージＭｉ（ｊ）に依存するという仮説がなされる。それから、メッセージＭｉ＋ｎ（ｊ）の依存関係はステータスＮに更新されて、メッセージＭｉ（ｊ）のステータスはステータスＳに更新される。ステップ８０８で、メッセージＭｉ＋ｎ（ｊ）は、クライアントに送信のための待ち行列に入れられる。そして、ステップ８１０で、メッセージＭｉ（ｊ）のステータスはＳにセットされる。
【００３５】
一旦メッセージが送信されるために待ち行列に入れられると、適切な受信確認または他のアクションが発生するまで、メッセージのステータスをさらにチェックする必要がない点に留意すべきである。メッセージが送信されたあと、プロセスが続行するために受信確認は必ずしも要求されない。このプロセス（メッセージを送って、答えを待つことの）は、同期または非同期でありえる。本発明は、単一のメッセージ管理モジュールおよびデータベースによって図示される。しかしながら、本発明は、マルチプルのメッセージ管理モジュールおよびデータベースによって実現されることができる。但し、これはシステムについてより大きな複雑さに至ってよい。
【００３６】
図９は、依存関係の表の一部の例を示す。そしてそれは、データベースにおける持続的な表の一部を形成する。表は、欄９００に数値的に増加する識別コードを、欄９０２にＰキー順序を、欄９０４にメッセージの順序されたタグ（ｉ）を、欄９０６に目標またはクライアントのタグ（ｊ）を、欄９０８にメッセージステータスを、欄９１０にメッセージの依存関係を、そして欄９１２にメッセージそのものを、それぞれ示す。特定の目標について、例えばｊは１であり、メッセージ９、１１、１３、１５、１６が関連する。しかしながら、メッセージ１６はＰキー順序に基づく別々のファミリーの一部であり、したがって他のメッセージ９、１１、１３、１５とのリンケージを有しない。共通のファミリー（ＡＡＡＡＡＡ）からのメッセージを参照すると、ＩＤ９を有するメッセージは、インデックスｉが０を有するようにそのファミリーにおいて第１のものである。このメッセージは、ステータスＳで示すように送信された。ＩＤ１１を有するメッセージは、つぎのファミリーである。しかし、このメッセージは無効であり（ステータスＶ）、それゆえ送信するメッセージはない。ＩＤ９を有するメッセージがすでに送信されたとき、ＩＤ１３を有するメッセージは、非依存関係（Ｎ）のステータスを有する。このメッセージ（ＩＤ１３）は、したがってすぐに送信できる。ＩＤ１５を有するメッセージは、それがＩＤ１３を有するメッセージに依存するということで、Ｄのステータスを有する。一旦メッセージＩＤ１３が送信されると、メッセージ１５は待ち行列に入れられて、そして送信される。
【００３７】
メッセージおよびそれに関連する情報を含むデータベースは、持続的な表の形態である。この表は、時間におけるいかなる特定の瞬間にも、アクティブウィンドウを有する。アクティブウィンドウは、現在格納される表の一部であり、アクティブである。例えば、図９に関して、アクティブウィンドウは、ＩＤ９からＩＤ１６まであってよい。これよりも上の表（すなわちＩＤ０からＩＤ８）におけるいかなるメッセージも、もはや記憶されることが不要であり、必要に応じて削除されることができる。重要であるいかなる情報も、使用されて、必要に応じて処理される。表において、メッセージの２つのファミリーは、アクティブウィンドウにおいて共にスタートする。これは、必ずしもこの場合であるというわけではない。例えば、アクティブウィンドウは、それがＩＤ１１から始まるように移動することができる。この場合、ＩＤ９およびＩＤ１０は削除されることができる。ＩＤ９およびＩＤ１０に依存しているメッセージは、アクティブウィンドウにおいてもはやＩＤ９およびＩＤ１０から知ることができない。そのため、メッセージが依存しているすべてのメッセージは、それらがアクティブウィンドウにない場合は既に送信されたとみなされる。メッセージが入ってきて出ていくにつれて、アクティブウィンドウが変化を継続することはいうまでもない。シーケンスから外れたいかなるメッセージも届くことができるように、アクティブウィンドウのサイズはあらかじめ決められる。そして、それらの依存関係は、いかなる未送付のメッセージも、それらが合法的に送信されることができるような時間まで、アクティブウィンドウ内に保持されるように決定される。これは、与えられた遅いメッセージにとって待機するための最大時間上の仮説である静的値でよい。例えばｎ時間後にメッセージＭｉがまだメッセージＭｉ−１を待機中である場合、これは、メッセージＭｉ−１にとって遅すぎることがありえる。それで、メッセージＭｉは、「シーケンスの第１」として処理される。この場合、アクティブウィンドウはｎ時間である。ｎ時間を越える履歴を保持する必要がない。入ってくるメッセージが、入ってくるメッセージＰｉ（ｊ）の日付／時間に基づいて以前のものを待たなければならないかどうかについて、決めることが可能である。日付／時間は、メッセージＰｉ−１（ｊ）の作成日／時間に対応する。
【００３８】
アクティブウィンドウのサイズは、例えば、メッセージの数、システム要求または他の要求条件に応じて、任意の適切な方法で変化することができる。
【００３９】
ある状況では、メッセージは、複数のエンティティに関する情報を含んでよい。例えば、乗客名簿（ＰＮＲ）に関して、特定のフライトに最初に予約される２人の乗客がいてよい。１人の乗客がフライトを変更することを決定する場合、最初のメッセージは２つの別個のメッセージに分割されなければならず、それは、続いて、メッセージの２つの別々のファミリー（それらはリンク関係にはあるが）となる。図１０は、この種の状況の例を示す。オリジナルの乗客名簿は、１０００として識別される。特定の時点で、第２の乗客ジーン・デュポン１００２は、別々のフライトをすることに決める。この時点で、メッセージは、２つの別個のファミリー１００４および１００６（各々別々のＰキー順序、すなわちそれぞれＡＡＡＡＡＡおよびＢＢＢＢＢＢを有する。）に分割される。２つの新しく生成されたメッセージが次のペアレントおよびチャイルドと呼ばれるとはいえ、オリジナルの乗客名簿は、以前のペアレントとしばしば呼ばれる。
【００４０】
図１１は、いわゆる分割の場合の必要なシーケンス処理、レコードの詳細およびレコードの依存関係を示す。ここで、以前のペアレントは、ペアレントおよびチャイルドに分割される。左手側１１００で、メッセージＡ０は、メッセージＡ１およびＢ０に分割される。Ａ１およびＢ０は、両方とも、各ファミリーのものがＡ２およびＢ１としてそれぞれ示されるそれらのファミリーの次のメッセージを有する。図１１の右手側１１０２は、別々のメッセージの依存関係を示す。Ｂ１はＢ０に依存し、Ｂ０はＡ０に依存している。一方、Ａ２はＡ１に依存し、Ａ１はＡ０に依存している。
【００４１】
上述の例は、単純なメッセージ依存関係に基づく。しかしながら、メッセージの別々のファミリー間の依存関係は、しばしば、依存関係の複雑な関係に結びつき、そしてそれは、それらのメッセージの必要なシーケンスに結びつく。図１２は、メッセージの別々のファミリーを有する単一の目標のための依存関係ツリーである。この図は、別々のキーを有する、換言すれば別々のファミリーからの、メッセージの別々のシーケンスを示す。別々のキーは、Ｍ、Ｍ’、Ｍ’’およびＭ’’’によって示され、そして各ファミリーにおけるメッセージについての特定の順序は、関連した数字によって定義される。目標またはクライアントの表記法は、図を単純化するために削除された。図示するように、Ｍ’、Ｍ’’およびＭ’’’は、それらのペアレント、メッセージＭの参照を含む。したがって、依存関係が存在し、そして、メッセージの別々のファミリーはこれに気づいている。図において、矢印は、メッセージが別のものに依存することを示す。例えば、Ｍ’２は、Ｍ’’０に依存する。
【００４２】
本発明の１つの特徴は、入ってくるメッセージの履歴レコードを、所定の期間中、データベース内に格納することである。この所定の期間は、順序がバラバラのメッセージを整理するために必要な時間の最大の間隔に依存する。メッセージが他のいかなるメッセージからも独立して決定される場合、所定の期間は見過ごされることができる。
【００４３】
本発明は、移動環境のチケットの購入に関して記述された。しかしながら、本発明が他の環境、例えば任意のマルチプロセッシング・メッセージ送信環境（例えば銀行業務）に適用してよいことはいうまでもない。
【００４４】
本発明が多くの別々の方法で変化されて、それでも本発明の意図する範囲および趣旨の範囲内にとどまってよいことはいうまでもない。
【図１】
0005370975.tif 000002
【図２】
0005370975.tif 000003
【図３】
0005370975.tif 000004
【図４】
0005370975.tif 000005
【図５】
0005370975.tif 000006
【図６】
0005370975.tif 000007
【図７】
0005370975.tif 000008
【図８】
0005370975.tif 000009
【図９】
0005370975.tif 000010
【図１０】
0005370975.tif 000011
【図１１】
0005370975.tif 000012
【図１２】
0005370975.tif 000013