bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo C リファレンス > セクション 3c - C 関数 |
Tuxedo C リファレンス
|
名前
tpsubscribe()−イベントをサブスクライブする
形式
#include <atmi.h>
long tpsubscribe(char *eventexpr, char *filter, TPEVCTL *ctl, long flags)
機能説明
呼び出し元は tpsubscribe() を使用して、eventexpr で示されるイベントまたはイベントの集合をサブスクライブします。サブスクリプションは、BEA Tuxedo ATMI のイベント・ブローカ、TMUSREVT(5) によって保持され、イベントがポストされたときにサブスクライバに通知するために、tppost() によって使用されます。それぞれのサブスクリプションには、通知メソッドを指定します。通知メソッドは、クライアント通知、サービス呼び出し、または安定記憶域内のキューへのメッセージ登録の 3 つの内いずれかの形式をとります。通知メソッドはサブスクライバのプロセスのタイプと tpsubscribe() に渡された引数によって決まります。
サブスクライブするイベントまたはイベントの集合は、eventexpr で指定します。eventexpr には、最大で 255 文字の正規表現が入った NULL で終了する文字列を指定します。たとえば、eventexpr が &“e¥e..*” であれば、呼び出し元はシステムで生成されたすべてのイベントをサブスクライブします。eventexpr が &“e¥e.SysServer.*” であれば、呼び出し元はシステムで生成されたサーバに関連するすべてのイベントをサブスクライブします。eventexpr が &“A-Z].*” であれば、呼び出し元は先頭に A-Z を持つすべてのユーザ・イベント文字列をサブスクライブします。eventexpr が &“*(ERR|err).*” である場合、呼び出し側はサブストリング "ERR" または "err" のいずれかを含むすべてのユーザ・イベントを登録しています。たとえば、account_error および ERROR_STATE と呼ばれるイベントは、どちらも登録の対象となります。正規表現の詳細については、正規表現を参照してください。
filter を指定する場合は、ブール値のフィルタ・ルールを含む文字列を指定します。このルールは、イベント・ブローカがイベントをポストする前に正しく評価しなければなりません。ポストするイベントを受け取ると、イベント・ブローカはそのイベントのデータにフィルタ・ルール (存在する場合) を適用します。データがフィルタ・ルールのチェックにパスした場合、イベント・ブローカは通知メソッドを呼び出します。データがフィルタ・ルールを通過しない場合は、イベント・ブローカは対応する通知メソッドを呼び出しません。呼び出し元は、異なるフィルタ・ルールを利用して同じイベントを何度でもサブスクライブすることができます。
フィルタ・ルールは、それが適用される型付きバッファに固有なものです。FML バッファおよび VIEW バッファの場合は、フィルタ・ルールはそれぞれのブール式コンパイラ (それぞれ Fboolco(3fml) および Fvboolco(3fml) を参照) に渡すことができて、ポストされたバッファ (Fboolev(3fml) および Fboolev(3fml) を参照) に対して評価することができる文字列です。STRING バッファの場合は、フィルタ・ルールは正規表現です。他のすべてのタイプのバッファの場合、カスタマイズしたフィルタ評価機構が必要です (カスタマイズしたフィルタ評価機構を追加する方法についての詳細は、buffer(3c) および typesw(5) を参照してください)。filter には、最大 255 文字の NULL で終了する文字列を指定します。
サブスクライバが BEA Tuxedo ATMI のクライアント・プロセスで、ctl が NULL の場合は、サブスクライブしているイベントがポストされたときに、イベント・ブローカはサブスクライバに任意通知型メッセージを送ります。この場合、eventexpr に対して評価が成功するイベント名がポストされると、イベント・ブローカは eventexpr に対応したフィルタ・ルールに対してポストされたデータをテストします。データがフィルタ・ルールを通過した場合、またはそのイベントに対する適用すべきフィルタ・ルールが存在しない場合は、サブスクライバはイベントと共にポストされたすべてのデータと共に任意通知型の通知を受け取ります。任意通知型メッセージを受け取るためには、クライアントは任意通知処理ルーチンを (tpsetunsol() を利用して) 登録しておく必要があります。BEA Tuxedo ATMI システムのサーバ・プロセスが、ctl パラメータを NULL にして tpsubscribe() を呼び出した場合は、tpsubscribe() は異常終了して tperrno を TPEPROTO に設定します。
任意通知型メッセージによってイベント通知を受け取るクライアントは、終了する前にイベント・ブローカのアクティブなサブスクリプションのリストから、そのサブスクリプションを削除するべきです (詳細については、tpunsubscribe(3c) を参照してください)。クライアントで tpunsubscribe() のワイルドカード・ハンドル -1 を使用すれば、任意通知型の通知メソッドに対応したサブスクリプションを含む、そのクライアントのすべての「非持続的」サブスクリプションを削除することが簡単に行えます (プロセス終了後も持続するサブスクリプションおよびこれらに関連した通知メソッドについては、次の TPEVPERSIST に関する説明を参照してください)。クライアントが非持続型のサブスクリプションを削除せずに終了した場合は、イベント・ブローカはそのクライアントにアクセスできなくなったことを検出した時点でそれらのサブスクリプションを削除します。
サブスクライバが (プロセス・タイプにかかわらず) イベント通知をサービス・ルーチンまたは安定記憶域内のキューに送りたい場合は、ctl パラメータは有効な TPEVCTL 構造体を指さなければいけません。この構造体には次のエレメントが含まれます。
long flags;
char name1[32];
char name2[32];
TPQCTL qctl;
次に、ctl
イベント・ブローカのアクティブなサブスクリプションのリストに、tpsubscribe() が要求するサブスクリプションと一致するものがある場合は、この関数は異常終了して tperrno に TPEMATCH を設定します。サブスクリプションが既存のサブスクリプションと一致するためには、eventexpr と filter の両方が、イベント・ブローカのアクティブなサブスクリプションのリストにすでに存在するサブスクリプションの eventexpr と filter に一致しなければなりません。さらに、通知メソッドによって異なりますが、一致を調べるために他の基準も使用されます。
サブスクライバがBEA Tuxedo ATMI システムのクライアント・プロセスで、(イベントがポストされたときに、呼び出し元が任意通知を受け取るように) ctl に NULL を設定した場合は、システム定義によるそのクライアント識別子 (CLIENTID と呼ばれています) も一致を調べるために使用されます。つまり tpsubscribe() は、eventexpr、filter、および呼び出し元の CLIENTID が、イベント・ブローカにすでに知られているサブスクリプションが持つそれらの値と一致する場合に異常終了します。
呼び出し元が ctl
安定記憶域内のキュー、キュー・スペース、およびキューの名前へのサブスクリプションの場合は、一致を調べる際に eventexpr および filter に加えて相関識別子が使用されます。相関識別子を利用することにより、同じ送信先の、同じイベント式やフィルタ・ルールに対する複数のサブスクリプションを区別することができます。したがって、呼び出し元が ctl
次に tpsubscribe() に指定できる有効な flags の一覧を示します。
マルチスレッドのアプリケーションの場合、TPINVALIDCONTEXT 状態のスレッドは、tpsubscribe() の呼び出しを発行できません。
正規表現
表 12 で説明する正規表現は、UNIX システム・エディタ、ed(1) で使用されるパターンに似ています。一般的な正規表現のほか、代替演算子 (|) も使用できます。ただし、全体的にほとんど変わりません。
正規表現 (RE: Regular Expressions) は、次に示すいずれかの規則を 1 回以上適用して作成します。
優先順位のレベルは 3 つあります。結合の強さの順に並べると、次のようになります。
上記のとおり、かっこは優先順位が高いことを明示的に示すために使用します。
戻り値
tpsubscribe() は正常終了すると、イベント・ブローカのアクティブなサブスクリプションのリストからこのサブスクリプションを削除するために使用できるハンドルを返します。サブスクライバやその他のプロセスは、いずれも返されたハンドルを利用してこのサブスクリプションを削除することができます。
異常終了すると、tpsubscribe() は -1 を返し、tperrno を設定してエラー条件を示します。
エラー
異常終了時には、tpsubscribe() は tperrno を次のいずれかの値に設定します(特に記述した場合を除いては、エラーが呼び出し元のトランザクションに影響を及ぼすことはありません)。
関連項目
buffer(3c)、tpenqueue(3c)、tppost(3c)、tpsetunsol(3c)、tpunsubscribe(3c)、Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)、Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)、EVENTS(5)、EVENT_MIB(5) に関する追加情報、TMSYSEVT(5)、TMUSREVT(5)、tuxtypes(5)、typesw(5)、UBBCONFIG(5)
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |