BEA Logo BEA Tuxedo Release 8.0

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

 

   Tuxedoホーム   |   BEA Tuxedo C リファレンス   |   先頭へ   |   前へ   |   次へ   |   目次

 


tppost(3c)

名前

tppost()-イベントをポストする

形式

#include <atmi.h> 
int tppost(char *eventname, char *data, long len, long flags)

機能説明

呼び出し元は tppost() を使用して、イベントとそれに伴うすべてのデータをポストします。イベント名は eventname に指定し、data は、NULL 以外の場合はデータを指すようにします。ポストされたイベントとそのデータは、BEA Tuxedo ATMI イベント・ブローカによって、eventname に対して評価が成功するサブスクリプションを持ち、data に対して評価が成功するオプションのフィルタ・ルールを持つすべてのサブスクライバにディスパッチされます。

eventname には、最大で 31 文字の NULL で終了する文字列を指定します。 eventnameの最初の文字はドット (".") であってはいけません。なぜなら、この文字は BEA Tuxedo ATMI システム自身が定義するあらゆるイベントの最初の文字として予約されているからです。

data には、NULL 以外の場合は、tpalloc() によって以前に割り当てたバッファを指定し、len にはバッファ内のイベントと共にポストするバッファに入っているデータの長さを指定しなければなりません。長さを指定する必要のないタイプのバッファ (FML フィールド化バッファなど) を data が指す場合、len は無視されます。data が NULL の場合、len は無視され、イベントはデータなしでポストされます。

tppost() をトランザクション中で使用する場合は、トランザクションの境界を拡大して、これらのサーバ上、およびイベント・ブローカが通知する安定記憶域上のメッセージ・キューを含むようにすることができます。トランザクションによるポストが行われると、ポスト元のトランザクションに代わって、ポストされたイベントの受信側の一部 (たとえば、サーバおよびキューなど) には通知され、一部 (たとえば、クライアントなど) には通知されません。

ポスト元がトランザクション内にあり、TPNOTRAN がセットされている場合は、ポストされたイベントはイベント・ブローカに渡されます。これは、イベント・ブローカがイベントをポスト元のトランザクションの一部として処理できるようにするためです。イベント・ブローカはトランザクションによるイベント通知を、tpsubscribe() に渡される ctl->flags パラメータで TPEVTRAN ビットの設定を使用したサービス・ルーチンおよび安定記憶域上のキューのサブスクリプションだけにディスパッチします。イベント・ブローカは、クライアントへの通知、および tpsubscribe() に渡される ctl->flags パラメータで TPEVTRAN ビットの設定を使用しなかったサービス・ルーチンおよび安定記憶域上のキューにあるサブスクリプションのディパッチも行いますが、これはポスト元プロセスのトランザクションの一部としてではありません。

ポスト元がトランザクションの外部にある場合、イベントに関連するサービスが異常終了すると、tppost() は肯定応答のない一方向のポストになります。このような状況は、イベント用に TPEVTRAN が設定されている場合でも起こります (この設定には、tpsubscribe() に渡される ctl->flags パラメータを使用します)。ポスト元がトランザクション内にある場合は、イベントに関連するサービスが異常終了すると tppost()TPESVCFAIL を返します。

次に、有効な flags の一覧を示します。

TPNOTRAN

呼び出し元がトランザクション・モードにあり、このフラグがセットされている場合は、イベントのポストは呼び出し元のトランザクションの代わりに実行されません。トランザクション・モードにあるこのフラグをセットする呼び出し元は、イベントのポストの際に、依然としてトランザクション・タイムアウトの対象となります。イベントのポストが失敗した場合、呼び出し元のトランザクションは影響されません。

TPNOREPLY

tppost() が戻る前にイベント・ブローカが eventname に対するすべてのサブスクリプションを処理するのを待たないように、tppost に通知します。TPNOREPLY がセットされると、tppost() が成功して戻ったかどうかにかかわらず、tpurcode() はゼロに設定されます。呼び出しプロセスがトランザクション・モードにあるとき、TPNOTRAN が設定されない限りこの設定は使用できません。

TPNOBLOCK

