(57)【特許請求の範囲】
【請求項１】
メッセージ・フローのプログラムによる修正の方法であって、
メッセージ・ブローカ内のメッセージ・フローを識別するステップであって、前記メッセージ・フローは複数のノードおよび接続路を含み、前記複数のノードはノードおよび反射ノードを含み、前記ノードは事前定義ノードおよびユーザ定義ノードの少なくとも一つであり、前記メッセージ・ブローカは、メッセージを第一正式メッセージング・プロトコルから第二正式メッセージング・プロトコルに変換ができる媒介コンピュータ・プログラム・コードであり、前記媒介コンピュータ・プログラム・コードはコンピュータ可読媒体に格納される、前記識別するステップと、
前記メッセージ・フロー内の前記反射ノードを選択するステップであって、前記反射ノードは外部リソースに関連付けられ、前記外部リソースは実行コードである、前記選択するステップと、
前記外部リソースを実行するステップであって、前記実行が前記メッセージ・フローの構造の前記修正をもたらし、前記修正はノードの追加、変更、および削除であり、前記修正はランタイム中に行われる、前記実行するステップと、
を含む前記方法。
【請求項２】
前記メッセージ・フローに関連付けられた評価指標を分析するステップであって、前記評価指標は、前記実行するステップに関連付けられたパラメータである、前記分析するステップ、
をさらに含む、請求項１に記載の方法。
【請求項３】
前記修正を最適化メッセージ・フローとしてデータ・ストアに格納するステップであって、前記最適化メッセージ・フローは前記メッセージ・フローとは異なる、前記格納するステップと、
ランタイム中に、前記メッセージ・ブローカ内の前記メッセージ・フローを前記最適化メッセージ・フローに置き換えるステップであって、前記最適化メッセージ・フローが展開され、前記メッセージ・フローは展開を止める、前記置き換えるステップと、
前記最適化メッセージ・フローを実行するステップと、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記最適化メッセージ・フローがユーザ・インタフェース内に提示される、請求項３に記載の方法。
【請求項５】
前記外部リソースはＪＡＶＡ実行コードである、請求項１に記載の方法。
【請求項６】
前記反射ノードはタイムアウト・ノードに関連付けられ、前記タイムアウト・ノードは前記反射ノードの機能の前記実行をトリガする、請求項１に記載の方法。
【請求項７】
メッセージ・フローのプログラムによる修正のためのシステムであって、
ノード、接続路、および反射ノードの少なくとも一つを含むメッセージ・フローを実行できるフロー・エンジンであって、前記フロー・エンジンはメッセージ・ブローカに関連付けられ、前記反射ノードは外部リソースに関連付けられ、前記外部リソースは、前記メッセージ・フローを構造的に修正できる実行コードである、前記フロー・エンジンと、
メッセージを保持するよう構成されたメッセージ・キューであって、前記メッセージはアプリケーションに関連付けられ、前記アプリケーションはコンピュータ可読媒体内に格納されたコンピュータ・プログラム・コードであり、前記アプリケーションはアプリケーション・サーバと関連付けられる、前記メッセージ・キューと、
前記反射ノードを前記外部リソースおよびパラメータの少なくとも一つとリンクすることができる構成設定であって、前記パラメータは実行設定値である、前記構成設定と、
を含む前記システム。
【請求項８】
前記メッセージ・フローの分析を遂行するよう構成された分析エンジンであって、前記分析は評価指標の収集であり、前記分析エンジンは前記評価指標を前記フロー・エンジンに伝送する、前記分析エンジンと、
ランタイム中に前記外部リソースを実行できるフロー・マニピュレータであって、前記外部リソースは、ノード変更および接続路調整の少なくとも一つを遂行することができ、前記ノード変更は、ノード挿入、ノード修正、およびノード削除の少なくとも一つであり、前記接続路調整は、接続路挿入、接続路修正、および接続路削除の少なくとも一つである、前記フロー・マニピュレータと、
メッセージ・フローの変更およびエラーの少なくとも一つを保持できる監査マネージャであって、前記メッセージ・フローの変更は、差分および改訂の少なくとも一つとして保持される、前記監査マネージャと、
をさらに含む、請求項７に記載のシステム。
【請求項９】
リアルタイムで前記評価指標が収集される、請求項８に記載のシステム。
【請求項１０】
前記外部リソースはノード・ライブラリに関連付けられ、前記ノード・ライブラリは事前定義ノードおよびユーザ定義ノードの少なくとも一つを含む、請求項７に記載のシステム。
【請求項１１】
前記反射ノードはタイムアウト・ノードに接続され、前記タイムアウト・ノードは前記反射ノードを定期的に実行するよう構成される、請求項７に記載のシステム。
【請求項１２】
前記外部リソースは、メッセージ・フローの構造的な修正を遂行するよう構成された、アプリケーション・プログラミング・インタフェース（ＡＰＩ）である、請求項７に記載のシステム。
【請求項１３】
コンピュータ・プログラムであって、前記プログラムがコンピュータに、
メッセージ・ブローカ内のメッセージ・フローを識別するよう動作可能であり、前記メッセージ・フローは複数のノードおよび接続路を含み、前記複数のノードはノードおよび反射ノードを含み、前記ノードは事前定義ノードおよびユーザ定義ノードの少なくとも一つであり、前記メッセージ・ブローカは、メッセージを第一正式メッセージング・プロトコルから第二正式メッセージング・プロトコルに変換する機能と、
前記メッセージ・フロー内の前記反射ノードを選択するよう動作可能であり、前記反射ノードを外部リソースに関連付ける機能と、
前記外部リソースを実行するよう作動し、前記実行が前記メッセージ・フローの構造の修正をもたらし、前記修正はノードの追加、変更、および削除であり、前記修正をランタイム中に行う機能と、
を実行させる、コンピュータ・プログラム。
【請求項１４】
前記反射ノードはタイムアウト・ノードに接続され、前記タイムアウト・ノードは事前定義ノードである、請求項１３に記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメッセージ・パッシングの分野に関し、さらに具体的には、ランタイム中のメッセージ・フローのプログラムによる修正に関する。
【背景技術】
【０００２】
アプリケーション統合とは、ハイ・レベルでは、組織内または組織間のソフトウエア・アプリケーションを統合するために実装可能なソリューションであるといえる。歴史的に、アプリケーション統合は、例えば、社内の異なる部門、事業部の間、または新規合併会社との間などでレガシー・ソフトウエア・アプリケーションの統合に重きを置いてきた。組織内で、これらのアプリケーションは、部門にわたって相当に違いがあることが多く、相異なるプラットフォーム上に存在することがあり、相異なるプログラミング言語で記述されることがあり、相異なるデータ・フォーマットが使われることがある。サービス指向アーキテクチャ（ＳＯＡ：Ｓｅｒｖｉｃｅ  Ｏｒｉｅｎｔｅｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）内にアプリケーションを統合することは、実際的で既存のアプリケーションを再記述するのに替わるコスト効果的なソリューションとなり得る。
【０００３】
ＳＯＡインフラストラクチャ内では、メッセージ・パッシングは、フレキシブル、再使用可能で、ロバストなアプリケーション統合の構築を可能にする不可欠のコンポーネントであるといえる。通常、メッセージ・パッシングは、数多くのメッセージ処理オペレーションを遂行できるメッセージ・ブローカを含む。すなわち、メッセージ・ブローカは、組織内のアプリケーション間の交信を円滑にすることができる。メッセージ・ブローカは、現在静的状態のメッセージ・フロー内のメッセージを処理することができる。すなわち、メッセージ・フローが、動的に、自己制御するもしくはメッセージ、内部状態、コンテキスト、および刺激に反応する、またはその両方を行うことはできない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
メッセージ・フローの処理の改善のための現在のソリューションには、手動によるメッセージ・フロー修正が含まれる。例えば、メッセージ・フローの設計は、ボトルネックを表示可能なパフォーマンス評価指標に応じて、ミドルウェア・アナリストが修正することができる。手動で修正されたメッセージ・フローは、人手を介して、再展開し、継続的に最適化しなければならない。このアプローチは、手間がかかり、間違いが発生しやすい可能性があり、インフラストラクチャのコストに大きく影響することがある。
【課題を解決するための手段】
【０００５】
本発明の一つの態様には、ランタイム中のメッセージ・フローのプログラムによる修正のための方法、コンピュータ・プログラム、システム、および装置を含めることができる。メッセージ・ブローカ内のメッセージ・フローを識別することができる。メッセージ・フローにはノードおよび接続路を含めることができる。ノードには、反射ノード、事前定義ノード、およびユーザ定義ノードを含めることができる。このメッセージ・ブローカは、メッセージを第一正式メッセージング・プロトコルから第二正式メッセージング・プロトコルに変換できる媒介コンピュータ・プログラム・コードとすることができる。このコードは、コンピュータ可読媒体内に格納することができる。メッセージ・フロー内の反射ノードを選択することができる。反射ノードは、外部リソースと関連付けることができ、このリソースを実行コードとすることができる。外部リソースを実行し、メッセージ・フローの構造の修正を行うことができる。修正はランタイム中に行うことが可能である。この修正には、ノードもしくは接続路またはその両方の追加、変更、および削除を含めることができる。
【０００６】
本発明の別の態様には、ランタイム中にメッセージ・フローをプログラムで修正するためのシステムを含めることができる。この態様では、フロー・エンジンが、ノード、接続路、および反射ノードを含むメッセージ・フローを実行することができる。フロー・エンジンはメッセージ・ブローカと関連付けることができる。反射ノードを外部リソースと関連付けることが可能である。外部リソースは、メッセージ・フローを構造的に修正できる実行コードとすることができる。メッセージ・キューは、アプリケーションとの関連付けが可能なメッセージを保持するように構成することができる。アプリケーションは、コンピュータ可読媒体内に格納されたコンピュータ・プログラム・コードとすることができる。アプリケーションは、アプリケーション・サーバと関連付けることができる。構成設定によって、反射ノードを外部リソースもしくはパラメータまたはその両方にリンクすることができる。このパラメータは実行設定値とすることができる。
【図面の簡単な説明】
【０００７】
【図１】本明細書で開示する本発明アレンジメント（方法／装置／配列）の実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正の方法を示すフローチャートである。
【図２】本明細書で開示する本発明アレンジメントの実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正の一組のシナリオを示す概略図である。
【図３】本明細書で開示する本発明アレンジメントの実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正のためのシステムを示す概略図である。
【発明を実施するための形態】
【０００８】
本開示は、ランタイム中のメッセージ・フローのプログラムによる修正のためのソリューションである。本ソリューションにおいて、メッセージ・フローは、一つ以上の作動インプットに応じてランタイム中に構造的に修正することができる。作動インプットには、以下に限らないが、評価指標、状態、コンテキスト、刺激などを含めることができる。構造的な修正には、以下に限らないが、ノード操作（例、追加、変更、削除）、接続路操作（例、挿入、修正、削除）、屈曲点操作などを含めることができる。一つの実施形態において、メッセージ・フロー内の反射ノードは、ランタイムにおいてメッセージ・フローを修正できる、構造的アプリケーション・プログラミング・インターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）機能の実行を可能にすることができる。この実施形態において、反射ノードは、反射ノードの機能に定期的なトリガを加えることが可能なタイムアウト・ノードにリンクすることができる。
【０００９】
当業者ならよく理解できるであろうように、本発明の態様は、システム、方法、またはコンピュータ・プログラムとして具現することができる。従って、本発明の態様は、全体がハードウエアの実施形態、全体がソフトウエアの実施形態（ファームウエア、常駐ソフトウエア、マイクロコードなどを含む）、あるいは、一般に本明細書では全て「回路」、「モジュール」、または「システム」といわれる、ソフトウエアおよびハードウエア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読媒体（群）中に具現されたコンピュータ・プログラムの形を取ることもできる。
【００１０】
一つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。
【００１１】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使うためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。
【００１２】
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合わせで記述することができる。このプログラム・コードは、全体をユーザのコンピュータで、一部をユーザのコンピュータで、スタンドアロン・ソフトウエア・パッケージとして実行することができ、一部をユーザのコンピュータで他の部分を遠隔コンピュータで、または全体を遠隔のコンピュータまたはサーバで実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅａｒｅａ ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことができる。
【００１３】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラムのフローチャート説明図もしくはブロック図またはその両方を参照しながら本発明の態様を以下に説明する。フローチャート説明図もしくはブロック図またはその両方の各ブロック、および、フローチャート説明図もしくはブロック図またはその両方中のブロックの組み合わせは、コンピュータ・プログラム命令によって実装可能であることが理解されよう。
【００１４】
これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータ又は他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するための手段を生成するようにすることができる。
【００１５】
また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施する命令群を包含する製品を形成するようにすることができる。
【００１６】
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、または他のデバイス上で一連のオペレーション・ステップを実施させてコンピュータ実装のプロセスを生成し、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するためのプロセスを提供するようにすることもできる。
【００１７】
図１は、本明細書で開示する本発明アレンジメントの実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正の方法１００を示すフローチャートである。方法１００において、メッセージ・ブローカ内で実行されているメッセージ・フローは、ランタイム中に動的に修正することができる。このメッセージ・フローには、作動インプットに応じ、メッセージ・フローに構造的調整を実施することが可能な反射ノードを含めることができる。一つの実施形態において、方法１００は、リアルタイムまたはほぼリアルタイムで実施することができる。
【００１８】
本明細書での使用において、メッセージ・フローは、メッセージに対し一連の処置を行う能力のある２つ以上のノードを含むソフトウエア構造体とすることができる。メッセージ・フローのノードは接続路を介して接続することができる。接続路は、それを通してメッセージの伝送が可能な、メッセージ・フローのノードの間のリンケージとすることができる。ノードは、メッセージの一部を処理可能な実行可能ソフトウエア・エンティティとすることができる。ノードは、ノードの連結を可能にできるターミナルに関連付けることができる。ターミナルは、入力端、出力端などとすることができる。ノードには、以下に限らないが、事前定義ノード（例、内蔵ノード）、ユーザ定義ノード、サブフローなどを含めることができる。ノードの機能には、以下に限らないが、メッセージの処理、メッセージの変換、メッセージの経路設定、集合、フィルタリングなどを含めることができる。
【００１９】
本明細書での使用において、メッセージは、あるアプリケーションから別のアプリケーションに伝えられるアプリケーション・メッセージとすることができる。このメッセージは、一つ以上の従来フォーマットもしくは独自フォーマットまたはその両方のフォーマットに適合する、自動生成されたデジタル・アーチファクトとすることができる。一例において、メッセージは、拡張マークアップ言語（ＸＭＬ：Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）のメッセージとすることができる。
【００２０】
アプリケーションは、アプリケーション・メッセージング・インフラストラクチャ内のソフトウエア・プログラムとすることができる。アプリケーション・メッセージング・インフラストラクチャは、メッセージ・パッシング・バスに亘るアプリケーションの弱連結を可能にする、ハードウエア／ソフトウエア・プラットフォームとすることができる。一例において、アプリケーション・メッセージング・インフラストラクチャには、サービス指向アーキテクチャ（ＳＯＡ）を含めることができる。方法１００内のメッセージ・フローは、分散コンピューティング環境、ネットワーク・コンピューティング環境、クラウド・コンピューティング環境などに設置可能であることをよく理解すべきである。
【００２１】
ステップ１０５において、メッセージ・ブローカ内のメッセージ・フローを選択することができる。選択は、以下に限らないが、パフォーマンス評価指標、メッセージ・フローの複雑性、オーナーなどを含む一つ以上の基準に基づいて行うことができる。ステップ１１０で、選択されたメッセージ・フローを実行することができる。実行は、動的コンピューティング環境内においてリアルタイムで行うことができる。ステップ１１５において、メッセージ内の反射ノードを選択することができる。反射ノードは、実行順序、定期的ノード選択などに基づいて選択することができる。反射ノードは、事前定義ノード、ユーザ定義、サブフローなどにすることができる。
【００２２】
ステップ１２０で、選択された反射ノードを実行することができ、実行には、外部リソースに関連するプログラム処置を遂行するステップを含めることができる。実行可能リソースは、以下に限らないが、実行コード、アプリケーション・プログラミング・インタフェース（ＡＰＩ）などを含めた、実行可能エンティティとすることが可能な外部リソースとすることができる。実行コードには、以下に限らないが、ＪＡＶＡ、Ｃ、実用データ取得レポート作成言語（ＰＥＲＬ：Ｐｒａｃｔｉｃａｌ  Ｅｘｔｒａｃｔｉｏｎ  ａｎｄ  Ｒｅｐｏｒｔｉｎｇ  Ｌａｎｇｕａｇｅ）などを含めることができる。
【００２３】
ステップ１２５において、反射ノードは、メッセージ・フローの構造、実行、もしくはパフォーマンスまたはこれらの組み合わせを評価することができる。構造の評価には、以下に限らないが、構造の改善もしくは最適化またはその両方を判定するための従来式もしくは独自式またはその両方式の分析を含めることができる。メッセージ・フローの評価には、以下に限らないが、実行接続の検査、ノードの作動状況などを含めることができる。メッセージ・フローのパフォーマンスの評価には、以下に限らないが、評価指標の収集、実行評価指標の分析などを含めることができる。
【００２４】
ステップ１３０において、メッセージ・フローの評価が、フローが最適化されていないことを示した場合、方法はステップ１３５に進み、示さない場合はステップ１０５に戻る。ステップ１３５で、パフォーマンスを改善するため、ランタイム中にメッセージ・フローを構造的に修正することができる。一つの実施形態において、メッセージ・フローを自動的に修正し再展開することができる。ステップ１４０で、随意的に構造的な修正を記録することができる。メッセージ・フローの修正は、元のメッセージ・フロー構造、差分などとして記録することができる。修正について、監査し変更歴を追跡することなどが可能なようにできる。
【００２５】
ステップ１４５において、構造的な修正から最適化フローを生成することができる。動作可能性を確実にするため、この最適化フローに、一貫性テスト、構文テストなどを課すことができる。一例において、最適化フローの生成に応じて、自動的にテストを実施することができる。別の例では、テストは、メッセージ・フロー・ソフトウエア・ツールを使って手動で実施することができる。
【００２６】
ステップ１４７において、ランタイム中に、識別されたメッセージ・フローを最適化フローに置き換えることができる。一例において、選択されたメッセージ・フロー構造を、リアルタイムで動的に修正し使用することができる。この例において、メッセージ・フローは、自動的に変更し再展開することができる。この例の一つの構成において、メッセージ・フローのランタイム状態を維持しながらメッセージ処理状態を存続させることができる。ステップ１５０において、さらなる処理対象のメッセージ・フローがある場合、方法はステップ１０５に戻り、ない場合はステップ１５５に進む。ステップ１５５でこの方法を終了することができる。
【００２７】
本明細書に提示する図面は、例示目的のためだけのものであって、いかなる点においても、本発明を限定すると解釈すべきではない。複数のメッセージ・フローに対して同時に方法１００を実施することができる。すなわち、メッセージ・フローの最適化は、並行して実施することができ、改善の迅速な達成を可能にする。一つの実施形態において、方法１００は反復的に実行することができ、メッセージ・フローが、環境要件もしくは変化またはその両方に応じて継続的に最適化されることを可能にする。
【００２８】
図２は、本明細書で開示する本発明アレンジメントの実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正の一組のシナリオ２１０、２６０を示す概略図である。シナリオ２１０、２６０は、方法１００との関連において設定することができる。シナリオ２１０において、メッセージ・キューもしくはメッセージ・ブローカ（例えば、フロー・エンジン２５０）またはその両方の中のメッセージ・フロー２０９をプログラムによって修正することができる。メッセージ・フロー２０９の構造は、一つ以上のイベントに応じ、ランタイム中に変更することができる。イベントには、自動トリガ、および手動によるトリガ処置を含めることができる。シナリオ２１０において、フロー２０９の構造の修正には、ノード２３０、２３１および接続路２２４、２２５の付加を含めることができる。
【００２９】
シナリオ２１０において、メッセージ・フロー２０９は、有向グラフ２０９として視覚的に表現できることを理解すべきである。メッセージ・フロー２０９は、メッセージ・フロー・エディタのインタフェース（例、インタフェース３４４）内に視覚的に提示することができる。このシナリオにおいて、ノード２１１〜２１６、２３０、２３１は、図形アイコンとして表現することができる。メッセージ・フロー接続路（例、経路）は有向線２２０〜２２６で表すことができる。破線２２４〜２２６は、ノード２１６の実行から得られた、動的に挿入された接続路を表すことができる。点線２２２は、ノード２１６の実行から生じた、ノード２１２〜２１４間の削除された接続路を表すことができる。
【００３０】
シナリオ２１０において、メッセージ・フロー２０９には、接続路２２０〜２２３を介してリンクされたノード２１１〜２１６を含めることができる。フロー２０９内にノード２１５、２１６を設定することができ、これらを接続路２２３によって結合することができる。ノード２１５、２１６は、ノード２１６に関連付けられた実行コードを介して、フロー２０９の定期的評価をトリガすることができる。フロー２０９は、必要なとき（例、パフォーマンス問題時）ランタイム中に構造的に修正することができる。このシナリオにおいて、フロー２０９は、ノード２３０〜２３１および接続路２２４〜２２６の付加を介して修正することができる。接続路２２２を除去して、ノード２３０および接続路２２４、２２５を介してノード２１２から２１４をリンクする新規のメッセージ・フロー接続路を生成することができる。すなわち、新規経路（例、接続路２２４および２２５）を生成することができる。
【００３１】
接続路２２６を介して、ノード２３０、２３１をリンクすることができ、これによりノード２３０は複数の接続に対応することができる。ノード２３０の選択は、ターミナル構成（例、入力端もしくは出力端またはその両方）に基づいて行うことができる。ノード選択の基準には、以下に限らないが、インプット／アウトプット量、処理能力などを含めることができる。一つの実施形態において、ノード連結は、自動的に検証され、メッセージ・フローの動作可能性を確実にすることができる。一例において、別途の連結を実施し、フロー２０９に対するロバストな改善を可能にすることができる。この例において、ノードの別のアウトプットを識別することができ、このノードから別の適切なノードへのリンクを確立することができる。
【００３２】
一例において、ノード２１５は、定期的にノード２１６の実行を駆動する、タイムアウト・ノードとすることができる。この例において、ノード２１５のタイムアウト値は、自動で、もしくは手動で、またはその両方によって設定された値とすることができる。
【００３３】
一例において、ノード２１６は、アプリケーション・プログラミング・インタフェース（ＡＰＩ）に関連付けられた動的フロー更新ノードとすることができる。この例において、ノード２１６は、ＪＡＶＡ（Ｒ）のＡＰＩ機能を実行でき、メッセージ・フロー２０９の構造的な修正を可能にする。
【００３４】
一つの実施形態において、ノード挿入には、フロー２０９内へのＪＡＶＡ（Ｒ）ＣＯＭＰＵＴＥノードの付加を含めることができる。
【００３５】
シナリオ２６０において、フロー・エンジン２５０は、メッセージ・フロー２４０の反復的改善の実現を可能にすることができる。フロー・エンジン２５０は、メッセージング・アーキテクチャに関連付けられたメッセージ・ブローカのコンポーネントとすることができる。メッセージ・フロー２４０は、リアルタイムの評価指標２４４を用いて継続的に改善することができる。シナリオ２６０において、収集された評価指標２４４は、メッセージ・フロー２４０の最適化を駆動するためのインプット・パラメータとして用いることができる。評価指標２４４には、以下に限らないが、スループット、個別ノードのパフォーマンス、経路パフォーマンス、諸評価指標、フロー・レスポンス時間などを含めることができる。評価指標２４４は、エンジン２５０、記録リソース、外部プログラムなどから収集することができる。
【００３６】
フロー・エンジン２５０は、インプットとしてメッセージ・フロー２４０を受信することができる。エンジン２５０は、評価指標を用いて適切な構造変更を決めることができる。例えば、メッセージ・フロー経路が閾値を下回る実施状況のとき、エンジン２５０は、プログラムによって再構築を実行することができる。メッセージ・フロー２４０の変更を、エンジン２５０からのアウトプットとして保持し、これを最適化フロー２４２とすることができる。最適化フロー２４２は、メッセージ・フロー２４０とは構造的に異なるメッセージ・フローとすることができる。フロー２４２は、評価指標２４４に応じてリアルタイムで生成することができる。一例において、フロー２４２は、展開の前にテストし、パフォーマンスの変化特性を判定することができる。この例において、フロー２４２のパフォーマンスがメッセージ・フロー２４０を上回れば、メッセージ・フロー２４２を展開することができる。
【００３７】
本明細書に提示する図面は、例示目的のためだけのものであって、いかなる点においても、本発明を限定すると解釈すべきではない。一例において、シナリオ２１０は、異なるメッセージ・フローの修正を可能にすることができる。この例において、メッセージ・フロー２０９は、反射ノードを異なるメッセージ・フロー中に挿入し、その異なるメッセージ・フローが自己修正を遂行するのを可能にすることができる。
【００３８】
図３は、本明細書で開示する本発明アレンジメントの実施形態による、ランタイム中のメッセージ・フローのプログラムによる修正のためのシステム３００を示す概略図である。システム３００は、方法１００およびシナリオ２１０、２６０との関連において設定することができる。システム３００において、フロー・エンジン３２０は、反射ノード３３６の実行を可能にし、メッセージ・フロー３３２がランタイム中に構造的に修正されるようにすることができる。エンジン３２０は、サーバ３１０のコンポーネントとすることができ、該サーバはネットワーク３８０を介して通信可能にアプリケーション・サーバ３５０に連結することができる。アプリケーション３５２は、メッセージ３６２を処理のためメッセージ・キュー３３０に伝送することができる。メッセージ・フロー３３２は、メッセージ３６２を処理（例、プロトコルの変換）してメッセージ３６０を生成することができる。
【００３９】
ブローカ・サーバ３１０は、メッセージ３６２、３６０の送受信が可能なハードウエア／ソフトウエア・コンポーネントとすることができる。サーバ３１０には、以下に限らないが、フロー・エンジン３２０、メッセージ・キュー３３０、メッセージ・フロー３３２、ノード・ライブラリ３７０、データ・ストア３４０、インタフェース３４４などを含めることができる。サーバ３１０の機能には、以下に限らないが、メッセージ変換、メッセージ妥当性確認、メッセージ転換、メッセージ経路設定などを含めることができる。一例において、サーバ３１０は、ＩＢＭ（ＩＢＭ社の登録商標）ＷＥＢＳＰＨＥＲＥ  ＭＥＳＳＡＧＥ  ＢＲＯＫＥＲのコンポーネントとすることができる。すなわち、サーバ３１０は、エンタープライズ・サービス・バスのコンポーネントとすることができる。
【００４０】
フロー・エンジン３２０は、ランタイム中にメッセージ・フロー３３２を変更するためのハードウエア／ソフトウエア・コンポーネントとすることができる。フロー・エンジン３２０には、以下に限らないが、分析エンジン３２２、フロー・マニピュレータ３２４、監査マネージャ３２６、構成設定３２８などを含めることができる。フロー・エンジン３２０の機能には、以下に限らないが、フロー操作、フロー分析、フロー妥当性確認、エラー処理、フロー／メッセージのセキュリティなどを含めることができる。一例において、フロー・エンジン３２０は、分散コンピューティング環境内のネットワーク・エレメントとすることができる。
【００４１】
分析エンジン３２２は、メッセージ・フロー３３２のパフォーマンスの査定が可能なハードウエア／ソフトウエア・エンティティとすることができる。エンジン３２２の機能には、以下に限らないが、評価指標収集、フロー３３２の分析などを含めることができる。エンジン３２２は、フロー３３２もしくは最適化フローまたはその両方に対するフロー分析を行うことができる。一例において、エンジン３２２は、ネットワーク・コンピューティング環境に関連付けられた外部コンポーネントとすることができる。
【００４２】
フロー・マニピュレータ３２４は、ランタイム中に、一つ以上の条件に対応してフロー３３２を調整することが可能なハードウエア／ソフトウエア・コンポーネントとすることができる。マニピュレータの機能には、以下に限らないが、ノード操作、接続路調整などを含めることができる。ノード操作には、以下に限らないが、ノードの挿入、変更、および削除を含めることができる。接続路調整には、以下に限らないが、接続路の追加、調整および除去を含めることができる。一例において、マニピュレータ３２４は、ノードの挿入が必要なとき、ノード・ライブラリ３７０からノード３７２を選択することができる。この例において、事前設定されたノード３７２をメッセージ・フロー３３２中に挿入することができる。
【００４３】
監査マネージャ３２６は、メッセージ・フロー３３２の変更の追跡が可能なハードウエア／ソフトウエア・エンティティとすることができる。マネージャ３２６の機能には、以下に限らないが、記録、監査報告作成、変更履歴などを含めることができる。マネージャ３２６の追跡には、ノード・レベル追跡、フロー改訂追跡などを含めることができる。一例において、マネージャ３２６は、メッセージ・フロー３３２の変更の取り消しをさせることができる。
【００４４】
構成設定３２８は、エンジン３２０の動作を制御するための設定の収集とすることができる。構成設定３２８には、以下に限らないが、ノード識別値、メッセージ・フロー識別、実行コード識別子、パラメータ、評価指標設定、セキュリティ設定、ビジネス・ルールなどを含めることができる。一つの実施形態において、構成設定３２８は、反射ノード３３６を実行コードにリンク可能にすることができる。例えば、設定３２９は、反射ノード（例、Ｒｅｆ＿Ａ）を、実行コード（例、Ｅｘｅ＿Ａ）とパラメータのセット（例、Ｐａｒａｍ＿Ａ）とに関連付け可能にすることができる。
【００４５】
メッセージ・キュー３３０は、メッセージ３６２もしくはメッセージ３６０またはその両方を一時的に保持することが可能なプログラム・キューとすることができる。キュー３３０は、メッセージ３６２を受信し、メッセージ・フロー３３２による処理のため格納しておくことができる。キュー３３０は、メッセージ・ブローカに関連付けられたキュー３３０とすることができる。キュー３３０には、以下に限らないが、スタック、キュー、ヒープなどを含めることができる。キュー３３０の処理順序には、以下に限らないが、後入れ先出し（ＬＩＦＯ：Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）、先入れ先出し（ＦＩＦＯ：Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）などを含めることができる。
【００４６】
メッセージ・フロー３３２は、メッセージ３６０、３６２を処理可能なソフトウエア構造体とすることができる。メッセージ・フロー３３２には、以下に限らないが、ノード３３４、反射ノード３３６などを含めることができる。メッセージ・フロー３３２のロジックには、以下に限らないが、拡張構造化クエリー言語（ＥＳＱＬ：Ｅｘｔｅｎｄｅｄ  Ｓｔｒｕｃｔｕｒｅｄ  Ｑｕｅｒｙ  Ｌａｎｇｕａｇｅ）、ＪＡＶＡ、変換用拡張スタイル・シート言語（ＸＳＬＴ：Ｅｘｔｅｎｓｉｂｌｅ  Ｓｔｙｌｅ  ｓｈｅｅｔ  Ｌａｎｇｕａｇｅ  ｆｏｒ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎｓ）などを含めることができる。
【００４７】
ノード・ライブラリ３７０は、ノード３７２を格納するためのソフトウエア・アーチファクトとすることができ、ランタイム中にメッセージ・フロー３３２を動的に修正するためこのノードを用いることができる。ノード３７２には、以下に限らないが、事前定義ノード（例、フィルタ・ノード）ユーザ定義ノードなどを含めることができる。ライブラリ３７０は、自動で、もしくは手動で、またはその両方で投入することができる。一例において、ライブラリは、データ・ストア３４０もしくは外部のリポジトリまたはその両方に格納することができる。
【００４８】
データ・ストア３４０は、実行コード３４２を保持する能力のあるハードウエア／ソフトウエア・エンティティとすることができる。データ・ストア３４０には、以下に限らないが、ストレージ・エリア・ネットワーク（ＳＡＮ：Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ネットワーク接続ストレージ（ＮＡＳ:Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｒａｇｅ）などを含めることができる。データ・ストア３４０には、以下に限らないが、リレーショナル・データベース管理システム（ＲＤＭＳ：Ｒｅｌａｔｉｏｎａｌ  Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）、オブジェクト指向データベース管理システム（ＯＯＤＢＭＳ：Ｏｂｊｅｃｔ  Ｏｒｉｅｎｔｅｄ  Ｄａｔａｂａｓｅ  Ｍａｎａｇｅｍｅｎｔ  Ｓｙｓｔｅｍ）などを含めることができる。
【００４９】
実行コード３４２は、メッセージ・フロー３３２を動的に修正することが可能なプログラム・リソースとすることができる。コード３４２は、プログラム命令、バイナリ・コードなどとして格納することができる。コード３４２は、諸許可、アクセス制御リスト（ＡＣＬ：ａｃｃｅｓｓ  ｃｏｎｔｒｏｌ  ｌｉｓｔ）、諸設定などに関連付けることができる。一例において、コード３４２は、データ・ストア３４０内に格納することができる。この例において、コード３４２は、データベース構造（例、テーブル）内に格納することが可能である。
【００５０】
インタフェース３４４は、システム３００内のリソースを設定するためのユーザ・インタフェースとすることができる。インタフェース３４４は、構成設定３２８、メッセージ３６０、３６２、メッセージ・フロー３３２、反射ノード３３６の提示もしくは修正またはその両方を可能にすることができる。一例において、インタフェース３４４は、ＩＢＭ（ＩＢＭ社の登録商標）ＷＥＢＳＰＨＥＲＥ  ＢＲＯＫＥＲメッセージ・フロー・エディタに関連付けることができる。この例において、インタフェース３４４は、ＩＢＭ（ＩＢＭ社の登録商標）ＷＥＢＳＰＨＥＲＥ  ＭＥＳＳＡＧＥ  ＢＲＯＫＥＲＳ  ＥＸＰＬＯＲＥＲソフトウエアとすることができる。インタフェースは、グラフィカル・ユーザ・インタフェース、音声ユーザ・インタフェース、テキスト・ベース・ユーザ・インタフェース、混合モード・インタフェースなどにすることができる。
【００５１】
アプリケーション・サーバ３５０は、アプリケーション３５２を実行するためのハードウエア／ソフトウエア・プラットフォームとすることができる。サーバ３５０には、以下に限らないが、アプリケーション３５２、メッセージ・キュー（図示せず）、構成設定などを含めることができる。サーバ３５０は、従来方式もしくは独自方式またはその両方の実行環境とすることができる。一例において、サーバ３５０は、ＩＢＭ（ＩＢＭ社の登録商標）ＷＥＢＳＰＨＥＲＥ  ＡＰＰＬＩＣＡＴＩＯＮ  ＳＥＲＶＥＲにすることができる。
【００５２】
ネットワーク３８０は、リアルタイムまたはほぼリアルタイムで、システム３００のコンポーネント群を通信可能にリンクするためのハードウエア／ソフトウエア・エンティティとすることができる。ネットワーク３８０には、以下に限らないが、有線技術、無線技術などを含めることができる。ネットワーク３００は、以下に限らないが、ローカル・エリア・ネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、広域ネットワーク（ＷＡＮ：Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、都市規模ネットワーク（ＭＡＮ：Ｍｅｔｒｏｐｏｌｉｔａｎ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などとすることができる。
【００５３】
本明細書に提示する図面は、例示目的のためだけのものであって、いかなる点においても、本発明を限定すると解釈すべきではない。サーバ３１０は、分散コンピューティング環境、ネットワーク・コンピューティング環境、クラウド・コンピューティング環境などのコンポーネントとすることができる。システム３００のアーキテクチャには、出版／購読モデル、分散方式出版／購読モデルを含めることができる。一例において、サーバ３１０の機能をウェブで使用可能なサービスの一部にすることができる。システム３００は、以下に限らないが、シンプル・オブジェクト・アクセス・プロトコル（ＳＯＡＰ：Ｓｉｍｐｌｅ  Ｏｂｊｅｃｔ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ）、伝送制御プロトコル（ＴＣＰ：Ｔｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）、インターネット・プロトコル（ＩＰ：Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）、ハイパーテキスト転送プロトコル、拡張マークアップ言語遠隔手続き呼び出し（ＸＭＬ−ＲＰＣ：Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ  Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ）などを含む一つ以上のプロトコルへの関連付けが可能なことをよく理解すべきである。
【００５４】
図１〜３中のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラムの可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点について、フローチャートまたはブロック図中の各ブロックは、特定の論理機能（群）を実装するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることにも留意すべきである。例えば、連続して示された２つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時にこれらブロックが逆の順序で実行されることもあり得る。また、ブロック図もしくはフローチャート説明図またはその両方の各ブロック、およびブロック図もしくはフローチャート説明図またはその両方中のブロックの組み合わせは、特定の機能または処置を実施する特殊用途のハードウエア・ベースのシステム、または特殊用途のハードウエアとコンピュータ命令との組み合わせによって実装可能なことにも留意すべきである。
【符号の説明】
【００５５】
３００    システム
３１０    ブローカ・サーバ
３２０    フロー・エンジン
３２２    分析エンジン
３２４    フロー・マニピュレータ
３２６    監査マネージャ
３２８    構成設定
３２９    設定
３３０    メッセージ・キュー
３３２    メッセージ・フロー
３３４    ノード
３３６    反射ノード
３４０    データ・ストア
３４２    実行コード
３４４    インタフェース
３５０    アプリケーション・サーバ
３５２    アプリケーション
３６０    メッセージ
３６２    メッセージ
３７０    ノード・ライブラリ
３７２    ノード
３８０    ネットワーク
【図１】
0005818652.tif 000002
【図２】
0005818652.tif 000003
【図３】
0005818652.tif 000004