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

16.4.4 業務共通制御の作成・修正

制御ロジックを作成し、アプリケーション連携実行基盤から呼び出される、振分け制御、業務前制御、業務後制御、および結果編集制御を作成、または修正します。

業務共通制御の作成方法、および修正方法について説明します。

業務共通制御作成時の注意事項は、サーバアプリケーション作成時の注意事項と同じです。サーバアプリケーション作成時の注意事項については、“22.2 サーバアプリケーションを作成する場合の注意”を参照してください。

ポイント

業務共通制御でデータベースアクセス管理機能を利用することも可能です。
詳細は、“第20章 データベースアクセス管理機能”を参照してください。

16.4.4.1 業務共通制御に通知されるパラメタ

アプリケーション連携実行基盤から業務共通制御に通知されるパラメタについて説明します。

アプリケーション作業域

アプリケーション作業域は、初期処理で初期化された情報を共通に参照する領域です。領域はアプリケーション連携実行基盤で獲得されます。
業務共通制御情報入力ファイルでアプリケーション作業域を使用するように指定した場合に、使用します。業務共通制御情報入力ファイルの指定方法については、“16.4.2 業務共通制御情報入力ファイルの作成・修正”の“◆アプリケーション作業域”を参照してください。

注意

アプリケーション作業域を使用する場合、あわせて運用時の設定として、アプリケーション連携実行基盤定義ファイルでアプリケーション作業域のサイズも指定する必要があります。
設定方法の詳細は、“Interstage Business Application Server セットアップガイド”の“アプリケーション連携実行基盤定義ファイルの作成”を参照してください。

処理結果情報

処理結果情報は、サーバアプリケーションと共通に参照する領域です。
サーバアプリケーションのインタフェースから処理結果情報を省略する場合にも、業務共通制御に渡されます。
値の設定方法は、“■処理結果情報”を参照してください。

業務ロジックの例外情報

業務ロジックの例外情報は、サーバアプリケーションと共通に参照する領域です。
サーバアプリケーションのインタフェースから処理結果情報を省略する場合にも、業務共通制御に渡されます。
値の設定方法は、“■例外情報”を参照してください。

制御の例外情報

制御の例外情報は、業務共通制御の復帰値が異常(APFW_CTRL_ERROR)の場合に設定します。呼出し元には業務共通制御の例外情報が通知されます。
制御の例外情報は以下のデータ型(apfwControlExcept)を使用します。apfwControlExcept構造体の詳細については、“Interstage Business Application Server リファレンス”の“アプリケーションインタフェース(C言語)”を参照してください。

typedef struct{
  unsigned int    arealen;
  unsigned int    vallen;
  unsigned char   *val;
}apfwSequenceOctet;

typedef struct{
  int                  errcode;
  char                 *errmessage;
  apfwSequenceOctet    errdata;
}apfwControlExcept;

注意

  • 制御の例外情報には、業務共通制御の復帰値としてAPFW_CTRL_ERRORを設定した場合に有効になります。それ以外の値を設定した場合には、例外情報として扱われません。

  • 通知する情報として、errcode(エラーコード)、errmessage(エラーメッセージ)、およびerrdata(エラー詳細)を設定することができます。

  • errmessageに設定した値についてはコード変換が行われますが、errdataに設定した値についてはコード変換が行われません。

ユーザ任意のパラメタ

ユーザ任意のパラメタには、クライアントアプリケーションで設定した制御データが渡されます。パラメタの方向はすべてINOUTとなります。
値の設定方法は、“■ユーザ任意のパラメタ”を参照してください。

業務共通制御を配備せず、かつクライアントアプリケーションで制御データを設定した場合、アプリケーション連携実行基盤はクライアントアプリケーションで設定された制御データを無視します。
また、業務共通制御を配備し、かつクライアントアプリケーションで制御データを設定しなかった場合、アプリケーション連携実行基盤はユーザ任意のパラメタに初期値を設定します。設定される初期値については、“9.2.6 クライアントアプリケーションで利用するデータについて”を参照してください。

メモリの獲得・解放について

使用する型によって、メモリの獲得および解放を意識する必要があります。
詳細は、“■メモリの獲得・解放について”を参照してください。

16.4.4.2 振分け制御、業務前制御、業務後制御、結果編集制御の作成

アプリケーション連携実行基盤から呼び出される振分け制御、業務前制御、業務後制御、および結果編集制御を作成します。

振分け制御、業務前制御、業務後制御、および結果編集制御は、業務共通制御情報入力ファイルでそれぞれの処理を使用するように指定した場合に、使用します。業務共通制御情報入力ファイルの指定方法については、“16.4.2 業務共通制御情報入力ファイルの作成・修正”の“◆振分け制御、業務前制御、業務後制御、および結果編集制御”を参照してください。

注意

  • 業務共通制御情報入力ファイルで、振分け制御、業務前制御、業務後制御、および結果編集制御を使用するように指定した場合には、必ず該当する処理関数を作成してください。

  • 振分け制御、業務前制御、業務後制御、および結果編集制御を作成する際には、以下のファイルをインクルードしてください。

    • /opt/FJSVibs/include/apfwcom.h

    • /opt/FJSVibs/include/apfw_cdr_lib.h

    • /opt/FJSVibs/include/apfwsctrl.h(業務共通制御APIを使用する場合のみ)

    • 業務共通制御実行基盤インタフェース生成ツールが作成する各業務共通制御用の実行基盤インタフェースヘッダファイル

    • [Interstageのインストールディレクトリ]\BAS\inclued\apfwcom.h

    • [Interstageのインストールディレクトリ]\BAS\inclued\apfw_cdr_lib.h

    • [Interstageのインストールディレクトリ]\BAS\inclued\apfwsctrl.h(業務共通制御APIを使用する場合のみ)

    • 業務共通制御実行基盤インタフェース生成ツールが作成する各業務共通制御用の実行基盤インタフェースヘッダファイル

それぞれの処理の内容については、“12.1.3 業務共通制御”を参照してください。

振分け制御

クライアントからの要求ごとに呼び出す処理です。
制御用のデータを受け取り、どの業務処理を呼び出すかを決定するための処理です。
業務共通制御APIを使用してターゲット名を変更することで、呼び出すサーバアプリケーションを変更することができます。ターゲット名を変更しなかった場合、アプリケーション連携実行基盤はクライアントで指定されたターゲット名に対応するサーバアプリケーションを呼び出します。
1つのワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。

振分け制御のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域が振分け制御のインタフェースに必要であるかは、業務共通制御の設定に準じます。

int
APFW_SET_TARGET(
   [ユーザ任意のパラメタ,]
   [const char * const  userwork, int  userworksize,]
   apfwControlExcept  *apfw_ctrlenv
 )

復帰値を0以外に設定した場合は、アプリケーション連携実行基盤は以降の処理を行わず、業務共通制御の例外をクライアントへ返却します。

振分け制御を使用する場合には、業務共通制御実行基盤インタフェースを作成する際に、業務共通制御情報入力ファイルに以下の指定が必要になります。

Linuxを使用する場合の定義の記述例を以下に示します。

業務共通制御情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-ctrl>
    <server>
          ・・・・・・
         <set-target flag="ON">
             <library name="libsettarget.so">
         </set-target>
          ・・・・・・
    </server>
</apfw-ctrl>
振分け制御の記述例

振分け制御の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"
#include "apfwsctrl.h"

#include "APFW_SET_TARGET_apfw.h" /* 業務共通制御実行基盤インタフェース生成ツールより生成されるヘッダファイル */

int
APFW_SET_TARGET(
  str                 **param_out,     /* 制御データ */
  const char * const  userwork,        /* アプリケーション作業域 */
  int                 userworksize,    /* アプリケーション作業域の長さ */
  apfwControlExcept   *apfw_ctrlenv )  /* 制御の例外情報 */
{

  /* 振分け制御を実施(任意) */

  /* ターゲット名変更 */
  ret = apfw_set_target_name("server_apl2");
  ・・・・・・

  return APFW_CTRL_NORMAL;
}

