ページの先頭行へ戻る
Interstage Application Server OLTPサーバ運用ガイド

4.5.3 運用操作API群の使用例

  Interstage運用APIは環境の初期化、回収の間に実行します。環境の初期化が失敗した場合は、回収処理は不要です。

  #include “ISOP.h”
  ~
  ISOP_CTRL env;
  /* 環境の初期化 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RINIENV;
  env.pktvl = ISOP_006;
  ISOPenv( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 環境の回収は不要*/
    /* エラー処理 */
  }
  ~ /* 運用APIの実行  */
    /* 環境の回収 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RTRMENV;
  env.pktvl = ISOP_006;
  ISOPenv( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 */
    /* エラー処理 */
  }

  ワークユニット名、オブジェクト名通知APIで複数の名前を獲得する場合は前回復帰した制御表をそのまま指定します。そのまま指定することにより取得済みワークユニット名、オブジェクト名数がカウントアップされます。全部の名前を取り出した場合はresultが0で復帰します。

  ~
  ISOP_LSTWU lstwu;
  ~
  memset( (char *)&lstwu, 0x0, sizeof( ISOP_LSTWU ) );
  /* 最初の名前を獲得するための設定 */
  lstwu.opctrl.request = ISOP_RLSTWU;
  lstwu.opctrl.pktvl = ISOP_006;
  lstwu.checknum = 0;
  do{ /*  このループですべての名前を取り出す */
    ISOPnotify( (char *)&lstwu );
    if( lstwu.opctrl.result == -1 ){
      /* エラー処理 */
      /* ワークユニットが一つも存在しない場合もここで処理する */
      break;
     }
    ~  /* それぞれの処理 */
  }while( lstwu.opctrl. result == 1 );

  #include “ISOP.h”
  #define DEF_ISOPENV	"ISOPenv"
  ~
  ISOP_CTRL env;
  void *handle;
  void ( *ISOPENV )( char * );
  int rtncode;
  /* ライブラリのオープン */
  handle = dlopen( "/opt/FSUNtd/lib/libistage.so", RTLD_LAZY );
  if( handle == NULL ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* 関数のアドレス取得 */
  ISOPENV = (void (*)(char *))dlsym( handle, DEF_ISOPENV );
  if( ISOPENV == NULL ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* 環境の初期化 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RINIENV;
  env.pktvl = ISOP_006;
  (*ISOPENV)( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 環境の回収は不要*/
    /* エラー処理 */
  }
  ~ /* 運用APIの実行  */
    /* 環境の回収 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RTRMENV;
  env.pktvl = ISOP_006;
  (*ISOPENV)( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* ライブラリのクローズ */
  rtncode = dlclose( handle );
  if( rtncode != 0 ){
    /* 異常終了 */
    /* エラー処理 */
  }

  ワークユニット名、オブジェクト名通知APIで複数の名前を獲得する場合は前回復帰した制御表をそのまま指定します。そのまま指定することにより取得済みワークユニット名、オブジェクト名数がカウントアップされます。全部の名前を取り出した場合はresultが0で復帰します。

    ~
  ISOP_LSTWU lstwu;
  void ( *ISOPNOTIFY )( char * );
    ~
  memset( (char *)&lstwu, 0x0, sizeof( ISOP_LSTWU ) );
  /* 最初の名前を獲得するための設定 */
  lstwu.opctrl.request = ISOP_RLSTWU;
  lstwu.pktvl = ISOP_006;
  lstwu.checknum = 0;
  do{ /*  このループですべての名前を取り出す */
    (*ISOPNOTIFY)( (char *)&lstwu );
    if( lstwu.result == -1 ){
      /* エラー処理 */
      /* ワークユニットが一つも存在しない場合もここで処理する */
      break;
       }
    ~  /* それぞれの処理 */
  }while( lstwu.result == 1 );

  Interstageシステム情報通知APIでシステム名一覧通知を行う場合は、1回の呼出しですべてのシステム名の一覧が獲得できます。
  取り出したシステム名の一覧情報の領域を解放するには、システム名一覧通知で使用した呼出しパラメタ構造体を、そのままシステム名一覧解放API呼出し時に指定してください。

    ~
  ISOP_LSTSYS lstsys;
  ISOP_LSTSYSDATA *data;
  int i;
    ~

  /* システム名一覧獲得 */
  memset(&lstsys, 0, sizeof(ISOP_LSTSYS));
  lstsys.opctrl.request = ISOP_RLSTSYS;
  lstsys.opctrl.pktversion = ISOP_006;

  /* API呼び出し */
  ISOPsystem((char*)&lstsys);
  if( lstsys.opctrl.result != 0) {
    /* 異常終了 */
    /* エラー処理 */
  }

  /* システム名一覧情報参照 */
  data  =  lstsys.bufaddr;
  for(i=0; i  <  lstsys.num; i++, data++) {
    /* システム名 */
    printf("SYSTEM:%s\n", data->sysname);
    /* プロフィール */
    printf("PROFILE:%s\n", data->profile);
  }

  /* システム名一覧解放 */
  lstsys.opctrl.request = ISOP_RLSTFRESYS;
  ISOPsystem((char *)&lstsys);
  if( lstsys.opctrl.result != 0) {
    /* 異常終了 */
    /* エラー処理 */
  }

  #include “ISOP.h”
  #define DEF_ISOPENV	"ISOPenv"
  ~
  ISOP_CTRL env;
  void *handle;
  void ( *ISOPENV )( char * );
  int rtncode;
  /* ライブラリのオープン */
  handle = dlopen( "/opt/FJSVtd/lib/libistage.so", RTLD_LAZY );
  if( handle == NULL ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* 関数のアドレス取得 */
  ISOPENV = (void (*)(char *))dlsym( handle, DEF_ISOPENV );
  if( ISOPENV == NULL ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* 環境の初期化 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RINIENV;
  env.pktvl = ISOP_006;
  (*ISOPENV)( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 環境の回収は不要*/
    /* エラー処理 */
  }
  ~ /* 運用APIの実行  */
    /* 環境の回収 */
  memset( (char *)&env, 0x0, sizeof( ISOP_CTRL ) );
  env.request = ISOP_RTRMENV;
  env.pktvl = ISOP_006;
  (*ISOPENV)( (char *)&env );
  if( env.result == -1 ){
    /* 異常終了 */
    /* エラー処理 */
  }
  /* ライブラリのクローズ */
  rtncode = dlclose( handle );
  if( rtncode != 0 ){
    /* 異常終了 */
    /* エラー処理 */
  }

  ワークユニット名、オブジェクト名通知APIで複数の名前を獲得する場合は前回復帰した制御表をそのまま指定します。そのまま指定することにより取得済みワークユニット名、オブジェクト名数がカウントアップされます。全部の名前を取り出した場合はresultが0で復帰します。

    ~
  ISOP_LSTWU lstwu;
  void ( *ISOPNOTIFY )( char * );
    ~
  memset( (char *)&lstwu, 0x0, sizeof( ISOP_LSTWU ) );
  /* 最初の名前を獲得するための設定 */
  lstwu.opctrl.request = ISOP_RLSTWU;
  lstwu.pktvl = ISOP_006;
  lstwu.checknum = 0;
  do{ /*  このループですべての名前を取り出す */
    (*ISOPNOTIFY)( (char *)&lstwu );
    if( lstwu.result == -1 ){
      /* エラー処理 */
      /* ワークユニットが一つも存在しない場合もここで処理する */
      break;
       }
    ~  /* それぞれの処理 */
  }while( lstwu.result == 1 );