アプリケーションに記述した業務ロジックの誤りなどにより、業務データにアプリケーションで処理できない値が設定され、以降のアプリケーションが動作しないことが考えられます。
クライアントからデータの再入力が困難な場合、異常処理出口に通知されたメッセージを修正することで、フローを再開することができます。
なお、業務処理実行アプリケーションで異常が発生した場合、以下のどちらかにメッセージが退避されます。
エラーメッセージ退避キュー
エラーメッセージ退避キューが定義されている場合、フロー定義に指定したエラーメッセージ退避キューに、メッセージが退避されます。
シリアライズファイル
エラーメッセージ退避キューが定義されていない場合、または、エラーメッセージ退避キューが定義されていてもエラーメッセージ退避キューへの送信に失敗した場合、メッセージは異常が発生したサーバ内に以下の形式でシリアライズファイルとして退避されます。
シリアライズファイル格納場所
【出力ファイル名】
APFW_フロー定義名[_プロセス番号]_エラー発生時刻[_通番].ser
【出力場所】
/opt/FJSVibs/var/ser
[Interstageのインストールディレクトリ]\BAS\var\ser
ファイル名の通番は、重複したファイル名がすでに存在する場合に、4桁で0001から付与されます。非同期ワークユニット、またはメッセージ消去時の退避機能からシリアライズファイルを出力した場合、プロセス番号がシリアライズファイル名へ付与されます。エラー発生時刻は、以下のフォーマットで付与されます。
“西暦下2桁月日_時分秒ミリ秒”
以下にシリアライズファイル名の例を示します。
“APFW_フロー定義A_050420190840730.ser”
エラーメッセージ退避キューまたはシリアライズファイルに出力されたメッセージを修正する場合の作業の流れを、以下に示します。
エラーメッセージ退避キューに退避、またはシリアライズファイルとして出力されたメッセージを、apfwconvfileコマンドにより編集可能なXMLファイルに変換します。apfwconvfileコマンドの実行例を以下に示します。apfwconvfileコマンドの詳細は、“Interstage Business Application Server リファレンス”を参照してください。
apfwconvfile -c APFWQCF -q ErrQueue001 -n FLOW001 -i ID001 -f /tmp/msg |
注意
Solaris、Linuxの場合の実行例になります。Windowsの場合はWindows形式のディレクトリパスを指定してください。
apfwconvfileコマンドで出力したXMLファイルは、メッセージの修正に失敗してメッセージが失われることに配慮し、OSのcpコマンドを使用してバックアップを作成しておいてください。cpコマンドの実行例を以下に示します。
cp /tmp/msg/APFW_FLOW001_050420_190840730.xml /tmp/msg/APFW_FLOW001_050420_190840730_bkup.xml |
注意
Solaris、Linuxの場合の実行例になります。Windowsの場合はWindows形式のディレクトリパスを指定してください。
XMLファイルに変換されたメッセージは、各種エディタまたは利用者が作成したアプリケーションで修正を行います。
■メッセージの修正方法
apfwconvfileコマンドの出力結果ファイルに格納されるXMLファイルを修正します。XMLファイルには、業務データの要素名をタグ情報としたXML形式のデータが出力されています。
以下にXMLファイルの出力例とそのタグ情報の説明をします。
<?xml version="1.0" encoding="UTF-8"?> <message> <flowName>FlowA</flowName> <correlationID>ID001</correlationID> <errorDestination>ErrQue1</errorDestination> <businessDatas> <data name="data1">123456</data> <data name="data2" exist="true">Flow</data> <data name="data3" exist="false" /> <data name="data4" exist="true"> <li exist="true">AA</li> <li exist="true">BB</li> <li exist="false"/> <li exist="true">CC</li> </data> <data name="FlowDefName" exist="true">FlowA</data> <data name="correlationID" exist="true">ID001</data> </businessDatas> <flowInfo>/opt/FJSVibs/var/ser/APFW_flowNameA_001122_112233444.msg</flowInfo> </message> |
タグ情報の説明を以下にします。
message
メッセージファイルのルートの要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
以下のコンテントが設定されます。
flowNameタグ:必ず1個設定されます。省略または複数記述することはできません。
correlationIDタグ:必ず1個設定されます。省略または複数記述することはできません。
errorDestinationタグ:必ず1個設定されます。省略または複数記述することはできません。
flowInfoタグ:必ず1個設定されます。省略または複数記述することはできません。
businessDatasタグ:必ず1個設定されます。省略または複数記述することはできません。
flowName
フロー定義名を設定する要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
フロー定義名が設定されます。
フロー定義名の更新は行わないでください。更新された場合、正しくメッセージファイルのリカバリが行われない恐れがあります。
correlationID
コリレーションIDを設定する要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
コリレーションIDが設定されます。
コリレーションIDの更新は行わないでください。更新された場合、正しくメッセージファイルのリカバリが行われない恐れがあります。
errorDestination
エラーが発生したDestination情報を設定する要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
エラーが発生したDestination情報が設定されます。
エラーが発生したDestination情報の更新は行わないでください。更新された場合、正しくメッセージファイルのリカバリが行われない恐れがあります。
flowInfo
メッセージの制御情報を設定する要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
メッセージの制御情報が設定されます。
メッセージの制御情報の更新は行わないでください。更新された場合、正しくメッセージファイルのリカバリが行われない恐れがあります。
businessDatas
業務データ情報を設定する要素です。
本タグは、省略することができません。
アトリビュート
アトリビュートは設定できません。
コンテント
業務データ毎にdataタグが作成されます。name属性に業務データ名、要素に業務データの値が設定されます。
業務データ情報(businessDatasタグ)配下のdataタグが、業務データの要素とその値です。必要に応じて業務データの値を更新してください。
業務データが存在しない場合、exist属性にfalseと設定されます。業務データをセットする場合は、exist属性を削除するか、またはexist属性にtrueと設定してください。また、業務データをNULLに設定するときはexist属性にfalseと設定してください。ただし、exist属性はNULL指定可能な業務データのみ指定が有効となります。
なお、各業務データ型は、以下の通り出力されます。
ユーザ定義型
オブジェクトのシリアライズデータをBase64形式に変換してメッセージファイルへ出力します。シリアライズデータからオブジェクトをデシリアライズし、ユーザ定義型クラスのオブジェクトの内容を修正してください。修正後、オブジェクトをメッセージファイルへ戻す場合は、ユーザ定義型クラス情報を再度シリアライズし、Base64形式に変換してからメッセージファイルへ格納してください。なお、オブジェクト修正用アプリケーションが、サンプル資材として提供されています。詳細は、“Interstage Business Application Server アプリケーション開発ガイド”、“ユーザ定義型業務データ編集サンプル”を参照してください。
バイナリ型
業務データ名「BIN」に01,02,FF,FE,00と5バイトが含まれている例を示します。
<data name="BIN" exist="true">0102FFFE00</data> |
データは16進形式で出力します。文字数によりデータサイズが決定します。データサイズは、2文字につき1バイトとなります。なお、データが存在しない場合は、以下の例のように、exist属性をfalseにしてください。
<data name="BIN_NULL" exist="false"/> |
exist属性をfalseにした場合は、要素は削除してください。
配列型
業務データ名「配列A」のInteger配列に1、2、3と3つ配列の要素が含まれている例を示します。
<data name="配列A" exist="true"><li>1</li><li>2</li><li>3</li></data> |
配列の要素を追加したり、削除することも可能です。なお、データが存在しない場合は、以下の例のように、exist属性をfalseにしてください。
<data name="配列A_NULL" exist="false"/> |
exist属性をfalseにした場合は、要素は削除してください。
String型、String配列型
業務データ名「文字列1」に“AA”が含まれている例を示します。
<data name="文字列1" exist="true">AA</data> |
なお、データが存在しない場合は、以下の例のように、exist属性をfalseにしてください。
<data name="文字列1_NULL" exist="false"/> |
exist属性をfalseにした場合は、要素は削除してください。また、文字数0の文字列は、以下の例のように記述して下さい。
<data name="文字列1_0文字" exist="true"></data> |
String配列は、各要素に対してデータの存在有無を指定できます。業務データ名「文字列配列1」に、データが存在しない要素と文字列“ABC”の2つが含まれている例を示します。
<data name="文字列配列1" exist="true"><li exist="false"/><li exist="true">ABC</li></data> |
Boolean型
要素は半角文字でtrueまたは、falseを出力します。要素は大文字、小文字の区別しません。
注意
制御情報(flowInfoタグ)、フロー定義名の要素(flowNameタグ)、エラーが発生したDestination情報(errorDestinationタグ)、コリレーションID(CorrelationIDタグ)など、業務データ情報(businessDatasタグ)配下以外のデータを更新しないでください。また、ファイルに改行やネスト等は行わないで下さい。この業務データ情報以外のデータを更新した場合、リカバリを行うことができなくなる恐れがあります。
dataタグを含めた業務データ全体をXMLファイルから削除し、キューにメッセージ復旧した場合はXMLファイル変換前の業務データがメッセージにセットされます。業務データをメッセージから削除する場合は、dataタグのexist属性にfalseと設定してください。
修正したメッセージをもとにフローを再開します。フローを再開する方法の詳細については、“8.3.5 フローの再開”を参照してください。
メッセージの修正およびフローの再開が正常に完了した場合、バックアップ用に作成したファイルは、OSの削除コマンドを使用して削除してください。削除コマンドの実行例を以下に示します。
rm /tmp/msg/APFW_FLOW001_050420_190840730_bkup.xml |
del c:\tmp\msg\APFW_FLOW001_050420_190840730_bkup.xml |