業務前制御

サーバアプリケーションの呼出しの直前に呼び出す処理です。
業務処理に必要なリソースの獲得・初期化や、業務処理の実行状態の管理などの処理を行います。
1つのワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。

業務前制御のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域が業務前制御のインタフェースに必要であるかは、業務共通制御の設定に準じます。

int
APFW_PRE_BUSINESS(
   [ユーザ任意のパラメタ,]
   [const char * const  userwork, int  userworksize,]
   apfwControlExcept  *apfw_ctrlenv
 )

復帰値を0以外に設定した場合は、アプリケーション連携実行基盤は以降の処理を行わず、業務共通制御の例外をクライアントへ返却します。

業務前制御を使用する場合には、業務共通制御実行基盤インタフェースを作成する際に、業務共通制御情報入力ファイルに以下の指定が必要になります。

Linuxを使用する場合の定義の記述例を以下に示します。

業務共通制御情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-ctrl>
    <server>
          ・・・・・・
         <pre-business flag="ON">
             <library name="libprebiz.so">
         </pre-business>
          ・・・・・・
    </server>
</apfw-ctrl>
業務前制御の記述例

業務前制御の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "APFW_PRE_BUSINESS_apfw.h" /* 業務共通制御実行基盤インタフェース生成ツールより生成されるヘッダファイル */

int
APFW_PRE_BUSINESS(
  str                 **param_out,     /* 制御データ */
  const char * const  userwork,        /* アプリケーション作業域 */
  int                 userworksize,    /* アプリケーション作業域の長さ */
  apfwControlExcept   *apfw_ctrlenv )  /* 制御の例外情報 */
{

  /* 業務前制御を実施(任意) */

  return APFW_CTRL_NORMAL;
}

業務後制御

サーバアプリケーションの呼び出しの直後に呼び出す処理です。
業務処理で使用したリソースの解放や、業務処理の実行結果の管理などの処理を行います。
また、処理結果情報を変更することでアプリケーション連携実行基盤に対してトランザクションの完了指示を行うことができます。
1つのワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。

業務後制御のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域が業務後制御のインタフェースに必要であるかは、業務共通制御の設定に準じます。

int
APFW_POST_BUSINESS(
   [ユーザ任意のパラメタ,]
   [const char * const  userwork, int  userworksize,]
   int  *rtn, apfwExcept  *apfw_env,
   apfwControlExcept  *apfw_ctrlenv
 )

inoutのパラメタである処理結果情報と例外情報には、業務ロジックで設定された値が渡されます。処理結果情報を変更することで、トランザクションをコミットするかロールバックするかを変更することができます。業務後制御で出力された処理結果情報と例外情報は、結果編集制御の入力になります。

復帰値を0以外に設定した場合は、アプリケーション連携実行基盤は以降の処理を行わず、業務共通制御の例外をクライアントへ返却します。

復帰値と処理結果情報の両方を異常終了の値に設定した場合は、復帰値が優先されます。

処理結果情報

復帰値

APFW_CTRL_NORMAL

APFW_CTRL_ERROR

APFW_RTN_COMMIT

コミット

業務共通制御の例外(ロールバック)

APFW_RTN_COMMIT以外

ロールバック

業務共通制御の例外(ロールバック)

業務後制御を使用する場合には、業務共通制御実行基盤インタフェースを作成する際に、業務共通制御情報入力ファイルに以下の指定が必要になります。

Linuxを使用する場合の定義の記述例を以下に示します。

業務共通制御情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-ctrl>
    <server>
          ・・・・・・
         <post-business flag="ON">
             <library name="libpostbiz.so">
         </post-business>
          ・・・・・・
    </server>
</apfw-ctrl>
業務後制御の記述例

