![]() |
![]() |
![]() |
![]() |
![]() |
•
注意: イベント・ブローカのしくみを理解するには、bankapp (Oracle Tuxedoシステムに同梱のサンプル・アプリケーション)を実行します。bankappのコピー方法とデモとしての実行方法は、『Oracle Tuxedo ATMIアプリケーション開発のためのチュートリアル』のbankapp (完全なC言語アプリケーション)のチュートリアルに関する項を参照してください<Default ?Font>。クライアントがイベント・ブローカにアクセスするには、Oracle Tuxedoシステムで提供されている2つのサーバーのいずれかを使用します。つまり、アプリケーション・イベントを処理するTMUSREVT(5)、またはシステム・イベントを処理するTMSYSEVT(5)を使用します。このサーバーは両方ともイベントを処理し、サブスクライバへの通知をトリガーします。ご使用のシステムでOracle Tuxedoのイベント・ブローカを設定するには、次の例に示すように、この2つのサーバーのいずれかまたは両方をUBBCONFIGファイルのSERVERSセクションで設定します。どちらのサーバーもネットワーク上の任意の場所に配置できます。ただし、MASTERサイトには主要サーバーを割り当てることをお薦めします。-p poll_secondsOracle Tuxedoアプリケーション管理者は、クライアント・プロセスとサーバー・プロセスのかわりに、EVENT_MIB(5)のT_EVENT_COMMANDクラスを呼び出して、サブスクリプション・リクエストを入力できます。プログラムでtpsubscribe(3c)関数を呼び出して、イベントをサブスクライブすることもできます。図6-1に、クライアントとサーバーがイベント・ブローカを使用して、イベントのサブスクライブ、ポスト、サブスクライブ解除を実行するプロセスを示します。図6-1 イベントのサブスクライブクライアントまたはサーバーがイベントをサブスクライブするには、tpsubscribe(3c)を呼び出します。tpsubscribe()の引数はeventexpr (必須)だけです。eventexprの値はワイルドカード文字列で、ユーザーに通知する必要があるイベント名を識別します。ワイルドカード文字列の詳細は、『Oracle Tuxedo ATMI C関数リファレンス』のtpsubscribe(3c)のリファレンス・ページを参照してください<Default ?Font>。たとえば、UNIXシステム・プラットフォーム上のユーザーに、ネットワーキング・カテゴリに関するすべてのイベントを通知する必要があるとします。その場合、eventexprに次の値を指定します。ピリオド(.)の前のバックスラッシュは、ピリオドがリテラルであることを示します。(前にバックスラッシュがない場合、ピリオド(.)は行端文字以外の任意の文字と一致します。) \.SysNetwork.*の最後にある組合せ.*は、行端文字以外の0個以上の任意の文字と一致します。また、クライアントまたはサーバーがイベント・データをフィルタするには、tpsubscribe()の呼出し時にfilter引数(オプション)を指定します。filterの値は、ブール値のフィルタ・ルールを含む文字列です。イベント・ブローカがイベントをポストする場合、このルールが正常に評価されることが必要です。イベント名がポストされ、それがeventexprに合致すると、イベント・ブローカはeventexprに対応付けられているフィルタ・ルールでポストされたデータをテストします。データがフィルタ・ルールに違反していない場合、またはイベントに対するフィルタ・ルールが存在しない場合、サブスクライバはイベント通知およびイベントと共にポストされたすべてのデータを受け取ります。
表6-1 イベント・ブローカへのアクセス イベント・ブローカに通知するか、またはイベントとそれに伴うデータをポストします。イベント名はeventname引数とdata引数で指定され、NULL以外の場合はデータを指します。ポストされたイベントとそのデータは、Oracle Tuxedoのイベント・ブローカによって、eventnameに対して正常に評価されるサブスクリプション、およびdataに対して正常に評価されるフィルタ・ルール(オプション)が設定されたすべてのサブスクライバにディスパッチされます。 eventexprで指定されたイベントまたはイベントのセットをサブスクライブします。サブスクリプションはOracle Tuxedoのイベント・ブローカによって保持され、tppost()を介してイベントがポストされたときにサブスクライバに通知するために使用されます。各サブスクリプションには、クライアントへの通知、サービスの呼び出し、安定したストレージ・キューへの登録、コマンドの実行、ユーザー・ログへの記録のいずれかの方法が指定されています。通知方法は、サブスクライバのプロセス・タイプ(つまり、プロセスがクライアントであるか、サーバーであるか)、およびtpsubscribe()に渡される引数によって決定されます。 Oracle Tuxedoのイベント・ブローカのアクティブ・サブスクリプションのリストから、イベント・サブスクリプションまたはイベント・サブスクリプションのセットを削除します。subscriptionは、tpsubscribe()で返されるイベント・サブスクリプション・ハンドルです。subscriptionをワイルドカード値の-1に設定すると、呼出し側プロセスが以前に行ったすべての非永続的なサブスクリプションがtpunsubscribeによって取り消されます。非永続的なサブスクリプションとは、tpsubscribe()のctl->flagsパラメータにTPEVPERSISTビットが設定されずに行われたサブスクリプションです。持続タイプのサブスクリプションは、tpsubscribe()から返されたハンドルを使用することによってのみ削除できます。
注意: 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>を参照してください。次の図6-2に、クロス・ドメイン環境におけるブローカ・イベントのサブスクライブ、ポストおよびサブクスライブ解除の一般的な処理フローを示します。図6-2 クロス・ドメイン・イベントの全体フローこの事例では、DMCONFIGがどのように構成されるかを詳しく説明します。図6-2に示すように、2つのクライアント(クライアントAおよびクライアントB)が2つのドメイン(ドメインAおよびドメインB)に設置され、各ドメインにはSHMモードのマシンが1台ずつ(マシンAおよびマシンB)含まれます。
1.
2. クロス・ドメイン環境では、すべてのイベントを明示的にインポートまたはエクスポートする必要があり、不明なドメインに対するリクエストは受け付けられません。GWTサーバーは、正しく構成されると、Tuxedoの起動時にすべての構成済イベントをローカル・イベント・ブローカに自動的にサブスクライブします。リモート・イベント・メッセージを受信すると、ローカルGWTはそのリクエストをイベント・ブローカに転送します。一方、ローカル・イベントがポストされると、イベント・ブローカはそのイベントをローカルGWT (そのイベントをサブスクライブ済)に転送します。その後、ローカルGWTはそのイベントを構成済リモート・ドメインのGWTに転送します。ユーザーが前述のとおりに静的構成を設定できるようになる以外にも、Tuxedoでは、システムを停止せずに必要に応じてイベント構成を動的に変更するための2種類の管理方法(dmadminコマンドおよびMIB操作)を使用できます。dmadminコマンドでは、イベント構成の変更を動的にサポートするサブコマンド(advertiseeventおよびunadvertiseevent)ならびに2つのセクション(EVENTS_INおよびEVENTS_OUT)が追加されます。関連クラスがMIB操作に追加されます。イベント・ブローカでは、図6-3に示すように、各種のイベント通知方法がサポートされています。
• クライアントへの通知 - イベント・ブローカは、クライアントへの通知が必要なイベントを追跡します。該当するイベントが発生すると、非請求通知をクライアントに送信します。匿名でポストされるイベントもあります。ほかのクライアントがサブスクライブしているかどうかにかかわらず、クライアントはアプリケーションに参加し、イベント・ブローカにイベントをポストできます。イベント・ブローカは、これらのイベントをサブスクリプションのデータベースと照合し、該当するクライアントに非請求通知を送信します。(『ファイル形式、データ記述、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_MIBのT_EVENT_COMMANDクラスを使用して、サブスクライバは実行可能プロセスを呼び出すことができます。合致するデータが検出されると、そのデータは要求されたオプションと、実行可能プロセスの名前として使用されます。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_COMMANDクラスの定義に関する項を参照してください<Default ?Font>。)
• ユーザー・ログ(ULOG)へのメッセージの記録 - EVENT_MIBのT_EVENT_USERLOGクラスを使用して、サブスクライバはシステムUSERLOGメッセージを書き込むことができます。イベントが検出されて合致すると、これらのイベントはUSERLOGに書き込まれます。(『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』のEVENT_MIB(5)エントリのT_EVENT_USERLOGクラスの定義に関する項を参照してください<Default ?Font>。)クライアントがtpterm(3c)を呼び出してアプリケーションを終了すると、サブスクリプションが永続として指定されていないかぎり、すべてのサブスクリプションは解除されます。(永続として指定されている場合、クライアントがtpterm()を実行した後でも、サブスクリプションは引き続きポストを受け取ります。)クライアントが後でアプリケーションに再度参加し、これらのサブスクリプションを新しくする場合、再度サブスクライブする必要があります。
•
• サブスクリプションがトランザクションの一部であることを指定するには、tpsubscribe(3c)でTPEVTRANフラグを使用します。サブスクリプションがトランザクションに関与して行われた場合、イベントに応答して行われる処理は、呼出し側のトランザクションの一部として行われます。
•
• 『Oracle Tuxedo ATMIの紹介』のイベント・ブローカを使用したイベントの管理に関する項<Default ?Font>
• 『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>