注意:
|
Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、サポートされなくなりました。すべてのOracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト・リファレンスとコード・サンプルは、サード・パーティのJava ORBライブラリを実装または実行する際の参考や、プログラマの参照用としてのみ使用してください。
|
サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートまたはドキュメントは提供していません。
Oracle Tuxedo CORBA通知サービスは、Oracle Tuxedo EventBrokerおよびキューイング・システム上の階層に配置されます。つまり、CORBA通知サービスを管理する場合、このような他のOracle Tuxedoシステムも管理する必要があります。通知サービスを管理するには、Oracle Tuxedoユーティリティの
tmadmin、
qmadminおよび
ntsadminを使用します。
通知サービスの管理は、構成と管理の2つの関連するタスクで構成されます。これらの領域は個別に説明しますが、実際は相互に関連しています。したがって、構成について十分に理解するには、管理についても理解する必要があります(その逆も同じです)。
イベント通知サービス・アプリケーションを実行するには、次の構成要件を満たす必要があります。
•
|
データのフィルタリングまたはOracle Tuxedo ATMI相互運用性を使用する場合は、フィルタまたは相互運用の対象となるフィールドを記述するOracle Tuxedo ATMI FMLフィールド定義ファイルを作成します。
|
•
|
共同クライアント/サーバーを使用している場合は、コールバック・オブジェクト参照のホストとポート番号を設定します。
|
•
|
システムの構成ファイル( UBBCONFIG)と TUXCONFIGファイルを作成します。
|
データのフィルタリングまたはOracle Tuxedo ATMI相互運用性がサブスクライバ・アプリケーションで使用されている場合は、次の手順を実行して、サブスクリプションでデータのフィルタリングを使用する必要があります。
1.
|
フィルタ処理の対象となるフィールドを記述するOracle Tuxedo ATMI FMLフィールド定義ファイルを作成します( リスト7-2を参照)。
|
2.
|
UBBCONFIGファイルで、FMLフィールド表定義ファイルの場所を指定し、アプリケーションの起動時にフィールド定義ファイルの場所が通知サービス・サーバーに渡されるようにします( リスト7-3を参照)。
|
リスト7-1の
太字のコードは、イベント・ポスト元アプリケーションでデータのフィルタリングがどのように実装されるかを示します。イベントを受信するのは、名前/値のペアの
billingと
patient_accountが含まれるサブスクリプションのみです。
リスト7-1
Oracleシンプル・イベントAPIを使用したデータのフィルタリングのサンプル(C++)
CosNotification::StructuredEvent notif;
notif.header.fixed_header.event_type.domain_name =
CORBA::string_dup("HEALTHCARE");
notif.header.fixed_header.event_type.type_name =
CORBA::string_dup("HMO");
// Specify an additional filter, based upon name and value
// for this event.
notif.filterable_data.length(2);
notif.filterable_data[0].name = CORBA::string_dup("billing");
notif.filterable_data[0].value <<= CORBA::Long(1999);
notif.filterable_data[1].name =
CORBA::string_dup("patient_account");
notif.filterable_data[1].value <<= CORBA::Long(2345);
// Push the structured event onto the channel.
testChannel->push_structured_event(notif);
リスト7-2は、データのフィルタリングを使用するのに必要なFMLフィールド表定義ファイルを示しています。
リスト7-2
データのフィルタリングのFMLフィールド表ファイル
*base 2000
#Field Name Field # Field Type Flags Comments
#----------- ------- ---------- ------ --------
billing 1 long - -
patient_account 2 long - -
リスト7-3は、環境変数ファイル(
envfile)の内容を示しています。
envfileには、FMLフィールド定義ファイルの場所が含まれます。
注意:
|
環境変数ファイルにはどのような名前を付けることもできますが、使用する名前は、ENVFILE構成オプションの n ( UBBCONFIGファイルの SERVERSセクション)で指定した名前と一致している必要があります。
|
リスト7-3
データのフィルタリングのenvfileの指定(Microsoft Windows)
FLDTBLDIR32=D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_cxx\common
FIELDTBLS32=news_flds
リスト7-4の
太字のテキストは、Advancedサンプルの
UBBCONFIGファイルでFMLフィールド表ファイルの場所がどのように指定されるかを示しています。
リスト7-4
UBBCONFIGファイルでのFMLフィールド定義ファイルの指定
*SERVERS
TMSYSEVT
SRVGRP = NTS_GRP
SRVID = 1
TMUSREVT
SRVGRP = NTS_GRP>>$@
SRVID = 2
ENVFILE = "D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_CXX\envfile"
TMNTS
SRVGRP = NTS_GRP
SRVID = 3
ENVFILE = "D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_CXX\envfile"
CLOPT = "-A -- -s TMNTSQS"
TMNTSFWD_T
SRVGRP = NTS_GRP
SRVID = 4
ENVFILE = "D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_CXX\envfile"
TMNTSFWD_P
SRVGRP = NTS_GRP
SRVID = 5
ENVFILE = "D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_CXX\envfile"
コールバック・オブジェクトのオブジェクト参照のホストおよびポート要件は、次のとおりです。
•
|
一時的なコールバック・オブジェクトでは、どのポートでも問題なく、ORBによって動的に取得できます。
|
•
|
永続コールバック・オブジェクトの場合、コールバック・オブジェクトのオブジェクト参照が作成されたのと同じポートでコールバック・オブジェクトへのリクエストを受け付けるように、ORBを設定する必要があります。
|
ポート番号は、動的な範囲ではなくポート番号のユーザーの範囲から指定できます。ユーザー範囲からポート番号を割り当てることで、共同クライアント/サーバー・アプリケーションが使用するポートの競合を防ぐことができます。
ホストとポートの設定に使用する方法は、使用するプログラミング言語によって異なります。
•
|
C++サブスクライバ・アプリケーションでのホストとポートの設定
|
C++サブスクライバ・アプリケーションで、共同クライアント/サーバー・アプリケーションで使用する特定のポートを指定するには、共同クライアント/サーバー・アプリケーションのプロセスを開始するコマンド行で、次のように指定します。
-ORBport nnnn -IRBid BEA_IIOP
ここで、
nnnnは共同クライアント/サーバー・アプリケーションのコールバック・オブジェクトの呼出しを生成およびリスニングする際にORBによって使用されるポートの番号です。
このコマンドは、共同クライアント/サーバー・アプリケーションのコールバック・オブジェクトのオブジェクト参照を永続的にする場合や、共同クライアント/サーバー・アプリケーションを停止して再起動する場合に使用します。このコマンドを使用しない場合、ORBではランダムなポートが使用されます。共同クライアント/サーバー・アプリケーションを停止して再起動したときにランダムなポートが使用されると、共同クライアント/サーバー・アプリケーションの永続的なコールバック・オブジェクトの呼出しが失敗します。
ポート番号は、
CORBA::orb_initメンバー関数の
argv引数への入力の一部です。
argv引数が渡されると、ORBはその情報を読み取り、そのプロセス中に作成されるすべてのオブジェクト参照用のポートを確立します。
永続的なサブスクリプションを使用する場合は、Oracle Tuxedoキューイング・システムを構成して起動する必要があります。キューイング・システムにはトランザクション・ログが必要です。
リスト7-5は、
tmadminユーティリティを使用してトランザクション・ログを作成する方法を示しています。
リスト7-5
トランザクション・ログの作成(createtlog)(Microsoft Windows)
>tmadmin
>crdl -b 100 -z D:\tuxdir\EVENTS_Samples\ADVANCED_Simple_CXX\TLOG
>crlog -m SITE1
>quit
>
永続的なイベント使用する場合は、Oracle Tuxedoキューイング・システムを構成して起動する必要があります。作成する必要のあるイベント・キューの数は次の2つです。
これは、永続的なサブスクリプション用のイベント転送キューです。イベントはまずこのキューに移動し、次に、一致する永続的なサブスクリプションに転送されます。最初の試行でイベントが配信できない場合、イベントはこのキューに保持され、配信が繰り返し試行されます。イベントを正常に配信できないうちに、設定可能な再試行回数の上限に達すると、イベントはエラー・キューに移動します。
•
|
再試行回数の上限(イベントがエラー・キューに移動するまでの再試行の回数)
|
•
|
キューがどのくらい一杯になったら管理上の介入が必要になるのか
|
•
|
一杯になった後にキューのイベント数がどのくらい少なくなったら管理上の介入が必要になるのか
|
これはエラー・キューです。このキューは、サブスクリプションに配信できない
TMNTSFWD_Pキューからイベントを受信します。このキューには、
TMNTSFWD_P転送キューと同じ構成パラメータが必要ですが、これはエラー・キューであり、管理上の介入で削除されるのはエラーのみのため、再試行回数の上限と再試行の時間間隔のパラメータは意味を持ちません。
これらのキューを構成するには、次の手順を実行します。
1.
|
キュー・スペースのデバイスをディスク上に作成します。
|
上記の手順については、以下の項を参照してください。
一時的および永続的なサブスクリプションのスペース・パラメータの値の割出し
システムのパフォーマンスが最大になるように調整するには、次のパラメータの最適な値を割り出す必要があります。
•
|
一時的な転送サーバー( TMNTSFWD_T)と永続的な転送サーバー( TMNTSFWD_P)の数
|
•
|
IPCキュー・スペース(一時的なサブスクリプションで使用)
|
•
|
/Qキューのサイズ(永続的なサブスクリプションで使用)
|
一時的なサブスクリプションのIPCキュー・スペース
一時的なサブスクリプションのスペース・パラメータを割り出すには、次の手順に従います。
1.
|
一時的なサブスクリプションのパイプラインを通る可能性のあるイベントの数、すなわち、特定の時点で配信されている可能性のあるプロセスのイベントの数を割り出します。これは、イベントの数に、サブスクライバがイベントを受信する回数を乗算した値に等しくなります。
|
2.
|
イベントのサイズを割り出します。説明の便宜上、比較的小さく(約300バイト以下)想定します。
|
3.
|
起動する一時的な転送サーバーの数を割り出します(たいていは1つか2つで、マシン上のプロセッサごとに1つから始めるのが理想的です)。
|
4.
|
一時的なイベントを保持するのに必要なIPCキュー・スペースの数を割り出します。必要なスペースの量は、1000バイトをパイプラインで許容できるイベントの数で乗算した値です。この数は、一時的な転送サーバーのIPCキューの数で除算します。MSSQセットを使用すると、1つのIPCキューが一時的な転送サーバーで共有され、使用しない場合は、各転送サーバーで独自のIPCキューが使用されます。
|
たとえば、パイプラインで10のイベントが50のサブスクライバに配信されると仮定し、2つの一時的なサーバーを起動して、IPCキューを共有しない(MSSQセットを使用しない)とすると、IPCキュー・スペースの必要量は次のように計算されます。
10イベント * 50サブスクライバ * 1000バイト/2転送サーバー = 250,000バイト
5.
|
システム・レジストリのエントリを変更し、IPCキュー・サイズをこの数に設定します。この操作はプラットフォームによって異なります。
|
•
|
UNIXシステムの場合は、システムに付属のリファレンス・マニュアルを参照してください。
|
永続的なサブスクリプションの/Qキュー・サイズ・パラメータ
永続的なサブスクリプションのスペース・パラメータを割り出すには、次の手順に従います。
1.
|
永続的なサブスクリプションのパイプラインを通る可能性のあるイベントの数、すなわち、特定の時点で配信されている可能性のあるプロセスのイベントの数を割り出します。これは、イベントの数に、サブスクライバがイベントを受信する回数を乗算した値に等しくなります。
|
2.
|
イベントのサイズを割り出します。説明の便宜上、比較的小さく(約300バイト以下)想定します。
|
3.
|
永続的なイベントを保持するのに必要な/Qキューのサイズを割り出します(保留中のキューとエラー・キューの両方で)。この操作を実行するには、次の手順に従います。
|
a.
|
ディスク・ページのサイズを割り出します。これはプラットフォームによって異なります。たとえば、Microsoft Windowsでは、ディスク・ページは500バイトです。UNIXマシンでは、ディスク・ページのサイズは500 - 4000バイトです。
|
b.
|
1つのイベントを格納するのに必要なディスク・ページの数を割り出します。たとえば、イベントごとに1000バイト必要で、ディスク・ページが500バイトの場合、イベントごとに2つのディスク・ページが必要になります。
|
c.
|
イベントで必要なディスク・ページの数を割り出します。たとえば、500の保留イベントと200のエラー・イベントを許容し、1つのイベントが2つのディスク・ページを占める場合は、1400のディスク・ページが必要になります。
|
d.
|
qspaceで必要なディスク・ページの数を割り出します。これは、イベントに必要なディスク・ページと、qspaceのオーバーヘッド用のページの合計数です。たとえば、イベントで1400のディスク・ページが必要な場合、qspaceでは約1450のディスク・ページが必要です(50ページはqspaceのオーバーヘッド用)。
|
e.
|
qspaceデバイスで必要なディスク・ページの数を割り出します。これは、qspaceに必要なページと、デバイスのオーバーヘッド用のページの合計数です。たとえば、qspaceで1450のディスク・ページが必要な場合、デバイスでは約1500のディスク・ページが必要です(50ページはデバイスのオーバーヘッド用)。
|
4.
|
qmadminを使用して永続的なイベントのqspaceを作成する場合は、最初にデバイスを作成します。サイズは、前述のステップ3eで算出したサイズ(約1500ページ)を使用します。次に、qspaceのサイズを指定します。サイズは、ステップ3dで算出したサイズ(約1450ページ)を使用します。次に、保留キューおよびエラー・キューに保持可能なイベントの数を指定します。次の項では、qspaceの作成および構成方法について説明します。
|
ディスク上にキュー・スペース用のデバイスを作成するには、qmadminコマンド・ユーティリティを使用します。
キュー・スペースを作成する前に、汎用デバイス・リスト(UDL)でそのエントリを作成する必要があります。
リスト7-6は、コマンドの例を示しています。
リスト7-6
ディスク上のキュー・スペースのデバイスの作成(UNIX)
prompt>
qmadmin d:\smith\reg\QUE
qmadmin - Copyright (c) 1996-1999 BEA Systems, Inc.
Portions * Copyright 1986-1997 RSA Data Security, Inc.
All Rights Reserved.
Distributed under license by BEA Systems, Inc.
Oracle Tuxedo is a registered trademark.
QMCONFIG=d:\smith\reg\QUE
>
crdl d:\smith\reg\QUE 0 1100
Created device d:\smith\reg\QUE, offset 0, size 1100
on d:\smith\reg\QUE
ディスク上にデバイスを作成する方法の詳細は、
『ATMI /Qコンポーネントの使用』を参照してください。
キュー・スペースを構成するには、
qmdamin qspacecreateコマンドを使用します。キュー・スペースでは、IPCリソースが使用されるため、キュー・スペースを定義する場合は、共用メモリー・セグメントとセマフォを割り当てることになります。
qspacecreateコマンドを使用する最も簡単な方法は、プロンプトを表示することです。
リスト7-7は、Advancedサンプル・アプリケーション用に構成されたキュー・スペースの例を示しています。
>
qspacecreate
Queue space name:
TMNTSQS
IPC Key for queue space:
52359
Size of queue space in disk pages:
1050
Number of queues in queue space:
2
Number of concurrent transactions in queue space:
10
Number of concurrent processes in queue space:
10
Number of messages in queue space:
500
Error queue name:
TMNTSFWD_E
Initialize extents (y, n [default=n]):
y
Blocking factor [default=16]:
リスト7-7で作成したキュー・スペースでは、次のサイズ設定に注意してください。
Number of messages in queue space:500
このパラメータを500に設定すると、保留キューとエラー・キューで合計500のイベントのスペースが確保されます。
Size of queue space in disk pages:1050
Microsoft Windowsでは各ディスク・ページは500バイトです。各イベントには1000バイトが必要です。また、イベントごとに2つのディスク・ページを許可する必要があります。保留キューとエラー・キューに500のイベントが含まれると推定すると、それらを格納するために1000のディスク・ページを許可する必要があります(500 * 2)。また、qspaceのオーバーヘッドのために50のディスク・ページを許可する必要があり、qspaceのサイズは1050ディスク・ページに設定されます。さらに、デバイスのオーバーヘッドのために50のディスク・ページが必要になるため、デバイス・サイズは1100のディスク・ページになります。これは
crdlコマンドを使用して設定します(
リスト7-6を参照)。
キュー・スペースの作成の詳細は、
『ATMI /Qコンポーネントの使用』を参照してください。
使用する各キューを作成するには、
qmadmin qcreateコマンドを使用する必要があります。キューを作成する前に、
qmadmin qopenコマンドでキュー・スペースを開く必要があります。キュー・スペース名を指定していない場合は、
qopenで名前を入力するように求められます。
リスト7-8は、Advancedサンプル・アプリケーション用に作成される
TMNTSFWD_Pキューおよび
TMNTSFWD_Eキューの作成例を示しています。
>
qopen
Queue space name:
TMNTSQS
>
qcreate
Queue name:
TMNTSFWD_P
Queue order (priority, time, fifo, lifo):
fifo
Out-of-ordering enqueuing (top, msgid, [default=none]):
none
Retries [default=0]:
5
Retry delay in seconds [default=0]:
3
High limit for queue capacity warning (b for bytes used, B for
blocks used, % for percent used, m for messages [default=100%]):
80%
Reset (low) limit for queue capacity warning [default=0%]:
0%
Queue capacity command:
No default queue capacity command
Queue 'TMNTSFWD_P' created
>
qcreate
Queue name:
TMNTSFWD_E
Queue order (priority, time, fifo, lifo):
fifo
Out-of-ordering enqueuing (top, msgid, [default=none]):
none
Retries [default=0]:
2
Retry delay in seconds [default=0]:
30
High limit for queue capacity warning (b for bytes used, B for
blocks used, % for percent used, m for messages [default=100%]):
80%
Reset (low) limit for queue capacity warning [default=0%]:
0%
Queue capacity command:
No default queue capacity command
Q_CAT:1438: INFO: Create queue - error queue TMNTSFWD_E created
Queue 'TMNTSFWD_E' created
キューの作成の詳細は、
『ATMI /Qコンポーネントの使用』を参照してください。
Microsoft WindowsでのIPCパラメータの設定
Microsoft Windowsシステム向けのOracle Tuxedoソフトウェアには、製品と一緒にインストールされるプロセス間通信サブシステムのOracle Tuxedo IPC Helper (TUXIPC)が同梱されています。IPC Helperは、ほとんどのマシンでインストール時の設定で実行されますが、コントロール・パネル・アプレットにある「IPCリソース」ページを使用すると、TUXIPCサブシステムを調整してパフォーマンスを最大限に高めることができます。
IPCコントロール・パネルの「IPCリソース」ページを表示するには、次の手順を実行します。
1.
|
「スタート」→「設定」→「コントロール パネル」をクリックします。 Microsoft Windowsのコントロール パネルが表示されます( 図7-1)。
|
2.
|
Oracle管理のアイコンをクリックします。「Oracle管理」コントロール・パネルが表示されます( 図7-2)。
|
3.
|
「IPCリソース」タブをクリックします。「Oracle管理」コントロール・パネルの「IPCリソース」コントロール・パネル部分が表示されます( 図7-2)。
|
Oracle TuxedoマシンのIPC設定を定義するには、次の手順に従います。
1.
|
「現在のリソースのデフォルト」ボックスで、「デフォルトのIPC設定を使用する」チェック・ボックスをクリックして選択を解除します。
|
3.
|
マシンの名前を入力して、[Enter]を押します。
|
4.
|
設定するIPCリソースの横にあるフィールドをクリックして、必要な値を入力し、「適用」をクリックします。「適用」をクリックすると、変更内容がレジストリ表に保存されます。変更内容を有効にするには、 tuxipc.exeサービスを停止してから再起動します。
|
5.
|
「OK」をクリックしてコントロール・パネルを閉じます。
|
実行中のOracle Tuxedoサーバー・アプリケーションのパフォーマンスは、パフォーマンス・モニターで確認できます。
パフォーマンス・モニターを起動するには、
タスクバーで、「スタート」→「すべてのプログラム」→「管理ツール」→「パフォーマンス・モニター」をクリックします。「パフォーマンス・モニター」画面が表示されます(
図7-3)。
UBBCONFIGファイルとTUXCONFIGファイルの作成
イベントのポスト元アプリケーションとサブスクライバ・アプリケーションがOracle TuxedoドメインのCORBAオブジェクト(この場合は通知サービス)と通信するには、通知サービスで
UBBCONFIGファイルが必要になります。
UBBCONFIGファイルは、通知サービス・アプリケーションの開発の過程で記述する必要があり、そうしないと、アプリケーションをビルドして実行することはできません。
UBBCONFIGファイルを記述したら、
tmloadcfコマンドを使用して
TUXCONFIGファイル(実行時に使用)を作成します。したがって、
TUXCONFIGファイルは通知サービス・アプリケーションの起動前に存在している必要があります。
TUXCONFIGファイルは、バイナリ形式の
UBBCONFIGファイルにすぎません。次の行は、tmloadcfコマンドの使用方法の例です。
UBBCONFIGを記述する前に、通知サービス・アプリケーションの構成要件をリストしておく必要があります。要件をリストするには、サブスクリプションのサポートに必要なサーバーとプロセスを特定します。
表7-1は、各種のサブスクリプションの構成要件を示しています。
表7-1
一時的および永続的なサブスクリプションの構成要件
|
UBBCONFIGファイルに含める必要のあるサーバーとプロセス
|
|
TMUSREVT、 TMNTS、 TMNTSFWD_T
|
|
TMUSREVT、 TMNTS、 TMNTSFWD_P、 TMQUEUE, TMQFORWARD
|
IIOPを使用するイベント・サブスクライバ・アプリケーションを使用している場合は、IIOPハンドラ(ISH)に接続されていないコールバック・オブジェクトを呼び出せるように、アウトバウンドIIOPを有効にするパラメータで、UBBCONFIGファイルのIIOPリスナー(ISL)コマンドを設定する必要があります。ISLコマンドの
-Oオプション(大文字のO)を指定すると、アウトバウンドIIOPが有効になります。パラメータを追加すると、システム管理者は通知サービス・アプリケーションに最適な構成を取得できます。ISLコマンドの詳細は、
『Oracle Tuxedoアプリケーションの設定』を参照してください。
通知サービス・アプリケーションを開発する場合は、
UBBCONFIGファイルの
SERVERSセクションで、次のタイプのサーバーを設定できます。
Oracle Tuxedoシステムが提供するサーバーで、
tppost(3)からのイベント・レポート・メッセージ・バッファを処理し、それらにフィルタを適用して転送するイベント・ブローカとして動作します。(必須)
サブスクリプションおよびイベントのポストのリクエストを処理するOracle Tuxedo通知サービス・サーバー(必須)
一時的なサブスクリプションのサブスクライバに一時的なイベントを転送するOracle Tuxedo通知サービス・サーバー(一時的なサブスクリプションで必須)
永続的なサブスクリプションのあるサブスクライバに永続的なイベントを転送するOracle Tuxedo通知サービス・サーバー。サブスクライバに配信できないイベントはエラー・キューに送信されます。(永続的なサブスクリプションで必須)
イベント・キューを管理するOracle Tuxedoサーバー。(永続的なサブスクリプションで必須)
永続的なサブスクライバに転送できるように、イベントを通知サービス
TMNTSFWD_Pサーバーに転送するOracle Tuxedoサーバー。(永続的なサブスクリプションで必須)
Oracle Tuxedo IIOPサーバー・リスナー/ハンドラ・プロセス。(イベントのポスト元とサブスクライバがリモートの場合、つまりローカル・ドメインの外部にある場合は必須)
リスト7-9に示す
UBBCONFIGファイルは、通知サービスのIntroductoryサンプル・アプリケーションのものです。Introductoryサンプル・アプリケーションでは、一時的なサブスクリプションのみをサポートし、永続的なサブスクリプションやデータのフィルタリングはサポートしません。
リスト7-9
IntroductoryサンプルのUBBCONFIGファイル
# This UBBCONFIG file supports transient subscriptions only; it does
# not persistent subscriptions or data filtering.
*RESOURCES
IPCKEY 52359
DOMAINID events_intro_simple_cxx
MASTER SITE1
MODEL SHM
#---------------------------------------------------------------
*MACHINES
"BEANIE"
LMID = SITE1
APPDIR = "D:\tuxdir\EVENTS~1\INTROD~2"
TUXCONFIG = "D:\tuxdir\EVENTS~1\INTROD~2\tuxconfig"
TUXDIR = "d:\tuxdir"
MAXWSCLIENTS = 10
ULOGPFX = "D:\tuxdir\EVENTS~1\INTROD~2\ULOG"
#----------------------------------------------------------------
# Since we are using transient events, the group need not be
# transactional.
*GROUPS
SYS_GRP
LMID = SITE1
GRPNO = 1
#---------------------------------------------------------------
*SERVERS
DEFAULT:
CLOPT = "-A"
TMSYSEVT
SRVGRP = SYS_GRP
SRVID = 1
TMUSREVT
SRVGRP = SYS_GRP
SRVID = 2
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 3
CLOPT = "-A -- -N -M"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 4
CLOPT = "-A -- -N"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 5
CLOPT = "-A -- -F"
# Start the notification service server.
#
TMNTS
SRVGRP = SYS_GRP
SRVID = 6
# Start the Notification Service transient event forwarder.
#
TMNTSFWD_T
SRVGRP = SYS_GRP
SRVID = 7
# Start the ISL with -O since we are using callbacks to clients.
ISL
SRVGRP = SYS_GRP
SRVID = 8
CLOPT = "-A -- -O -n //BEANIE:2359"
#---------------------------------------------------------------
*SERVICES
リスト7-10に示すサンプル・コードは、通知サービスのAdvancedサンプル・アプリケーションのものです。Advancedサンプル・アプリケーションでは、一時的および永続的なサブスクリプション、およびデータのフィルタリングをサポートします。
リスト7-10
AdvancedサンプルのUBBCONFIGファイル
# This UBBCONFIG file supports transient and persistent
# subscriptions and data filtering.
*RESOURCES
IPCKEY 52363
DOMAINID events_advanced_simple_cxx
MASTER SITE1
MODEL SHM
#---------------------------------------------------------------
*MACHINES
"BEANIE"
LMID = SITE1
APPDIR = "D:\tuxdir\EVENTS~1\ADVANC~1"
TUXCONFIG = "D:\tuxdir\EVENTS~1\ADVANC~1\tuxconfig"
TUXDIR = "d:\tuxdir"
MAXWSCLIENTS = 10
ULOGPFX = "D:\tuxdir\EVENTS~1\ADVANC~1\ULOG"
#
# Since we are using persistent events, we need a transaction log.
#
TLOGDEVICE = "D:\tuxdir\EVENTS~1\ADVANC~1\TLOG"
TLOGSIZE = 10
#---------------------------------------------------------------
*GROUPS
SYS_GRP
LMID = SITE1
GRPNO = 1
# Create a null transactional group for the notification service
# servers.
#
NTS_GRP
LMID = SITE1
GRPNO = 2
TMSNAME = TMS
TMSCOUNT = 2
# Since we are using persistent events, we need a persistent queue
# create a queue transactional group for the queue servers.
#
QUE_GRP
LMID = SITE1
GRPNO = 3
TMSNAME = TMS_QM
TMSCOUNT = 2
#
# Make the queue group manage the QUE space we create.
# The name of the queue space specified here as TMNTSQS must match # the name of the queue space you created.
#
OPENINFO = "TUXEDO/QM:D:\tuxdir\EVENTS~1\ADVANC~1\QUE;TMNTSQS"
#---------------------------------------------------------------
*SERVERS
DEFAULT:
CLOPT = "-A"
#
# Start the queue server.
# The name of the queue space specified in the -s option of
# CLOPT must match the name of the queue space you created.
#
TMQUEUE
SRVGRP = QUE_GRP
SRVID = 1
CLOPT = "-s TMNTSQS:TMQUEUE -- "
#
# Start the queue forwarder, have it forward events to the
# notification service persistent forwarder.
#
TMQFORWARD
SRVGRP = QUE_GRP
SRVID = 2
CLOPT = "-- -i 2 -q TMNTSFWD_P"
TMSYSEVT
SRVGRP = NTS_GRP
SRVID = 1
#
# Start the user EventBroker. Pass in the environment file
# so that the user EventBroker can find the "Story" fml field
# definition. This allows the user EventBroker to perform
# data filtering.
#
TMUSREVT
SRVGRP = NTS_GRP
SRVID = 2
ENVFILE = "D:\tuxdir\EVENTS~1\ADVANC~1\envfile"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 1
CLOPT = "-A -- -N -M"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 2
CLOPT = "-A -- -N"
TMFFNAME
SRVGRP = SYS_GRP
SRVID = 3
CLOPT = "-A -- -F"
#
# Start the notification service server. Pass in the environment
# file so that the notification server can perform data filtering.
# The -s option must be specified since we are using
# persistent events. Note that the -s option specifies the name
# of the queue space as TMNTSQS. This name must match the name
# of the queue space you created.
#
TMNTS
SRVGRP = NTS_GRP
SRVID = 3
ENVFILE = "D:\tuxdir\EVENTS~1\ADVANC~1\envfile"
CLOPT = "-A -- -s TMNTSQS"
#
# Start the notification service transient event forwarder.
# Pass in the environment file so that the server can perform
# data filtering.
#
TMNTSFWD_T
SRVGRP = NTS_GRP
SRVID = 4
ENVFILE = "D:\tuxdir\EVENTS~1\ADVANC~1\envfile"
#
# Start the notification service persistent event forwarder.
# Pass in the environment file so that the server can perform
# data filtering.
#
TMNTSFWD_P
SRVGRP = NTS_GRP
SRVID = 5
ENVFILE = "D:\tuxdir\EVENTS~1\ADVANC~1\envfile"
#
# Start the ISL with -O since we're using callbacks to clients.
#
ISL
SRVGRP = SYS_GRP
SRVID = 4
CLOPT = "-A -- -O -n //BEANIE:2363"
#---------------------------------------------------------------
*SERVICES
通知サービス・アプリケーションをデプロイしたら、次の管理タスクを継続的に実行する必要があります。
複数のEventBrokerを構成する場合は、通知サービスのサブスクリプション・データベースを同期する必要があります。同期プロセスでは時間を要し(イベント配信に影響する場合がある)、ネットワーク・トラフィックが増加するため、イベントのトラフィックが確保されている場合以外は、複数のEventBrokerを構成しないでください。
複数のEventBrokerを構成する場合は、TMUSREVTサーバーで
-Pオプションを使用して、データベースの同期に必要な時間を設定できます。このオプションの設定方法の詳細は、
『ファイル形式、データ記述方法、MIBおよびシステム・プロセス・リファレンス』の
TMUSREVT(5)を参照してください。
注意:
|
データベースの同期に必要な時間は、サブスクライバがサブスクライブしてからイベントを受信するまでの所用時間に影響します。また、サブスクライバがアンサブスクライブしてからイベントの受信が停止されるまでの所用時間にも影響します。
|
サブスクリプションは、(1)サブスクライバが永続的なサブスクリプションを作成して、アンサブスクライブせずに停止してから、再起動することなく通知サービスに再接続しなかった場合、(2)どのイベントとも一致しないサブスクリプションをサブスクライバが作成した場合にデッド状態になります。サブスクライバは、永続的なサブスクリプションを作成してから、アンサブスクライブせずに停止できますが、定期的に再接続して蓄積されたイベントを取得しないとエラーになります。通知サービスは、永続的なサブスクリプションと一致するイベントの配信を定期的に試行するため、このようなイベントはサブスクライバが接続されていない間に蓄積され、キュー・スペースを消費して、システム・リソースが無駄になります。
どのイベントとも一致しないサブスクリプションは意味をなさないため、作成しないようにしてください。また、ポストされた各イベントは各サブスクリプションと照合する必要があるため、サブスクリプションではシステム・リソースを消費します。
表7-2の
ntsadminコマンドを使用すると、すべてのサブスクリプションを表示して、各サブスクリプションの保留キューとエラー・キューに現在どの程度のイベントが入っているかを確認できます。また、
ntsadminコマンドを使用してサブスクリプションを削除したり、エラー・キューのイベントを保留キューに移動できます。
ntsadminユーティリティの詳細は、
-26ページの「ntsadmin」を参照してください。
|
|
|
サブスクリプション・データベース内のサブスクリプションをリストします。
|
|
サブスクリプション・データベースのサブスクリプションを削除します。
|
|
保留イベント・キューのイベントに関する情報をリストします。(永続的なサブスクリプションの場合のみ。)
|
|
保留イベント・キューのイベントを削除します。(永続的なサブスクリプションの場合のみ。)
|
|
イベント・エラー・キューのイベントをリストします。(永続的なサブスクリプションの場合のみ。)
|
|
イベント・エラー・キューのイベントを削除します。(永続的なサブスクリプションの場合のみ。)
|
デッド・サブスクリプションを自動的に検出する方法はありませんが、
ntsadminユーティリティを使用すると、サブスクリプションがデッド状態になった時点や、デッド状態になっているかどうかを確認できます。
キューは、固定量のスペースを割り当てて作成されます。このスペースは、キューにイベントが蓄積されるにつれて消費されます。キューが一杯になると、それ以降にイベントをキューに登録しようとしても失敗します。
キューの使用率をモニターするには、
qmadminまたは
ntsadminを使用します(
『Oracle Tuxedoコマンド・リファレンス』の
qmadmin(1)を参照)。
保留イベントを保持するためにキュー・スペースが作成されたときに、キュー・スペースで保持可能なイベントの最大数が指定されています。たとえば、Advancedサンプル・アプリケーションで、
TMNTSQSキュー・スペースのイベントの最大数は200に設定されています(
-6ページの「イベント・キューの作成」を参照)。キュー・スペースの容量がわかっていれば、
ntsadmin pendeventsコマンドを使用して、イベント・キュー内で保留中のイベントの数を確認できます。イベント・キューが一杯か一杯に近い場合は、イベントの最大数の設定を増やすか、イベント・キューの数を増やしてください。
注意:
|
キューが容量一杯近くになった場合に警告を生成するには、 qmadmin qcreateコマンドでしきい値オプション( cmd)を使用します。このコマンドの詳細は、 『Oracle Tuxedoコマンド・リファレンス』の qmadmin(1)に関する項を参照してください。
|
ntsadminコマンドの
rmerreventsと
rmpendeventsを使用すると、保留キューまたはエラー・キューからイベンをパージできます。
警告:
|
キューからイベントが削除されると、復元できなくなります。イベントは完全に削除され、サブスクライブするアプリケーションがイベント受信することはありません。
|
イベントの配信が事前設定の試行回数実行されると、イベントはエラー・キューに移動します。エラー・キューでは、管理者はそのイベントをシステムからパージするか、エラー・キューから保留キューに戻す必要があります。イベントのパージについては、前述の項を参照してください。
イベントをエラー・キューから保留キューに戻す場合は、イベント配信の再開をシステムにリクエストしていることになります。イベント配信の失敗はシステム・リソースを消費するため、配信の障害となった状況が修正されないかぎり、この操作を実行しないでください。イベントを保留キューに戻すために、
ntsadmin retryerreventsコマンドが用意されています。
この項では、
ntsadminユーティリティについて説明します。
Oracle Tuxedo CORBA通知サービスの管理コマンド・インタープリタ。
通知サービスには、CORBA通知サービス・アプリケーションで次のタスクを実行するためのコマンドを備える管理コマンド・インタープリタの
ntsadminがあります。
•
|
保留キューおよびエラー・キューにある構造化されたイベントに関するサマリー情報の表示
|
•
|
保留キューおよびエラー・キューにある構造化されたイベント削除
|
•
|
エラー・キューから保留キューへの構造化されたイベントの移動
|
注意:
|
アプリケーションに一時的なサブスクリプションしかない場合、 ntsadminを入力してプログラムを起動すると、永続的なサブスクリプション用のコマンドが無効になります。
|
注意:
|
ntsadminを使用するには、通知サービスを実行している必要があります。
|
コマンド・プロンプトで
q(終了)を入力すると、
ntsadminプログラムを終了できます。[Break]キーを押すと、コマンドからの出力が終了し、新しいコマンドの入力が求められます。
ntsadminからの出力は、使用しているページ割りコマンドに従ってページ別に表示されます(
paginateコマンドを参照)。
注意:
|
The subscriptionコマンドの出力は、 verboseコマンドの設定によって異なります。
|
このユーティリティを使用できるのは、システム管理者のみです。
TMNTS、TMNTSFWD_T、TMNTSFWD_P、
qmadmin
コマンドの形式は、完全名でも省略形でも(省略形がある場合は、完全名の後にカッコで示されます)入力することができ、該当する引数がその後に付きます。大カッコ[ ]で囲まれている引数は省略可能で、中カッコ{ }で囲まれている引数は、相互に排他的な選択肢を示します。各コマンドのオプションは次のとおりです。
|
|
|
指定されている場合は、identifierと一致するサブスクリプションを識別します。
|
|
指定されている場合は、 nameと一致するサブスクリプション名のサブスクリプションのみを識別します。空の文字列と一致する名前を指定するには(名前のないサブスクリプション)、空の文字列を引用符("")で囲みます。
注意:
|
このオプションはワイルドカード文字(*)をサポートしていないため、名前はサブスクリプション名と正確に一致する必要があります。
|
|
|
指定されている場合は、QoSが一時的なサブスクリプションのみを識別します。
|
|
指定されている場合は、QoSが永続的なサブスクリプションのみを識別します。
|
subscriptions (sub) [{-i identifier |-n name |-t | -p}]
サブスクリプション・データベース内のサブスクリプションをリストします。
注意:
|
subscriptionコマンドの出力は、冗長モードが有効かどうかよって異なります( verboseコマンドについては後述)。 リスト7-11は、冗長モードが有効な場合と無効な場合の subscriptionの出力例を示しています。
|
リスト7-11
冗長モードが有効な場合と無効な場合のsubscriptionコマンドの出力
> verbose on
Verbose mode is now on
> sub
ID: 1000000006
Name: marcello
QoS: Transient
Qspace: <N/A>
Expression: stock trade\.quote
Filter: stock_name %% 'BEAS' && price_per_share > 150
ID: 1000000005
Name: marcello
QoS: Persistent
Qspace: TMNTSQS
Expression: stock trade\.sell
Filter:
ID: 1000000004
Name: marcello
QoS: Persistent
Qspace: TMNTSQS
Expression: stock trade\.buy
Filter:
> verbose off
Verbose mode is now off
> sub
ID Name Expression
-- ---- ----------
1000000006 marcello [T] stock trade\.quote
1000000005 marcello [P] stock trade\.sell
1000000004 marcello [P] stock trade\.buy
rmsubscriptions (rmsub) [{-i identifier |-n name |-t | -p]}[-y]
サブスクリプション・データベースからサブスクリプションを削除します。このコマンドでは、
–yが使用されている場合を除いて確認が求められます。
このコマンドでは、削除されたサブスクリプションの数が表示されます。
pendevents (pevt) [{-i identifier |-n name}]
保留イベント・キューのイベントに関する情報をリストします。
rmpendevents (rmpevt) [{-i identifier |-n name |-o}][-y]
保留イベント・キューのイベントを削除します。
– oが指定されている場合は、対応するサブスクリプションがサブスクリプション・データベースにないイベントがすべて削除されます。
このコマンドでは、
–yが使用されている場合を除いて確認が求められ、削除されたイベントの数が表示されます。
errevents (eevt) [{-i identifier |-n name}]
イベント・エラー・キューのイベントをリストします。
rmerrevents (rmeevt) [{-i identifier |-n name |-o}][-y]
イベント・エラー・キューのイベントを削除します。
– oが指定されている場合は、対応するサブスクリプションがサブスクリプション・データベースにないイベントがすべて削除されます。
このコマンドでは、
–yが使用されている場合を除いて確認が求められ、削除されたイベントの数が表示されます。
retryerrevents (reteevt) [{-i identifier |-n name}][-y]
イベント・エラー・キューのイベントを再試行します。これにより、イベントがエラー・キューから保留キューに移動します。
このコマンドでは、
–yが使用されている場合を除いて確認が求められ、エラー・キューから保留キューに移動したイベントの数が表示されます。
onに設定すると、入力コマンド行をエコーします。入力がない場合は、現在の設定が切り替えられ、新しい設定が出力されます。初期設定は
offです。
help (h) [{command |all}]
ヘルプ・メッセージを出力します。
commandを指定すると、そのコマンドの省略形、引数、および説明が出力されます。
allを指定すると、コマンドの説明が表示されます。引数をすべて省略すると、すべてのコマンドの構文が表示されます。
paginate (page) [{off |on}]
出力をページ単位で表示します。入力がない場合は、現在の設定が切り替えられ、新しい設定が表示されます。初期設定は、標準入力または標準出力のいずれかが端末デバイスではない場合を除いて
onです。ページ割りは、標準入力と標準出力が両方とも端末デバイスである場合にかぎりonになります。シェル環境変数
PAGERを使用すると、ページ別表示出力に使用されるデフォルトのコマンドをオーバーライドできます。デフォルトのページ別表示コマンドは、ネイティブのオペレーティング・システム環境に固有のコマンドです(たとえば、コマンド
pgは、UNIXシステム・オペレーティング・システムのデフォルトです)。
verbose (v) [{on | off }]
冗長モードで出力を生成します。オプションが指定されていない場合は、現在の設定が切り替えられ、新しい設定が出力されます。初期設定は
offです。
シェルにエスケープして
shellcommandを実行するには、このコマンドを使用します。
前回のシェル・コマンドを繰り返すには、このコマンドを使用します。
行をコメントとして指定するには、このコマンドを使用します。
前回のコマンドを繰り返すには、このコマンドを使用します。
この項では、
ntsadminユーティリティの使用例について説明します。
リスト7-12は、
ntsadminを使用して、イベントをエラー・キューから保留キューに戻す例を示しています。実行する手順は次のとおりです。
1.
|
すべてのサブスクリプションで marcelloを検索します。
|
2.
|
一意の subscription_idを使用して、エラー・キューにあるイベントに関する情報を表示します。
|
3.
|
イベントをエラー・キューから保留キューに移動します。
|
リスト7-12
エラー・キューから保留キューへのイベントの移動
D:\smith\reg>ntsadmin
ntsadmin - Copyright (c) 1996-1999 BEA Systems, Inc.
Portions * Copyright 1986-1997 RSA Data Security, Inc.
All Rights Reserved.
Distributed under license by BEA Systems, Inc.
Oracle Tuxedo
is a registered trademark.
INFO: /Q Qspace - TMNTSQS
INFO: /Q Device - D:\smith\reg\QUE (SITE1)
> subscriptions -n marcello
ID Name Expression
-- ---- ----------
1000000002 marcello [T] stock trade\.quote
1000000001 marcello [P] stock trade\.sell
1000000000 marcello [P] stock trade\.buy
> verbose off
Verbose mode is now off
> eevt -i 1000000003
ID Name Count
-- ---- -----
1000000003 marcello 1
> reteevt -i 1000000003 -y
1 event(s) retried
リスト7-13は、
ntsadminを使用してサブスクリプションを削除し、イベントを削除する例を示しています。
> rmsub -n BillJones -y
2 subscription(s) removed
> rmeevt -n marcello -y
1 event(s) removed
> rmpevt -n BillJones -y
No events removed
リスト7-14は、特定のサブスクリプションで保留イベントを確認する方法を示しています。
> pevt -n marcello
ID Name Count
-- ---- -----
1000000003 marcello 1
通知サービスでは、次のOracle Tuxedoシステム・サーバーも使用します。これらのサーバーの詳細は、
『ファイル形式、データ記述、MIBおよびシステム・プロセス・リファレンス』を参照してください。
サブスクリプションおよびイベントのポストのリクエストを処理します。
TMNTS SRVGRP=���identifier��� SRVID=���number���
[CLOPT=���[-A] [servopts options]
[--[-S queuespace]���]
TMNTSは、サブスクリプションおよびイベントのポストのすべてのリクエストを処理するOracle Tuxedo付属のサーバーです。
使用するキュー・スペースの名前。このキュー・スペースには、
TMNTSFWD_Pと
TMNTSFWD_Eの2つのキューを含める必要があります。このオプションは、永続的なサブスクリプションでのみ必須です。
注意:
|
QoSが Persistentのサブスクリプションを使用する場合は、システムが稼働する前にキュー・スペース、イベントを保持するためのキュー、およびエラー・キューを作成する必要があります。キュー・スペースの名前は、 TMNTSサーバーの CLOPT -S queuespaceパラメータで指定した queuespace名と一致する必要があります。イベント・キューの名前は TMNTSFWD_Pにする必要があります。エラー・キューの名前は TMNTSFWD_Eにする必要があります。
|
信頼性と可用性を高めるために、複数の
TMNTSサーバーを起動できます。
イベントがトランザクションのコンテキストでポストされる場合、
TMNTSサーバーはトランザクション・グループに属している必要があります。
TMNTSは、Oracle WebLogic Enterpriseバージョン5.0以降またはOracle Tuxedo 8.0以降で実行する必要があります。
TMNTSサーバーは、
TMUSREVTサーバーまたは
TMSYSEVTサーバーで提供されるサービスを利用します。したがって、これらのサーバーは、システムが稼働する前に起動する必要があります。一時的なサブスクリプションが使用されている場合は、システムが稼働する前に
TMNTSFWD_Tサーバーも起動する必要があります。永続的なサブスクリプションが使用されている場合は、システムが稼働する前に、
TMNTSFWD_Pサーバー、
TMQUEUEサーバーおよび
TMQFORWARDサーバーも起動する必要があります。
TMNTS SRVGRP = NTS_GRP SRVID = 3
CLOPT = "-A -- -s TMNTSQS"
TMSYSEVT(5)、
TMUSREVT(5)、
TMQUEUE(5)、
TMQFORWARD(5)、
TMNTSFWD_P、
TMNTSFWD_T(5)、
UBBCONFIG(5)
TMNTSFWD_T SRVGRP=���identifier��� SRVID=���number���
[CLOPT=���[-A][--���]
TMNTSFWD_Tは、指定したQoSが
Transientのサブスクライバにイベントを転送するOracle Tuxedo付属のサーバーです。イベントの配信に関連付けられているトランザクション・コンテキストはありません。
注意:
|
信頼性と可用性を高めるために、複数の TMNTSFWD_Tサーバーを起動できます。
|
TMNTSは、Oracle WebLogic Enterpriseバージョン5.0以降またはOracle Tuxedo 8.0以降で実行する必要があります。
TMNTSFWD_Tサーバーは、
TMNTSサーバー、
TMUSREVTサーバーおよび
TMSYSEVTサーバーで提供されるサービスを利用します。したがって、これらのサーバーは、システムが稼働する前に起動する必要があります。
TMNTSFWD_T SRVGRP = SYS_GRP SRVID = 7
TMNTSFWD_P SRVGRP=���identifier��� SRVID=���number���
CLOPT=���[-A] [--���]
MNTSFWD_Pは、指定したQoSが永続的なサブスクライバにイベントを転送するOracle Tuxedo付属のサーバーです。イベントの配信に関連付けられているトランザクション・コンテキストはありません。
信頼性と可用性を高めるために、複数の
TMNTSFWD_Pサーバーを起動できます。
TMNTSは、Oracle WebLogic Enterpriseバージョン5.0以降またはOracle Tuxedo 8.0以降で実行する必要があります。
TMNTSFWD_Pサーバーは、
TMNTSサーバー、
TMUSREVTサーバー、
TMSYSEVTサーバー、
TMQUEUEサーバーおよび
TMQFORWARDサーバーで提供されるサービスを利用します。したがって、これらのサーバーはシステムが稼働する前に起動する必要があります。
このサーバーは、トランザクショングループで起動する必要があります。
起動する
TMNTSFWD_Pサーバーの数は、起動する
TMQFORWARDサーバーの数と同じにする必要があります。
TMNTSFWD_P SRVGRP = NTS_GRP SRVID = 5
TMSYSEVT(5)、
TMUSREVT(5)、
TMNTS、
TMNTSFWD_T、
servopts(5)、
UBBCONFIG(5)