業務後制御の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "APFW_POST_BUSINESS_apfw.h" /* 業務共通制御実行基盤インタフェース生成ツールより生成されるヘッダファイル */

int
APFW_POST_BUSINESS(
  str                 **param_out,     /* 制御データ */
  const char * const  userwork,        /* アプリケーション作業域 */
  int                 userworksize,    /* アプリケーション作業域の長さ */
  int                 *rtn,            /* 処理結果情報 */
  apfwExcept          *apfw_env        /* 例外情報 */
  apfwControlExcept   *apfw_ctrlenv )  /* 制御の例外情報 */
{

  /* 業務後制御を実施(任意) */

  return APFW_CTRL_NORMAL;
}

結果編集制御

アプリケーション連携実行基盤で管理しているトランザクションの完了後に呼び出す処理です。
処理結果情報やトランザクション完了状態を判定し、電文を返却するか、例外として通知するか、またはリトライするかの制御を行います。
アプリケーション連携実行基盤のデータベースアクセス管理機能を使用しない場合も呼び出されます。
1つのワークユニット上に複数のサーバアプリケーションを配備する場合でも、1つだけ作成してください。

結果編集制御のインタフェースは、以下のように作成する必要があります。
アプリケーション作業域が結果編集制御のインタフェースに必要であるかは、業務共通制御の設定に準じます。

int
APFW_RESULT_CONTROL(
   [ユーザ任意のパラメタ,]
   const apfwDBResult dbinf,
   [const char * const  userwork, int  userworksize,]
   int  *rtn, apfwExcept  *apfw_env,
   apfwControlExcept  *apfw_ctrlenv
 )

復帰値を0以外に設定した場合は、アプリケーション連携実行基盤は以降の処理を行わず、業務共通制御の例外をクライアントへ返却します。
復帰値と処理結果情報の両方を異常終了の値に設定した場合は、復帰値が優先されます。

処理結果情報

復帰値

APFW_CTRL_NORMAL

APFW_CTRL_ERROR

APFW_RTN_COMMIT

正常復帰

業務共通制御の例外

APFW_RTN_ROLLBACK

正常復帰

業務共通制御の例外

APFW_RTN_ERROR

ユーザ例外(注)

業務共通制御の例外

APFW_RTN_RETRY

リトライ(注)

業務共通制御の例外

APFW_RTN_COMMIT, APFW_RTN_ROLLBACK, APFW_RTN_RETRY以外

ユーザ例外(注)

業務共通制御の例外

注)アプリケーション動作定義にしたがってリトライ処理を行います。

結果編集制御を使用する場合には、業務共通制御実行基盤インタフェースを作成する際に、業務共通制御情報入力ファイルに以下の指定が必要になります。

Linuxを使用する場合の定義の記述例を以下に示します。

業務共通制御情報入力ファイル
<?xml version="1.0" encoding="UTF-8"?>
<apfw-ctrl>
    <server>
          ・・・・・・
         <result-control flag="ON">
             <library name="libresultcontrol.so">
         </result-control>
          ・・・・・・
    </server>
</apfw-ctrl>
結果編集制御の記述例

結果編集制御の記述例を以下に示します。

#include "apfwcom.h"
#include "apfw_cdr_lib.h"

#include "APFW_RESULT_CONTROL_apfw.h" /* 業務共通制御実行基盤インタフェース生成ツールより生成されるヘッダファイル */

int
APFW_RESULT_CONTROL(
  str                 **param_out,     /* 制御データ */
  const apfwDBResult   dbinf,          /* DB情報 */
  const char * const  userwork,        /* アプリケーション作業域 */
  int                 userworksize,    /* アプリケーション作業域の長さ */
  int                 *rtn,            /* 処理結果情報 */
  apfwExcept          *apfw_env        /* 例外情報 */
  apfwControlExcept   *apfw_ctrlenv )  /* 制御の例外情報 */
{

  /* 結果編集制御を実施(任意) */

  return APFW_CTRL_NORMAL;
}