注意:
|
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通知サービスは、2つのアプリケーション・プログラミング・インタフェースをサポートしています。1つは、
CORBAservices: Common Object Services Specificationで定義されるCORBAベースの通知サービスに基づいています。このドキュメントでは、このインタフェースをCosNotificationサービス・インタフェースと呼んでいます。もう1つのインタフェース(Oracleシンプル・イベント・インタフェース)は、使いやすく設計されたOracle独自のインタフェースです。
これらのインタフェースは互いに互換性があり、CORBAベースの通知サービス仕様で定義された構造化イベントを渡します。つまり、CosNotificationサービス・インタフェースを使用してポストされたイベントは、Oracleシンプル・イベント・インタフェースでサブスクライブできます(逆方向も可)。
通知サービスAPIを使用する前に、次の項目に目を通してください。
サブスクリプションが一時的か永続的か、またはイベント配信の失敗後にイベント配信が再試行されるかどうかを判別するために、サブスクライバではサービスの品質(QoS)を指定します。サービスの品質には、
永続的と
一時的の2つのサービスの品質(QoS)の設定があります。QoSはサブスクリプションのプロパティです。
永続的なサブスクリプションでは、イベント配信とサブスクリプションの永続性が強固に保証されます。ただし、システム・リソース(ディスク領域やCPUサイクルなど)が多く消費されるに伴い、多くの管理(キューの管理やデッド・サブスクライバの検出など)が必要になるため、永続的なサブスクリプションにはコストが伴います。
永続的なサブスクリプションのプロパティは次のとおりです。
•
|
サブスクリプションは、アンサブスクライブ操作が実行されるまで有効です。つまり、サブスクリプションをアクティブな状態のままにして、サブスクライバ・アプリケーションを停止できます。この場合、イベントはサブスクライバ用に保存され、サブスクライバの再起動時にサブスクリプションを再作成する必要なく、そのサブスクライバに配信されます。
|
•
|
イベントが配信できない場合、管理上の再試行回数の上限に達するまでイベントの配信が再試行されます。イベントの再試行制限を超えると、イベントが保留キューからエラー・キューに移されます。管理者はエラー・キューのイベントを保留キューに戻すことができ、そこで配信の試行が再び行われます。
|
•
|
イベントがサブスクライバに正常に配信されても、何らかの理由で「配信の成功」を通知する返信メッセージが通知サービスで受信されなかった場合、通知サービスで同じイベントが複数回配信されることがあります。
|
一時的なサブスクリプションは、最小限のオーバーヘッドで最高のパフォーマンスを発揮し、そのプロパティは次のとおりです。
•
|
一致する各サブスクリプションにイベントの配信が1回試行されます。その試行が失敗すると、イベントは失われます。
|
サブスクリプションは、イベント配信の失敗が検出されるまで有効です。配信の失敗が検出されると、サブスクリプションは終了します。通常、通知サービスでは、パフォーマンス上の理由で、一時的なサブスクライバにイベントが正常に配信されたかどうかを確認しません。ただし、通知サービスは、一時的なサブスクライバにイベントを配信する場合に、イベントが正常に配信されたかどうかを確認する場合があります。正常に配信されず、
CORBA::TRANSIENT例外が戻されなかった場合、通知サービスでは、サブスクリプションが削除されたと判断し、サブスクリプションを取り消します。配信が失敗して
CORBA::TRANSIENT例外を受信した場合、通知サービスでは、サブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。
デッド状態の一時的なサブスクリプションの自動的な取消しでは、アンサブスクライブされていない一時的なサブスクリプションのクリーンアップ・メカニズムが提供されます。ただし、通知サービスによる配信の確認はイベントがサブスクライバに最初に送信されたときに実行されますが、それから5分が経過し、別のイベントが配信されるまでは次の確認は行われません。したがって、確認が実行される間隔は短くて5分であり、5分経過後に配信するイベントがない場合、その間隔はさらに長くなります。5分という最短の間隔は固定であり、変更することはできません。このため、イベント配信の失敗は必ずしも最初の失敗の時点で検出されるわけではありません。これは、通知サービスで確認が行われたときにのみ検出されます。
チャネル・ファクトリは、イベント・チャネルを検索するために、イベント・ポスト元のアプリケーションとサブスクライバで使用されます。イベント・チャネルは、イベントのポスト、サブスクライブ(サブスクリプションの作成)、およびアンサブスクライブ(サブスクリプションの取消し)に使用されます。
通知サービスでは、Bootstrapオブジェクトを使用して、イベント・チャネル・ファクトリのオブジェクト参照を取得します。これは、
Tobj_Bootstrap::resolve_initial_referencesオペレーションを使用して実行されます。Bootstrapオブジェクトでは、通知サービス・アプリケーションの2つのサービスID (
NotificationServiceと
Tobj_SimpleEventsService)がサポートされています。
NotificationServiceオブジェクトは、CosNotificationサービスAPIを使用するアプリケーションで使用されます。
Tobj_SimpleEventsServiceオブジェクトは、Oracle SimpleEvents APIを使用するアプリケーションで使用されます。
|
|
|
CosNotifyChannelAdmin::EventChannelFactory
|
|
Tobj_SimpleEvents::ChannelFactory
|
注意:
|
リリース8.0のOracle Tuxedo CORBAには、Oracle WebLogic Enterprise の旧リリースで提供されていたOracleクライアント環境オブジェクトが従来のまま含まれており、Tuxedo 8.0 CORBAクライアントで利用できます。Oracle Tuxedo8.0クライアントでは、ブートストラップ処理オブジェクト、セキュリティ・オブジェクトおよびトランザクション・オブジェクトの初期リファレンスの解決に、それらの環境オブジェクトを引き続き使用する必要があります。リリース8.0のOracle Tuxedo CORBAでは、OMGインターオペラブル・ネーミング・サービス(INS)を使用してもブートストラップ処理オブジェクト、セキュリティ・オブジェクトおよびトランザクション・オブジェクトの初期リファレンスを解決できるサポートが追加されています。INSの詳細は、 『CORBAプログラミング・リファレンス』を参照してください。
|
トランザクションに関する動作は、Oracle SimpleEvents APIとCosNotificationサービスAPIと同じです。トランザクション動作をサポートするオペレーションは、
push_structured_eventのみで、
CosNotifyChannelAdmin::StructuredProxyPushConsumerインタフェースおよび
Tobj_SimpleEvents::Channelインタフェースでサポートされます。
それ以外のオペレーションはすべてトランザクションのコンテキストで使用できますが、トランザクション内で実行されるかどうかに関係なく、同じように動作します。
イベントをポストするときの動作は、サブスクリプションのQoSと結びついています。サブスクリプションのイベント配信のQoSが永続的である場合に、イベントがトランザクションのコンテキストでポストされると、配信はトランザクションの結果に影響されます。つまり、トランザクションがコミットされると、通知サービスは通常どおりにイベントをサブスクライバに配信しようとします。トランザクションがロールバックされると、通知サービスはイベントの配信を試行しません。
サブスクライバのサブスクリプションのイベント配信のQoSが一時的である場合に、イベントがトランザクションのコンテキストでポストされると、トランザクションの結果に関係なく、そのイベントの配信が1回試行されます。つまり、トランザクションはイベントが配信されるかどうかに影響を与えず、イベントの配信が1回試行されます。
注意:
|
イベントの配信に関連付けられているトランザクション・コンテキストはありません。ただし、永続的なサブスクリプションの場合は、ポスト元のトランザクションがコミットされたときに、イベントがサブスクライバに配信されるか、管理上のアクションを待つためにエラー・キューに入れられることが通知サービスによって保証されます。
|
ポスト元によって通知サービスにプッシュされるか、サブスクライバに配信されるイベントはすべてCOS構造化イベントで、CORBAベースの通知サービス(CORBAservicesイベント・サービス(
図2-1を参照)を拡張したサービス)で指定されている構造化イベントの定義に準拠します。イベントが(ドメインや型でフィルタリングされるのではなく)内容に基づいてフィルタされる場合や、イベントがOracle Tuxedoアプリケーションにサブスクライブされる場合は、適用される制限が増えます。この制限は、イベントの内容に基づいてデータ型およびフィルタリングに適用されます。次に、それらの制限について説明します。
•
|
固定ヘッダー・セクションは、構造化イベントの作成時に使用可能な3つのフィールド(fixed_header.event_type.domain_name、fixed_header.event_type.type_nameおよびfixed_header.event_type.event_name)で構成されます。イベントがポストされると、これら3つのすべてのフィールドが通知サービスに渡されます。ただし、サブスクリプションの作成時には、最初の2つのフィールド(domain_nameとtype_name)のみを使用してイベントがフィルタされます。これらのフィールドはサブスクリプションで正規表現として定義されます。event_nameフィールドは、サブスクリプションでは使用できません。
|
•
|
変数ヘッダーは、1つの名前/値(NV)ペアつまり優先度で構成されます。優先度の値は1から100の範囲です(一方、CORBA通知サービス仕様の指定では-32767から32767の範囲)。優先度はシステム内部でイベント処理の優先度を決めるために使用されます。優先度が一番高いのは100です。優先度の高いイベントが優先度の低いイベントよりも実際に優先される保証はありません。変数ヘッダーに提供されるサポートは、CORBA通知サービス仕様に指定されているサポートとは2つの点で異なります。まず、1つのフィールドのサポート(優先度)に対して仕様では5つのフィールドです。もう1つは、ユーザー定義フィールドがサポートされますが、それらの内容に対応する処理は行われないことです。ユーザー定義フィールドはただ渡されるだけです。
|
•
|
フィルタ処理可能な本文 は、ゼロまたは1つ以上のNVペアで構成されます。これらのペアの値の型は、 any、 long、 unsigned long、 short、 unsigned short、octet、 char、 float、 double、 string、 boolean、 voidおよび nullに制限されています。これらのフィールドはフィルタ式で使用できます。
|
•
|
残りの本文は、単一の ANYで構成されます。値の型は、 any、 long、 unsigned long、 short、 unsigned short、octet、 char、 float、 double、 string、 boolean、 voidおよび nullに制限されています。このフィールドはフィルタ式では使用できません。
|
イベントの設計は、あらゆる通知サービスの基本です。この設計は、一致するサブスクリプションに配信される情報の量だけでなく、通知サービスの効率とパフォーマンスにも影響します。したがって、計画を慎重に行って、通知サービスが現在のニーズだけでなく将来の規模拡大にも対応できるようにする必要があります。
通知サービスでは、(1)ドメイン名、(2)型名、(3)優先度、(4)フィルタ処理可能データ、(5)本文の残りの5つのレベルのイベント設計がサポートされています。イベントを設計する場合は、ドメイン名と型名を指定する必要があります(優先度とフィルタ処理可能なデータは任意)。選択するドメイン名は各自の業務に関連付けることができます。たとえば、病院は医療業務になるため、病院用の通知サービス・アプリケーションでは、「HEALTHCARE」をドメイン名として選択できます。保険業者の種類別にイベントを分類する場合は、「HMO」や「UNINSURED」を型名として選択できます。支払いを担当する事業者別にイベントをさらに細かく定義する場合は、フィルタ処理可能データを使用して、特定の「HMO_Account」や「Patient_Account」に対する「billing」として事業者を指定できます。
リスト2-1は、この型のイベント設計の例を示しています。
domain_name = ���HEALTHCARE���
type_name = ���HMO���
#Filterable data name/value pairs.
filterable_data.name = ���billing���
filterable_data.value = 4498
filterable_data.name = ���patient_account���
filterable_data.value = 37621
当然、通知サービス・アプリケーションでポストおよび受信されるイベント設計が詳細かつ厳密になればなるほど、通知サービスで処理しなければならないイベントの数が少なくなります。このことは、システム・リソースと構成の要件に直接的に影響します。したがって、イベントを設計するときには十分な注意が必要です。
イベントのフィールド操作言語(FML)フィールド表は、次の機能のいずれかが必要な場合にのみ作成する必要があります。それ以外の場合、FML表は不要です。
•
|
Oracle Tuxedoイベントのポスト元とイベント・サブスクライバの間の(ドメインおよび型フィールドに加えた)イベント・データのフィルタリング
|
•
|
Oracle Tuxedo通知サービスとOracle Tuxedo EventBroker間の相互運用性
|
構造化イベントの
filterable_dataフィールドには、名前/値(NV)のペアのリストが格納されます。イベントのデータは、通常はこのリストに格納されます。FMLフィールド表ファイルのフィールド名は、構造化イベント内の名前と一致する必要があります。フィールドの型は、
carrayを除くすべてのFML型(
long、
short、
double、
float、
char、
string)を使用できます。構造化イベントの値は、フィールド表で定義されている型と同じにする必要があります。
表2-1は、Oracle TuxedoでサポートされているCORBAのAny型を示しており、これらを使用すると、データのフィルタリングとOracle Tuxedoの相互運用性を実現できます。
|
データのフィルタリングとTuxedoの互換運用性サポート
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
リスト2-2は、FMLフィールド表ファイルの例を示しています。
*base 2000は、フィールドのベース番号です。最初のエントリでは、フィールド名が
billing、フィールド番号が
1(ベース番号に基づく値)で、フィールド型が
longになっています。
リスト2-2
データのフィルタリングのFMLフィールド表ファイル
#Field Name Field # Field Type Flags Comments
#----------- ------- ---------- ------ --------
billing 1 long - -
stock_name 2 string - -
price_per_share 3 double - -
number_of_shares 5 long - -
Oracle Tuxedo FMLフィールド表ファイルには、次のガイドラインと制約が適用されます。
•
|
Oracle TuxedoではFML32を使用するため、ベース番号とフィールド番号の合計は101 - 33,554,431に制限されます(両端の番号を含む)。
|
•
|
フィールド機能を備えた他のソフトウェアでFMLが使用される場合は、フィールド番号について別の制約が適用される場合があります。
|
FMLフィールド表ファイルの作成および構成方法の詳細は、
『Oracle Tuxedoコマンド・リファレンス』の
field_tablesおよび
『FMLを使用したOracle Tuxedo ATMIアプリケーションのプログラミング』を参照してください。
Oracle Tuxedoアプリケーションとの相互運用性
Oracle Tuxedo CORBA通知サービスを使用するアプリケーションは、Oracle Tuxedo EventBrokerを使用するOracle Tuxedoアプリケーションと相互運用できます。Oracle Tuxedo通知サービスを使用するアプリケーションでは、Oracle Tuxedo EventBrokerサブスクライバに配信されるイベントをポストしたり、Oracle Tuxedo EventBrokerによってポストされたイベントを受信できます。
このような相互運用性を実現するには、FMLフィールド表の内容をOracle Tuxedoで調整できるように、CosNotification構造化イベントとOracle Tuxedo FMLバッファ間のマッピングを理解する必要があります。考慮すべき状況は、Oracle Tuxedo EventBrokerを介してOracle Tuxedoアプリケーションによって受信されるイベントのポストと、Oracle Tuxedoアプリケーションによって通知サービスのイベント・チャネルにポストされたイベントの受信の2つがあります。
Oracle TuxedoアプリケーションでポストされたイベントをOracle Tuxedoアプリケーションでサブスクライブするには、ポスト時にOracle Tuxedo構造化イベントがFML32およびイベント名にどのようにマッピングされるかについて理解する必要があります。マッピングは次のようになります。
•
|
domain_nameおよびtype_nameは、イベント名を形成するために、 domain_name.type_nameの形式の文字列にまとめられます。これは、 tppostオペレーションで使用されるイベント名(eventnameパラメータ)です。
|
•
|
構造化イベントのフィルタ処理可能な本文と変数ヘッダー部分の各名前/値(NV)ペアは、FML32フィールドにマッピングされます(フィールドがFMLでも定義されている場合)。ドメインを "TMEVT"に設定すると、イベント名は型名と同じになります。
|
Oracle Tuxedoシステム・イベントおよびユーザー・イベントは、Oracle Tuxedoアプリケーションで受信できます。システム・イベントは、アプリケーションではなく、Oracle Tuxedoシステムによって生成されます。ユーザー・イベントはOracle Tuxedoアプリケーションによって生成されます。システム・イベントのリストの詳細は、
『Oracle Tuxedoコマンド・リファレンス』の
EVENTSに関する項を参照してください。システム・イベントおよびユーザー・イベントは、次のようにCosNotification構造化イベントでマッピングされます。
|
|
|
|
|
|
|
|
|
|
|
注意:
|
フィルタ処理可能な本文のフィールドは名前/値のペアで構成され、名前の部分はFMLフィールド名と同じです。
|
|
|
|
Oracle Tuxedoシステムでは、システムの警告と障害に関する定義済のイベントを検出してポストします。たとえば、システム生成のエベントでは、構成の変更、状態の変更、接続の障害およびマシンの分断について報告されます。
Oracle TuxedoアプリケーションによってポストされたイベントをOracle Tuxedoアプリケーションで受信するには、Oracle Tuxedoイベントが格納されているFMLバッファをどのように使用して、Oracle Tuxedo構造化イベントが作成されるのかを理解する必要があります。また、
domain_nameおよび
type_nameとOracle Tuxedoイベント名の関係についても把握しておく必要があります。考慮する必要があるのは、システム・イベントとユーザー・イベントの2つの場合です。
Oracle Tuxedoでは、イベント名の先頭にドット(.)を使用して、システム生成のイベントとアプリケーション定義のイベントを区別します。システム・イベントの例は
.SysNetworkDroppedです。ユーザー・イベントの例は
eventsdroppedです。これらのイベントをサブスクライブするには、次のように通知サービスのサブスクライバ・アプリケーションでサブスクリプションを定義する必要があります。
domain_name =
“TMEVT”
type_name
=“.SysNetworkDropped”
domain_name =
“TMEVT”
type_name
=“eventsdropped”
イベントが受信されると、次のように通知サービスのサブスクライバ・アプリケーションで各イベントが解析されます。
domain_name=
”TMEVT”
type_name=
””
event_name=
””
variable_header=empty
Filterable_data=(FMLバッファの内容)
サブスクリプションを作成する場合は、次のパラメータを指定できます。これらのパラメータはOracleシンプル・イベントAPIおよびCosNotificationサービスAPIをサポートしています。
通知サービスとサブスクライバのサブスクリプションを識別する名前を指定します。アプリケーションでは、システム管理者にとって意味のある名前を使用する必要がありますが、これは、管理者がアプリケーションとサブスクリプション、およびそのサブスクリプションを介してサブスクライバに配信されるイベントを関連付ける主要な手段だからです。このパラメータは任意です(空の文字列を渡すこともできます)。複数のサブスクリプションで同じ名前を使用できます。
subscription_nameの長さは最大で128文字です。
CORBAベースの通知サービス仕様で定義されている構造化イベントの固定ヘッダー部分の
domain_typeフィールドと同じパラメータです。このフィールドは、Telecommunications(通信)、Finance(金融)、Health Care(医療)など、イベントの型が定義されている特定の垂直産業の分野(ドメイン)を識別する文字列です。このパラメータは正規表現のため、フィルタ処理の基準となるドメイン・パターンの設定に使用することもできます。たとえば、Fの文字で始まるすべてのドメインをサブスクライブするには、ドメインを「
F.*」に設定します。正規表現の作成方法の詳細は、
『Oracle Tuxedo ATMI C言語関数リファレンス』の
recompコマンドに関する項を参照してください。
CORBAベースの通知サービス仕様で定義されている構造化イベントの固定ヘッダー部分の
type_nameフィールドと同じパラメータです。このフィールドは、Comm_alarm、StockQuote、VitalSignsなど、ドメイン内でイベントの型を一意に分類する文字列です。このパラメータは正規表現のため、フィルタ処理の基準となるイベントの型のパターンを設定するために使用することもできます。たとえば、Fの文字で始まるすべてのイベント型をサブスクライブするには、型を「
F.*」に設定します。正規表現の作成方法の詳細は、
『Oracle Tuxedo ATMI C言語関数リファレンス』の
recompコマンドに関する項を参照してください。
フィルタ処理可能なデータとフィルタ処理を実行する変数ヘッダーのフィールドの値を指定します。たとえば、ニュース記事のサブスクリプションには、ドメインがNews(ニュース)、型がSports(スポーツ)、data_filterが「Scores > 20」になる場合が考えられます。
このパラメータでは、ブール式でサブスクリプションが一致する必要があるデータを定義します。サポートされるデータ型は、
short、
long、
char、
float、
doubleおよび
stringです。
表2-2は、サポートされるブール式の演算子を示しています。
データのフィルタリングを使用するには、FML表を設定して、サブスクリプションにフィルタを含め、データをフィルタしてイベントをポストする必要があります。
リスト2-3は、これらのタスクの例を示しています。
//Setting up the FML Table
Field table file.
----------------
*base 2000
*Field Name Field # Field Type Flags Comments
----------- ------- --------- ------ ------
StockName 1 string - -
PricePerShare 2 double - -
CustomerId 3 long - -
CustomerName 4 string - -
//Subscription data filtering.
1) "NumberOfShares > 100 && NumberOfShares < 1000"
2) "CustomerId == 3241234"
3) "PricePerShare > 125.00"
4) "StockName == 'BEAS'"
5) "CustomerName %% '.*Jones.*'" // CustomerName contains "Jones"
6) "StockName == 'BEAS' && PricePerShare > 150.00"
//Posting the event.
// C++
CosNotification::StructuredEvent ev;
...
ev.filterable_data[0].name = CORBA::string_dup("StockName");
ev.filterable_data[0].value <<= "BEAS";
ev.filterable_data[1].name = CORBA::string_dup("PricePerShare");
ev.filterable_data[1].value <<= CORBA::Double(175.00);
ev.filterable_data[2].name = CORBA::string_dup("CustomerId");
ev.filterable_data[2].value <<= CORBA::Long(1234567);
ev.filterable_data[3].name = CORBA::string_dup("CustomerName");
ev.filterable_data[3].value <<= "Jane Jones";
構造化イベントを配信するために通知サービスで使用されるコールバック・オブジェクトを指定します。サブスクライバ・アプリケーションはCosNotifyComm::StructuredPushConsumerインタフェースを実装し、通知サービスがイベントを配信する際に呼び出せるようにする必要があります。
注意:
|
コールバック・オブジェクトには、一時的または永続的なオブジェクトのいずれかを使用できます。使用するオブジェクト参照のタイプを決定する場合は、QoSとアプリケーションの実行回数の両方を考慮に入れる必要があります。使用するオブジェクト参照のタイプの決定する際の参考情報については、 表2-3を参照してください。
|
表2-3
共同クライアント/サーバーで一時的なオブジェクト参照と永続的なオブジェクト参照をどちらを使用するか
|
|
|
一時的なオブジェクト参照を使用する必要があります。この場合は、システム・リソースを解放できるように、停止時にサブスクライバ・アプリケーションでアンサブスクライブすることをお薦めしますが、必須ではありません。
|
|
一時的なオブジェクト参照を使用する必要があります。
|
|
永続的なオブジェクト参照を使用し、サブスクライバが停止して再起動するたびに、同じホストとポートが使用されるように、ホストとポートを保存する必要があります。この場合は、双方向のIIOP機能を使用しないことをお薦めします。
注意:
|
永続的なオブジェクト参照はドメイン内ではサポートされないため、共同クライアント/サーバーが使用されている場合は、リモート(Oracle Tuxedoドメインの外側)で使用する必要があります。
|
|
|
永続的なオブジェクト参照を使用できますが、サブスクライバの停止時に、このサブスクライバのイベントがポストされないと保証されないかぎり、この構成は推奨されません。
|
サブスクリプションで必要なサービスの品質を指定します。指定できる値は一時的または永続的のいずれかです。
一時的なサブスクリプションの場合、通知サービスではサブスクライバへのイベント配信が1回だけ試行されます。その試行が失敗するとイベントは破棄されます。通知サービスが
CORBA::TRANSIENT例外を受信しない場合、サブスクライバがシャットダウンされているか他の理由で利用できないと判断し、サブスクリプションを取り消します。配信が失敗して
CORBA::TRANSIENT例外を受信した場合、通知サービスでは、サブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。
永続的なサブスクリプションの場合、配信の最初の試行が失敗すると、通知サービスでそのイベントが保留キューに保持され、構成可能な再試行回数の上限に達するまでサブスクリプションの配信が繰り返されます。再試行回数の上限に達すると、イベントはエラー・キューに移動されます。エラー・キューに保持されたイベントは、システム管理者によって処理されます。システム管理者は、エラー・キューからイベントを削除するか(事実上の破棄)、または再び配信できるように保留キューに戻します。
注意:
|
永続的なサブスクリプションの場合、通知サービスでは常にコールバック・オブジェクトを双方向で呼び出してイベントを配信します。共同クライアント/サーバーが orb->runを呼び出す前にコールバック・オブジェクト(イベントの受信側)をアクティブにしない状況で、通知サービスがコールバック・オブジェクトを呼び出す場合、POAに関するかぎり、コールバック・オブジェクトは存在しません。この場合は、 CORBA::OBJECT_NOT_EXIST例外が戻されます。通知サービスが CORBA::OBJECT_NOT_EXIST例外を受信すると、サブスクリプションとイベントを削除し、それ以外の場合は、サブスクリプションが保持され、イベントが再試行されます。
|
Oracleシンプル・イベント・アプリケーション・プログラミング・インタフェース(API)の特徴は、簡単で使いやすいことです。この機能は、Oracle Tuxedo EventBrokerの機能と類似しています。
Oracleシンプル・イベントAPIは、次のインタフェースで構成されます(
図2-2を参照)。
•
|
Tobj_SimpleEvents::Channel
|
•
|
Tobj_SimpleEvents::ChannelFactory
|
•
|
CosNotifyComm::StructuredPushConsumer
|
Tobj_SimpleEvents::Channelインタフェースおよび
Tobj_SimpleEvents::ChannelFactoryインタフェースは、通知サービスによって実装され、次のとおりです。
注意:
|
この項で説明するCosNotificationサービスのクラスの詳細は、 tuxdir/includeディレクトリにあるCosNotificationサービスIDLファイルで完全に記述されています。
|
注意:
|
サポートされていないクラス・オペレーションを使用する場合は、 CORBA::NO_IMPLEMENT例外が発生します。
|
TOBJ_SimpleEvents::Channelインタフェース
チャネル・インタフェースは次のように使用されます。
•
|
サブスクライバで使用され、イベントをサブスクライブおよびアンサブクスライブしたり、サブスクリプションが存在するかどうかを確認します。
|
•
|
ポスト元で使用され、通知サービスにイベントポストします。
|
このインタフェースには、次のオペレーションがあります。
このインタフェースのCORBA IDLは次のとおりです。
module Tobj_SimpleEvents
{
typedef long SubscriptionID;
typedef string RegularExpression;
typedef string FilterExpression;
const SubscriptionType TRANSIENT_SUBSCRIPTION = 0;
const SubscriptionType PERSISTENT_SUBSCRIPTION = 1;
interface Channel
{
void push_structured_event(
in CosNotification::StructuredEvent event);
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer);
boolean exists( in SubscriptionID id );
void unsubscribe( in SubscriptionID id );
};
};
これらのオペレーションについては、次の項で説明します。
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
// The filter expression must length 1 and the name must
// be TRANSIENT_SUBSCRIPTION or PERSISTENT_SUBSCRIPTION.
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer
);
次のいずれかの問題を示します。
Tobj_Events::SUB_INVALID_FILTER_EXPRESSION
Tobj_Events::SUB_UNSUPPORTED_QOS_VALUE
次のいずれかの問題を示します。
Tobj_Events::SUB_DOMAIN_BEGINS_WITH_SYSEV
Tobj_Events::SUB_EMPTY_DOMAIN
Tobj_Events::SUB_EMPTY_TYPE
Tobj_Events::SUB_DOMAIN_AND_TYPE_TOO_LONG
Tobj_Events::SUB_FILTER_TOO_LONG
Tobj_Events::SUB_NAME_TO_LONG
Tobj_Events::TRANSIENT_ONLY_CONFIGURATION
Tobj_Events::SUB_NIL_CALLBACK_REF
イベントをサブスクライブするには、このオペレーションを使用します。このオペレーションは、通知サービスのサブスクライバ・アプリケーションによって呼び出され、特定のイベントへのサブスクリプションが作成されます。サブスクリプション名、ドメイン名、型名、データ・フィルタ、サービスの品質、およびサブスクライバのコールバック・オブジェクトの オブジェクト参照が渡されます。コールバック・オブジェクトでは、CosNotifyComm::StructuredPushConsumer IDLインタフェースが実装されます。
注意:
|
停止および再起動するサブスクライバでは、 subscription_idを永続ストレージに書き込む必要があります。
|
一意のサブスクリプション識別子を戻します。このオペレーションの結果は即座には現れません。このオペレーションからの復帰とイベント配信の実際の開始の間には遅延が発生する場合があります。遅延時間の長さは、構成によっては大きくなる場合があります。遅延時間に影響する要因の詳細は、
-23ページの「データベースの同期」を参照してください。
注意:
|
停止と再起動を1回のみ実行する通知サービス・アプリケーションでは、 subscription_idを使用することで、サブスクリプションが自動的に取り消されたか、またはシステム管理者によって取り消されたかを確認できます。
|
subscription_id = channel->subscribe(
subscription_name,
"News", // domain
���Sports���, // type
"", // No data filter.
qos,
news_consumer.in()
);
void unsubscribe( in SubscriptionID id );
次の問題を示します。
Tobj_Events::INVALID_SUBSCRIPTION_ID
アンサブスクライブに使用されます。サブスクライバ・アプリケーションでは、このオペレーションを使用してサブスクリプションを終了します。このオペレーションから復帰すると、それ以降にイベントは配信できません。入力パラメータは、サブスクライブ時に取得した
SubscriptionIDの1つです。
注意:
|
このオペレーションの結果は即座には現れません。このオペレーションからの復帰後も、サブスクライバでは一定の時間は継続してイベントを受信できます。この時間は、構成によっては長くなる場合があります。この時間に影響する要因の詳細は、 -23ページの「データベースの同期」を参照してください。
|
channel->unsubscribe(subscription_id);
Channel::push_structured_event
void
push_structured_event(
in CosNotification::StructuredEvent
notification
);
このパラメータには、CosNotificationサービス仕様で定義されている構造化イベントが格納されます。
サブスクリプションの次の問題のいずれかを示します。
Tobj_Events::POST_UNSUPPORTED_VALUE_IN_ANY
Tobj_Events::POST_UNSUPPORTED_PRIORITY_VALUE
Tobj_Events::POST_DOMAIN_CONTAINS_SEPARATOR
Tobj_Events::POST_TYPE_CONTAINS_SEPARATOR
Tobj_Events::POST_SYSTEM_EVENTS_UNSUPPORTED
Tobj_Events::POST_EMPTY_DOMAIN
Tobj_Events::POST_EMPTY_TYPE
Tobj_Events::POST_DOMAIN_AND_TYPE_TOO_LONG
ポスト元アプリケーションで使用され、通知サービスにイベントをポストします。
channel->push_structured_event(notification);
boolean exists(in SubscriptionID subscription_id);
次の問題を示します。
Tobj_Events::INVALID_SUBSCRIPTION_ID
subscription_idが、CosNotificationサービスAPIを使用して作成されるサブスクリプション用の場合は、この例外が常に戻されます。
サブスクライバ・アプリケーションで使用され、サブスクリプションが存在するかどうかを確認します。システム管理者はサブスクリプションを手動で削除、通知サービスでは一時的なサブスクリプションを自動的に削除できるため、サブスクライバ・アプリケーションでは、必要に応じてサブスクリプションを再作成できるように、このオペレーションを使用する必要があります。このオペレーションで使用される
subscription_idは、サブスクライブ時に取得したものと同じです。
ブール値を戻します(サブスクリプションが存在する場合はTRUE、存在しない場合はFALSEを戻します)。
if channel->exists (subscription_id) {
// The subscription is still valid.
} else {
// The subscription no longer exists.
TOBJ_SimpleEvents::ChannelFactoryインタフェース
ChannelFactoryインタフェースは、イベント・チャネルの検索に使用されます。このインタフェースでは、
find_channelという1つのオペレーションが提供されます。
このインタフェースのCORBA IDLは次のとおりです。
module Tobj_SimpleEvents
{
typedef long ChannelID;
interface ChannelFactory
{
Channel find_channel(
in ChannelID channel_id // Must be DEFAULT_CHANNEL
);
};
};
Channel_Factory::find_channel
Channel find_channel(
in ChannelID channel_id );
このリリースのOracle Tuxedoでは、イベント・チャネルは1つしかないため、渡される
ChannelIDは
Tobj_SimpleEvents::DEFAULT_CHANNEL (C++)に設定する必要があります。
Tobj_Events::INVALID_CHANNEL_ID
ポスト元アプリケーションおよびサブスクライバ・アプリケーションで使用されます。このオペレーションを使用すると、イベント・チャネルを検索し、それを使用してポスト元でイベントをポストし、サブスクライバでイベントをサブスクライブおよびアンサブスクライブできます。
デフォルトのイベント・チャネルのオブジェクト参照を戻します。
channel_factory->find_channel(
Tobj_SimpleEvents::DEFAULT_CHANNEL);
この項では、Oracle Tuxedo CORBA通知サービスによって実装されるCosNotificationサービスで定義されるオペレーションについて説明します。これらのオペレーションは、オペレーションのセット全体のサブセットにすぎません。このサブセットは、Oracleシンプル・イベントAPIのかわりに使用可能な機能的に完全なAPIです。
このAPIは、Oracleシンプル・イベントAPIよりも複雑です。この理由は2つあります。1つ目は、CosNotificationサービスAPIが複雑になっていることです。2つ目は、CosNotificationサービスAPIのOracle Tuxedo実装では、サポートされるオペレーションに制約が追加されることです。このように複雑でも、パフォーマンスや柔軟性の面で利点はないため、できるかぎりOracleシンプル・イベントAPIを使用することをお薦めします。
CosNotification APIは、移植性を目的に、できるかぎり標準のAPIを使用する必要のある場合に用意されています。このAPIは、機能面でシンプル・イベントAPIの機能を超える利点はありません。このAPIを使用して開発されるアプリケーションには十分な移植性がありますが、完全ではありません。この理由は、完全な移植性を実現できるほど、CosNotificationサービスAPIが十分にサポートされていないことです。たとえば、CORBAベースの通知サービスで必要なフィルタリングの文法は、COS Trader文法に基づいています。Oracle Tuxedoではこの文法ではなく、Oracle Tuxedo EventBroker文法に基づく別の文法をサポートしているため、フィルタリングが必要なアプリケーションには移植性がありません。同じことがQoSでも当てはまり、CosNotificationサービスAPIでは、CORBAベースの通知サービスの標準サービスの品質ではなく、別のサービス品質がサポートされています。
サポートされているCosNotificationサービスのクラスの概要
図2-3は、このリリースのOracle Tuxedoで(完全または部分的に)に実装されているCosNotificationサービスのクラスとそれらの関係を示しています。
•
|
CosNotifyChannelAdmin::EventChannelFactoryクラス
|
このクラスは、イベント・ポスト元アプリケーションとサブスクライバ・アプリケーションで使用されます。サポートするのは
get_channel_factoryオペレーションで、イベントのポスト、サブスクライブおよびアンサブスク時にライブチャネル・ファクトリを取得するのに使用されます。
•
|
CosNotifyChannelAdmin::EventChannelクラス
|
このクラスは、イベント・ポスト元アプリケーションとサブスクライバ・アプリケーションで使用されます。次の3つのオペレーションがサポートされます。
•
|
default_consumer_admin: イベント・サブスクライバ・アプリケーションで使用され、コンシューマ管理のオブジェクトを取得します。
|
•
|
default_supplier_admin: イベント・ポスト元アプリケーションで使用され、サプライヤ管理のオブジェクトを取得します。
|
•
|
default_filter_factory: イベント・サブスクライバ・アプリケーションで使用され、フィルタ・ファクトリ・オブジェクトを取得します。
|
•
|
CosNotifyChannelAdmin::SupplierAdminクラス
|
このクラスは、イベント・ポスト元アプリケーションで使用されます。サポートするのは
obtain_notification_push_consumerオペレーションです。ポスト元アプリケーションでは、このオペレーションを使用して、通知サービスにイベントをポストするのに使用するプロキシ・プッシュ・コンシューマ・オブジェクトを作成します。
•
|
CosNotifyChannelAdmin::StructuredProxyPushConsumerクラス
|
このクラスは、イベント・ポスト元アプリケーションで使用されます。次のオペレーションをサポートします。
•
|
connect_structured_push_supplier: イベント・ポスト元アプリケーションで使用され、プロキシ・プッシュ・サプライヤを通知サービスのイベント・・チャネルに接続します。
|
•
|
push_structured_event: イベント・ポスト元アプリケーションで使用され、イベントを通知サービスのイベント・チャネルにポストします。
|
•
|
disconnect_structured_push_consumer: イベント・ポスト元アプリケーションで使用され、プロキシ・プッシュ・サプライヤを通知サービスのイベント・チャネルから切断します。
|
•
|
CosNotifyFilter::FilterFactoryクラス
|
このクラスは、イベント・サブスクライバ・アプリケーションで使用され、フィルタ・オブジェクトを作成します。サポートするのは
create_filterオペレーションです。フィルタ・オブジェクトでは、ドメイン、型およびフィルタできるデータを含むすべてのデータのフィルタリングが提供されます。
•
|
CosNotifyFilter::Filterクラス
|
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。次のオペレーションをサポートします。
•
|
add_contraintsオペレーション: フィルタのドメイン、型およびデータ・フィルタの設定に使用されます。
|
•
|
destroyオペレーション: フィルタ・オブジェクトの破棄に使用されます。
|
•
|
CosNotifyChannelAdmin::ConsumerAdminクラス
|
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。次のオペレーションをサポートします。
•
|
obtain_notification_push_supplier: イベント・サブスクライバ・アプリケーションで使用され、サブスクライバのコールバック・オブジェクトにイベント配信するのに使用するプロキシ・プッシュ・サプライヤ・オブジェクトを作成します。
|
•
|
get_proxy_supplier: イベント・サブスクライバ・アプリケーションで使用され、プロキシ・プッシュ・サプライヤ・オブジェクトのオブジェクト参照を取得します。このオペレーションは、サブスクライバ・アプリケーションが停止して再起動し、サブスクリプションを取り消す場合にのみ使用されます。これは、サブスクライバが最初の実行のオブジェクト参照を破棄し、次の実行で再取得する必要があるためです。サブスクライバでは、最初の実行のオブジェクト参照を次の実行で再利用することはできません。
|
•
|
CosNotifyChannelAdmin::StructuredProxyPushSupplierクラス
|
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。次のオペレーションをサポートします。
•
|
connect_structured_push_consumer: イベント・サブスクライバ・アプリケーションで使用され、サブスクライバをプロキシ・プッシュ・サプライヤに接続します。
|
•
|
set_qos: イベント・サブスクライバ・アプリケーションで使用され、サブスクリプションのサービス品質を設定します。
|
•
|
add_filter: イベント・サブスクライバ・アプリケーションで使用され、フィルタ・オブジェクトをサブスクリプションに追加します。
|
•
|
get_filter: アンサブスクライブ操作の実行時にイベント・サブスクライバ・アプリケーションで使用され、サブスクリプションに関連付けられているフィルタを取得します。このオペレーションは、サブスクライバ・アプリケーションが停止して再起動する場合にのみ使用されます。
|
•
|
disconnect_structured_push_supplier: イベント・サブスクライバ・アプリケーションで使用され、アンサブスクライブします。
|
•
|
CosNotifyComm::StructuredPushConsumer
|
このインタフェースは、イベント・サブスクライバ・アプリケーションで実装されます。サポートするのは
push_structured_event オペレーションです。通知サービスでは、このオペレーションを呼び出してイベントをサブスクライバに配信します。
CosNotificationサービスのクラスの詳しい説明
この項では、このリリースのOracle Tuxedoで実装されるCosNotificationサービスのクラスについて説明します。これらのクラスの詳細は、
tuxdir/includeディレクトリにあるCosNotificationサービスIDLファイルで完全に記述されています。
注意:
|
サポートされていないクラス・オペレーションを使用する場合は、 CORBA::NO_IMPLEMENT例外が発生します。
|
CosNotifyFilter::Filterクラス
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyFilter
{
interface Filter {
ConstraintInfoSeq add_constraints (
in ConstraintExpSeq constraint)
raises (InvalidConstraint);
void destroy();
};
}; //CosNotifyFilter
CosNotifyFilter::Filter::add_constraints
フィルタ・オブジェクトのドメイン、型およびデータ・フィルタのパラメータを設定します。
ConstraintInfoSeq add_constraints (
in ConstraintExpSeq constraint)
raises (InvalidConstraint);
CosNotifyFilter::InvalidConstraint
次の問題を示します。
Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.
Tobj_Notification::SUB_ADD_CONS_ON_TIMED_OUT_FILTER
Tobj_Notification::SUB_MULTIPLE_CALLS_TO_ADD_CONS
Tobj_Notification::SUB_MULTIPLE_CONSTRAINTS_IN_LIST
Tobj_Notification::SUB_MULTIPLE_TYPES_IN_CONSTRAINT
Tobj_Notification::SUB_SYSTEM_EVENTS_UNSUPPORTED
Tobj_Events::SUB_DOMAIN_BEGINS_WITH_SYSEV
Tobj_Events::SUB_EMPTY_DOMAIN
Tobj_Events::SUB_EMPTY_TYPE
Tobj_Events::SUB_FILTER_TOO_LONG
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクライブするイベントの種類を定義します。設定するのは、フィルタ・オブジェクトのドメイン、型およびデータ・フィルタのパラメータです。これらのパラメータの詳細は、
-11ページの「サブスクリプションの作成時に使用するパラメータ」を参照してください。
注意:
|
add_constraintsオペレーションのOracle Tuxedo実装は、(1) 1回のみ呼出し可能で、(2) フィルタがプロキシ・オブジェクトに追加される前に呼び出す必要があり、(3)イベント型が1つしかない単一の制約でのみ構成される必要があります。
|
空のリストを戻します(呼出し側で無視することをお薦めします)。
// set the filtering parameters
// (domain = "News", type, and no data filter)
CosNotifyFilter::ConstraintExpSeq constraints;
constraints.length(1);
constraints[0].event_types.length(1);
constraints[0].event_types[0].domain_name =
CORBA::string_dup("News");
constraints[0].event_types[0].type_name =
CORBA::string_dup (���Sports���);
// no data filter
constraints[0].constraint_expr = CORBA::string_dup(""); CosNotifyFilter::ConstraintInfoSeq_var
add_constraints_results = // ignore this returned value
filter->add_constraints(constraints);
CosNotifyFilter::Filter::destroy
次の問題を示します。
Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.
アンサブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、ターゲットのフィルタ・オブジェクトを破棄します。
注意:
|
対応するサブスクリプションを取り消す準備ができるまでは、フィルタ・オブジェクトを破棄しないでください。
|
CosNotifyFilter::FilterFactoryクラス
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyFilter
{
interface FilterFactory {
Filter create_filter (
in string constraint_grammar)
raises (InvalidGrammar);
destroy();
};
}; //
CosNotifyFilter
CosNotifyFilter::FilterFactory::create_filter
サブスクリプションに配信されるイベントを決定します。
Filter create_filter (
in string constraint_grammar)
raises (InvalidGrammar);
CosNotifyFilter::InvalidGrammar
constraint_grammarがサポートされないことを示します。
サブスクライバ・アプリケーションで使用され、新しいフィルタ・オブジェクトを作成します。このフィルタは、サブスクリプションに配信されるイベントの決定に使用されます。サブスクライバでは、5分以内にフィルタを設定してプロキシに追加する必要があり、そうしないと、フィルタは破棄されます。フィルタの文法は
Tobj_Notification::Constraint_grammarに設定する必要があり、そうしないと、
InvalidGrammar例外が発生します。
filter_factory->create_filter(
Tobj_Notification::CONSTRAINT_GRAMMAR
);
CosNotifyChannelAdmin::StructuredProxyPushSupplierクラス
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface StructuredProxyPushSupplier :
ProxySupplier,
CosNotifyComm::StructuredPushSupplier {
void connect_structured_push_consumer (
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );
};
// The following operations are inherited.
void
set_qos(in QoSProperties qos)
raises (UnsupportedQoS);
FilterID
add_filter (in Filter new_filter );
Filter
get_filter( in FilterID filter )
raises ( FilterNotFound);
void
disconnect_structured_push_supplier();
readonly attribute ProxyType
MyType;
};
}; //CosNotifyChannelAdmin
CosNotifyChannelAdmin::StructuredProxyPushSupplier:: connect_structured_push_consumer
void connect_structured_push_consumer (
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );
CosEventChannelAdmin::TypeError
Tobj_Events::SUB_NIL_CALLBACK_REF
Tobj_Events::SUB_DOMAIN_AND_TYPE_TOO_LONG
Tobj_Events::SUB_NAME_TO_LONG
Tobj_Events::TRANSIENT_ONLY_CONFIGURATION
Tobj_Notification::SUBSCRIPTION_DOESNT_EXIST
CosEventChannelAdmin::AlreadyConnected
connect_structured_push_consumerオペレーションがすでに呼び出されていることを示します。
このオペレーションはサブスクライブ時に使用します。このオペレーションはサブスクライバ・アプリケーションで使用され、イベントをサブスクライブします。
push_consumer パラメータでは、サブスクライバのコールバック・オブジェクトを指定します。
connect_structured_push_consumerが呼び出されると、通知サービスがコールバック・オブジェクトの
push_structured_eventオペレーションを呼び出し、イベントをサブスクライバに送信します。
connect_structured_push_consumerがすでに呼び出されている場合は、
AlreadyConnected例外が発生します。
注意:
|
connect_structured_push_consumerを呼び出す前に、 set_qosと add_filterを呼び出す必要があります。
|
subscription->connect_structured_push_consumer(
news_consumer.in()
);
CosNotifyChannelAdmin::StructuredProxyPushSupplier::set_qos
void set_qos(in QoSProperties qos)
raises (UnsupportedQoS);
Tobj_Notification::SUB_MULTIPLE_CALLS_TO_SET_QOS
Tobj_Notification::SUB_CANT_SET_QOS_AFTER_CONNECT
Tobj_Notification::SUBSCRIPTION_DOESNT_EXIST
Tobj_Notification::SUB_UNSUPPORTED_QOS_VALUE
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクリプションのQoSを設定します。サブスクライバがリクエストしているサービス品質のプロパティ設定をカプセル化する名前/値ペアのシーケンスを入力パラメータとして使用します。
QoSには、サブスクリプションのタイプとサブスクリプションの名前の2つの構成要素があります。サブスクリプションのタイプは、名前/値のペアを構成して設定され、名前は
Tobj_Notification::SUBSCRIPTION_TYPE、値は
Tobj_Notification::PERSISTENT_SUBSCRIPTIONまたは
Tobj_Notification::TRANSIENT_SUBSCRIPTIONのいずれかになります。使用方法の詳細は、
-2ページの「サービスの品質」を参照してください。
サブスクリプションの名前は、名前/値のペアを構成して設定され、名前は
Tobj_Notification::SUBSCRIPTION_NAME、値はユーザー定義の文字列です。
CosNotification::QoSProperties qos;
qos.length(2);
qos[0].name =
CORBA::string_dup(Tobj_Notification::SUBSCRIPTION_NAME);
qos[0].value <<= ���MySubsription���;
qos[1].name =
CORBA::string_dup(Tobj_Notification::SUBSCRIPTION_TYPE);
qos[1].value <<=
Tobj_Notification::TRANSIENT_SUBSCRIPTION;
subscription->set_qos(qos);
CosNotifyChannelAdmin::StructuredProxyPushSupplier::add_filter
サブスクライバのコールバック・オブジェクトにフィルタ・オブジェクトを設定します。
add_filter(
in Filter new_filter
);
Tobj_Notification::SUB_MULTIPLE_CALLS_TO_SET_FILTER
Tobj_Notification::SUB_ADD_FILTER_AFTER_CONNECT
Tobj_Notification::SUB_NIL_FILTER_REF
Tobj_Notification::SUB_NO_CUSTOM_FILTERS
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクライバのコールバック・オブジェクトにフィルタ・オブジェクトを設定します。このオペレーションを使用するアプリケーションが停止して再起動される場合は、
filter_idを永続ストレージに書き込む必要があります。
注意:
|
このオペレーションは、(1)サブスクライバのコールバック・オブジェクトが接続された後に呼び出したり(前述の connect_structured_push_consumerを参照)、(2)複数回呼び出すことはできず、(3)呼び出す場合は、フィルタ制約式がフィルタに存在している必要があります( CosNotifyFilter::Filter add_constraintsを参照)。
|
注意:
|
追加できるのは、イベント・チャネルのデフォルトのファクトリで作成されるフィルタのみです。
|
CosNotifyFilter::FilterID filter_id =
subscription->add_filter(filter.in());
CosNotifyChannelAdmin::StructuredProxyPushSupplier::get_filter
サブスクライバのコールバック・オブジェクトに現在関連付けられているフィルタのオブジェクト参照を取得します。
Filter get_filter( in FilterID filter )
raises ( FilterNotFound);
CosNotifyChannelAdmin::FilterNotFound
再起動可能なサブスクライバでアンサブスクライブする場合に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクライバのコールバック・オブジェクトに現在関連付けられているフィルタのオブジェクト参照を取得します。渡される
FilterIDは、サブスクライバのStructuredProxyPushSupplierオブジェクトで有効になっている必要があります。イベント・チャネルに関連付けられているプロキシ・オブジェクトで
FilterIDが有効でないと、
FilterNotFound例外がスローされます。このオペレーションは、停止して再起動するサブスクライバでのみ使用されます。
このオペレーションには、使用方法に関して次の制約とガイドラインが適用されます。
a.
|
このオペレーションから戻されるフィルタのオブジェクト参照は、比較操作に使用できません。
|
b.
|
このオペレーションから戻されるフィルタのオブジェクト参照は CosNotifyFilter::Filter::destroyオペレーションで使用できますが、変更したりプロキシ・オブジェクトに追加できないため、ほとんど使用されません。
|
サブスクライバのコールバック・オブジェクトに現在関連付けられているフィルタのオブジェクト参照を戻します。
CosNotify::Filter_var filter =
subscription->get_filter( filter_id() );
CosNotifyChannelAdmin::StructuredProxyPushSupplier::
disconnect_structured_push_supplier
void disconnect_structured_push_supplier();
切断するサブスクリプションが存在しないことを示します。
アンサブスクライブ時にサブスクライバ・アプリケーションで使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、通知サービスサブスクライバのコールバック・オブジェクト間の接続を終了します。
注意:
|
このオペレーションでは、イベントの配信を即座に停止することはありません。このオペレーションからの復帰後も、サブスクライバでは一定の時間は継続してイベントを受信できます。
|
subscription->disconnect_structured_push_supplier();
CosNotifyChannelAdmin::StructuredProxyPushSupplier::MyType
Always returns CosNotifyChannelAdmin::PUSH_STRUCTURED proxy.
readonly attribute ProxyType MyType
CosNotifyChannelAdmin::PUSH_STRUCTUREDプロキシを常に戻します。
CosNotifyChannelAdmin::StructuredProxyPushConsumerクラス
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface StructuredProxyPushConsumer :
ProxyConsumer,
CosNotifyComm::StructuredPushConsumer {
void connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
// The following operations are inherited.
readonly attribute MyType;
void push_structured_event(
in CosNotification::StructuredEvent notification )
raises( CosEventComm::Disconnected );
void disconnect_structured_push_consumer();
};
}; \\StructuredProxyPushConsumer
CosNotifyChannelAdmin::StructuredProxyPushConsumer::
connect_structured_push_supplier
Prepares the Notification Service to receive an event.
void connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
CosEventChannelAdmin::AlreadyConnected
イベントのポスト時にポスト元アプリケーションで使用されます。イベントを受信できるように通知サービスを準備するには、このオペレーションを呼び出す必要があり、このオペレーションを使用する場合は、NILを渡す必要があります。使用順序は次のとおりです。
2.
|
このオペレーションを使用して、通知サービスに接続し、NILを渡します。
|
4.
|
ポスト元プログラムを終了する前に、接続を終了します。
|
proxy_push_consumer->connect_structured_push_supplier(
CosNotifyComm::StructuredPushSupplier::_nil()
);
CosNotifyChannelAdmin::StructuredProxyPushConsumer::
push_structured_event
void push_structured_event(
in CosNotification::StructuredEvent notification )
raises( CosEventComm::Disconnected );
CosEventComm::Disconnected
Tobj_Events::POST_UNSUPPORTED_VALUE_IN_ANY
Tobj_Events::POST_UNSUPPORTED_PRIORITY_VALUE
Tobj_Events::POST_DOMAIN_CONTAINS_SEPARATOR
Tobj_Events::POST_TYPE_CONTAINS_SEPARATOR
Tobj_Events::POST_SYSTEM_EVENTS_UNSUPPORTED
Tobj_Events::POST_EMPTY_DOMAIN
Tobj_Events::POST_EMPTY_TYPE
Tobj_Events::POST_DOMAIN_AND_TYPE_TOO_LONG
イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、イベント・チャネルにイベントをポストします。
proxy_push_consumer->push_structured_event(notification);
CosNotifyChannelAdmin::StructuredProxyPushConsumer::
disconnect_structured_push_consumer
void disconnect_structured_push_consumer();
イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、イベントのポストを停止します。入力パラメータは不要で、値は戻されません。次の順序で使用することをお薦めします。
2.
|
ポスト元アプリケーションの実行ごとに接続および切断します。
|
proxy_push_consumer->disconnect_structured_push_consumer();
CosNotifyChannelAdmin::StructuredProxyPushConsumer::MyType
Always returns CosNotifyChannelAmdmin::PUSH_STRUCTURED proxy.
readonly attribute ProxyType MyType
CosNotifyChannelAmdmin::PUSH_STRUCTUREDプロキシを常に戻します。
CosNotifyChannelAdmin::ConsumerAdminクラス
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface ConsumerAdmin :
CosNotification::QoSAdmin,
CosNotifyComm::NotifySubscribe,
CosNotifyFilter::FilterAdmin,
CosEventChannelAdmin::ConsumerAdmin {
ProxySupplier obtain_notification_push_supplier (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )
ProxySupplier get_proxy_supplier (
in ProxyID proxy_id )
raises ( ProxyNotFound );
};
}; //CosNotifyChannelAdmin
CosNotifyChannelAdmin::ConsumerAdmin::
obtain_notification_push_supplier
Creates proxy push supplier objects.
ProxySupplier obtain_notification_push_supplier (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )
CosNotifyChannelAdmin::AdminLimitExceeded
Tobj_Notification::SUB_UNSUPPORTED_CLIENT_TYPE
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、プロキシ・プッシュ・サプライヤ・オブジェクトを作成します。サポートされるのは構造化イベントです(
ANY_EVENTと
SEQUENCE_EVENT ClientTypesはサポートされません)。このため、
ClientType入力パラメータは
CosNotifyComm::STRUCTURED_EVENTに設定する必要があります。サブスクライバを停止して再起動する場合で、サブスクリプションがプログラムの複数の実行にまたがって存続する場合は、このオペレーションによって戻される
ProxyIDを永続的に保存する必要があります。サブスクライバでは、プロキシ・サプライヤを
CosNotifyChannelAdmin::StructuredProxyPushSupplierにナロー変換する必要があります。必要なすべてのオペレーションは、5分以内に完了する必要があります。
注意:
|
停止と再起動を1回のみ実行する通知サービス・アプリケーションでは、 proxy_idを使用することで、サブスクリプションが自動的に取り消されたか、またはシステム管理者によって取り消されたかを確認できます。
|
このオペレーションでは、プロキシのオブジェクト参照が戻されます。新しい
proxy_idも
proxy_id出力パラメータで戻されます。
CosNotifyChannelAdmin::ProxySupplier_var generic_proxy =
consumer_admin->obtain_notification_push_supplier(
CosNotifyChannelAdmin::STRUCTURED_EVENT,
proxy_id
);
CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxy =
CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(
generic_proxy.in ()
);
CosNotifyChannelAdmin::ConsumerAdmin::get_proxy_supplier
コンシューマ管理オブジェクトの
obtain_notification_push_supplierオペレーションを使用して作成されるプロキシ・プッシュ・サプライヤ・オブジェクトを戻します。
ProxySupplier get_proxy_supplier (
in ProxyID proxy_id )
raises ( ProxyNotFound );
CosNotifyChannelAdmin::ProxyNotFound
アンサブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、コンシューマ管理オブジェクトの
obtain_notification_push_supplierオペレーションを使用して作成されるプロキシ・プッシュ・サプライヤ・オブジェクトを戻します。
ProxyID入力パラメータでは、プロキシ・オブジェクトを一意に識別します。呼出し側では、一時的なサブスクリプションの配信エラーまたは
ntsadmin管理コマンドによってプロキシ・オブジェクトが破棄される可能性があることを認識している必要があります。プロキシ・オブジェクトが破棄されると、このオブジェクトに関連付けられている
ProxyIDが無効になります。
ProxyIDが無効になると、
ProxyNotFound例外が発生します。サブスクライバでは、プロキシ・サプライヤを
CosNotifyChannelAdmin::StructuredProxyPushSupplierにナロー変換する必要があります。
CosNotifyChannelAdmin::ProxySupplier_var generic_proxy =
m_consumer_admin->get_proxy_supplier(
m_subscription_info.news_proxy_id()
);
CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxy =
CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(
generic_proxy.in()
);
CosNotifyChannelAdmin::SupplierAdminクラス
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface SupplierAdmin :
CosNotification::QoSAdmin,
CosNotifyComm::NotifyPublish,
CosNotifyFilter::FilterAdmin,
CosEventChannelAdmin::SupplierAdmin {
ProxyConsumer obtain_notification_push_consumer (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
};
}; //SupplierAdmin
CosNotifyChannelAdmin::SupplierAdmin::
obtain_notification_push_consumer
Creates proxy push consumer objects.
ProxyConsumer obtain_notification_push_consumer (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
CosNotifyChannelAdmin::AdminLimitExceeded
Tobj_Notification::SUB_UNSUPPORTED_CLIENT_TYPE
イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、プロキシ・プッシュ・コンシューマ・オブジェクトを作成します。
ClientTypeは
"CosNotifyChannelAdmin::STRUCTURED_EVENT"に設定する必要があります。戻される
ProxyIDは無視してください。プロキシ・コンシューマでは、プロキシ・サプライヤを
CosNotifyChannelAdmin::StructuredProxyPushConsumerにナロー変換する必要があります。
注意:
|
停止と再起動を1回のみ実行する通知サービス・アプリケーションでは、 proxy_idを使用することで、サブスクリプションが自動的に取り消されたか、またはシステム管理者によって取り消されたかを確認できます。
|
このオペレーションでは、プロキシのオブジェクト参照が戻されます。新しい
proxy_idも
proxy_id出力パラメータで戻されます。
CosNotifyChannelAdmin::ProxyConsumer_var generic_proxy_consumer =
supplier_admin->obtain_notification_push_consumer(
CosNotifyChannelAdmin::STRUCTURED_EVENT,
proxy_id
);
CosNotifyChannelAdmin::StructuredProxyPushConsumer_var
proxy_push_consumer =
CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(
generic_proxy_consumer
);
CosNotifyChannelAdmin::EventChannelクラス
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface EventChannel :
CosNotification::QoSAdmin,
CosNotification::AdminPropertiesAdmin,
CosEventChannelAdmin::EventChannel {
readonly attribute ConsumerAdmin default_consumer_admin;
readonly attribute SupplierAdmin default_supplier_admin;
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;
};
}; //CosNotifyChannelAdmin
CosNotifyChannelAdmin::EventChannel::
ConsumerAdmin default_consumer_admin
ConsumerAdminオブジェクトを取得します。
readonly attribute ConsumerAdmin default_consumer_admin;
サブスクライブおよびアンサブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、ConsumerAdminオブジェクトを取得します。
ConsumerAdminオブジェクトのオブジェクト参照を戻します。
channel->default_consumer_admin();
CosNotifyChannelAdmin::EventChannel::
ConsumerAdmin default_supplier_admin
SupplierAdminオブジェクトを取得します。
readonly attribute SupplierAdmin default_supplier_admin;
イベントのポスト時に使用されます。このオペレーションはイベント・ポスト元アプリケーションで使用され、SupplierAdminオブジェクトを取得します。
channel->default_supplier_admin();
CosNotifyChannelAdmin::EventChannel::default_filter_factory
デフォルトのFilterFactoryオブジェクトを取得します。
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、デフォルトのFilterFactoryオブジェクトを取得します。
デフォルトのFilterFactoryオブジェクト参照
channel->default_filter_factory();
CosNotifyChannelAdmin::EventChannelFactoryクラス
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface EventChannelFactory {
EventChannel get_event_channel ( in ChannelID id )
raises (ChannelNotFound);
};
}; //CosNotifyChannelAdmin
CosNotifyChannelAdmin::EventChannelFactory::get_event_channel
Gets the EventChannel object.
EventChannel get_event_channel ( in ChannelID id )
raises (ChannelNotFound);
CosNotifyChannelAdmin::ChannelNotFound
イベントのサブスクライブ、サブスクライブ解除およびポスト時に使用されます。このオペレーションはアプリケーションで使用され、
EventChannelオブジェクトを取得します。サブスクライブ時には、フィルタ・ファクトリ・オブジェクトとConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。サブスクライブ解除時には、ConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。イベントのポスト時には、SupplierAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。渡される
ChannelIDパラメータは、
Tobj_Notification::DEFAULT_CHANNELに設定される必要があります。それ以外の場合、
ChannelNotFound例外が発生します。
デフォルトのイベント・チャネルのオブジェクト参照を戻します。
channel_factory->get_event_channel(
Tobj_Notification::DEFAULT_CHANNEL );
CosNotifyComm::StructuredPushConsumerインタフェース
このインタフェースは、イベントの配信を目的としてイベント・サブスクライバ・アプリケーションで使用されます。このインタフェースで通知サービスを呼び出してイベントをサブスクライバに配信できるように実装する必要があります。実装する必要のあるメソッドは3つあります。
Module CosNotifyComm
{
interface StructuredPushConsumer : NotifyPublish {
void push_structured_event(
in CosNotification::StructuredEvent event
)
raises(CosEventComm::Disconnected);
void disconnect_structured_push_consumer:
//The following operations are inherited.
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
};
}; //CosNotifyComm
CosNotifyComm::StructuredPushConsumer::push_structured_event
void push_structured_event(
in CosNotification::StructuredEvent event
)
raises(CosEventComm::Disconnected);
CosEventComm::Disconnected
この例外をサブスクライバで発生させないようにしてください。
サブスクライブ時に使用されます。このオペレーションはサブスクライバのコールバック・オブジェクトで実装され、構造化イベントが配信されるたびに通知サービスによって呼び出されます。このオペレーションには、入力パラメータが1つ(構造化イベント)があります。
注意:
|
このオペレーションはトランザクションでは呼び出されません。また、このオペレーションが復帰するまで、通知サービスでは他のサブスクライバにイベントの配信が開始されない場合があるため、このオペレーションが呼び出されて、もすぐに復帰する必要があります。
|
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
// Process the event.
}
CosNotifyComm::StructuredPushConsumer::
disconnect_structured_push_consumer
void disconnect_structured_push_consumer;
このオペレーションが呼び出されることはありません。サブスクライバ・アプリケーションでは、このオペレーションのスタブ・アウト・バージョンを用意する必要があります。
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
throw new CORBA::NO_IMPLEMENT();
}
CosNotifyComm::StructuredPushConsumer::Offer_change
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
CosNotifyComm::InvalidEventType
この例外をサブスクライバで発生させないようにしてください。
このオペレーションが呼び出されることはありません。サブスクライバ・アプリケーションでは、このオペレーションのスタブ・アウト・バージョンを用意する必要があります。
virtual void offer_change(
const CosNotification::EventTypeSeq& added,
const CosNotification::EventTypeSeq& removed )
{
throw CORBA::NO_IMPLEMENT();
}
この項では、通知サービスの例外シンボルおよびマイナー・コードについて説明します。マイナー・コードは
Tobj_Events.idlファイルおよび
Tobj_Notification.idlファイルにあります。これらのファイルは、
tuxdir\includeディレクトリ(Microsoft Windowsシステムの場合)および
tuxdir/include ディレクトリ(UNIXシステムの場合)にあります。
表2-4および
表2-5は、Tobj_Events例外およびTobj_Notification例外のそれぞれの例外シンボルおよび対応するマイナー・コードを示しています。CORBAシステム・イベントには、マイナー・コードがあり、それらのマイナー・コード・フィールドもこれらの表で定義されています。
注意:
|
表の中の例外シンボルは、高いレベルの例外( CORBA::IMP_LIMIT、 CORBA::CORBA::BAD_PARAM、 CORBA::BAD_INV_ORDER、 CORBA::INV_OBHJREFおよび CORBA::OBJECT_NOT_EXIST)に基づいて構成されており、アルファベット順にリストされています。
|
表2-4
Tobj_Events例外のマイナー・コード
|
|
|
|
Tobj_Events:: POST_DOMAIN_AND_TYPE_TOO_LONG
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、組み合せた長さが31文字を超るドメイン名と型名が指定されました。
|
|
Tobj_Events:: POST_DOMAIN_CONTAINS_SEPARATOR
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、 "."文字を含むドメイン名が指定されました。
|
|
Tobj_Events::POST_EMPTY_DOMAIN
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、空のドメイン名が指定されました。
|
|
Tobj_Events::POST_EMPTY_TYPE
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
|
|
Tobj_Events:: POST_SYSTEM_EVENTS_UNSUPPORTED
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、Oracle Tuxedoシステム・イベント(ドメイン名が "TMEVT"で、型名が "."の文字で始まる)のポストが試行されました。
|
|
Tobj_Events:: POST_TYPE_CONTAINS_SEPARATOR
•
|
T obj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、 "."文字を含む型名が指定されました。
|
|
Tobj_Events:: POST_UNSUPPORTED_PRIORITY_VALUE
•
|
Tobj_SimpleEvents:: Channel::push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、変数ヘッダーに優先度フィールド が追加されました。しかし、フィールドの値が1 - 100の範囲の "short"に設定されていません。
|
|
Tobj_Events:: POST_UNSUPPORTED_VALUE_IN_ANY
•
|
Tobj_SimpleEvents:: Channel::push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
イベントのポスト時に、サポートされていない型(構造、ユニオン、シーケンスなど)を構造化イベント・フィールドのanysの1つに挿入されました。サポートされていない型は、変数ヘッダーの値フィールド、フィルタ処理可能なデータの値フィールドまたはremainder_of_bodyフィールドにあります。
|
|
Tobj_Events:: SUB_DOMAIN_AND_TYPE_TOO_LONG
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: connect_structured_push_consumer
|
|
サブスクライブ時に、組み合せた長さが255文字を超えるドメイン名と型名が指定されました。
|
|
Tobj_Events:: SUB_DOMAIN_BEGINS_WITH_SYSEV
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
サブスクライブ時に、 "."文字で始まるドメイン名が指定されました。
|
|
Tobj_Events::SUB_EMPTY_DOMAIN
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
サブスクライブ時に、空のドメイン名が指定されました。
|
|
Tobj_Events::SUB_EMPTY_TYPE
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
|
|
Tobj_Events::SUB_FILTER_TOO_LONG
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
255文字を超えるデータ・フィルタ式が指定されました。
|
|
Tobj_Events::SUB_NAME_TO_LONG
•
|
Tobj_SimpleEvents::Channel:: push_structured_event
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushConsumer:: push_structured_event
|
|
サブスクライブ時に、127文字を超えるサブスクリプション名が指定されました。
|
|
Tobj_Events:: TRANSIENT_ONLY_CONFIGURATION
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: connect_structured_push_consumer
|
|
永続的なサブスクリプションの作成を試みましたが、一時的なサブスクリプションのみをサポートするように構成されました。
|
|
|
|
|
Tobj_Events::INVALID_CHANNEL_ID
•
|
Tobj_SimpleEvents::ChannelFactory::find_channel
|
|
シンプル・イベントAPIを使用してチャネルを検索するときに、無効なチャネルID ( Tobj_SimpleEvents::DEFAULT_CHANNELでないチャネルID)が指定されました。
|
|
Tobj_Events:: INVALID_SUBSCRIPTION_ID
•
|
Tobj_SimpleEvents::Channel:: unsubscribe
|
•
|
CosNotifyChannelAdmin:: ConsumerAdmin::get_proxy_ supplier
|
•
|
Tobj_SimpleEvents:: Channel::exists
|
|
シンプル・イベントAPIを使用してアンサブスクライブするときに、無効なサブスクリプションID(存在しないサブスクリプションIDまたはCosNotificationサブスクリプションID)が指定されました。
CosNotificationサービスAPIを使用してサブスクリプションを検索するとき、無効なサブスクリプションID(存在しないサブスクリプションIDまたはシンプル・イベントAPIのサブスクリプションID)が指定されました。
Oracleシンプル・イベントAPIを使用して existsオペレーションを呼び出すときに、CosNotification subscription_idが渡されました。
|
|
Tobj_Events:: SUB_INVALID_FILTER_EXPRESSION
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
サブスクライブ時に、無効なデータ・フィルタ式が指定されました。式に構文エラーがあるか、式のフィールド名の1つがFMLフィールドとして定義されていません。
データのフィルタ処理の対象となるすべてのフィールドが格納されているFMLフィールド表を正しく作成しているかを確認し、フィールド表ファイルを検索できるように UBBCONFIGファイルが正しく設定されているかを確認してください。
|
|
Tobj_Events:: SUB_UNSUPPORTED_QOS_VALUE
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: set_qos
|
|
サブスクライブ時に、無効なサブスクリプションのサービス品質が指定されました。
シンプル・イベントAPIの場合、指定したサービスの品質が次の要件のいずれかを満たしていません。
•
|
名前は、 Tobj_SimpleEvents:: SUBSCRIPTION_TYPEである必要があります。
|
•
|
値は、 Tobj_SimpleEvents:: TRANSIENT_SUBSCRIPTIONまたは Tobj_SimpleEvents:: PERSISTENT_SUBSCRIPTIONのいずれかである必要があります。
|
CosNotificationサービスAPIの場合、指定したサービスの品質が次の要件のいずれかを満たしていません。
•
|
サービスの品質には、名前が Tobj_Notification:: SUBSCRIPTION_TYPEで、値が Tobj_Notification:: TRANSIENT_SUBSCRIPTIONまたは Tobj_Notification:: PERSISTENT_SUBSCRIPTIONの名前/値のペアが含まれている必要があります。
|
•
|
サービスの品質には、名前が Tobj_Notification::SUBSCRIPTION_NAMEで、値がサブスクリプションの管理者名が含まれる文字列の名前/値のペアでもかまいません。
|
|
|
Tobj_Events:: SUB_NIL_CALLBACK_REF
•
|
Tobj_SimpleEvents::Channel:: subscribe
|
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: connect_structured_push_consumer
|
|
サブスクライブ時に、イベントを受信するコールバック・オブジェクトのNILオブジェクト参照が指定されました。
|
|
表2-5
Tobj_Notification例外のマイナー・コード
|
|
|
|
|
|
Tobj_Notification:: SUB_ADD_CONS_ON_TIMED_OUT_FILTER
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
フィルタの作成後、CosNotificationサブスクライバがそのフィルタで add_constraintsを呼び出すのに、5分以上待機しています。つまり、フィルタが破棄されており(タイムアウト)、サブスクライバで新しいフィルタを作成する必要があります。
|
|
Tobj_Notification:: SUB_ADD_CONS_TO_ADDED_FILTER
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
プロキシにずでに追加されているフィルタで、CosNotificationサブスクライバが add_constraintsを呼び出しました。
|
|
Tobj_Notification:: SUB_ADDED_TIMED_OUT_FILTER
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: add_filter
|
|
フィルタを作成して、add_constraintsを呼び出した後、CosNotificationサブスクライバが add_filterを呼び出してフィルタをプロキシに追加するのに、5分以上待機しています。つまり、フィルタが破棄されており(タイムアウト)、サブスクリプションで新しいフィルタを作成する必要があります。
|
|
Tobj_Notification:: SUB_ADD_FILTER_AFTER_CONNECT
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: add_filter
|
|
プロキシに接続後、CosNotificationサブスクライバが add_filterを呼び出しました。
|
|
Tobj_Notification:: SUB_CANT_SET_QOS_AFTER_CONNECT
•
|
CosNotifyChannelAdmin::StructuredProxyPushSupplier::set_qos
|
|
プロキシに接続後、CosNotificationサブスクライバが set_qosを呼び出しました。
|
|
Tobj_Notification:: SUB_MULTIPLE_CALLS_TO_ADD_CONS
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
CosNotificationサブスクライバがフィルタで add_constraintsを複数回呼び出しました。
|
|
Tobj_Notification:: SUB_MULTIPLE_CALLS_TO_SET_FILTER
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: add_filter
|
|
CosNotificationサブスクライバがプロキシで add_filterを複数回呼び出しました。
|
|
Tobj_Notification:: SUB_MULTIPLE_CALLS_TO_SET_QOS
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: set_qos
|
|
CosNotificationサブスクライバがプロキシで set_qosを複数回呼び出しました。
|
|
Tobj_Notification:: SUB_MULTIPLE_CONSTRAINTS_IN_LIST
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
CosNotificationサブスクライバがフィルタで add_constraintsを呼び出したときに、複数の項目を含む制約のリストをサブスクライバが渡しました(サブスクライバが1つのデータ・フィルタではなく、データ・フィルタのリストで送信しようとしました)。
|
|
Tobj_Notification:: SUB_MULTIPLE_TYPES_IN_CONSTRAINT
•
|
CosNotifyFilter::Filter:: add_constraints
|
|
CosNotificationサブスクライバがフィルタで add_constraintsを呼び出したときに、複数のドメイン/型のセットを含む制約のリストをサブスクライバが渡しました(サブスクライバが1つのイベント型ではなく、目的のイベント型のリストで送信しようとしました)。
|
|
Tobj_Notification:: SUB_NIL_FILTER_REF
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: add_filter
|
|
CosNotificationサブスクライバがNILフィルタのオブジェクト参照を add_filterに渡しました。
|
|
Tobj_Notification:: SUB_NO_CUSTOM_FILTERS
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: add_filter
|
|
デフォルトのフィルタ・ファクトリで作成されていないフィルタ・オブジェクトをCosNotificationサブスクライバが add_filterに渡しました。たとえば、一種のカスタム・フィルタリングを実行するために、CosNotificationサブスクライバが CosNotifyFilter::Filterインタフェースを実装し、それらのフィルタ・オブジェクトの1つを add_filterに渡しました。
|
|
Tobj_Notification:: SUB_SET_FILTER_NOT_CALLED
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: connect_structured_push_ consumer
|
|
プロキシに接続する前に、CosNotificationサブスクライバがプロキシに対する add_filterを呼び出しませんでした。
|
|
Tobj_Notification:: SUB_SET_QOS_NOT_CALLED
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: connect_structured_push_ consumer
|
|
プロキシに接続する前に、CosNotificationサブスクライバがプロキシに対する add_filterを呼び出しませんでした。
|
|
Tobj_Notification:: SUB_SYSTEM_EVENTS_UNSUPPORTED
•
|
CosNotifyChannelAdmin:: StructuredProxyPushSupplier:: set_qos
|
|
CosNotificationサブスクライバが "TMEVT"のドメイン名と "."で始まる型名を渡しました(CosNotificationサブスクライバがTuxedoシステム・イベントをサブスクライブしようとしています)。これはサポートされていません。シンプル・イベントAPIのみでサポートされています。
|
|
Tobj_Notification:: SUB_UNSUPPORTED_CLIENT_TYPE
•
|
ConsumerAdmin:: obtain_notification_push_ supplier
|
•
|
SupplierAdmin:: obtain_notification_push_ consumer
|
|
プロキシの作成時に、CosNotificationサブスクライバまたはポスト元が CosNotifyChannelAdmin::STRUCTURED_EVENT以外のクライアント型を渡しました。
|
|
CORBA::OBJECT_NOT_EXIST例外
|
Tobj_Notification:: SUBSCRIPTION_DOESNT_EXIST
•
|
StructuredProxyPushSupplier:: add_filter
|
•
|
StructuredProxyPushSupplier:: set_qos
|
•
|
StructuredProxyPushSupplier:: connect_structured_push_ consumer
|
•
|
StructuredProxyPushSupplier:: disconnect_structured_push_ supplier
|
注意:
|
ユーザーがプロキシを作成し、 ntsadminユーティリティを使用してサブスクリプションを削除してから、プロキシで connect_structured_push_ consumerを呼び出すことができるため、 connect_structured_push_ consumerでこの例外が発生する場合があます。
|
|
すでに破棄されているプロキシのメソッドをCosNotificationサブスクライバが呼び出しました。プロキシは、次のいずれかの操作によって破棄されています。
•
|
CosNotificationサブスクライバがプロキシを切断した。
|
•
|
プロキシを作成してから接続するまでCosNotificationサブスクライバが5分以上待機している(サブスクリプションの完了に5分以上を要した)。
|
•
|
管理者が ntsadminユーティリティを使用してサブスクリプションを破棄した。
|
|
|