編集したアプリケーションに非同期アプリケーション連携実行基盤のAPIを組み込みます。
非同期アプリケーション連携実行基盤のJava APIの詳細は、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(Java)”を参照してください。
組み込むAPIの種類を以下に示します。
フローを起動するAPI(突き放し型、待ち合わせ型)
メッセージを発行するAPIです。
処理結果のメッセージを取得するAPI
発行したメッセージの処理結果のメッセージを取得するAPIです。
フローを起動するAPI、および処理結果のメッセージを取得するAPIの詳細については、“2.6 業務処理開始アプリケーション”を参照してください。
非同期アプリケーション連携実行基盤のAPIを組み込む処理を以下に示します。[非同期アプリケーション連携実行基盤のAPI組み込み]ウィザードを利用します。
メッセージ発行から処理結果のメッセージ取得までを組み込む場合
詳細は、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。
処理結果のメッセージ取得を組み込む場合
詳細は、“6.2.3.2 処理結果のメッセージ取得の組込み”を参照してください。
注意
非同期アプリケーション連携実行基盤のAPIを利用するには、プロジェクトに実行基盤連携用のAPIのライブラリを追加する必要があります。実行基盤連携用ライブラリを追加する手順については、“6.2.1.2 ライブラリの追加”を参照してください。
mainメソッドをもつ通常のJavaアプリケーションとして、業務処理開始アプリケーションを実装する場合、アプリケーション終了時に System.exit(int)を呼び出してアプリケーションを終了する必要があります。System.exit(int)を呼び出さない場合、プログラムの終点に達してもアプリケーションは終了しません。
ポイント
ユーザ定義型クラス、またはユーザ定義型Exceptionを使用する場合、以下の実装方法があります。
業務処理実行アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを実装する場合
業務処理開始アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを組み込んでください。
また、業務処理開始アプリケーションを実行する際、以下の設定を行ってください。
業務処理開始アプリケーションが、Javaアプリケーションの場合
環境変数CLASSPATHに、classファイルまたはjarファイルを設定してください。
業務処理開始アプリケーションが、Webアプリケーションの場合
IJServerのクラスパス設定に、classファイルまたはjarファイルを設定してください。
以下のどちらかに設定します。
Interstage管理コンソールの[システム] > [環境設定]タブ > [J2EEプロパティ]のクラスパス
または、
Interstage管理コンソールの[システム] > [ワークユニット] > “IJServer名” > [環境設定]タブ > [ワークユニット設定]のクラスパス
業務処理実行アプリケーションにユーザ定義型クラス、またはユーザ定義型Exceptionを実装しない場合
業務処理開始アプリケーションを実行する際、環境変数CLASSPATHに、classファイルまたはjarファイルを設定する必要はありません。
以下にフローの起動方法と処理結果のメッセージ取得方法について示します。
フロー起動の詳細については“2.6 業務処理開始アプリケーション”を参照してください。
■突き放し型フローの起動方法
業務処理開始アプリケーションの中で、突き放し型フロー起動APIであるcom.fujitsu.interstage.apfw.client.FlowClientクラスのsendMessageメソッドを用いることにより起動されます。メソッドの復帰値は業務データが格納されたcom.fujitsu.interstage.apfw.client.FlowMapオブジェクトになります。
sendMessageメソッドを使用する場合の手順は、以下のようになります。
com.fujitsu.interstage.apfw.client.FlowClientオブジェクトの作成
FlowClientオブジェクトの作成時のコンストラクタには、以下のパラメタを設定する必要があります。
フロー定義名
利用するフローのフロー定義名を指定します。
データベースリソース定義名
フロー定義DBにアクセスするためのデータベースリソース定義名を指定します。
初期業務データの設定
フロー起動時の初期業務データを設定する必要がある場合、初期業務データをjava.util.Mapか、com.fujitsu.interstage.apfw.client.FlowMapに格納し、FlowClientのputMapメソッドまたはputFlowMapメソッドを用いて業務データの初期値を設定します。初期値の設定が必要ない要素については、メソッドによる値の設定は必要ありません。
注意
初期値が設定されていない業務データは、メッセージ送信時に以下の値が設定されます。
データ型 | 値 |
---|---|
String | null |
Byte | 0 |
Short | 0 |
Integer | 0 |
Long | 0 |
Float | 0.0 |
Double | 0.0 |
Boolean | false |
配列型 | null |
ユーザ定義型情報 | null |
バイナリ | null |
メッセージのプロパティ設定
フロー起動に用いるメッセージのプロパティを設定します。設定項目は以下の2種類です。
メッセージ優先度
setPriorityメソッドで、メッセージ優先度を設定します。優先度は、[高い]、[普通]、[低い]から設定します。メソッドを実行しなかった場合の初期値は[普通]になります。優先度の詳細については、“4.3 フローの設計”の“■優先度制御機能”を参照してください。
フローのタイムアウト時間
setMessageTimeoutメソッドで、メッセージ発行からフローの終点のアクティビティがメッセージを受信するまでの有効期間をintの秒単位で設定します。有効期間内にフローの終点のアクティビティに到達しない場合、ルーティング処理は自動的に停止します。
0秒を指定した場合はフローのタイムアウトなしの扱いとなります。メソッドを実行しなかった場合の初期値は0秒(フローのタイムアウトなし)です。フローのタイムアウトの詳細については、“4.3 フローの設計”の“■フローのタイムアウト機能”を参照してください。
注意
FlowClientクラスにある、待ち合わせ型フロー起動用のsetTimeoutメソッド(sendMessageSyncメソッドのタイムアウト時間を指定するメソッド)については、突き放し型フロー起動時に実行してもエラーにはなりませんが、メソッドで設定した値はsendMessageメソッドの動作には影響を与えません。
sendMessageメソッドの実行
sendMessageメソッドについては、入力のパラメタはありません。必要に応じて初期業務データの設定、プロパティ設定を行った後、メソッドを実行してください。
■突き放し型フローの処理結果のメッセージ取得方法
突き放し型のフロー起動の場合、フローの処理結果のメッセージを取得するパターンと取得しないパターンを選択できます。処理結果のメッセージを取得する場合、フロー定義で結果受信キューを定義する必要があります。処理結果のメッセージを取得しない場合は、結果受信キューを定義しないでください。突き放し型で処理結果のメッセージを取得するには、フローの実行が終了している必要があります。
処理結果のメッセージの取得は、com.fujitsu.interstage.apfw.client.FlowClientクラスのreceiveMessageメソッドを用いて行います。メソッドの復帰値はフローの処理結果のメッセージで、com.fujitsu.interstage.apfw.client.FlowMapオブジェクトになります。
receiveMessageメソッドのパラメタはコリレーションIDになります。コリレーションIDを指定すれば、sendMessageを実行したオブジェクト以外でもフローの処理結果のメッセージを取得することができます。
なお、メッセージのルーティング中にメッセージを複数の送信先へ振り分ける運用を行った場合、処理結果のメッセージが複数存在することがあります。
複数の送信先へメッセージを振り分ける運用を行う場合は、receiveMessageメソッドを複数回発行し、すべての処理結果のメッセージを取得してください。
注意
フローの実行が終了する前にreceiveMessageメソッドを実行した場合、復帰値はnullになります。また、結果受信キューが定義されていないフロー定義に対しreceiveMessageメソッドを実行した場合は、処理結果のメッセージ取得が定義されていないことを示す例外情報が返却されます。
■待ち合わせ型フローの起動方法
業務処理開始アプリケーションの中で、待ち合わせ型フロー起動APIであるcom.fujitsu.interstage.apfw.client.FlowClientクラスのsendMessageSyncメソッドを用いることにより起動されます。メソッドの復帰値はフローの処理結果のメッセージで、com.fujitsu.interstage.apfw.client.FlowMapオブジェクトになります。sendMessageSyncメソッドを使用する場合の手順は、以下のようになります。
com.fujitsu.interstage.apfw.client.FlowClientオブジェクトの作成
突き放し型フロー起動API(sendMessageメソッド)を使用する場合の手順と同様です。詳細は、“■突き放し型フローの起動方法”を参照してください。
初期業務データの設定
突き放し型フロー起動API(sendMessageメソッド)を使用する場合の手順と同様です。詳細は、“■突き放し型フローの起動方法”を参照してください。
メッセージのプロパティ設定
フロー起動に用いるメッセージのプロパティを設定します。設定項目は以下の3種類です。
メッセージ優先度
突き放し型フロー起動API(sendMessageメソッド)を使用する場合の手順と同様です。詳細は、“■突き放し型フローの起動方法”を参照してください。
フローのタイムアウト時間
突き放し型フロー起動API(sendMessageメソッド)を使用する場合の手順と同様です。詳細は、“■突き放し型フローの起動方法”を参照してください。
sendMessageSyncメソッドタイムアウト時間
setTimeoutメソッドで、待ち合わせ型のフローを起動するAPIにおいて、メソッドが復帰するまでの最大の待ち時間をintの秒単位で設定します。待ち時間を超えても処理結果のメッセージが取得できない場合、メソッドは復帰します。
0秒を指定した場合はsendMessageSyncメソッドのタイムアウトなしの扱いとなります。メソッドを実行しなかった場合の初期値は60秒です。メソッドのタイムアウトの詳細については、“4.3 フローの設計”の“■sendMessageSyncメソッドのタイムアウト”を参照してください。
注意
sendMessageSyncメソッドタイムアウト時間は、何らかの原因でsendMessageSyncメソッドが永久待ちになるのを防止するための設定です。通常、異常によりフロー処理が中断した場合でも、sendMessageSyncメソッドは異常情報をもって復帰しますが、ネットワーク障害など一部の異常発生時には、sendMessageSyncメソッドが復帰できなくなる可能性があります。そのような場合の対処として、setTimeoutメソッドでメソッドのタイムアウトを設定することで永久待ちを回避することができます。
setTimeoutメソッドでメソッドのタイムアウトを設定した場合、一時的な処理の遅延などにより、フローの正常処理中にsendMessageSyncメソッドがタイムアウトでnullが復帰する可能性があります。setTimeoutメソッドで設定したタイムアウト値は、sendMessageSyncメソッドの復帰だけに影響する値であるため、そのような場合でも、該当するフローの処理を中断することはありません。フロー処理自体のタイムアウトを設定する場合は、setMessageTimeoutメソッドでフローのタイムアウトを設定してください。
setMessageTimeoutメソッドで設定した値によるフローのタイムアウトの情報を、sendMessageSyncメソッドの復帰値として取得するには、setTimeoutとsetMessageTimeoutの関係は以下のようになる必要があります。フローのタイムアウトの判定は“Interstage Business Application Server チューニングガイド”の“非同期アプリケーション連携実行基盤編”の“フローのタイムアウト設定”で示すように、業務処理実行アプリケーションの呼出し前と呼出し後に行われます。常時、フローのタイムアウトの判定が行われないため、設定したフローのタイムアウト値で正確にフローのタイムアウトが発生しない場合があります。そのため、フローのタイムアウトを検出して、その処理結果のメッセージを業務処理開始アプリケーションへ通知するまでには業務処理実行アプリケーションの処理時間により若干のタイムラグがあることを考慮し、setTimeoutメソッドの設定値はフローのタイムアウトの設定値に、業務処理実行アプリケーションの想定される最大処理時間および若干の余裕値を加えた時間を設定してください。
setTimeoutメソッドの設定値 > setMessageTimeoutメソッドの設定値
なお、必ずしもフローのタイムアウトの情報をsendMessageSyncの復帰値として取得する必要がない場合は、このかぎりではありません。
sendMessageSyncメソッドの実行
sendMessageSyncメソッドについては、入力のパラメタはありません。必要に応じて初期業務データの設定、プロパティ設定を行った後、メソッドを実行してください。sendMessageSyncメソッドで、setTimeoutメソッドで指定した時間経過によるメソッドのタイムアウトが発生した場合、receiveMessageメソッドを用いて任意のタイミングで処理結果のメッセージを取得してください。
■待ち合わせ型フローの処理結果のメッセージ取得方法
待ち合わせ型のフロー起動の場合、つねにフローの処理結果のメッセージを取得するため、フロー定義で結果受信キューを定義する必要があります。
処理結果のメッセージはフロー起動のsendMessageSyncメソッドの復帰値に格納されます。sendMessageSyncを発行時に指定したメソッドのタイムアウト時間までにメッセージが終点へ到達しない場合、タイムアウトになり、nullが返却されます。タイムアウトで処理結果のメッセージが取得できなかった場合、receiveMessageメソッドで任意のタイミングで処理結果のメッセージを取得することができます。
なお、メッセージのルーティング中にメッセージを複数の送信先へ振り分ける運用を行った場合、処理結果のメッセージが複数存在することがあります。
複数の送信先へメッセージを振り分ける運用を行う場合は、receiveMessageメソッドを複数回発行し、すべての処理結果のメッセージを取得してください。
注意
フローの実行が終了する前にreceiveMessageメソッドを実行した場合、復帰値はnullになります。また、結果受信キューを定義しないフロー定義に対し、sendMessageSyncメソッド、またはreceiveMessageメソッドを発行した場合、結果受信キューが定義されていないことを示す例外情報が返却され、メソッドの処理は終了します。
メッセージ発行から処理結果のメッセージ取得までを組み込む場合の手順を以下に示します。
非同期アプリケーション連携実行基盤のAPIを組み込む概要については、“6.2.3 非同期アプリケーション連携実行基盤のAPIの組込み”を参照してください。
APIを組み込むJavaソースを[パッケージエクスプローラ]ビューから選択し、Javaエディタで開きます。
メソッド内で組み込む箇所にカーソルを合わせ、コンテキストメニューから[非同期アプリケーション連携実行基盤のAPI組み込み] > [メッセージ発行/処理結果のメッセージ取得]を選択します。
[非同期アプリケーション連携実行基盤のAPI組み込み]ウィザードが起動し、[フロー定義名選択]画面が表示されます。
フロー定義名を選択します。
[ファイル]を選択した場合は、[フロー定義ファイル名]にフロー定義ファイル名をフルパスで入力します。
[プロジェクト]を選択した場合は、[プロジェクト]にプロジェクト名を入力します。
[フロー定義名選択]画面で[プロジェクト]を選択し[次へ]をクリックすると[フロー定義ファイル(非同期アプリケーション連携実行基盤)一覧]画面が表示されます。
[ファイル]を選択した場合は一覧画面の操作は省略されます。
フロー定義ファイルを選択し、[次へ]をクリックします。
[フロー定義ファイル一覧]画面で[次へ]をクリックした場合、または[フロー定義名選択]で[ファイル]を選択し[次へ]をクリックした場合に、[APIの設定]画面が表示されます。メッセージの発行に必要な情報を設定します。
[データベースリソース定義名]にデータベースリソース定義名を入力します。
フロー起動の種類を以下から選択します。
[突き放し型フロー起動]
[待ち合わせ型フロー起動]
receiveMessageメソッドを組み込むかどうかを選択します。
起動の種類で[突き放し型]を選択した場合だけ有効になります。
また、突き放し型を指定した場合でも、結果受信キューが定義されていない場合は、[組み込む]を指定することはできません。
次の設定画面に進むか、ウィザードを終了するか選択します。
[完了]をクリックすると、ウィザードを終了します。
[APIの設定]画面以降で、[完了]をクリックすることが可能です。
[次へ]をクリックすると、[業務データ一覧]画面が表示されます。
値を設定する業務データをチェックします。
[次へ]をクリックすると、[プロパティ設定]画面が表示されます。
メッセージ優先度を選択します。
[高い]、[普通]、[低い]から選択します。
業務処理開始アプリケーションからメッセージを発行するとき、送信するメッセージの内容により、優先度を設定することができます。優先度は、メッセージの中継点で変更されるまで発行時に設定された優先度で動作します。
メッセージ優先度の詳細については、“4.3 フローの設計”の“■優先度制御機能”を参照してください。
フローのタイムアウト時間を設定します。
[無制限]を選択した場合は、時間の設定は行いません。
[指定]を選択した場合には、[フローのタイムアウト時間]に数値を入力します。
1~2147483647秒の範囲で設定できます。
フローのタイムアウトの詳細については、“4.3 フローの設計”の“■フローのタイムアウト機能”を参照してください。
sendMessageSyncメソッドのタイムアウト時間を設定します。
1~3600秒の範囲で設定できます。
sendMessageSyncメソッドのタイムアウト時間の詳細については、“4.3 フローの設計”の“■sendMessageSyncメソッドのタイムアウト”を参照してください。
注意
起動の種類で[待ち合わせ型]を指定した場合に有効になります。
フローのタイムアウトの判定は“Interstage Business Application Server チューニングガイド”の“非同期アプリケーション連携実行基盤編”の“フローのタイムアウト設定”で示すように、業務処理実行アプリケーションの呼出し前と呼出し後に行われます。常時、フローのタイムアウトの判定が行われないため、設定したフローのタイムアウト値で正確にフローのタイムアウトが発生しない場合があります。そのため、フローのタイムアウトを検出して、その処理結果のメッセージを業務処理開始アプリケーションへ通知するまでには業務処理実行アプリケーションの処理時間により若干のタイムラグがあることを考慮し、setTimeoutメソッドの設定値はフローのタイムアウトの設定値に、業務処理実行アプリケーションの想定される最大処理時間および若干の余裕値を加えた時間を設定してください。
[完了]をクリックすると、カーソル位置にメッセージを発行するソースが挿入されます。
ソースの「//TODO・・・」というコメントが記述された箇所の処理を、必要に応じて修正します。
注意
挿入されるソースのインデントは、カーソル行のインデントが基準になります。
注意
非同期アプリケーション連携実行基盤のAPIを利用するには、プロジェクトに実行基盤連携用のAPIのライブラリを追加する必要があります。
手順については、“6.2.1.2 ライブラリの追加”を参照してください。
処理結果のメッセージ取得を組み込む場合の手順を以下に示します。
非同期アプリケーション連携実行基盤のAPIを組み込む概要については、“6.2.3 非同期アプリケーション連携実行基盤のAPIの組込み”を参照してください。
APIを組み込むJavaソースを[パッケージエクスプローラ]ビューから選択し、Javaエディタで開きます。
メソッド内で組み込む箇所にカーソルを合わせ、コンテキストメニューから[非同期アプリケーション連携実行基盤のAPI組み込み] > [処理結果のメッセージ取得]を選択します。
[非同期アプリケーション連携実行基盤のAPI組み込み]ウィザードが起動し、[フロー定義名選択]画面が表示されます。
フロー定義名を選択します。
選択方法は、メッセージ発行から処理結果のメッセージ取得までを組み込む場合に起動するウィザード画面と同様になります。詳細については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。
[次へ]をクリックすると[APIの設定]画面が表示されます。処理結果のメッセージ取得に必要な情報を設定します。
[データベースリソース定義名]にデータベースリソース定義名を入力します。
入力方法は、メッセージ発行から処理結果のメッセージ取得までを組み込む場合に起動するウィザード画面と同様になります。詳細については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。
ウィザードの[完了]をクリックすると、カーソル位置に処理結果のメッセージを取得するソースが挿入されます。
注意
挿入されるソースのインデントは、カーソル行のインデントが基準になります。
receiveMessageの引数には、必ずメッセージ発行(sendMessage)を実行したコリレーションIDを指定してください。メッセージ発行を組み込む詳細については、“6.2.3.1 フローを起動するAPIの組込み”を参照してください。
非同期アプリケーション連携実行基盤のAPIを利用するには、プロジェクトに実行基盤連携用のAPIのライブラリを追加する必要があります。実行基盤連携用のAPIのライブラリを追加する手順については、“6.2.1.2 ライブラリの追加”を参照してください。