8.7 イベントのポスト
tppost(3c)
関数を使用すると、Oracle Tuxedo ATMIクライアントまたはサーバーがイベントをポストできます。
tppost()
関数の呼出しには、次のシグネチャを使用します。
tppost(char *eventname, char *data, long len, long flags)
次の表は、tppost()
関数の引数を示しています。
表8-7 tppost()関数の引数
引数 | 説明 |
---|---|
eventname
|
31文字以下の文字列と最後にNULL文字を含むイベント名を指すポインタ。名前をドット(".")で開始することはできません。ドットは、Oracle Tuxedoのシステム定義のイベントの先頭文字として予約されています。イベントのサブスクライブでは、イベント名にワイルド・カードを使用して、1回の関数呼出しで複数のイベントをサブスクライブすることができます。そのため関連するイベント名のカテゴリに同じ接頭語を使用すると便利です。 |
data
|
tpalloc() 関数ですでに割り当てられているバッファを指すポインタ。
|
len
|
イベントとともにポストする必要があるデータ・バッファのサイズ。data が長さを指定する必要がないバッファ・タイプ(FMLフィールド化バッファなど)を指している場合、またはNULLが設定されている場合、len は無視され、データなしでイベントがポストされます。
|
flags
|
フラグのオプション。使用可能なフラグ・オプションの詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』の「tppost(3c)」を参照してください。 |
次のリストは、Oracle Tuxedoシステムのサンプル・アプリケーションbankapp
から引用したイベント・ポストを示しています。この例は、WITHDRAWAL
サービスの一部です。WITHDRAWAL
サービスは、$10,000を超える引出しかどうかを確認し、またBANK_TLR_WITHDRAWAL
イベントをポストします。
tppost( )を使用したイベントのポストのリスト
.
.
.
/* Event logic related */
static float evt_thresh = 10000.00 ; /* default for event threshold */
static char emsg[200] ; /* used by event posting logic */
.
.
.
/* Post a BANK_TLR_WITHDRAWAL event ? */
if (amt < evt_thresh) {
/* no event to post */
tpreturn(TPSUCCESS, 0,transb->data , 0L, 0);
}
/* prepare to post the event */
if ((Fchg (transf, EVENT_NAME, 0, "BANK_TLR_WITHDRAWAL", (FLDLEN)0) == -1) ||
(Fchg (transf, EVENT_TIME, 0, gettime(), (FLDLEN)0) == -1) ||
(Fchg (transf, AMOUNT, 0, (char *)&amt, (FLDLEN)0) == -1)) {
(void)sprintf (emsg, "Fchg failed for event fields: %s",
Fstrerror(Ferror)) ;
}
/* post the event */
else if (tppost ("BANK_TLR_WITHDRAWAL", /* event name */
(char *)transf, /* data */
0L, /* len */
TPNOTRAN | TPSIGRSTRT) == -1) {
/* If event broker is not reachable, ignore the error */
if (tperrno != TPENOENT)
(void)sprintf (emsg, "tppost failed: %s", tpstrerror (tperrno));
}
このサンプル・コードでは、アプリケーションで目立った状況が発生したことを示すために、イベントをイベント・ブローカにポストしているだけです。特定のイベントに関心を持つクライアント(必要に応じて処理を行うクライアント)のイベントへのサブスクリプションは、別にコーディングします。