bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo C リファレンス

 Previous Next Contents View as PDF  

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 の最初の文字にドット (&dlq;.&drq“用できません。これは、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 に対するフィルタ・ルールの評価が成功したサブスクリプションへのポストです)。tperrnoTPESVCFAIL に設定されて戻った場合は、tpurcode() には、eventname の代わりにイベント・ブローカによってディスパッチされたトランザクション以外のイベント通知の数が設定されています。

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

エラー

異常終了時には、tppost()tperrno を次のいずれかの値に設定します(特に記述した場合を除いては、エラーが呼び出し元のトランザクションに影響を及ぼすことはありません)。

[TPEINVAL]

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

[TPENOENT]

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

[TPETRAN]

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

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらず tppost() が試行されたことを示します。

呼び出し元がトランザクション・モードにある場合、トランザクションはすでに「ロールバックのみ」になっているか、またはタイムアウトが発生しています (中途終了マークが付けられる)。呼び出し元がトランザクション・モードにない場合、ブロッキング・タイムアウトが発生しています。ブロッキング・タイムアウトは、TPNOBLOCK または TPNOTIME、あるいはその両方を指定した場合は発生しません。

トランザクション・タイムアウトが発生すると、1 つの例外を除き、トランザクションがアボートされない限り、新しいリクエストを送信したり、未処理の応答を受信しようとしても、TPETIME で異常終了します。1 つの例外とは、ブロックされず、応答を期待せず、かつ呼び出し元のトランザクションのために送信されない (つまり、TPNOTRANTPNOBLOCK および TPNOREPLY が設定された状態で tpacall() が呼び出される場合) 要求です。

tppost() がトランザクション内部で失敗すると、そのトランザクションは TX_ROLLBACK_ONLY 状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降の ATMI 呼び出しは、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)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy