BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   C 言語を使用した BEA Tuxedo アプリケーションのプログラミング   |   先頭へ   |   前へ   |   次へ   |   目次

 


イベントのサブスクリプションの例

次のコード例は、bankapp アプリケーション・サーバの一部であり、このサーバは BANK_TLR_.* イベントをサブスクライブしています。この例には、前述の例の BANK_TLR_WITHDRAWAL イベントと、BANK_TLR_ で始まるそのほかのイベント名が含まれています。合致するイベントがポストされると、WATCHDOG サービスへの呼び出しを使用して、アプリケーションからサブスクライバにイベントが通知されます。

tpsubscribe() を使用したイベントのサブスクライブ

.
.
.
/* イベント・サブスクリプション・ハンドル */
static long sub_ev_largeamt = 0L ;
.
.
.
/* 'w' (WATCHDOG のしきい値) にデフォルト値を設定 */
(void)strcpy (amt_expr, "AMOUNT > 1000000.00") ;
.
.
.
/* 
* 高額な引き出しが行われた場合に
* 生成されるイベントをサブスクライブ
*/
evctl.flags = TPEVSERVICE ;
(void)strcpy (evctl.name1, "WATCHDOG") ;
/* サブスクライブ */
sub_ev_largeamt = tpsubscribe ("BANK_TLR_.*",amt_expr,&evctl,TPSIGRSTRT) ;
if (sub_ev_largeamt == -1L) {
(void)userlog ("ERROR:tpsubscribe for event BANK_TLR_.* failed:%s",
tpstrerror(tperrno)) ;
return -1 ;
}
.
.
.
{
/* イベントへのサブスクリプションを削除 */
if (tpunsubscribe (sub_ev_largeamt, TPSIGRSTRT) == -1)
(void)userlog ("ERROR:tpunsubscribe to event BANK_TLR_.* failed:%s",
tpstrerror(tperrno)) ;
return;
}
/*
* BANK_TLR_.* イベントがポストされたときに呼び出されるサービス
*/
void
#if defined(__STDC__) || defined(__cplusplus)
WATCHDOG(TPSVCINFO *transb)
#else
WATCHDOG(transb)
TPSVCINFO *transb;
#endif
{
FBFR *transf; /* 復号化されたメッセージのフィールド化バッファ */
/* TPSVCINFO データ・バッファを指すポインタを設定します。 */
transf = (FBFR *)transb->data;
/* ログ・エントリを標準出力に出力 */
(void)fprintf (stdout, "%20s|%28s|%8ld|%10.2f\n",
Fvals (transf, EVENT_NAME, 0),
Fvals (transf, EVENT_TIME, 0),
Fvall (transf, ACCOUNT_ID, 0),
*( (float *)CFfind (transf, AMOUNT, 0, NULL, FLD_FLOAT)) );
/* イベントのサブスクライバのサービス・ルーチンから返されるデータはありません。 */
tpreturn(TPSUCCESS, 0,NULL, 0L, 0);
}

 

先頭へ戻る 前のトピックへ 次のトピックへ