サブフロー

複数のメッセージ・フロー、アプリケーション、または統合サービスによって使用される共通の処置シーケンスを用意するためにサブフローを定義できます。 メッセージ・フローには、組み込みノードやユーザー定義ノードを組み込むのと同じ方法で、サブフローを組み込むことができます。 また、同じ仕方でサブフローを他のノードに接続することもできます。

サブフローには、以下の利点があります。

  • 再利用可能であり、開発時間を削減できます。
  • 一貫性があり、メッセージ・フローの保守容易性を増大させます (サブフローは、プログラミング・マクロ、または一度作成されると多くの箇所で使用されるインライン・コードに類似したものと考えてください)。
  • サブフローを特定のコンテキストに合わせる柔軟性があります (例えば、出力キューまたはデータ・ソース情報を更新することによって)。
サブフローの使用については、次の例をご覧ください。
  • エラーが発生した場合、いくつかのメッセージ・フローに適用される、共通の処置シーケンスを提供するサブフローを定義することができます。 例えば、 データベース ノードを介してメッセージをデータベースに書き込み、それをエラー・リカバリー・ルーチンによる処理のためにキューに入れる、共通のエラー・ルーチンがあるとします。 複数のメッセージ・フローにおいて、または 1 つのメッセージ・フロー内の数か所で、このルーチンを使用すれば、リソースを効率的かつ整合した仕方で使用でき、エラーが発生するたびにそのようなルーチンを再作成する必要をなくすことができます。
  • いくつかの異なるメッセージ・フローを移動するメッセージに対して、共通の計算を実行することができます。例えば、データベースの通貨為替レートにアクセスし、いくつかの異なる通貨価格の計算にそれらを適用することができます。 適切なメッセージ・フローのそれぞれに、通貨計算サブフローを組み込むことができます。
注: サブフローでは標準入力ノード ( MQ 入力などの組み込み入力ノード、またはユーザー定義入力ノード) を使用しないでください。代わりに、 入力 ノードを使用して In ターミナルをサブフローに提供してください。 詳しくは、 入力ノードを参照してください。

サブフローを複数のアプリケーション間または複数の統合サービス間で再利用するには、サブフローを共有ライブラリーに保管します。 これらのサブフローを変更して共有ライブラリーを再デプロイすればよく、共有ライブラリーを参照するアプリケーションまたは統合サービスを再デプロイする必要がありません。

サブフローのタイプ

サブフローを 1 回定義し、それを複数のメッセージ・フロー、アプリケーション、統合サービス、および 統合プロジェクトで使用します。 サブフロー・コンテンツは、メッセージ・フロー・コンテンツを定義するときと同様に、メッセージ・フロー・ノードを追加、構成、および接続することによって定義します。

注: 実行時に、サブフローの各インスタンスは、そのサブフローを定義するすべてのメッセージ・フロー・ノードのコピーを作成します。 この動作はリソースの使用量に影響するため、メッセージ・フローのパフォーマンス全体に影響を与える可能性があります。

サブフローは、.subflow ファイルまたは .msgflow ファイルとして作成できます。 以下の情報に基づいて、使用するサブフローのタイプを選択してください。

.subflow ファイルのサブフロー

.subflow ファイルで定義されているサブフローは、以下のいずれかの方法でデプロイできます。
  • サブフローを、それを使用するどのメッセージ・フローとも異なる場所にデプロイする。 サブフローと、このサブフローが組み込まれているメッセージ・フローは、同じ統合サーバーにデプロイされなければなりません。 サブフローは、統合サーバーに直接デプロイすることも、ライブラリーの一部としてデプロイすることもできます。 このタイプのサブフローを更新して再デプロイすると、このサブフローを使用し、かつアプリケーションや統合サービスの一部ではないすべてのメッセージ・フローは、自動的に更新されます。 これらのメッセージ・フローは再デプロイする必要はありません。 共有ライブラリー内のサブフローを更新して再デプロイすると、このサブフローを使用するアプリケーションまたは統合サービス内のすべてのメッセージ・フローは、自動的に更新されます。
  • サブフローを、アプリケーションまたは統合サービスの一部としてデプロイする。
