レプリケーションの手引きおよび解説書


付録


付録 A. アプリケーションの中から収集および変更適用プログラムを開始する方法

asnccp コマンドを使用して収集プログラムを開始したり、 asnapply コマンドを使用して変更適用プログラムを開始したりする代わりに、 アプリケーションの中からルーチンを呼び出して、収集および変更適用プログラムを開始することができます。 これらのルーチンを使用するには、 収集プログラムの場合は AUTOSTOP オプション、 変更適用プログラムの場合は COPYONCE オプションを指定しなければなりません。 これは、この API が同期実行しかサポートしていないためです。

この章では、これらのルーチンおよび戻りコードについて説明します。 また、収集および変更適用プログラムを開始するサンプル・ルーチンも示します。


ルーチンを使用して収集プログラムを開始する

アプリケーションの中から収集プログラムを開始するには、次のルーチンを呼び出します。

#ifndef ASN_INCLUDE
#define ASN_INCLUDE
#define MAXASNPARMLENGTH 128
struct asnParm
{
  short byteCount;
  char val[MAXASNPARMLENGTH];
};
struct asnParms
{
  int parmCount;
  struct asnParm **parms;
};
int asnCapture(struct asnParms *pAsnParms);
#endif

このルーチンは、次の戻りコードを戻します。

0
プログラムが正常に実行された。

-1
プログラムが正常に実行されなかった。

ルーチンを使用して変更適用プログラムを開始する

アプリケーションの中から変更適用プログラムを開始するには、次のルーチンを呼び出します。

#ifndef ASN_INCLUDE
#define ASN_INCLUDE
#define MAXASNPARMLENGTH 128
struct asnParm
{
  short byteCount;
  char val[MAXASNPARMLENGTH];
};
struct asnParms
{
  int parmCount;
  struct asnParm **parms;
};
int asnApply(struct asnParms *pAsnParms);
#endif

このルーチンは、次の戻りコードを戻します。

0
変更適用プログラムが正常に実行された。

1
変更適用プログラムは正常に実行されたが、 最低 1 つのサブスクリプション・セットで対立が検出された。 結果として、1 つまたは複数の拒否されたトランザクションが補正された。

-1
変更適用プログラムが正常に実行されなかった。

収集および変更適用プログラムを開始するためのサンプル・ルーチン

次のサンプル・ルーチンは、収集および変更適用プログラムを開始します。

#include <stdlib.h>
#include <string.h>  /* for strcpy, strlen */
#include <asn.h>  /* replication API parameters */
/* helper function to dump out parameter contents */
int printParms( const struct asnParms parms )
{
   int count = 0;
   if( parms.parmCount > 0 )
   {
      for( count=0; count<parms.parmcount>val );
         printf( "    bytes = %d\n", parms.parms[count]->byteCount );
      }
      return(0);
   }
   else
      return(-1);
}
int main(int argc, char** argv)
{
   struct asnParms captureParms;
   struct asnParms applyParms;
   struct asnParm *currParm;
   int rc = 0;
   int count = 0;
   /* allocate and initialize capture parameter structure */
   captureParms.parmCount = 4;
   captureParms.parms =
      (struct asnParm **)malloc(captureParms.parmCount * sizeof(struct asnParm*));
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "SRCESRV" );
   currParm->byteCount = strlen( currParm->val );
   captureParms.parms[0] = currParm;  /* first capture parameter */
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "WARM" );
   currParm->byteCount = strlen( currParm->val );
   captureParms.parms[1] = currParm;  /* second capture parameter */
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "NOPRUNE" );
   currParm->byteCount = strlen( currParm->val );
   captureParms.parms[2] = currParm;  /* third capture parameter */
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "AUTOSTOP" );
   currParm->byteCount = strlen( currParm->val );
   captureParms.parms[3] = currParm;  /* fourth capture parameter */
   rc = printParms( captureParms );   /* print parameters out to verify */
   rc = asnCapture(&captureParms;);
   if( rc!=0 )
      printf("Capture failed with rc = %d\n", rc );
   else
      printf("Capture completed successfully\n" );
   /* allocate and initialize capture parameter structure */
   applyParms.parmCount = 3;
   applyParms.parms =
      (struct asnParm **)malloc(applyParms.parmCount * sizeof(struct asnParm*));
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "APPLYQUAL" );
   currParm->byteCount = strlen( currParm->val );
   applyParms.parms[0] = currParm;  /* first capture parameter */
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "CNTLSRV" );
   currParm->byteCount = strlen( currParm->val );
   applyParms.parms[1] = currParm;  /* second capture parameter */
   currParm = (struct asnParm *)malloc(sizeof(struct asnParm));
   strcpy( currParm->val, "COPYONCE" );
   currParm->byteCount = strlen( currParm->val );
   applyParms.parms[2] = currParm;  /* third capture parameter */
   rc = asnApply(&applyParms;);
   if( rc!=0 )
      printf("Apply failed with rc = %d\n", rc );
   else
      printf("Apply completed successfully\n" );
   for(count = 0; count<= captureParms.parmCount; count++)
      free( captureParms.parms[count] );
   free( captureParms.parms );
   for(count = 0; count<= applyParms.parmCount; count++)
      free( applyParms.parms[count] );
   free( applyParms.parms );
   return(rc);
}


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]