Advancedサンプル・アプリケーションのビルド
注意:
|
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に関する技術的なサポートまたはドキュメントは提供していません。
Advancedサンプル・アプリケーションでは、ニュース・レポータが記事をポストし、ワイヤ・サービスがその記事をイベントとして通知サービスにポストし、ニュース・サブスクライバが記事を消費するニュース閲覧環境をシミュレートします。
Advancedサンプル・アプリケーションでは、CosNotificationサービスAPIを使用するC++の実装が用意されています。
Advancedサンプル・アプリケーションは、Oracle Tuxedo CORBA通知サービスを使用するレポータ・アプリケーション、サブスクライバ・アプリケーション、およびワイヤ・サービス・アプリケーションで構成されます。レポータ・アプリケーションは、クライアント・アプリケーションを実装します。このアプリケーションは、ニュース記事の入力をユーザーに促し、アプリケーション固有のIDLを使用してWireServiceサーバーを呼び出します。WireServiceサーバーは、イベントをポストします。サブスクライバは、共同クライアント/サーバー・アプリケーションを実装します。このアプリケーションは、イベントをサブスクライブおよびアンサブスクライブするときにはクライアントとして機能し、イベントを受信するときにはサーバーとして機能します。イベントを受信するために、サブスクライバは通知サービスによってイベント配信が必要なときに呼び出されるコールバック・オブジェクトを実装します。
注意:
|
UNIXシステムでは、ポートが再び利用可能になるまでに時間がかかるため(実際の時間はプラットフォームによって異なる)、サブスクライバを即座に再起動することはできません。あまりにも早く再起動すると、 CORBA::OBJ_ADAPTER例外が発生します。これが発生した場合は、少し待ってから再試行してください。Solarisシステムでは、ポートが利用可能になるまで最大10分かかります。ポートがまだ使用中かどうかを確認するには、 "Restart -a | grep <the port number>"というコマンドを使用します。
|
このAdvancedサンプル・アプリケーションでは、Oracleシンプル・イベントAPI、CosNotificationサービスAPI、一時的および永続的なサブスクリプション、およびデータのフィルタリングの使い方を例示します。
このAdvancedサンプル・アプリケーションでは、次の3つの実行可能ファイルを使用します(
図6-1を参照)。
•
|
イベントをポストするWireServiceアプリケーション。これは、通知サービスのクライアントであり、Oracle Tuxedo CORBAサーバーでもあります。このアプリケーションは、Reporterアプリケーションで使用されるOMG IDLインタフェースを実装します。
|
•
|
WireServiceのメソッドを呼び出してニュース記事を報告するReporterアプリケーション。WireServiceではその記事をイベントに変換し、通知サービスを使用してイベントをポストします。レポータは純粋なクライアントです。
|
•
|
通知サービスをサブスクライブし、イベントを受信するSubscriberアプリケーション。サブスクライバは、イベントをサブスクライブするときにはクライアントとして機能し、イベントを受信するときにはサーバーとして機能する共同クライアント/サーバーです。
|
イベント・ポスト元(WireServiceアプリケーション)では、構造化イベントの
domain_name、
type_name、および
filterable_dataフィールドを使用して3つのイベント(ニュース・イベント、サブスクライバ停止イベント、およびサブスクライバ取消しイベント)を作成します。
このイベントでは、ドメイン名は文字列であり、アプリケーションによって事前に「News」として設定されます。型名は文字列であり、Reporterアプリケーションのユーザーによって実行時に定義されます。型名は、ニュースのカテゴリ(「Sports」など)に設定されます。フィルタ処理可能データには、名前/値ペアが格納されます。その名前は「Story」で、値はポストされるニュース記事の本文である文字列です。
このイベントでは、ドメイン名は文字列であり、アプリケーションによって事前に「NewsAdmin」として設定されます。型名は文字列であり、アプリケーションによって事前に「Shutdown」として設定されます。フィルタ処理可能データは使用しません。
このイベントでは、ドメイン名は文字列であり、アプリケーションによって事前に「NewsAdmin」として設定されます。型名は文字列であり、アプリケーションによって事前に「Cancel」として設定されます。フィルタ処理可能データは使用しません。
Subscriberアプリケーションでは、構造化イベントの
domain_name、
type_name、および
filterable_dataフィールドを使用して2つのサブスクリプションを作成します。1つはニュース記事を処理するニュース・サブスクリプション、もう1つはCancelイベントとShutdownイベントを処理する停止サブスクリプションです。実行時に、Subscriberアプリケーションでは通知サービスに対するそれら2つのサブスクリプションを確立します。
Subscriberアプリケーションでは、構造化イベントの
domain_name、
type_name、および
filterable_dataフィールドを使用して通知サービスのサブスクリプションを作成します。サブスクリプションでは、ドメイン名が「News」の内容の固定文字列として定義されます。実行時に、Subscriberアプリケーションではユーザーに「ニュース・カテゴリ」と「キーワード」を問い合せ、その入力を使用してサブスクリプションのtype_nameフィールドとdata_filterフィールドを定義します。当然、両アプリケーション(レポータとサブスクライバ)のユーザーが協力し、サブスクリプションの「ニュース・カテゴリ」文字列と「キーワード」文字列がイベントと一致するようにしなければなりません。そうしないと、サブスクライバにニュース・イベントは配信されません。サブスクリプションでは、記事の本文が文字列であり、その記事が構造化イベントの
filterable_dataフィールドの最初の名前/値ペアにあるものと想定され、
filterable_dataフィールドのチェックが行われることはありません。
Subscriberアプリケーションでは、構造化イベントのdomain_nameフィールドとtype_nameフィールドを使用して通知サービスのサブスクリプションを作成します。サブスクリプションではdomain_nameが「NewsAdmin」の内容の固定文字列として定義され、type_nameが「Shutdown」または「Cancel」のいずれかの文字列として定義されます。filterable_dataフィールドは空の文字列です。
Reporterアプリケーションは、ShutdownイベントとCancelイベントを生成するだけでなく、ニュースを報告するためのユーザー・インタフェースを実装します。通知サービスを直に使用してイベントをポストするのではなく、WireServiceサーバーのメソッドを呼び出します。
WireServiceサーバーでは、通知サービスを使用して次の3種類のイベントをポストします。
•
|
「News」イベント(ニュースをサブスクライバに配信するために使用)
|
•
|
「Shutdown」イベント(サブスクライバを一時的に停止するために使用)
|
•
|
「Cancel」イベント(サブスクライバを永続的に停止するために使用)
|
通知サービスでは、これらのイベントをサブスクライバに配信します。
サブスクライバでは、通知サービスを使用してニュース・イベントの永続的なサブスクリプションを作成します。サブスクライバは、ニュース・イベントを受信して処理するための永続的なコールバック・オブジェクトを(
NewsConsumer_iサーバーント・クラスを通じて)実装します。サブスクライバがサブスクライブするときには、このコールバック・オブジェクトのオブジェクト参照が通知サービスに渡されます。一致するイベントが発生すると、通知サービスではこのコールバック・オブジェクトの
push_structured_eventメソッドを呼び出してイベントをサブスクライバにプッシュします。このメソッドはイベントを出力します。
サブスクライバでは、通知サービスを使用してShutdownイベントとCancelイベントの一時的なサブスクリプションも作成します。サブスクライバは、それらのイベントを受信して処理するためのコールバック・オブジェクトも(
ShutdownConsumer_iサーバーント・クラスを通じて)実装します。
サブスクライバが実行されると、ユーザーは名前の入力を求められます。このユーザーが初めてサブスクライバ・プログラムを実行すると、サブスクライバではNewsイベントの永続的なサブスクリプションが作成されます。そのために、サブスクライバはサブスクライブするニュース記事の種類とサブスクライバが動作するポート番号の入力をユーザーに要求します。サブスクライバはこのポートで動作し、サブスクライブして、サブスクリプションID、フィルタID (CosNotification API使用の場合)およびポート番号をファイルに書き込みます(ファイルの名前は
<user_name>.pstore)。サブスクライバは、次回の実行時に、ユーザーに名前の入力を要求し、ファイル
<user_name>.pstoreを開いて、このユーザーのサブスクリプションID、フィルタID (CosNotification API使用の場合)およびポート番号をファイルから読み取ります。これで、ニュース・コールバック・オブジェクトのオブジェクト参照が永続的になるため、サブスクライバが毎回同じポート番号で動作するという要件が満たされます。
Subscriberでは一時的なサブスクリプションを作成して、ShutdownイベントとCancelイベントを受信するため、一時的なサブスクリプションはサブスクライバが実行および停止されるたびに作成および破棄されます。このサブスクリプションIDは、ファイル
<user_name>.pstoreには書き出されません。
サブスクライバがShutdownイベントを受信すると、停止/コールバック・サブスクリプションが破棄されますが、Newsサブスクリプションはそのまま維持されます。サブスクライバが停止された後で、それが再起動される前にNewsイベントがポストされた場合、そのイベントはサブスクライバが再起動された時点で配信されるか、またはエラー・キューに入れられます。(
ntsadminユーティリティを使用すると、エラー・キューからイベントを削除するか、配信を再試行できます。)
イベントが再配信されるか、エラー・キューに入れられるかは、サブスクライバがすぐに再起動されるかどうかによって決まります。すぐに再起動されるかどうかは、キューの再試行パラメータによって決まります。キューの再試行パラメータの値については、
advanced.inc (通知サンプルのcommonディレクトリ)を参照してください。
Newsイベントには、カテゴリ(見出しなど)と記事(複数行のテキスト文字列)という2つのパートがあります。Subscriberアプリケーションは、ニュース・カテゴリの入力をユーザーに求めます。サブスクライバでは、カテゴリがその文字列と一致するニュース・イベントをサブスクライブします。Reporterアプリケーションは、ニュース・カテゴリと記事の入力をユーザーに要求します。レポータでは、ワイヤ・サービスのメソッドを呼び出して対応するニュース・イベントをポストします。イベントは、そのカテゴリのニュースをサブスクライブしたサブスクライバだけに配信されます。
注意:
|
カテゴリは文字列です。ReporterのユーザーとSubscriberのユーザーは同じ文字列を使用しなければなりません。このサンプルには固定のカテゴリはありません。したがって、ReporterのユーザーとSubscriberのユーザーは両者とも、カテゴリが要求されたときに(大文字と小文字の区別およびスペースの有無を含めて)同じ文字列を入力しなければなりません。
|
このサンプルではデータのフィルタリングも利用します。ユーザーが初めてSubscriberを実行すると、そのユーザーは「キーワード」の入力を要求されます。カテゴリが一致し、記事にキーワードが含まれているイベントがサブスクライバに配信されます。
たとえば、ユーザーが「none」というキーワードを入力した場合、データのフィルタリングは行われません。その場合、ユーザーは選択したニュース・カテゴリのすべてのイベントを受信することになります。「smith」というキーワードを入力した場合、そのキーワードは
“Story %% '.*smith.*'"に変換されます。この場合、文字列の含まれる「Story」というフィールドが存在し、その文字列が任意数の文字で始まり、リテラル文字列「smith」が含まれ、任意数の文字で終わっているイベントのみがサブスクリプションで受け入れられます。
このサンプルを実行するには、ReporterとSubscriberを少なくとも1つずつ実行する必要があります(それぞれ複数を実行することも可能)。Reporterによってポストされたイベントは、(カテゴリに基づいて)一致するすべてのサブスクライバに配信されます。
また、サブスクライバは必ずイベントをポストする前に起動してください。サブスクライバが起動する前にポストされたイベントは配信されません。
Advancedサンプル・アプリケーションのビルドと実行
Introductoryサンプル・アプリケーションをビルドして実行するには、次の手順を行う必要があります。
1.
|
"TUXDIR"環境変数が適切なディレクトリ・パスに設定されていることを確認します。
|
3.
|
Introductoryサンプル・アプリケーションのファイルを作業ディレクトリにコピーします。
|
4.
|
ファイルの保護属性を変更して、書き込みと実行を可能にします。
|
5.
|
UNIXの場合は、 makeファイルがパスに含まれているようにします。Microsoft Windowsの場合は、 nmakeファイルがパスに含まれているようにします。
|
9.
|
SubscriberアプリケーションとReporterアプリケーションを実行します。
|
これらの手順は、次の項でさらに詳しく説明されます。
Advancedサンプル・アプリケーションをビルドして実行する前に、システムで
TUXDIR環境変数が設定されていることを確認する必要があります。ほとんどの場合、この環境変数はインストール手順の一環として設定済です。しかし、正確な情報が反映されているかどうかを確認することが必要です。
表6-1は、Callbackサンプル・アプリケーションを実行するために必要な環境変数のリストです。
表6-1
Callbackサンプル・アプリケーションで必須の環境変数
|
|
|
Oracle Tuxedoソフトウェアをインストールしたディレクトリ・パス。例:
|
インストール中に定義された環境変数の情報が正しいことを確認するには、以下の手順に従います。
1.
|
「スタート」メニューの、「設定」をポイントします。
|
2.
|
「設定」メニューから、「コントロール・パネル」をクリックします。
|
「システムのプロパティ」ウィンドウが表示されます。
ksh prompt>printenv TUXDIR
1.
|
「システムのプロパティ」ウィンドウの「詳細」ページで、設定を変更する環境変数をクリックします。
|
ksh prompt>export TUXDIR=directorypath
Advancedサンプル・アプリケーションのファイルを作業ディレクトリにコピーする
Advancedサンプル・アプリケーションのファイルをローカル・マシンの作業ディレクトリにコピーする必要があります。
注意:
|
アプリケーション・ディレクトリとcommonディレクトリは同じ親ディレクトリにコピーしなければなりません。
|
Advancedサンプル・アプリケーションのファイルは、次のディレクトリに配置されています。
C++ Advancedサンプル: drive:\tuxdir\samples\corba\notification\advanced_cos_cxx
drive:\tuxdir\samples\corba\notification\common
C++ Advancedサンプル: /usr/local/tuxdir/samples/corba/notification/advanced_cos_cxx
/usr/local/tuxdir/samples/corba/notification/common
表6-2と
表6-3にリストされているファイルは、CosNotification APIを使用して実装されるC++ Advancedサンプル・アプリケーションをビルドして実行するために使用します。
表6-2と
表6-3にリストされているファイルは、Advancedサンプル・アプリケーションをビルドして実行するために使用します。
表6-2
advanced_cos_c++通知ディレクトリに配置されているファイル
|
|
|
Advancedサンプル・アプリケーションの説明と、環境の設定およびアプリケーションのビルドと実行の手順が記述されています。
|
|
Microsoft Windowsシステムの環境を設定します。
|
|
|
|
Microsoft Windowsシステムのmakefile。
|
|
|
|
makefile.ntファイルと makefile.mkファイルで使用される共通のmakefile。
|
|
|
|
|
NewsConsumer_i.hおよび NewsConsumer.cpp
|
ニュース・イベントを受信するためにサブスクライバで使用されるコールバック・サーバーント・クラス(Subscriberアプリケーション用。)
|
ShutdownConsumer_i.h および ShutdownConsumer.cpp
|
ShutdownイベントとCancelイベントを受信するためにサブスクライバで使用されるコールバック・サーバーント・クラス(Subscriberアプリケーション用。)
|
|
|
|
WireServiceインタフェースのICFファイル。
|
WireService_i.hおよび WireService.cpp
|
WireServiceインタフェースを実装します。
|
表6-3は、Advancedサンプル・アプリケーションで使用される他のファイルのリストです。IDLファイル以外のファイルは、通知の共通ディレクトリに配置されています。
表6-3
Advancedサンプルで使用される他のファイル
|
|
次のファイルは、commonディレクトリに配置されています。
|
|
|
|
データのフィルタリングを実行するために使用するFMLフィールド定義とニュース・イベント
|
|
Microsoft Windowsシステムのmakefileシンボル。
|
|
|
|
|
|
|
|
例外を処理するクライアント・ユーティリティ(C++のみ)
|
|
|
次のファイルは、\tuxdir\includeディレクトリに配置されています。
|
|
CosEventCommモジュールを宣言するOMG IDLコード。
|
|
CosNotificationモジュールを宣言するOMG IDLコード。
|
|
CosNotifyCommモジュールを宣言するOMG IDLコード。
|
|
Tobj_Eventsモジュールを宣言するOMG IDLコード。
|
|
Tobj_SimpleEventsモジュールを宣言するOMG IDLコード。
注意:
|
このファイルは、Oracleシンプル・イベントAPIを使用して開発されたアプリケーションでのみ必要です。
|
|
次のファイルは、CosNotificationサービスAPIを使用して開発されたアプリケーションでのみ必要です。
|
|
CosEventChannelAdminモジュールを宣言するOMG IDLコード。
|
|
CosNotifyFilterモジュールを宣言するOMG IDLコード。
|
CosNotifyChannelAdmin.idl
|
CosNotifyChannelAdminモジュールを宣言するOMG IDLコード。
|
|
Tobj_Notificationモジュールを宣言するOMG IDLコード。
|
Advancedサンプル・アプリケーションのファイルに対する保護属性を変更する
Oracle Tuxedoソフトウェアのインストール時に、Advancedサンプル・アプリケーションのファイルは読取り専用に設定されます。Advancedサンプル・アプリケーションのファイルを編集またはビルドするには、作業ディレクトリにコピーしたファイルの保護属性を次のように変更する必要があります。
1.
|
ディレクトリを作業ディレクトリに変更します( cd)。
|
2.
|
prompt>attrib -r drive:¥ workdirectory¥*.*
|
1.
|
ディレクトリを作業ディレクトリに変更します( cd)。
|
3.
|
ksh prompt>chmod u+w /workdirectory/*.*
|
UNIXオペレーティング・システム・プラットフォームでは、次のように
setenv.kshのパーミッションを変更して実行可能にすることも必要です。
ksh prompt>chmod +x setenv.ksh
Advancedサンプル・アプリケーションのビルド
makefileを実行するには、
makeコマンドを使用します。makefileは、Microsoft WindowsおよびUNIXの両方でサンプル・アプリケーションをビルドするために使用します。Microsoft Windowsでは、
nmakeを使用します。 UNIXでは、
makeを使用します。
makefileでは、次の手順が自動的に行われます。
1.
|
環境設定コマンド( setenv.cmd)が実行済であることを確認します。環境変数が設定されていない場合は、エラー・メッセージを画面に出力して終了します。
|
2.
|
common.ntコマンド・ファイル(Microsoft Windows)または common.mkコマンド・ファイル(UNIX)をインクルードします。このファイルでは、サンプルで使用されるmakefileシンボルが定義されます。それらのシンボルにより、UNIXおよびMicrosoft Windowsのmakefileでビルド規則をプラットフォームに依存しないmakefileに委譲することができます。
|
3.
|
makefile.incコマンド・ファイルをインクルードします。このファイルでは、 is_reporter、 is_subscriber、および AS_WIRESERVICEの実行可能ファイルがビルドされ、不要なファイルとディレクトリがクリーンアップされます。
|
4.
|
advanced.incコマンド・ファイルをインクルードします。このファイルでは、 tmadminコマンドと qadminコマンドを実行してトランザクション・ログおよび永続的なサブスクリプションで必要なキューが作成されます。さらに、 UBBCONFIGファイルが作成され、 tmloadcf -y ubbコマンドを実行して TUXCONFIGファイルが作成されます。
|
makefileを実行する前に、次の確認作業を行う必要があります。
•
|
アプリケーションのビルドおよび実行を行う適切な管理権限があること。
|
•
|
Microsoft Windowsでは、 nmakeがマシンのパスに含まれていることを確認します。
|
•
|
UNIXでは、 makeがマシンのパスに含まれていることを確認します。
|
Advancedサンプル・アプリケーションをビルドするには、
makeコマンドを次のように入力します。
Advancedサンプル・アプリケーションを起動する
Advancedサンプル・アプリケーションを起動するには、次のコマンドを入力します。
1.
|
Oracle Tuxedoシステムを起動するには、次のように入力します。
|
このコマンドを入力すると、次のサーバー・プロセスが開始されます。
通知サービスで使用される、Oracle Tuxedoシステムに付属のEventBrokerサーバー
サブスクリプションおよびイベントのポストのリクエストを処理するOracle Tuxedo CORBA通知サービス・サーバー
一時的なサブスクリプションのあるサブスクライバにイベントを転送するOracle Tuxedo CORBA通知サービス・サーバー。このサーバーは、一時的なサブスクリプションで必須です。
永続的なサブスクリプションのあるサブスクライバに永続的なイベントを転送するOracle Tuxedo CORBA通知サービス・サーバー。このサーバーは、永続的なサブスクリプションで必須です。
メッセージ・キュー・マネージャは、
tpenqueue(3)および
tpdequeue(3)を呼び出してプログラムのかわりにキューのメッセージの登録と取出しを行うOracle Tuxedoシステム付属のサーバーです。このサーバーは、永続的なサブスクリプションで必須です。
メッセージ転送サーバーは、後で処理するように
tpenqueue(3c)を使用して格納されたメッセージを転送するOracle Tuxedoシステム付属のサーバーです。このサーバーは、永続的なサブスクリプションで必須です。
Reporterアプリケーションからイベントを受信し、そのイベントを通知サービスにポストする、Advancedサンプル・アプリケーション用に特別にビルドされたサーバー。News、Shutdown、およびCancelという3タイプのイベントが受信およびポストされます。
2.
|
Subscriberアプリケーションを起動するには、次のように入力します。
|
C++の場合:
prompt>is_subscriber
Subscriberをもう1つ起動するには、別のウィンドウを開き、ディレクトリを作業ディレクトリに変更して(
cd)、環境変数を設定し(
setenv.cmdまたは
setenv.kshを実行)、プラットフォームに適した起動コマンドを入力します。
3.
|
Reporterアプリケーションを起動するには、新たにウィンドウを開いて次のように入力します。
|
C++の場合:
prompt>is_reporter
Reporterをもう1つ起動するには、別のウィンドウを開き、ディレクトリを作業ディレクトリに変更して(
cd)、環境変数を設定し(
setenv.cmdまたは
setenv.kshを実行)、プラットフォームに適した起動コマンドを入力します。
Advancedサンプル・アプリケーションの使い方
Advancedサンプル・アプリケーションを使用するには、Subscriberアプリケーションを使用してイベントをサブスクライブし、Reporterアプリケーションを使用してイベントをポストする必要があります。サブスクライブは、各イベントをポストする前に行う必要があります。そうしないと、イベントは失われます。
Subscriberアプリケーションを使用したイベントのサブスクライブ
1.
|
Subscriberアプリケーションを初めて起動すると( prompt>is_subscriber)、次のプロンプトが表示されます。
|
Name?(スペースなしで名前を入力します。)
Port (たとえば2463) (このサブスクライバが動作するポートの番号を入力します。)
Category (またはall) (ニュース・カテゴリまたは「all」を入力します。)
Keyword (またはnone) (配信するすべての記事に含まれている必要のあるキーワードを入力します。)
注意:
|
SubscriberアプリケーションがReporterアプリケーションからのShutdownイベントによって実装された場合(Shutdownイベントでは永続的なサブスクリプションは取り消されない)、Subscriberアプリケーションの以降の起動では、名前以外は入力を要求されません。Subscriberアプリケーションは、名前以外の情報を <user_name>.pstoreファイルから取り出します。このようにすることで、同じポート番号が必ず使用されるようになります(永続的なサブスクリプションでは不可欠)。
|
SubscriberアプリケーションがReporterアプリケーションからのCancelイベントによって実装された場合(Cancelイベントでは永続的なサブスクリプションを含むすべてのサブスクリプションが取り消される)、Subscriberアプリケーションの以降の起動では、名前、ポート番号、カテゴリ、およびキーワードの入力が要求されます。
2.
|
ニュースのカテゴリとしては任意の文字列を入力できます。つまり、ニュース・カテゴリの決まったリストは存在しません。ただし、Reporterアプリケーションを使用してイベントをポストするときには、必ず、ニュース・カテゴリに同じ文字列を使用してください。
|
同様に、キーワードでも文字列を入力できます。キーワードも決まったリストは存在しません。したがって、レポータを実行して記事を入力するときには、その記事に同じ文字列が含まれているようにしてください。そうしないと、記事はサブスクリプションに配信されません。
ユーザー名、カテゴリ(または「all」)、およびキーワード(オプション)の入力に基づいて初めてSubscriberアプリケーションが実行されたときには、ニュースのサブスクリプションが作成されます。次以降の実行時には、サブスクライバではこのサブスクリプションが再利用されます。Subscriberアプリケーションは常に、イベントを受信する準備ができた時点で「Ready」を出力します。
Subscriberアプリケーションは、サブスクリプションを作成し、イベント受信の準備ができた時点で「Ready」を出力します。
注意:
|
Reporterアプリケーションを使用してイベントをポストする前に、必ずSubscriberアプリケーションを使用してイベントをサブスクライブする必要があります。そうしないと、イベントは失われます。SubscriberアプリケーションでNewsイベントの永続的なサブスクリプションが作成される場合でも、そのサブスクリプションはSubscriberアプリケーションが起動するまで作成されません。
|
注意:
|
別のウィンドウを開いてこの手順を繰り返せば、複数のサブスクライバを起動できます。
|
Reporterアプリケーションを使用したイベントのポスト
1.
|
Reporterアプリケーションを起動すると( prompt> is_reporter)、次のプロンプトが表示されます。
|
(r) Report news
(s) Shutdown subscribers
(c) Cancel Subscribers
(e) Exit
2.
|
ニュースを報告するには rを入力します。次のプロンプトが表示されます。
|
3.
|
ニュース・カテゴリを入力します。ニュース・カテゴリは、Subscriberアプリケーションで入力したカテゴリと(スペースの有無や大文字と小文字の区別を含めて)まったく同じに入力する必要があります。
|
ニュース・カテゴリを入力すると、次のプロンプトが表示されます。
Enter story (terminate with '.')
4.
|
記事を入力します。複数行にまたがってもかまいません。記事を終わらせるには、1行にピリオド(「.」)のみを入力して改行します。サブスクライブするときにキーワードを入力した場合は、(スペースの有無や大文字と小文字の区別を含めて)まったく同じ文字列が記事に含まれているようにしてください。
|
カテゴリとキーワード(指定された場合)がこの記事と一致するサブスクライバが記事を受信して出力します。
5.
|
「s」オプションを選択すると、Shutdownイベントがポストされ、そのイベントがすべてのサブスクライバによって受信されて、それらのサブスクライバが停止されます。サブスクライバが停止されていても、再び 「r」オプションを使用すれば別のニュース記事をポストできます。通知サービスはそのニュース記事を保留キューに入れますが、Newsイベントのサブスクリプションは永続的であるため、依然として有効です。サブスクライバを再起動すると、サブスクライバはこの2番目のニュース記事を受信します(再起動の遅延によってイベントがエラー・キューに移動された場合を除く)。なぜなら、ニュース記事の永続的なサブスクリプションがサブスクライバによって作成されているからです。
|
注意:
|
ntsadmin retryerreventsコマンドを使用すると、エラー・キューのイベントを保留キューに移動することができます。
|
6.
|
「c」オプションを選択すると、Cancelイベントがポストされ、そのイベントがすべてのサブスクライバで受信されます。サブスクライバは、ニュースのサブスクリプションを取り消し、停止されます。サブスクライバを再起動するときには、新しいサブスクリプションを作成することになるので、ポート、カテゴリ、およびキーワードを再び入力する必要があります。
|
7.
|
ニュースの報告が終了したら、終了 (e)オプションを選択します。
|
注意:
|
別のウィンドウを開いてこの手順を繰り返せば、複数のレポータを起動できます。レポータによって報告されたニュース記事はすべて、一致するすべてのサブスクライバに配信されます。システムを停止するときには、その前に必ずすべてのレポータを終了してください。
|
ReporterとSubscriberのプロセスが停止しているのを確認してから、次の手順を行ってください。
1.
|
システムを停止するには、任意のウィンドウで次のように入力します。
|
2.
|
ディレクトリを元の状態に復元するには、任意のウィンドウで次のように入力します。
|
prompt>nmake -f makefile.nt clean
prompt>make -f makefile.mk clean