目次 前 次 PDF


イベントのサブスクライブ

イベントのサブスクライブ
このトピックには次の項が含まれます:
イベント・ブローカを使用するためのプロセス
イベント・ブローカを使用するには、いくつかの準備作業を行う必要があります。次の図に、それらの作業、およびアプリケーション管理者またはプログラマのどちらがその作業を実行するかを示します。
これらの作業を行う手順に関しては、図のボックスをクリックしてください。
注意:
イベント・ブローカのしくみを理解するには、bankapp (Oracle Tuxedoシステムに同梱のサンプル・アプリケーション)を実行します。bankappのコピー方法とデモとしての実行方法は、『Oracle Tuxedo ATMIアプリケーション開発のためのチュートリアル』bankapp (完全なC言語アプリケーション)のチュートリアルに関する項を参照してください<Default ?Font>
イベント・ブローカ・サーバーの構成
クライアントがイベント・ブローカにアクセスするには、Oracle Tuxedoシステムで提供されている2つのサーバーのいずれかを使用します。つまり、アプリケーション・イベントを処理するTMUSREVT(5)、またはシステム・イベントを処理するTMSYSEVT(5)を使用します。このサーバーは両方ともイベントを処理し、サブスクライバへの通知をトリガーします。
ご使用のシステムでOracle Tuxedoのイベント・ブローカを設定するには、次の例に示すように、この2つのサーバーのいずれかまたは両方をUBBCONFIGファイルのSERVERSセクションで設定します。
*SERVERS
TMSYSEVT SRVGRP=ADMIN1 SRVID=100 RESTART=Y GRACE=900 MAXGEN=5
CLOPT="-A --"
TMSYSEVT SRVGRP=ADMIN2 SRVID=100 RESTART=Y GRACE=900 MAXGEN=5
CLOPT="-A -- -S -p 90"
TMUSREVT SRVGRP=ADMIN1 SRVID=100 RESTART=Y
MAXGEN=5 GRACE=3600
CLOPT="-A --"
TMUSREVT SRVGRP=ADMIN2 SRVID=100 RESTART=Y
MAXGEN=5 GRACE=3600
CLOPT="-A -- -S -p 120"
どちらのサーバーもネットワーク上の任意の場所に配置できます。ただし、MASTERサイトには主要サーバーを割り当てることをお薦めします。
注意:
ポーリング間隔の設定
セカンダリ・サーバーは、プライマリ・サーバーを定期的にポーリングして現在のサブスクリプション・リストを取得します。このリストには、フィルタリングと通知に関するルールが含まれます。デフォルトでは、ポーリングは30秒間隔で実行されます。ただし、必要に応じて、異なる間隔を指定できます。
ポーリング間隔(秒単位で表される)を設定するには、構成ファイルのTMUSREVT(5)またはTMSYSEV(5)エントリに次のように-pコマンド行オプションを使用します。
-p poll_seconds
サブスクリプションが追加されている間と、セカンダリ・サーバーが更新されている間は、イベント・メッセージが失われたように見えます。
ATMIおよびEVENT_MIBを使用したイベントのサブスクライブ、ポスト、サブスクライブ解除
Oracle Tuxedoアプリケーション管理者は、クライアント・プロセスとサーバー・プロセスのかわりに、EVENT_MIB(5)T_EVENT_COMMANDクラスを呼び出して、サブスクリプション・リクエストを入力できます。プログラムでtpsubscribe(3c)関数を呼び出して、イベントをサブスクライブすることもできます。
図6-1に、クライアントとサーバーがイベント・ブローカを使用して、イベントのサブスクライブ、ポスト、サブスクライブ解除を実行するプロセスを示します。
図6-1 イベントのサブスクライブ
eventexprおよびフィルタを使用したイベント・カテゴリの識別
クライアントまたはサーバーがイベントをサブスクライブするには、tpsubscribe(3c)を呼び出します。tpsubscribe()の引数はeventexpr (必須)だけです。eventexprの値はワイルドカード文字列で、ユーザーに通知する必要があるイベント名を識別します。ワイルドカード文字列の詳細は、『Oracle Tuxedo ATMI C関数リファレンス』tpsubscribe(3c)のリファレンス・ページを参照してください<Default ?Font>
たとえば、UNIXシステム・プラットフォーム上のユーザーに、ネットワーキング・カテゴリに関するすべてのイベントを通知する必要があるとします。その場合、eventexprに次の値を指定します。
\.SysNetwork.*
ピリオド(.)の前のバックスラッシュは、ピリオドがリテラルであることを示します。(前にバックスラッシュがない場合、ピリオド(.)は行端文字以外の任意の文字と一致します。) \.SysNetwork.*の最後にある組合せ.*は、行端文字以外の0個以上の任意の文字と一致します。
また、クライアントまたはサーバーがイベント・データをフィルタするには、tpsubscribe()の呼出し時にfilter引数(オプション)を指定します。filterの値は、ブール値のフィルタ・ルールを含む文字列です。イベント・ブローカがイベントをポストする場合、このルールが正常に評価されることが必要です。
たとえば、ユーザーに重大度レベルがERRORであるシステム・イベントのみを通知する必要があるとします。その場合、filterに次の値を指定します。
”TA_EVENT_SEVERITY=’ERROR’”
イベント名がポストされ、それがeventexprに合致すると、イベント・ブローカはeventexprに対応付けられているフィルタ・ルールでポストされたデータをテストします。データがフィルタ・ルールに違反していない場合、またはイベントに対するフィルタ・ルールが存在しない場合、サブスクライバはイベント通知およびイベントと共にポストされたすべてのデータを受け取ります。
イベント・ブローカへのアクセス
アプリケーションからイベント・ブローカにアクセスするには、ATMIまたはEVENT_MIB(5)を使用します。表6-1に、この2つの方法を示します。
 
イベント・ブローカに通知するか、またはイベントとそれに伴うデータをポストします。イベント名はeventname引数とdata引数で指定され、NULL以外の場合はデータを指します。ポストされたイベントとそのデータは、Oracle Tuxedoのイベント・ブローカによって、eventnameに対して正常に評価されるサブスクリプション、およびdataに対して正常に評価されるフィルタ・ルール(オプション)が設定されたすべてのサブスクライバにディスパッチされます。
eventexprで指定されたイベントまたはイベントのセットをサブスクライブします。サブスクリプションはOracle Tuxedoのイベント・ブローカによって保持され、tppost()を介してイベントがポストされたときにサブスクライバに通知するために使用されます。各サブスクリプションには、クライアントへの通知、サービスの呼び出し、安定したストレージ・キューへの登録、コマンドの実行、ユーザー・ログへの記録のいずれかの方法が指定されています。通知方法は、サブスクライバのプロセス・タイプ(つまり、プロセスがクライアントであるか、サーバーであるか)、およびtpsubscribe()に渡される引数によって決定されます。
Oracle Tuxedoのイベント・ブローカのアクティブ・サブスクリプションのリストから、イベント・サブスクリプションまたはイベント・サブスクリプションのセットを削除します。subscriptionは、tpsubscribe()で返されるイベント・サブスクリプション・ハンドルです。subscriptionをワイルドカード値の-1に設定すると、呼出し側プロセスが以前に行ったすべての非永続的なサブスクリプションがtpunsubscribeによって取り消されます。非永続的なサブスクリプションとは、tpsubscribe()ctl->flagsパラメータにTPEVPERSISTビットが設定されずに行われたサブスクリプションです。持続タイプのサブスクリプションは、tpsubscribe()から返されたハンドルを使用することによってのみ削除できます。
EVENT_MIBは、サブスクリプション情報とフィルタリング・ルールを格納する管理情報ベース(MIB)です。EVENT_MIBを使用しても、Oracle Tuxedoのイベント・ブローカに新しいイベントをアプリケーションで定義することはできません。ただし、イベント・ブローカをカスタマイズして、イベントを追跡し、アプリケーションに要求されるイベントの発生をサブスクライバに通知することができます。
EVENT_MIBを使用して、イベントのサブスクライブまたはサブスクリプションの変更や解除を実行できます。
注意:
tppost(3c)tpsubscribe(3c)およびtpunsubscribe(3c)はC関数です。これらの関数に相当するルーチン(TPPOST(3cbl)TPSUBSCRIBE(3cbl)およびTPUNSUBSCRIBE(3cbl))がCOBOLプログラマ用に提供されています。詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』<Default ?Font>および『Oracle Tuxedo ATMI COBOL関数リファレンス』<Default ?Font>を参照してください。
ドメイン全体のイベントのサブスクライブ、ポストおよびサブスクライブ解除
概要
クロス・ドメイン環境でブローカ・イベントのサブスクライブ、ポストおよびサブクスライブ解除を行うための機能がTuxedoに追加されています。
この機能を有効にするには、静的イベント入出力情報を管理するために、DM_EVT_INおよびDM_EVT_OUTという2つの新しいセクションがDMCONFIGに追加されています。
DM_EVT_INおよびDM_EVT_OUTの詳細は、『Tuxedoリファレンス・ガイド』DMCONFIG(5)に関する項を参照してください。
注意:
UBBCONFIGでは、GWTサーバーの前にEvtBrokerサーバーを構成する必要があります。これは、GWTが起動時にEvtBrokerへの構成済イベントをサブスクライブするためです。
DMCONFIGにおける構成
ドメインを横断するブローカ・イベントの処理方法
次の図6-2に、クロス・ドメイン環境におけるブローカ・イベントのサブスクライブ、ポストおよびサブクスライブ解除の一般的な処理フローを示します。
図6-2 クロス・ドメイン・イベントの全体フロー
DMCONFIGの構成方法 - ケース・スタディ
この事例では、DMCONFIGがどのように構成されるかを詳しく説明します。
図6-2に示すように、2つのクライアント(クライアントAおよびクライアントB)が2つのドメイン(ドメインAおよびドメインB)に設置され、各ドメインにはSHMモードのマシンが1台ずつ(マシンAおよびマシンB)含まれます。
マシンAについて、dmloadcfを使用して、次に示すようにDMCONFIGの追加構成を含む新しいBDMCONFIGを作成し、次にtmboot Tuxedoを使用します。
*DM_EVT_IN
MACHINEB_EVT
LACCESSPOINT=DOMAINA
*DM_EVT_OUT
MACHINEA_EVT
LACCESSPOINT= DOMAINA
RACCESSPOINT= DOMAINB
マシンBについて、dmloadcfを使用して、次に示すようにDMCONFIGの追加構成を含む新しいBDMCONFIGを作成し、次にtmboot Tuxedoを使用します。
*DM_EVT_IN
MACHINEA_EVT
LACCESSPOINT=DOMAINB
*DM_EVT_OUT
MACHINEB_EVT
LACCESSPOINT= DOMAINB
RACCESSPOINT= DOMAINA
上記のとおりに構成した後、2つのクライアントごとに次に示す2段階のテストを実行します。
1.
クライアントBはマシンBでtpsubscribe (MACHINEA_EVT)を発行します。
2.
クライアントAはマシンAでtppost (MACHINEA_EVT)を発行します。
結果: DMCONFIGが正しく構成されていれば、クライアントBはイベントMACHINEA_EVTを受信します。
クロス・ドメイン環境では、すべてのイベントを明示的にインポートまたはエクスポートする必要があり、不明なドメインに対するリクエストは受け付けられません。GWTサーバーは、正しく構成されると、Tuxedoの起動時にすべての構成済イベントをローカル・イベント・ブローカに自動的にサブスクライブします。リモート・イベント・メッセージを受信すると、ローカルGWTはそのリクエストをイベント・ブローカに転送します。一方、ローカル・イベントがポストされると、イベント・ブローカはそのイベントをローカルGWT (そのイベントをサブスクライブ済)に転送します。その後、ローカルGWTはそのイベントを構成済リモート・ドメインのGWTに転送します。
イベント構成の動的変更
ユーザーが前述のとおりに静的構成を設定できるようになる以外にも、Tuxedoでは、システムを停止せずに必要に応じてイベント構成を動的に変更するための2種類の管理方法(dmadminコマンドおよびMIB操作)を使用できます。
dmadminコマンドでは、イベント構成の変更を動的にサポートするサブコマンド(advertiseeventおよびunadvertiseevent)ならびに2つのセクション(EVENTS_INおよびEVENTS_OUT)が追加されます。関連クラスがMIB操作に追加されます。
詳細は、『Tuxedoコマンド・リファレンス』dmadmin(1)に関する項および『Tuxedoリファレンス・ガイド』DM_MIB(5)に関する項を参照してください。
相互運用性
クロス・ドメイン・イベント・ブローカ機能がサポートされるのは、GWTおよびEvtBrokerの両方がOracle Tuxedo 12cリリース1 (12.1.1)以上で実行されている場合のみです。
通知方法の選択
イベント・ブローカでは、図6-3に示すように、各種のイベント通知方法がサポートされています。
図6-3 イベント・ブローカでサポートされている通知方法
どの通知方法を選択しても、その実装方法は同じです。tpsubscribe()への呼出しで、TPEVCTL型の構造体を参照する引数を指定します。
引数の値がNULLの場合、イベント・ブローカは非請求メッセージをサブスクライバに送信します。これらの2つの方法、つまり通知をサービスに送信する方法と、安定したストレージ・キューに送信する方法をクライアントが直接リクエストすることはできません。クライアントは、かわりにサブスクライブするサービス・ルーチンを呼び出す必要があります。
各サブスクリプションに対して、次の通知方法を選択できます。イベント・ブローカでは次のことが可能です。
クライアントへの通知 - イベント・ブローカは、クライアントへの通知が必要なイベントを追跡します。該当するイベントが発生すると、非請求通知をクライアントに送信します。匿名でポストされるイベントもあります。ほかのクライアントがサブスクライブしているかどうかにかかわらず、クライアントはアプリケーションに参加し、イベント・ブローカにイベントをポストできます。イベント・ブローカは、これらのイベントをサブスクリプションのデータベースと照合し、該当するクライアントに非請求通知を送信します。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_CLIENTクラスの定義に関する項を参照してください<Default ?Font>。)
サービスの呼出し - サブスクライバがイベント通知をサービス呼出しに渡す必要がある場合、ctlパラメータが有効なTPEVCTL構造体を指していることが必要です。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_SERVICEクラスの定義に関する項を参照してください<Default ?Font>。)
安定したストレージ・キューへのメッセージの登録 - 安定したストレージ・キューへのサブスクリプションでは、eventexprおよびfilterの値の他に、キュー・スペース、キュー名、相関識別子が指定されています。これは、合致を検出する場合に使用されます。 相関識別子は、同じイベント記述とフィルタ・ルールが定義され、格納先が同じキューである複数のサブスクリプションを区別するために使用されます。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_QUEUEクラスの定義に関する項を参照してください<Default ?Font>。)
コマンドの実行 - EVENT_MIBT_EVENT_COMMANDクラスを使用して、サブスクライバは実行可能プロセスを呼び出すことができます。合致するデータが検出されると、そのデータは要求されたオプションと、実行可能プロセスの名前として使用されます。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_COMMANDクラスの定義に関する項を参照してください<Default ?Font>。)
ユーザー・ログ(ULOG)へのメッセージの記録 - EVENT_MIBT_EVENT_USERLOGクラスを使用して、サブスクライバはシステムUSERLOGメッセージを書き込むことができます。イベントが検出されて合致すると、これらのイベントはUSERLOGに書き込まれます。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_USERLOGクラスの定義に関する項を参照してください<Default ?Font>。)
イベントのサブスクリプション解除
クライアントがtpterm(3c)を呼び出してアプリケーションを終了すると、サブスクリプションが永続として指定されていないかぎり、すべてのサブスクリプションは解除されます。(永続として指定されている場合、クライアントがtpterm()を実行した後でも、サブスクリプションは引き続きポストを受け取ります。)クライアントが後でアプリケーションに再度参加し、これらのサブスクリプションを新しくする場合、再度サブスクライブする必要があります。
適切な動作のクライアントは、tpterm()を呼び出す前にサブスクライブを解除します。その場合、アプリケーションを終了する前に、tpunsubscribe(3c)呼出しを発行します。
トランザクションでのイベント・ブローカの使用
トランザクションでイベント・ブローカを使用する場合は、次の内容に注意してください。
サブスクリプションがトランザクションの一部であることを指定するには、tpsubscribe(3c)TPEVTRANフラグを使用します。サブスクリプションがトランザクションに関与して行われた場合、イベントに応答して行われる処理は、呼出し側のトランザクションの一部として行われます。
注意:
イベント・ブローカでのトランザクションのしくみ
ポスト元とサブスクライバの両方がトランザクションをリンクすることに合意すると、ボーティング・フォームが作成されます。ポスト元では、なんらかの条件が合致し、メッセージがトランザクションの影響を受けるというアサーションを作成します。(つまり、元のプロセスを離れたメッセージは、トランザクションと関連付けられているとみなされます。)そのトランザクションはイベント・ブローカに渡されます。
サービスの呼出しやサブスクライバに対してメッセージをキューに格納することなど、イベント・ブローカの処理も同じトランザクションの一部です。実行中のサービス・ルーチンでエラーが発生すると、トランザクションが失敗し、トランザクションに関与する他のすべてのサブスクリプション、ポストされた元のトランザクションなど、他のサービスを呼び出していたり、他のデータベース処理を実行していたすべての処理がロールバックされます。ポスト元は(ポスト元がこの処理を実行するという)アサーションの作成、データの提供、そのデータのトランザクションへのリンクを実行します。
多数の無名サブスクライバ、つまりポスト元が認識していないサブスクライバはトランザクションで呼び出されます。いずれかのサブスクライバがその処理をポスト元の処理とリンクできなかった場合、トランザクション全体がロールバックされます。トランザクションに関与するすべてのサブスクライバは、その処理をポスト元の処理とリンクする必要があり、リンクしないと、すべての処理がロールバックされます。ポスト元がそのトランザクションでポストすることを許可していない場合、イベント・ブローカによって別のトランザクションが開始され、トランザクションに関与するすべてのサブスクリプションがそのトランザクションに集められます。これらのトランザクションのいずれかが失敗すると、トランザクションに関与するサブスクリプションのかわりに実行されたすべての処理がロールバックされますが、ポスト元のトランザクションはロールバックされません。このプロセスは、TPEVTRANフラグによって制御されます。
トランザクションでのイベント・ブローカの使用例
株式取引が、売買アプリケーションで完了しようとしています。取引トランザクションで、各種のサービスによって数多くのデータベース・レコードが更新されました。ポストにより、取引が行われようとしていることが通知されます。
このような取引の監査を記録するアプリケーションは、このイベントをサブスクライブしています。つまり、このアプリケーションでは、この種類のイベントがポストされたら、指定されたキューに必ずレコードを格納するように要求しています。サービス・ルーチンは取引を実行できるかどうかを決定し、この種類のイベントをサブスクライブします。また、そのような取引が提案された場合は必ず通知されます。
すべての処理が問題なく行われると、取引が完了し、監査が記録されます。
キューでエラーが発生し、監査が記録されなかった場合、株式取引全体がロールバックされます。同様に、サービス・ルーチンが失敗すると、トランザクションがロールバックされます。すべてが正常な場合は、取引が実行されてトランザクションがコミットされます。
関連項目
『Oracle Tuxedo ATMIアプリケーション開発のためのチュートリアル』のイベントベースの通信の使用に関する項<Default ?Font>
『Oracle Tuxedo ATMI C関数リファレンス』のtppost(3c)tpsubscribe(3c)およびtpunsubscribe(3c)に関する項<Default ?Font>
『Oracle Tuxedo ATMI COBOL関数リファレンス』のTPPOST(3cbl)TPSUBSCRIBE(3cbl)およびTPUNSUBSCRIBE(3cbl)に関する項<Default ?Font>
『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)EVENTS(5)TMSYSEVT(5)およびTMUSREVT(5)に関する項<Default ?Font>

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved