ページの先頭行へ戻る
Interstage Business Application Server アプリケーション開発ガイド
FUJITSU Software

4.3 フローの設計

注意

1つのフロー定義では、異なる言語(COBOLまたはJava)のアプリケーションを相互に連携させることはできません。連携させるアプリケーションの言語は、統一するように定義してください。
本節で示すフローに関する図では、COBOLまたはJavaのどちらか一方の言語によるアプリケーション連携を例に説明します。

フロー定義の範囲と階層化

フロー定義を作成する場合に1つのフロー定義に多くのアクティビティを収めると、フローの流れが複雑になり管理が大変になります。アクティビティは最大で256個まで指定できますが、1つのフロー定義で設定するアクティビティの数は10個以下を推奨します。
まず、業務のフローを設計する場合にフロー定義を行う範囲を考えます。結果受信を行う場合は、タイムアウトも停止することもなく実行できる業務を、1つのフロー定義として設計してください。

大規模なフローを設計する場合は以下のようにフローの階層化を行ってください。できるかぎりフローの再利用性を考慮し、問題が発生した場合に切り分けができるように設計してください。
また、補償ルートが発行された場合など、全体としての整合性を考慮して設計してください。

以下に階層化したフローの設計例とフロー設計の基準を示します。

注文フロー定義では、在庫の有無を判断して在庫がない場合には、発注処理を行うような業務フローを定義してあります。発注業務では、発注物の内容によって国内注文または海外に注文をするような業務フローとなっています。また、注文フロー定義が親フローとなって、発注アプリケーションから新たに発注フローを開始するような子フローを定義してあります。発注アプリケーションは、子フローの図にあるようなフロー業務の業務処理開始アプリケーションとして動作し、親フローの処理の延長として新しいフロー業務を開始させます。

補償処理を考慮した設計

■優先度制御機能

メッセージに優先度を設定する機能です。業務処理を優先して行いたい要件が発生した場合や業務処理中に一定の条件を満たした場合などに、特定のメッセージの優先度を変更することができます。
優先度によるメッセージ処理順序の変更は、業務に関連付けられたキュー単位で行います。キューからメッセージを取り出す際、複数のメッセージが格納されている場合、優先度が高いメッセージから優先的に取り出されます。これにより、優先度が高いメッセージは優先度が低いメッセージよりも優先的に処理されます。優先度はメッセージごとに指定可能なため、同一フロー定義であっても異なった優先度のメッセージが作成できます。

優先度は以下の指定ができます。

優先度の指定方法を以下に示します。

メッセージの起点で優先度を指定:

メッセージを発行するAPIに優先度のレベル([高い]、[普通]、[低い])を指定してメッセージを発行します。

起点のユーザアプリケーションからメッセージを発行する際、送信するメッセージの内容により優先度を選択することができます。優先度は、メッセージの中継点で変更されるまで発行時に設定された優先度で動作します。

設定方法については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。

メッセージの中継点で条件式に合致するメッセージの優先度を変更:

フロー定義ツールで設計するルーティングの各ルートに、優先度を変更するための条件式と変更する優先度のレベルを定義することができます。メッセージを各ルートで送信する際、メッセージの内容から条件式を評価し、trueとなるメッセージの優先度を指定された優先度に変更します。優先度は、一端変更されると次に再変更する条件に合致するまで変更された優先度で動作します。

設定方法については、“5.2.4.5 条件ルートの設定”の“■メッセージ優先度の設定”を参照してください。

優先度の指定方法における概念図を以下に示します。

注意

  • 補償ルートとして発行されるメッセージの優先度を変更することはできません。補償ルートメッセージは最優先で処理されます。

  • 同報・条件分岐、または代行分岐を間にはさむルートにおいて、分岐へ入力するルートと分岐から出力するルートで異なるメッセージ優先度が設定されている場合、実行時には出力するルート側のメッセージ優先度が有効になります。
    例として、下図のように同報・条件分岐、および代行分岐を含むフローが定義されている場合に、分岐から出力するそれぞれのルートで実行時に設定されるメッセージ優先度を示します。

    分岐へ
    入力する
    ルート番号

    分岐から
    出力する
    ルート番号

    分岐から
    出力する
    ルートの種類

    分岐から出力するルートの
    メッセージ優先度が
    [受信した優先度を引き継ぐ]
    場合

    分岐から出力するルートの
    メッセージ優先度が
    [高い]
    /[普通]/[低い]の場合

    (1)

    (3)

    条件ルート

    (1)で設定されたメッセージ優先度

    (3)で設定されたメッセージ優先度

    (1)

    (4)

    実行ルート

    (1)で設定されたメッセージ優先度

    (4)で設定されたメッセージ優先度

    (1)

    (5)

    条件ルート

    (1)で設定されたメッセージ優先度

    (5)で設定されたメッセージ優先度

    (2)または(3)

    (6)

    実行ルート

    (2)または(3)で設定されたメッセージ優先度

    (6)で設定されたメッセージ優先度

    (2)または(3)

    (7)

    代行ルート

    (6)と同じメッセージ優先度

■sendMessageSyncメソッドのタイムアウト

Javaの場合、待ち合わせ型のフローを起動するAPIにおいて、sendMessageSyncメソッドが復帰するまでの最大の待ち時間を設定することができます。タイムアウトに設定した時間を過ぎても処理結果を取得できない場合、APIはnullを返却します。設定方法については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。

■フローのタイムアウト機能

フローのタイムアウト機能は、メッセージ発行ごとに有効期間を設定し、有効期間を過ぎたメッセージ処理を自動的に停止することができる機能です。

タイムアウトしたメッセージは、フロー定義ツールの異常定義で指定された後処理が実施され、エラーメッセージ退避キューなどへの退避が行われます。メッセージの退避が発生した場合、処理結果のメッセージが業務処理開始アプリケーションに送信されます。突き放し型の場合は、処理結果の取得APIを使用した時点で異常を検出することができます。また、待ち合わせ型の場合は、異常メッセージが到着した時点で業務処理開始アプリケーションへ復帰し、異常を検出することができます。
タイムアウト時間は、業務アプリケーションの実行時間と待ち時間を考慮して、余裕をもって設定する必要があります。設定方法については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。

フローのタイムアウト機能の方式を以下に示します。

ループ処理の注意

上図のようにアクティビティの処理をループさせることが可能ですが、ループされるルートの場合は、必ず分岐を含めて無限ループにならないよう設計してください。
無限ループに陥ったときの異常を検知するため、メッセージがアクティビティを通過できる最大数を設定することができます。詳細については“5.2.5.1 異常処理定義画面の概要”を参照してください。

結果受信キューを定義する場合の注意

上図のように、業務処理開始アプリケーションから業務処理実行アプリケーションを通過せずに、結果受信キューへメッセージを送信することがないように設計してください。フローの実行時、業務処理開始アプリケーションから業務処理実行アプリケーションを通過せずに結果受信キューにメッセージがルーティングされる場合、フローは開始されずエラーとなります。

セキュリティ設計

セキュリティ設計については、“Interstage Business Application Server セットアップガイド”の“セキュリティの設計”を参照してください。