(57)【要約】【課題】  マルチスレッド・メッセージ・フロー環境において関連のトランザクションに対する複数のメッセージを管理する方法を提供する。【解決手段】  １つの形態では、メッセージ・フローを管理する方法が、コンピュータ・ソフトウェア・アプリケーションにおいて処理ノードによりメッセージを並行して処理することを含む。処理ノードは、フロー・パスにおいて相互接続されたロック獲得ノード、システム・リソース・アクセス・ノード、及びロック解放ノードの少なくとも１つのセットを含む。そのようなセットでは、それらのノードがフロー・パスにおいて相互接続され、そのフロー・パスによって定義された順序でメッセージのそれぞれ１つを処理する。その処理は、ロック獲得ノードがそれぞれのメッセージを処理したことに応答して、そのセットのそれぞれのメッセージに対するシステム・リソースへのアクセスを排他的に許可することを含む。そのセットのシステム・リソース・アクセス・ノードがメッセージを処理したことに応答して、そのメッセージに対するシステム・リソースがアクセスされる。そのメッセージに対するリソースのアクセスは、或るシステム状態の変更を含む。システム・リソースの排他的アクセスは、そのセットのロック解放ノードがメッセージを処理したことに応答して解放される。
2006511857.tif 000002
【特許請求の範囲】
【請求項１】
複数のメッセージがそれぞれのコンピュータ・ソフトウェア・アプリケーション処理ノードに関連した命令により並行して処理されるメッセージ・フローを管理するための方法であって、
第１セットの処理ノードに関連した第１セットの命令により第１メッセージを処理するステップにして、当該ワークフローのメッセージを処理するための手順を定義するワークフロー・パスにおいて前記第１セットにおけるノードが相互接続される、ステップと、
１つのワークフローにおいて相互接続された第２セットの処理ノードに関連した第２セットの命令により第２メッセージを処理するステップと、
を含み、
前記ワークフローが少なくともそれぞれのロック獲得ノード、システム・リソース・アクセス・ノード、及びロック解放ノードを含み、
前記ワークフローに対する処理が、
当該ワークフローのロック獲得ノードがそれぞれのメッセージを処理することに応答して当該ワークフローのそれぞれのメッセージに対するシステム・リソースへの排他的アクセスを許可するステップと、
当該ワークフローのシステム・リソース・アクセス・ノードがメッセージを処理することに応答して該メッセージに対するシステム・リソースをアクセスするステップにして、該メッセージに対するシステム・リソースをアクセスすることがシステム状態の変更を含む、ステップと、
当該ワークフローのロック解放ノードがメッセージを処理することに応答してシステム・リソースの排他的アクセスを解放するステップと、
を含む、方法。
【請求項２】
前記第２メッセージが前記第１メッセージの第２インスタンスである、請求項１に記載の方法。
【請求項３】
前記第１メッセージ及び第２メッセージがトランザクションのためのメッセージであり、アクセスの排他性が更に前記ロック獲得ノードのメッセージに対するトランザクションのアイデンティティに応答し、
前記第１メッセージに対するロック獲得ノードが前記システム・リソースに対する第１メッセージのアクセスを許可した場合、
前記第１メッセージ及び第２メッセージが同じトランザクションに対するものであることに応答して、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するまで、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを拒否するステップと、
前記第１メッセージ及び第２メッセージが異なるトランザクションに対するものであることに応答して、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するかどうかに関係なく、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを許可するステップと、
を含む、請求項１に記載の方法。
【請求項４】
前記第１メッセージ及び第２メッセージがトランザクションのためのメッセージであり、アクセスの排他性が前記ロック獲得ノードのメッセージに対するトランザクションのアイデンティティに関係なく、
前記第１メッセージに対するロック獲得ノードが前記システム・リソースに対する前記第１メッセージのアクセスを許可した場合、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するまで、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを拒否するステップを含む、請求項１に記載の方法。
【請求項５】
前記メッセージが金融トランザクションに関するものである、請求項１に記載の方法。
【請求項６】
前記メッセージが予約トランザクションに関するものである、請求項１に記載の方法。
【請求項７】
前記メッセージが通信トランザクションに関するものである、請求項１に記載の方法。
【請求項８】
複数のメッセージがそれぞれのコンピュータ・ソフトウェア・アプリケーション処理ノードに関連した命令により並行して処理されるメッセージ・フローを管理するためのシステムであって、
処理ユニットと、
前記処理ユニットに動作関係に結合され、前記処理ユニットに対する幾つかの命令を有するメモリ・ユニットと、
を含み、
前記処理ユニットは前記幾つかの命令に応答して
第１セットの処理ノードに関連した第１セットの命令により第１メッセージを処理するステップにして、当該ワークフローのメッセージを処理するための手順を定義するワークフロー・パスにおいて前記第１セットにおけるノードが相互接続される、ステップと、
１つのワークフローにおいて相互接続された第２セットの処理ノードに関連した第２セットの命令により第２メッセージを処理するステップと、
を遂行するように動作可能であり、
前記ワークフローが少なくともそれぞれのロック獲得ノード、システム・リソース・アクセス・ノード、及びロック解放ノードを含み、
前記ワークフローに対する処理が、
当該ワークフローのロック獲得ノードがそれぞれのメッセージを処理することに応答して当該ワークフローのそれぞれのメッセージに対するシステム・リソースへの排他的アクセスを排他的に許可するステップと、
当該ワークフローのシステム・リソース・アクセス・ノードがメッセージを処理することに応答して該メッセージに対するシステム・リソースをアクセスするステップにして、該メッセージに対するシステム・リソースをアクセスすることがシステム状態の変更を含む、ステップと、
当該ワークフローのロック解放ノードがメッセージを処理することに応答してシステム・リソースの排他的アクセスを解放するステップと、
を含む、システム。
【請求項９】
前記第２メッセージが前記第１メッセージの第２インスタンスである、請求項８に記載のシステム。
【請求項１０】
前記第１メッセージ及び第２メッセージがトランザクションのためのメッセージであり、アクセスの排他性が更に前記ロック獲得ノードのメッセージに対するトランザクションのアイデンティティに応答し、
前記第１メッセージに対するロック獲得ノードが前記システム・リソースに対する第１メッセージのアクセスを許可した場合、
前記第１メッセージ及び第２メッセージが同じトランザクションに対するものであることに応答して、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するまで、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを拒否するステップと、
前記第１メッセージ及び第２メッセージが異なるトランザクションに対するものであることに応答して、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するかどうかに関係なく、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを許可するステップと、
を遂行するように動作可能である、請求項８に記載のシステム。
【請求項１１】
前記第１メッセージ及び第２メッセージがトランザクションのためのメッセージであり、アクセスの排他性が前記ロック獲得ノードのメッセージに対するトランザクションのアイデンティティに関係なく、
前記第１メッセージに対するロック獲得ノードが前記システム・リソースに対する前記第１メッセージのアクセスを許可した場合、前記第１メッセージに対するロック解放ノードが排他的アクセスを解放するまで、前記第２メッセージが前記第２メッセージに対するロック獲得ノードによって前記システム・リソースをアクセスすることを拒否するステップを遂行するように動作可能である、請求項８に記載のシステム。
【請求項１２】
前記メッセージが金融トランザクションに関するものである、請求項８に記載のシステム。
【請求項１３】
前記メッセージが予約トランザクションに関するものである、請求項８に記載のシステム。
【請求項１４】
前記メッセージが通信トランザクションに関するものである、請求項８に記載のシステム。
【請求項１５】
コンピュータ・システムにおいて実行されるとき請求項１乃至１４のいずれかに記載のステップを遂行するためのプログラム・コード手段を有する、コンピュータ・プログラム。
【請求項１６】
コンピュータ可読媒体に記憶された請求項１５に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メッセージ・フロー環境において関連あるトランザクションに 対して複数のメッセージを有するシステムのためのシステム状態の管理に関し、更に詳しく言えば、選択されたメッセージの１つに対してシステム・リソースへの排他的アクセスを許可及び解放するための、そのような環境におけるノードに関するものである。
【背景技術】
【０００２】
企業の業務上のデータを更に生産的な用途に供するためには、データが高い信頼性をもって種々のソフトウェア・アプリケーションの間を移動しなければならない。即ち、ビジネスは、その企業内のどこかに置かれているアプリケーションを連携させることを望んでおり、顧客及び納入業者のメッセージのようなものを他の企業のシステムに送ることさえ望んでいる。簡単な例は、相互にコミュニケーションを取る必要がある２つの給与計算システムに関するものである。
【０００３】
この活動には多くの問題点が浮上しており、そのうちの少なからぬ問題点は、種々のデータフォーマットを使用する異種のネットワーク・プラットフォーム上で実行される本質的に異なるアプリケーション間のコミュニケーションに関するものである。例えば給与計算の例では、両方のシステムが従業員名を持ち得るが、一方のシステムでは名前が１つのフィールドに保存され、他方のシステムでは複数のフィールドに保存されることがある。しかも、給与計算の例によって示される問題点は比較的単純である。１つのアプリケーションによって生じたデータが、他方のアプリケーションにとっては認識し得ないデータ構造を有することがある。勿論、アプリケーション間でデータを変換することは可能であるが、データが更に多くのシステム間で共用される場合、間接費が容認し得ないものとなり、更に、維持管理が膨大になって厄介な仕事になることが多い。
【０００４】
この状況は、一般的なアプリケーション・プログラミング・インターフェース（ＡＰＩ）を用いてメッセージ処理アプリケーションを開発するためのＩＢＭ社の WebSphere MQSeries Integrator（“ＷＭＱＩ”）のような統合ツールに対する関心の増加を導いた。（なお、「WebSphereMQSeries Integrator」はＩＢＭ社の商標である）。ＷＭＱＩのようなソフトウェア用いて開発された企業統合アプリケーションは、一般に、他のアプリケーション間で伝播するメッセージのための配布ハブ、即ち一種のブローカとして作用し、従って、本明細書では「ブローカ」と呼ばれる。この中心的位置には、メッセージを変換し経路指定する方法を特定する定義が設定される。
【０００５】
この構成は、アプリケーション間の多くのインターフェースの必要性を排除し、開発担当者が、相異なるオペレーティング・システムのようなプラットフォームの相違に関して悩むことがないようにする。
【０００６】
この種の企業統合アプリケーションは、一般に、多数の事前定義されたノードを含む相互接続されたノードの構造の上にメッセージのフローを形成するためのグラフィカル・ツール及び高レベルのフロー言語を特徴とし、「ワークフロー」又は「メッセージ・フロー」環境と呼ばれるものを作成する。即ち、ブローカ内では、相互接続されたノードの集合体に対し、それらのノードにおいて処理及び変換活動が生じることによって、個々の機能が割り当てられる。事前定義され且つカスタマイズされたノードの開発を通して、ノードがメッセージ・フロー内のメッセージ・データに関するオペレーションを遂行するだけでなく、データベース又は外部アプリケーションにおける情報のようなそのメッセージ・フローの外にある情報をアクセスする機能、及びメッセージをキューに入れることによってメッセージ・フローを断つ機能を有するという複雑な処理環境が形成される。
【０００７】
一般に、ＷＭＱＩのようなブローカにおいてマルチスレッド化を行うための或るサポートが提供される。メッセージは、メッセージ・フローを開始するためにキューから読み取られ、そのメッセージのフローを終了させるためにキューに入れることが可能である。それぞれのメッセージが異なるパスを通して並行して流れ、各メッセージがそれ自身のスレッドによって処理されることによって、入力ノードと終了ノードとの間には複数のフロー・パスが存在し得る。更に、入力ノード及び終了ノードの間に１つのフロー・パスしか存在しなくても、各インスタンスが、キューから読み取られたそれ自身のメッセージを処理することによって、同じメッセージ・フローの並行インスタンスがサポートされる。
【０００８】
そのようなマルチスレッド化されたメッセージにとって、システム状態を維持することは重要である。例えば、２つのマルチスレッド化されたトランザクションが、又は同じトランザクションに対する２つのマルチスレッド化されたメッセージでも、データベースのような共通のリソースをアクセスことが可能である。スレッドがリソースをアクセスする方法は、例えばシステムを適切な状態に維持するためのトランザクションの整合性にとって重要であるかもしれない。しかし、一般的なワークフロー・アプリケーションおいて、処理ノードは、システムを流れるメッセージのトランザクションの整合性を自動的及び明示的には維持しない。その代わりに、開発担当者は、ブローカ・アプリケーションを入念に構成すること及びそれの事前定義されたトランザクションの特性を適用することによって、メッセージ・フローの境界内にトランザクションの整合性を注意深く維持しなければならない。
【０００９】
スレッド間のトランザクションの整合性を維持するようにメッセージ・フロー・アプリケーションを構成するための１つの既知の方法は、関連のメッセージが結合されるように強制することである。例えば、２００２年５月２８日発行の「同期化ロジックを含む１つ又は複数の同期化・結合作用を使用した１つ又は複数のワークフローの同期化（Synchronizing One or More Workflows Using One or MoreSynchronization-Join Activities That Include Synchronization Logic）」と題したノタニ氏他の米国特許第６,３９７,１９２号を参照されたい。しかし、特に、複数のスレッドが、本質的には単一のスレッド化されたものになるように強制することをこの結合が含むとき、これはパフォーマンス・ペナルティを生じさせることがある。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従って、関連のトランザクションに対する複数のメッセージを管理するためにマルチスレッド・メッセージ・フロー環境における改善の必要性が存在する。
【課題を解決するための手段】
【００１１】
本発明は上記の必要性を対処する。本発明の１つの形態では、メッセージ・フローを管理する方法が、コンピュータ・ソフトウェア・アプリケーションにおけるそれぞれの処理ノード（「ワークフロー・ノード」とも呼ばれる）に関連した命令によって多くのメッセージを並行して処理することを含む。（本明細書では、そのようなノードに関連した命令によって処理されるメッセージを、単に「ノードによって処理されるメッセージ」と呼ぶことがある）。処理ノードは、フロー・パス（「ワークフロー・フロー・パス」又は単に「ワークフロー」と呼ばれることもある）において相互接続されたロック獲得ノード、システム・リソース・アクセス・ノード、及びロック解放ノードの少なくとも１つのセットを含む。そのようなセットでは、そのセットのロック獲得ノード、システム・リソース・アクセス・ノード、及びロック解放ノードがフロー・パスにおいて相互接続され、そのフロー・パスによって定義された順序でメッセージのそれぞれ１つを処理する。その処理は、そのセットのロック獲得ノードがそれぞれのメッセージを処理したことに応答して、そのセットのそれぞれのメッセージに対するシステム・リソースへの排他的なアクセスを許可することを含む。そのセットのシステム・リソース・アクセス・ノードがメッセージを処理したことに応答して、そのメッセージに対するシステム・リソースがアクセスされる。メッセージに対するシステム・リソースをアクセスすることは、或るシステム状態の変更を含む。システム・リソースの排他的アクセスは、そのセットのロック解放ノードがメッセージを処理したことに応答して解放される。
【００１２】
本明細書では、「ワークフロー・プロセス」という用語は、フロー・パスにおけるノードに関連する命令によってメッセージを処理するためのプロセスのインスタンスを表すために使用される。上記の説明に従って、システム・リソースは、複数のワークフロー・プロセスによるそのリソースの使用をロック・アウトするように、即ち、妨げるように「ロック」機構によって選択的に保護されることは明らかである。ワークフローがシステム・リソースを使用するためには、そのワークフローはその時点で「ロック」を所有しなければならない。所与のトランザクションに対する唯一のワークフロー・プロセスが任意の所与のインスタンスにおいてロックを所有することが可能である。
【００１３】
本発明の目的、利点、更なる局面、及び他の形態は、以下の詳細な説明を読み、添付図面を参照することによって明らかになるであろう。
【発明を実施するための最良の形態】
【００１４】
新規な特徴を記述した本願の請求項は本発明を特徴付けるものである。本発明の好適な使用モード、更なる特徴、及び利点は、添付図面に関連して以下の実施例の詳細な説明を参照することにより最もよく理解されるであろう。
【００１５】
図１を参照すると、本発明の実施例に従って、フロー・パス１００Ａ及び１００Ｂが示される。これらのフロー・パスは、コンピュータ・アプリケーション・プログラムのためのフロー・パスの第１及び第２インスタンスである。フロー・パス１００Ａ及び１００Ｂは、開始から終了までトランザクションを管理するために有限状態マシンを必要とする金融トランザクションを処理するためのものである。本願において使用されるように、「金融トランザクション」という用語は、会計情報の更新、或いは、預金口座、ミューチュアル・ファンド、約束手形、セキュリティ協定、商業手形、又は不動産を含む任意の種類の金融資産の振替を伴うトランザクションを含む。フロー・パス１００Ａ及び１００Ｂの各々は、それぞれ、接続線によって相互接続された多数のノード１２０Ａ乃至１５０Ａ及び１２０Ｂ乃至１５０Ｂを有する。（ノード１２０Ａ及び１２５Ａの間の接続線１１５Ａは、説明の便宜上、明示的に番号を付されている）。２つのフロー・パス１００Ａ及び１００Ｂだけが示されているが、状況次第で、フロー・パスの多くのインスタンスが存在し得るし、或いは１つのインスタンスしか存在しないこともある。即ち、金融トランザクションはメッセージによって具現化され、システム・リソース、この場合はデータベース、へのアクセスを必要とする。スレッド・プール（図示されていない）からのスレッドが使用可能になることに備えて入力キュー１１０において待機する複数のメッセージ１０５が示される。スレッドが使用可能であるとき、フロー・パス１００Ａの第１インスタンスが作成され、そのインスタンスのための入力ノード１２０Ａがキュー１１０からメッセージ１０５を取り出す。
【００１６】
これらの金融トランザクションの１つにとって適正であるアクションは、システムの状態、特に、或るシステム、即ち前述のデータベース、の状態に依存する。２つ以上のトランザクションに対するメッセージ１０５がキュー１１０に存在してもよいが、同じトランザクションに対して複数のメッセージが存在してもよい。それぞれのメッセージ１０５が、フロー・パスのインスタンスに関連したノードのセット、例えばフロー・パス１００Ａに関連したノード１２０Ａ乃至１５０Ａ、によって並行して処理されてもよい。図１の実施例では、同じトランザクションのための第２メッセージが存在し、そのトランザクションに対する第２メッセージ１０５が別のフロー・パスのインスタンス、即ち、フロー・パス１００Ｂにおいて並行して処理される。従って、トランザクション及びデータベースの状態に関して適正なアクションだけが遂行されることを保証するためには何が行われなければならないかに従って、トランザクションの整合性問題が生じる。即ち、メッセージ１０５の各々に対してそのトランザクションに関する作業が行われるとき、データベースの状態が変わるであろうし、そのデータベースの前の状態では適正であったアクションが新たな状態では、最早、適正でないことがある。このような理由で、所定の時間に１つのメッセージに対して１つのセットのアクションしかそのトランザクションに対して取られず、そのセットのアクションは、同じトランザクションに関連した他のメッセージに対する別のアクションが開始する前に終了しなければならない。更に、そのアクションは、他のメッセージに対するアクセスの前に終了しなければならず、或いはデータベースの状態の整合性が崩れるか又は、少なくとも、不確定なものになるであろう。
【００１７】
この問題点を解決するために、フロー・パス１００Ａ及び１００Ｂがそれぞれの「ロック・トランザクション（lockTransaction）」ノード１２０Ａ及び１２０Ｂ、即ち、本願ではより一般的に「ロック・ノード」と呼ばれるタイプのノード、を使用する。同じトランザクションに関連するノード１２０Ａ及び１２０Ｂのそれぞれのインスタンスによって処理されるメッセージ１０５に関して、ロック・ノード１２０Ａ及び１２０Ｂは、メッセージ１０５の一方のみに対するデータベースへの排他的アクセスを許可する。実施例の局面によれば、そのようなロック・トランザクション・ノードは、異なるトランザクションに関連する他の並行的なメッセージに対するデータベース又は他のそのようなシステム・リソースへのアクセスを妨げない。この局面はシステム・パフォーマンスを改善する。しかし、別の実施例では、ロック・トランザクション・ノードは、他の並行メッセージが異なるトランザクションに関連するかどうかに関係なく、その並行的なメッセージに対するデータベース又は他のそのようなシステム・リソースへのアクセスを妨げる。
【００１８】
例えば、トランザクションは特定の銀行口座に関する支払いであってもよい。一方のメッセージ１０５は結果としてその口座から他の口座への資金の振込みを生じる支払いであってもよく、他方のメッセージ１０５は支払いの取り消しであり、その結果として、勿論、その口座に資金が残ることになる。データベースのアクセスは、支払いメッセージの場合、借方のような口座からそのデータベースへの振込みに関する情報をそのデータベースに送るためのものであり、或いは、取り消しメッセージの場合、支払いメッセージが後で処理されるならば支払命令に優先するようにデータベースにおいて表示する支払い停止を送るためのものである。ロック・ノード１２０Ａ及び１２０Ｂは、メッセージ１０５に対する処理が直列化されるが、それは同じトランザクションに関連するメッセージ１０５に関して及びデータベースのアクセスに関してだけであることを保証する。
【００１９】
ロックが広範囲に直列化するのではなく上記のように限定されるほうがシステム・パフォーマンスにとっては有利である。即ち、或るアプリケーションでは、データベースのアクセスを除いて、同じトランザクションに対するメッセージの別の処理が排除されることはない。ロックはデータベースに対するアクセスのロックに限定されるので、そのような他の処理が進行することは可能である。同様に、同じトランザクションに関係のない他のメッセージに対する処理がロック・ノードによって停止されないことは有利なことである。
【００２０】
更に詳しく細部を示すために、次にフロー・パス１００Ａによる処理を更に説明する。口座データベースがノード１２０Ａの別のインスタンス、例えばノード１２０Ｂ、によって既にロックされている場合、ノード１２０Ａのインスタンスは、データベースにおけるロックが解放されるのを待つ。データベースがノード１２０Ａの別のインスタンスによってまだロックされていない場合、メッセージ１０５は、トランザクションに関してノード１２０Ａをロックすることによって更に処理される。ノード１２０Ａによるこの処理に応答して、同じデータベースに関する他のメッセージに対するデータベースのアクセスがロックされる。そこで、ノード１２０Ａによるデータベースへの排他的なアクセスを許されたメッセージに対して、「ReadStateDatabase：読取り状態データベース」ノード１３０Ａによる処理がメッセージ１０５に対するデータベースの状態を読取る。次に、「UpdateTransaction：更新トランザクション」ノード１３５Ａにおいて、トランザクション状態が更新され、「UpdateStateDatabase：更新状態データベース」ノード１４０Ａにおいて、メッセージ１０５に対するデータベースの状態が更新される。そのデータベースの更新は、例えば、支払いメッセージに対する前述の借方又は支払い取り消しメッセージに対する支払停止表示を含むであろう。トランザクションの更新は、例えば、支払いが行われたこと又は支払停止が承認されたことの表示を含むであろう。それは、支払いが期待される日付に関する変更、支払われるべき人の変更、支払いを行う責任のある人、支払いのために使用されるべき通貨を含み得るし、購入者又は販売者に対する特別の指示を含む何らかのテキスト・ストリングさえ含み得る。
【００２１】
次に、ノード１４０Ａによる処理がメッセージ１０５に対するデータベースを更新した後、「FreeTransaction：自由トランザクション」ノード１４５Ａがメッセージ１０５を処理したことに応答して、データベースの排他的アクセスが解放される。そこで、メッセージ１０５は、「Output：出力」ノード１５０Ａに応答して処理を行うことによって自由トランザクション・ノード１４５Ａがデータベースにおけるロックを解放したことに応答して、前述のフロー・パス１００Ｂのような、同じトランザクションに関連するフロー・パスの他のインスタンスにおいて他のメッセージ１０５に対するデータベースをノードが自由にアクセスする。
【００２２】
次に、図２を参照すると、本発明の実施例に従って、航空座席予約トランザクションにおいてメッセージに対するノードのロック及び解放を使用するコンピュータ・アプリケーション・プログラムのためのフロー・パス２００のインスタンスが示される。図２の例は、ホテルまたは公演事業に関する予約を含むあらゆる種類の予約に適用可能である。フロー・パス２００は、接続線によって相互接続された多数のノード２２０乃至２８０を有する。（ノード２２０及び２２５の間の接続線２１５に対する素子数が例示のために明確に示される。）もう一度いうと、１つのフロー・パス２００だけが（この場合にはサブ・パスによって）図示されているけれども、フロー・パス２００の複数インスタンスが存在し得る。更に、前の例におけるように、予約トランザクションはメッセージによって具現化され、システム・リソースに対するアクセス、この場合には航空情報データベース及び座席マッピング・データベースに対するアクセス、を必要とする。メッセージ２０５は、チケット販売業者、ウェブ・プログラム、顧客等から生じ、それらは、座席指定を含むフライトを記録することを要求する。メッセージ２０５は、入力キュー２１０において、スレッド・プール（図示されていない）からのスレッドの使用可能になるのを待つ。スレッドの使用可能になるとき、フロー・パス２００はそのスレッドに対してインスタンス化され、パス２００のインスタンスに対する入力ノード２２０はメッセージ２０５をキュー２１０から取り出す。
【００２３】
図２の実施例では、図１におけるように、適正であるアクションはデータベースの状態に依存する。それぞれの航空座席予約メッセージ２０５は、フロー・パス２００のインスタンスに関連したノードのセットによって並行して処理することが可能である。同じフライト及び座席割当てに対して２つ以上の予約メッセージが存在し、これらの複数のメッセージ２０５が並行して処理される場合、整合性の問題が生じる。即ち、同じフライトにおける同じ座席の複数予約という潜在的な問題はメッセージ・フロー・パス２００のインスタンスの境界内で管理されなければならない。
【００２４】
「Enter：入力」ノード２２０は、接続線２１５を介して「LocateFlight：フライト選定」２２５ノードにそのメッセージ２０５を送る。フライト選定ノード２２５は、そのメッセージ２０５によって表されたフライトを選定する。次に、そのフライトが予約受付のためにオープン状態であるかどうかを、「IsFlightOpen：フライトのオープン状態確認」ノード２３０が決定する。それが否定される場合、メッセージは「TryOtherFlight：別フライト試行」ノード２３５に送られる。その別フライト試行ノード２３５は、別のフライトを要求するようにチケット販売業者、顧客等に指示する。その要求は、可能性のあるフライトについてチケット販売業者、顧客等に知らせることを含み得る。新たな要求を受け取ったことに応答して、メッセージがノード２３５によって再びノード２２５に送られ、フライトが選定され、そのフライトが予約を受けるためにオープンであるかどうかをノード２３０が決定する。それとは別に、チケット販売業者、顧客等が新たな要求を行わないことを選ぶ場合、ノード２３５は、メッセージ２０５をノード２８０に送り、フライトを予約することなく終了する。
【００２５】
一旦オープン・フライトがノード２３０によって選定されると、メッセージ２０５が「LockFlight-Access：フライト・アクセス・ロック」ノード２４０に送られる。フライト情報データベースがノード２４０の他のインスタンスによって未だロックされてない場合、ノード２４０の現インスタンスが特定のフライトに対するフライト情報データベースへのアクセスをロックし、それによって、同じフライトに対する他のメッセージがそのデータベースをアクセスすることを防ぎ、当該ノード２４０がそのメッセージへの排他的アクセスを許可する。フライト情報データベースがノード２４０の他のインスタンスによって既にロックされている場合、ノード２４０の現インスタンスは、フライト情報データベースにおけるロックが解放されるのを待つ。（これは、各フライトに対するフライト情報データベースにトークンを割り当てることによって実現することが可能である。このように、ノード２４０は、トークンを受け取ったことに応答した、フライトに対するデータベースへの排他的アクセスを許可する。）
【００２６】
次に、「LocateSeatPreference：希望座席選定」ノード２４５において、フライト情報データベースへのアクセスを許可されたメッセージ２０５に対して、希望座席に関する情報が選定される。これは、乗客のアカウントにおける情報を調べること、又は手動入力を指示し且つそれを受けることを含む。希望座席は、列座席と通路側座席、前方座席と後方座席、主翼上座席と非主翼上座席等を含むことが可能である。
【００２７】
一旦希望座席が得られてしまうと、メッセージ２０５が「IsSeatOpen：座席のオープン状態確認」ノード２５５に送られる。そのノード２５５は、希望によって表されたタイプの特定の座席が使用可能であるかどうかを決定するために座席マッピング・データベースに問い合わせを行う。所望のタイプの座席が使用可能でない場合、メッセージ２０５が「TryOtherSeat：別座席試行」ノード２５０に送られる。そのノード２５０は、もう一度試してみるべきか又は諦めて何も予約しないようにすべきかを予約業者に尋ねる。予約業者がもう一度試してみることを選択する場合、フローはメッセージをノード２４５に戻す。ノード２４５は、新たな希望の手動入力に関してサーチするか又はその手動入力を指示する。
【００２８】
一旦、所望のタイプの座席がオープン状態にあることがノード２５５において決定されると、メッセージ２０５が「LockSeatAccess：座席アクセス・ロック」ノード２６０に送られる。座席マップ・データベースがノード２６０の別のインスタンスによって未だロックされされてない、例えば、ノード２６０が特定のフライトに関する座席マップ・データベースに対するトークンを受け取っていない場合、ノード２６０の当該インスタンスは特定のフライトに関するデータベースへのアクセスをロックされ、それによって、同じフライトに対する他のメッセージ２０５がそのデータベースをアクセスすることを防止し、当該ノード２６０はそれ自身のメッセージ２０５に対して排他的アクセスを許可する。次に、座席マップ・データベースに対するアクセスを許可されたメッセージ２０５が「RecordReservation：予約記録」ノード２６５に送られる。そのノード２６５は、フライト情報及び座席マップ・データベースに座席割振り及びフライト予約を記録する。そのデータベースに記録された情報は、更なる処理のためにメッセージ２０５にも付加される。
【００２９】
次に、メッセージ２０５が「ReleaseSeatAccess：座席アクセスの解放」ノード２７０に送られる。ノード２７０は、例えば、ノード２６０に割り当てられた座席マップ・データベースに対するトークンを再び利用することによって、特定のフライトに関して座席マップ・データベースを解放する。そこで、メッセージが「ReleaseFlightAccess：フライト・アクセスの解放」ノード２７５に送られる。ノード２７５は、同様に、ノード２４０に割り当てられたフライト情報データベースに対するトークンを再び利用することによって、特定のフライトに関してフライト情報データベースを解放する。次に、ノード２７５はメッセージ２０５を「Exit：出力」ノード２８０に送る。次に、ノード２８０は、メッセージの更なる処理（図示されていない）を待つことが可能である出力キュー２９０にそのメッセージを送る。なお、その更なる処理は、メッセージ２０５に付加された情報に基づいて、予約業者及び顧客への通知を作成すること、チケットを印刷すること等を含み得る。
【００３０】
次に図３を参照すると、本発明の一実施例に従って、或る通信トランザクションを遂行するために伝送回線（図示されていない）をアクセスするメッセージに対するノードのロック及び解放を使用したコンピュータ・アプリケーション・プログラムに対するフロー・パス３００のインスタンスが示される。一般的には、図３の例は、ＴＣＰ／ＩＰプロトコルのようなプロトコルに従ってデータ・パケットを送受信することを伴うトランザクションを含んだ種々の通信トランザクションに適用可能である。再び、フロー・パス３００の複数インスタンスが存在し得る。即ち、入力キュー３１０において、メッセージ３０５が、スレッド・プール（図示されていない）からのスレッドが使用可能になるのを待つ。スレッドが使用可能になると、フロー・パス３００はがインスタンス化され、そのインスタンスに対する「Input：入力」ノード３２０がキュー３１０からメッセージ３０５を取り出す。そこで、メッセージ３０５は「FormatData：データのフォーマット化」ノード３２５に送られる。そのノード３２５は、メッセージ３０５が送信されるシステム又はアプリケーションに対するデータをフォーマットする。
【００３１】
次の適切なアクションは通信回線の状態に依存する。従って、次に、メッセージ３０５が「GetXmitLock：送信ロックの獲得」ノード３３０に送られる。その回線がノード３３０の別のインスタンスによって既にロックされている場合、ノード３００の現インスタンスはその回線におけるロックが解かれるのを待つ。その通信回線がノード３３０の別のインスタンスによって未だロックされていない場合、ノード３３０の現インスタンスが通信回線に対するアクセスをロックし、それによって、他のメッセージ３０５がその回線をアクセスするのを防止し、当該ノード３３０はそれのメッセージ３０５に対する排他的アクセスを許可する。そこで、メッセージ３０５が「FlowOrder：注文の送出」ノード３３５に送られる。ノード３３５は、「XmitData：データの送信」ノード３４０にそのメッセージ３０５を送り、ノード３４０に関連したコードが実行された後、即ち、ノード３４０におけるメッセージ３０５の処理が終了した後、メッセージを「ReleaseXmitLock：送信ロックの解放」ノード３４５に送る。即ち、ノード３４０において、そのメッセージが通信回線を介して送信される。そこで、メッセージはノード３４５に送られる。ノード３４５は、例えば、ノード３３０に割り当てられたその回線のためのトークンをもう一度利用することによって、その回線を解放する。次に、ノード３４５は「Exit：出力」ノード３５０にメッセージ３０５を送る。次に、ノード３５０は、更なる処理（図示されていない）を待つことができる出力キュー３６０にそのメッセージ３０５を入れる。
【００３２】
次に図４及び図５を参照すると、本発明の一実施例に従って、メッセージ・フローを管理するための方法に関する局面が示される。前述のように、キュー４１０におけるメッセージ４０５は、それぞれのコンピュータ・ソフトウェア・アプリケーション処理ノードに関連した命令によって並行して処理することが可能である。第１メッセージ４０５.１は、ロック獲得ノード４２０Ａ、システム・リソース・アクセス・ノード４２５Ａ、及びロック解放ノード４３０Ａを含む第１セットの処理ノードに関連した第１スレッドの命令によって処理される。そのセットのノードは、ワークフローのメッセージ４０５.１を処理するための手順を定義するワークフロー４０１Ａにおいて相互接続される。第２メッセージ４０５.２は、ロック獲得ノード４２０Ｂ、システム・リソース・アクセス・ノード４２５Ｂ、及びロック解放ノード４３０Ｂを含む第２セットの処理ノードに関連した第２スレッドの命令によって処理される。第２セットのノードは、ワークフロー４０１Ｂにおいて相互接続される。ワークフロー４０１Ｂはワークフロー４０１Ａのもう１つのインスタンスともなり得る。
【００３３】
ワークフロー４０１Ａに関する処理は、そのワークフローのロック獲得ノード４２０Ａが時間Ｔ０においてそのそれぞれのメッセージ４０５.１を処理したことに応答してそのワークフローのメッセージ４０５.１に対するシステム・リソース４５０への排他的アクセスを許可することを含む。（そのアクセスの許可はロック４０２ｘのインスタンスを獲得するものとして示される。）同様に、ワークフロー４０１Ｂに関する処理は、そのワークフローのロック獲得ノード４２０Ｂが時間Ｔ２においてそのそれぞれのメッセージ４０５.２を処理したことに応答してそのワークフローのメッセージ４０５.２に対するシステム・リソース４５０への排他的アクセスを許可することを含む。
【００３４】
ワークフロー４０１Ａに関する処理は、そのワークフローのシステム・リソース・アクセス・ノード４２５Ａがメッセージ４０５.１を処理したことに応答してメッセージ４０５.１に対するシステム・リソース４５０をアクセスする動作４２６Ａを含む。これは、メッセージ４０５.１が或るシステム状態を変更することを含む。システム・リソース・アクセス・ノード４２５Ａがワークフロー４０１Ａにおいて許可（ロック獲得）ノード４２０Ａの後にあり、システム・リソース４５０がシステム・リソース・アクセス・ノード４２５Ａによる処理に応答してアクセスされるので、許可ノード４２０Ａがメッセージ４０５.１に対するロック４０２ｘを獲得するまで、そのシステム・リソースがアクセスされることはない。
【００３５】
同様に、ワークフロー４０１Ｂに関する処理は、そのワークフローのシステム・リソース・アクセス・ノード４２５Ｂがメッセージ４０５.２を処理したことに応答してメッセージ４０５.２に対するシステム・リソースをアクセスする動作４２６Ｂを含む。なお、その処理もメッセージ４０５.２が或るシステム状態を変更することを含む。
【００３６】
ワークフロー４０１Ａに関する処理は、そのワークフローのロック解放ノード４３０Ａがメッセージ４０５.１を処理したことに応答してシステム・リソース４５０の排他的アクセスを解放することも含む。同様に、ワークフロー４０１Ｂに関する処理も、そのワークフローのロック解放ノード４３０Ｂがメッセージ４０５.２を処理したことに応答してシステム・リソース４５０の排他的アクセスを解放することを含む。
【００３７】
図４に示されるように、第１メッセージ４０５.１はトランザクションＸに対するものであり、第２メッセージ４０５.２も同じトランザクションＸに対するものである。両方のメッセージ４０５.１及び４０５.２に対して、それぞれのロック獲得ノード４２０Ａ及び４２０Ｂによりシステム・リソース４５０に対する許可されたアクセスの排他性はそれぞれのメッセージのトランザクションのアイデンティティに応答するものである。従って、第１メッセージ４０５.１に対するロック獲得ノード４２０Ａがシステム・リソース４５０への第１メッセージ４０５.１のアクセスを許可している場合、第１メッセージ及び第２メッセージは同じトランザクションＸに対するものであるので、図４に示されるように、第２メッセージ４０５.２に対するロック獲得ノード４２０Ｂは、第１メッセージ４０５.１に対するロック解放ノード４３０Ａが時間Ｔ１においてロック４０２ｘ、即ち排他的アクセスを解放するまで、システム・リソース４５０に対する第２メッセージ４０５Ｂのアクセスを拒否する。
【００３８】
換言すれば、図４に示された例では、システム・リソース・アクセス・ノード４２５Ｂがワークフロー４０１Ｂでは許可ノード４２０Ｂの後にあるので、システム・リソース４５０はシステム・リソース・アクセス・ノード４２５Ｂによる処理に応答してアクセスされ、メッセージ４０５.１がメッセージ４０５.２の前にロック４０２ｘを獲得しているので、解放ノード４３０Ａが時間Ｔ１においてロック４０２ｘを解放し且つ許可ノード４２０Ｂが時間Ｔ２においてメッセージ４０５.２に対するロック４０２ｘを獲得するまで、メッセージ４０５.２に対するシステム・リソース４５０がアクセスされることはあり得ない。これは、命令スレッドを結合することを含まず、単にロック獲得ノード４２０Ａ及び４２０Ｂの両方が共通のトランザクションに関してチェックすることを含むだけであり、共通のトランザクションが見つかった場合、それに応答してその共通のトランザクションに対するロック４０２ｘを獲得すること及び解放することを含むだけであるということに留意されたい。
【００３９】
図５を参照すると、同じワークフロー４０１Ａ及び４０１Ｂが示されるが、このインスタンスにおけるメッセージ４０５.１及び４０５.２は、今度は、異なるトランザクションに対するものである。詳しく言うと、メッセージ４０５.１はトランザクションＵに対するものであり、一方、メッセージ４０５.２はトランザクションＶに対するものである。図示の方法の実施例によれば、メッセージ４０５.１及び４０５.２が異なるトランザクションに対するものであるので、第２メッセージ４０５.２は、第１メッセージ４０５.１に対するロック解放ノード４３０Ａが排他的アクセスを解放しているかどうかに関係なく、第２メッセージ４０５.２に対するロック獲得ノード４２０Ｂによってシステム・リソースに対するアクセスを許可される。従って、図示のように、メッセージ４０５.１はロック４０２ｕを許可され、一方、メッセージ４０５.２はそれぞれのロック獲得ノード４２０Ａ及び４２０Ｂによって同時にロック４０２ｖを許可され、従って、メッセージ４０５.１及び４０５.２の両方に対する処理は、システム・リソース４５０を同時にアクセスすることが可能である。
【００４０】
もう１つの実施例（図示されていない）では、システム・リソースのアクセスの排他性が、ロック獲得ノードのメッセージに対するトランザクションのアイデンティティに無関係である。この場合、第１メッセージ及び第２メッセージが異なるトランザクションに対するものであるかどうかに関係なく、第１メッセージに対するロック獲得ノードがシステム・リソースに対する第１メッセージのアクセスを許可した場合、第２メッセージのアクセスは、メッセージが共に同じトランザクションに対するものである図４に示されるように、第１メッセージに対するロック解放ノードが排他的アクセスを解放するまで、システム・リソースに対するアクセスをロック獲得ノードによって拒否される。
【００４１】
次に図６を参照すると、上記の実施例に対して一般的に適用可能であるコンピュータ・システム５１０が示される。システム５１０は、プロセッサ５１５、揮発性メモリ５２０（例えばＲＡＭ）、キーボード５２５、ポインティング装置５３０（例えばマウス）、不揮発性メモリ５３５（例えばＲＯＭ、ハードディスク、フロッピ・ディスク、ＣＤ−ＲＯＭ、及びＤＶＤ）、並びにディスプレイ・スクリーンを有するディスプレイ装置５０５を含む。メモリ５２０及び５３５は、本発明による方法の種々の実施例を実現するためにプロセッサ５１５によって実行し得るプログラム命令を記憶するためのものである。システム５１０に含まれるコンポーネントはバス５４０によって相互接続される。システム５１０と他のデータ保持体との間の情報交換を可能にするために、通信装置（図示されていない）をバス５４０に接続することも可能である。
【００４２】
種々の実施例において、システム５１０は、パーソナル・コンピュータ・システム、メインフレーム・コンピュータ・システム、ワークステーション、インターネット・アプライアンス、ＰＤＡ、メモリ組込み型プロセッサ等を含む種々の形態をとる。１つの実施例では、システム５１０は、ＡＩＸ又はＬｉｎｕｘオペレーティング・システム及びＷＭＱＩアプリケーションを走らせる IBM RISC 6000 システムである。別の実施例では、ＷＭＱＩアプリケーションは、IBM NetVista システム５１０及びWindows NT オペレーティング・システム上で走るものである。「コンピュータ・システム」という用語が、メモリ媒体からの命令を実行するプロセッサを有する任意の装置を包含することを意図されることは当然である。
【００４３】
メモリ媒体は本発明による方法の種々の実施例を実現するための命令（「ソフトウェア・プログラム」としても知られている）を記憶することが望ましい。種々の実施例では、１つ又は複数のソフトウェア・プログラムが、特に、プロシージャ・ベースの手法、コンポーネント・ベースの手法、及び／又はオブジェクト指向の手法を含む種々の方法で実現される。特定の例としては、ＸＭＬ、Ｃ、Ｃ++、Java、及び Microsoft Foundation Classes（ＭＦＣ）を含む。
【００４４】
ソフトウェア・アプリケーション及びコンピュータ・システムに関連して本発明を説明したが、本発明のプロセスはコンピュータ可読媒体として種々の形態で命令を配布することが可能であること、及び本発明が、その配布を行うために実際に使用される信号保持媒体の特定のタイプに関係なく、等しく適用し得ることは当業者には明らかであろう。コンピュータ可読媒体の例は、フロッピ・ディスク、ハードディスク・ドライブ、ＲＡＭ、及びＣＤ−ＲＯＭのような記録可能なタイプの媒体、並びに、ディジタル及びアナログ通信リンクのような送信タイプの媒体を含む。
【００４５】
本実施例に関する記載は、説明を目的として示されたものであるが、それが網羅的であること又は本発明をその開示された形態に限定することを意図するものではない。当業者には多くの修正及び変更が明らかであろう。
【００４６】
実施例は、本発明の原理、実用的な応用例を最もよく説明するために、及び当業者が本発明を理解することを可能にするために選択され、記述された。種々の修正を伴う種々の他の実施例が、予測される特定の用途に適するかもしれないが、それは本発明の範囲内であろう。更に、請求の範囲における実施行為は、必ずしも説明された特定の順序で遂行される必要がないことは当然である。
【図面の簡単な説明】
【００４７】
【図１】本発明の一実施例に従って、金融トランザクションにおけるメッセージに対するノードのロック及び解放を使用したコンピュータ・アプリケーション・プログラムにおけるワークフローを示す図である。
【図２】本発明の一実施例に従って、航空予約トランザクションにおけるメッセージに対してノードのロック及び解放を使用したコンピュータ・アプリケーション・プログラムにおけるワークフローを示す図である。
【図３】本発明の一実施例に従って、多重伝送回線をアクセスするメッセージに対してノードのロック及び解放を使用したコンピュータ・アプリケーション・プログラムにおけるワークフローを示す図である。
【図４】本発明の一実施例に従って、同じトランザクションに関する２つのメッセージに対するワークフローの更なる局面を示す図である。
【図５】本発明の一実施例に従って、異なるトランザクションに関する２つのメッセージに対するワークフローの更なる局面を示す図である。
【図６】本発明のシステム形態に関するコンピュータ・システムを示す図である。
【図１】
2006511857.tif 000003
【図２】
2006511857.tif 000004
【図３】
2006511857.tif 000005
【図４】
2006511857.tif 000006
【図５】
2006511857.tif 000007
【図６】
2006511857.tif 000008
【国際調査報告】
2006511857.tif 000009
2006511857.tif 000010
2006511857.tif 000011