このタイプのサブフローで、以下のノードを使用することはできません。
  • .msgflow ファイルで定義されたサブフローを表すノード
  • .msgflow ファイルで定義されたサブフローから作成されたユーザー定義ノード
  • MQOptimizedFlow ノード
ESQL コードと、.subflow ファイルで定義されたサブフローの両方が含まれる BAR ファイルを作成する場合、コンパイル済みのメッセージ・フロー・ファイルに ESQL コードを直接組み込むことはできません。

.msgflow ファイルのサブフロー

.msgflow ファイルで定義されるサブフローは、このサブフローを使用する親メッセージ・フローが BAR ファイルに配置されるときに、そのメッセージ・フローの内部に組み込まれます。 このタイプのサブフローは、それを使用するメッセージ・フローと一緒に統合サーバーにデプロイすることしかできません。 このタイプのサブフローを更新する場合は、そのサブフローを使用するすべてのメッセージ・フローを再デプロイし、更新後のサブフローが使用されるようにしなければなりません。 このタイプのサブフローは、ユーザー定義ノードとしてパッケージできます。

サブフローを .msgflow から .subflow に (およびその逆に) 変換するときに適用される条件

.msgflow ファイルとして作成されたサブフローを .subflow ファイルに変換できます。
  • .msgflow ファイルに、.msgflow ファイルとして定義されたサブフローが含まれている場合、これらのサブフローも .subflow ファイルに変換する必要があります。
  • この .msgflow ファイルがサブフローとして使用される場合、その親フローを更新して、新しい .subflow ファイルを参照するようにしなければなりません。
.subflow ファイルとして作成されたサブフローを .msgflow ファイルに変換できます。
  • サブフローを作成するアプリケーション、ライブラリー、または 統合プロジェクト に既に存在するファイルの名前を .msgflow ファイルとして使用することはできません。 サブフローのファイル名の末尾に .msgflow を含める必要があります。 同じ名前を持つサブフローであっても、別のブローカー・スキーマ内にある場合、アプリケーションまたは統合サービスは 1 つ以上の共有ライブラリー内でそのようなサブフローを使用できます。

サブフローをメッセージ・フローに追加するときに適用される条件

以下のいずれかの記述が当てはまる場合、サブフローをメッセージ・フローに追加できます。
  • メッセージ・フローに追加するサブフローがライブラリーで定義されており、現行メッセージ・フロー・コンテナーの依存関係をそのライブラリーに対して指定済みである。 アプリケーションと統合サービスはライブラリーを参照できます。 (ライブラリーは、関連するコード、データ、またはその両方を論理的にグループ化したもので、通常、再使用可能なサブフローやその他のタイプのリソースが格納されます。)
  • メッセージ・フローに追加するサブフローは、メッセージ・フローと同じ 統合プロジェクト、アプリケーション、または統合サービスで定義されます。

サブフローを共有ライブラリーに保管する場合は、デフォルトの空のスキーマではないスキーマの内部にサブフローを配置する必要があります。

アプリケーションまたは共有ライブラリーが他の共有ライブラリーを参照している場合、ブローカー・スキーマのすべてのサブフローは、単一のコンテナー内になければなりません。 ブローカー・スキーマのサブフローは、アプリケーション (または共有ライブラリー) と、そのアプリケーション (または共有ライブラリー) によって参照されている共有ライブラリーの両方にあってはなりません。 ブローカー・スキーマのサブフローは、単一のアプリケーションまたは共有ライブラリーによって参照されている、複数の共有ライブラリーにあってはなりません。 ブローカー・スキーマ内のすべてのサブフローは、メイン・アプリケーションまたは共有ライブラリー、あるいは参照されている単一の共有ライブラリーになければなりません。

サブフローをサブフローに追加するときに適用される条件