ブロッキング条件が存在する場合は、イベントはポストされません。このような条件が発生すると、呼び出しは失敗し、tperrno() には TPEBLOCK が設定されます。TPNOBLOCK が指定されていないときにブロッキング条件が存在すると、呼び出し元は、その条件が解消されるか、またはタイムアウト (トランザクションまたはブロッキング) が発生するまではブロックされます。

TPNOTIME

このフラグは、呼び出し元が無制限にブロックでき、ブロッキング・タイムアウトの対象にならないようにすることを指定します。トランザクション・タイムアウトは依然として発生する可能性があります。

TPSIGRSTRT

シグナルが関数内部のシステム・コールを中断すると、中断されたシステム・コールは出しなおされます。TPSIGRSTRT が指定されていない場合にシグナルがシステム・コールを中断させると、tppost() は失敗し、tperrno() には TPGOTSIG が設定されます。

マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは tppost() の呼び出しを発行できません。

戻り値

tppost() から成功して戻ると、tpurcode() には eventname の代わりにイベント・ブローカによってディスパッチされるイベント通知の数が設定されています (つまり、eventname に対するイベント表現の評価が成功し、data に対するフィルタ・ルールの評価が成功したサブスクリプションへのポストです)。tperrno()TPESVCFAIL に設定されて戻った場合は、tpurcode() には、eventname の代わりにイベント・ブローカによってディスパッチされたトランザクション以外のイベント通知の数が設定されています。

異常終了すると、tppost() は -1 を返し、tperrno() を設定してエラー条件を示します。

エラー

異常終了時には、tppost()tperrno() を次のいずれかの値に設定します(特に指定がない限り、障害は、呼び出し元のトランザクションに影響しません)。

[TPEINVAL]

無効な引数 (たとえば、eventname に NULL) が指定されました。

[TPENOENT]

BEA Tuxedo User イベント・ブローカにアクセスできません。

[TPETRAN]

呼び出し元はトランザクション・モードにあり、TPNOTRAN は設定されておらず、tppost() はトランザクションの伝播をサポートしないイベント・ブローカにコンタクトしました (つまり、TMUSREVT(5) はトランザクションをサポートする BEA Tuxedo ATMI システムのグループで稼動していません)。

[TPETIME]

タイムアウトが発生しました。呼び出し元がトランザクション・モードの場合は、トランザクション・タイムアウトが発生し、そのトランザクションは終了します。トランザクション・モードでなければ、ブロッキング・タイムアウトが発生し、TPNOBLOCKTPNOTIME も指定されていませんでした。トランザクション・タイムアウトが発生した場合、新しく処理を開始しようとしても、トランザクションがアボートするまで TPETIME になり、正常に行えません。

[TPESVCFAIL]

イベント・ブローカが呼び出し元のトランザクションに関してサービス・ルーチンまたは安定記憶キューにトランザクション・イベントをポストする際に、エラーが発生しました。呼び出し元の現在のトランザクションはアボートのみとマークされています。このエラーが返された場合、tpurcode() には、eventname の代わりにイベント・ブローカがディスパッチするトランザクション以外のイベント通知の数が設定されています。トランザクションのポスティングは、トランザクションの完了と共にその効果がなくなるため、カウントされません。トランザクションがタイムアウトしていないかぎり、通信はトランザクションがアボートするまで継続でき、また呼び出し元のトランザクションの一部として行った作業はすべてそのトランザクションの完了時にアボートされます (つまり、以後のやりとりで何らかの結果が得られる場合には、TPNOTRAN を設定しておくようにします)。

[TPEBLOCK]

ブロッキング状態のため、TPNOBLOCK が指定されました。

[TPGOTSIG]

シグナルを受け取りましたが、TPSIGRSTRT が指定されていません。

[TPEPROTO]

tppost() が、不正に呼び出されました。

[TPESYSTEM]

BEA Tuxedo システムのエラーが発生しました。エラーの正確な内容はログ・ファイルに書き込まれます。

[TPEOS]

オペレーティング・システムのエラーが発生しました。

関連項目

tpsubscribe(3c)tpunsubscribe(3c)EVENTS(5)TMSYSEVT(5)TMUSREVT(5)

 

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