以下のいずれかの場合に、サブフローをサブフローに追加できます。
  • .subflow ファイルで定義されたサブフローは、.subflow ファイルおよび .msgflow ファイルで定義されたサブフローに追加することができます。
  • .msgflow ファイルで定義されたサブフローは、.msgflow ファイルでのみ定義されたサブフローに追加することができます。
  • 共有ライブラリー内のサブフローには、同じ共有ライブラリー内の別のサブフローを含めることも、他の共有ライブラリー内の別のサブフローを含めることもできます。

サブフローをデプロイするときに適用される条件

以下のいずれかの方法でサブフローをデプロイできます。
  • 統合プロジェクトで定義されている独立リソースとしてサブフローをデプロイします。
  • アプリケーションにサブフローをデプロイする。
  • サービス操作の一部としてサブフローをデプロイする。
  • ライブラリーにサブフローをデプロイする。

バー ファイルを統合サーバーに送信することにより、サブフローを統合サーバーにデプロイします。統合サーバーは、メッセージ・フローの開始時に備えて内容をアンパックして保管します。 サブフローを統合サーバーに直接デプロイすることもできます。

サブフローをデプロイする場合、以下の条件が適用されます。
  • .subflow ファイルで定義されているサブフローを組み込んだメッセージ・フローをデプロイする場合、サブフローは BAR ファイルに自動的に組み込まれます。
  • アプリケーションに組み込まれたサブフローをデプロイする場合、アプリケーションを統合サーバーにデプロイする必要があります。これにより、アプリケーションのデプロイメントが完了します。
  • 統合サービスに組み込まれたサブフローをデプロイする場合、サービスを統合サーバーにデプロイする必要があります。これにより、統合サービスのデプロイメントが完了します。
  • ライブラリーに組み込まれたサブフローをデプロイする場合、アプリケーションや統合サービスの外部にある統合サーバーにライブラリーを直接デプロイすることができます。 ライブラリーに組み込まれたサブフローは、そのライブラリーと同じ統合サーバーに直接デプロイされた他のメッセージ・フローやサブフローによって参照可能です。
  • 統合プロジェクト 内の .msgflow ファイルとして作成されたサブフローは、少なくとも 1 つの入力ノードが含まれている場合にのみ、別個のリソースとしてデプロイできます。

バージョン管理

パススルー ノードは、実行時にサブフローをバージョン管理できるようにするために使用します。

パススルー ノードを組み込むことにより、メッセージ・フローまたはサブフローにラベルを追加できます。 このラベルと、バージョン管理システムからのキーワード置換とを併用すると、デプロイ済みのメッセージ・フローに組み込まれているサブフローのバージョンを識別できます。 このラベルは自分独自の目的のために使用できます。 ラベルに正しいバージョン・キーワードを組み込んでいる場合は、以下のいずれかの方法でラベルの値を参照できます。
  • mqsireadbar コマンドを使用して、 バー ファイルに保管されているプロパティーを読み取ります。
  • IBM® Integration Toolkitにおいて、特定の 統合ノードに最後にデプロイされたときのデプロイ済みメッセージ・フローのプロパティー。
  • ランタイム環境で、そのメッセージ・フローのユーザー・トレースを使用可能にしている場合。
.subflow ファイルとして作成されたサブフローについては、サブフローの新しいバージョンをデプロイする際に以下の動作を考慮してください。
  • サブフローが、このサブフローを使用するメッセージ・フローとは別個にデプロイされている場合、そのサブフローの新しいバージョンをデプロイすると、すべてのメッセージ・フローが自動的に更新されます。
  • サブフローがアプリケーションまたは統合サービスの一部としてデプロイされている場合、新しいサブフロー・バージョンを組み込むためにアプリケーションと統合サービスを更新し、そのアプリケーションと統合サービスを再デプロイする必要があります。
.msgflow ファイルとして作成されたサブフローについては、サブフローの新しいバージョンをデプロイする際に以下の動作を考慮してください。
  • サブフローを使用するアプリケーション、統合サービス、および独立リソースを更新して新しいバージョンのサブフローを組み込んでから、それらを再デプロイする必要があります。

サブフローについて詳しくは、 シナリオ: 複数の統合ソリューションでの共通アプリケーション・ロジックの再使用のシナリオを参照してください。