Tuxedo CORBA ノーティフィケーション サービス

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

CORBA ノーティフィケーション サービス API のリファレンス

ここでは、以下の内容について説明します。

注意 : 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 は、サブスクリプションのプロパティです。

永続的なサブスクリプション

永続的なサブスクリプションでは、イベントの配信とサブスクリプションの永続性が強固に保証されます。ただし、システム リソース (ディスク領域や CPU サイクルなど) がより多く消費されるとともに、より多くの管理タスク (キューの管理やデッド サブスクライバの検出など) が必要になります。

永続的なサブスクリプションには以下の特性があります。

一時的なサブスクリプション

一時的なサブスクリプションでは、最小限のオーバーヘッドで最高の性能が実現します。一時的なサブスクリプションには、次の特性があります。

サブスクリプションは、イベント配信の失敗が検出されるまで有効です。配信の失敗が検出された時点で、サブスクリプションは終了します。通常、ノーティフィケーション サービスでは、性能上の理由のために一時的なサブスクライバに正常にイベントが配信されたかどうかが確認されません。ただし、イベントを一時的なサブスクライバに配信する場合に、ノーティフィケーション サービスで配信が成功したかどうかが確認されることもあります。イベントが正常に配信されず、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 シンプル イベント API を使用するアプリケーションで使用します。

サービス ID
オブジェクト型
NotificationService
CosNotifyChannelAdmin::EventChannelFactory
Tobj_SimpleEventsService
Tobj_SimpleEvents::ChannelFactory

注意 : リリース 8.0 の Oracle Tuxedo CORBA には、Oracle WebLogic Enterprise の旧バージョンで提供されていた Oracle クライアント環境オブジェクトが従来のまま含まれており、Tuxedo 8.0 CORBA クライアントで利用することができます。Oracle Tuxedo 8.0 クライアントでは、ブートストラップ処理オブジェクト、セキュリティ オブジェクト、およびトランザクション オブジェクトの初期リファレンスの解決に引き続きそれらの環境オブジェクトを使用する必要があります。リリース 8.0 の Oracle Tuxedo CORBA では、OMG インターオペラブル ネーミング サービス (INS) を使用してもブートストラップ処理オブジェクト、セキュリティ オブジェクト、およびトランザクション オブジェクトの初期リファレンスを解決できます。INS の詳細については、『Tuxedo CORBA プログラミング リファレンス』を参照してください。

トランザクションの使い方

トランザクションに関する振る舞いは、Oracle シンプル イベント API と CosNotification サービス API で同じです。トランザクションの振る舞いをサポートする唯一のオペレーションは push_structured_event です。このオペレーションは、CosNotifyChannelAdmin::StructuredProxyPushConsumer インタフェースと Tobj_SimpleEvents::Channel インタフェースでサポートされています。ほかのすべてのオペレーションは、トランザクションのコンテキストで使用できますが、トランザクションで実行されても、それ以外で実行されても同じように機能します。

イベントをポストするときの振る舞いは、サブスクリプションの QoS に依存します。サブスクリプションのイベント配信 QoS が永続的である場合に、イベントがトランザクションのコンテキストでポストされると、その配信はトランザクションの結果に左右されます。つまり、トランザクションがコミットされる場合、ノーティフィケーション サービスでは通常どおりにサブスクライバにイベントが配信されます。トランザクションがロールバックされる場合は、イベントは配信されません。

サブスクライバのサブスクリプションのイベント配信 QoS が一時的である場合に、イベントがトランザクションのコンテキストでポストされると、トランザクションの結果に関係なくそのイベントの配信が 1 度試行されます。つまり、トランザクションはイベントが配信されるかどうかに影響を与えず、イベントの配信が 1 度試行されます。

注意 : イベントの配信に関連付けられるトランザクション コンテキストはありません。ただし、永続的なサブスクリプションの場合は、ポスト元のトランザクションがコミットされたときには、イベントがサブスクライバに配信されるか、管理上のアクションを待つためにエラー キューに入れられることがノーティフィケーション サービスによって保証されます。

構造化イベントのフィールド、型、およびフィルタ

ポスト元からノーティフィケーション サービスにプッシュされるか、サブスクライバに配信されるイベントはすべて COS 構造化イベントです。つまり、すべてのイベントは CORBA ベースのノーティフィケーション サービスで指定されている構造化イベントの定義に適合しています。CORBA ベースのノーティフィケーション サービスは、CORBAservices イベント サービスを拡張したサービスです (図 2-1 を参照)。イベントが (ドメインや型ではなく) 内容に基づいてフィルタ処理される場合、またはイベントが Oracle Tuxedo アプリケーションによってサブスクライブされる場合は、適用される制限が増えます。それらの制限は、データ型、および内容に基づくフィルタ処理に適用されます。次に、それらの制限について説明します。

図 2-1 構造化イベント

構造化イベント

イベントの設計

イベントの設計は、あらゆるノーティフィケーション サービスの基本です。イベントの設計は、一致するサブスクリプションに配信される情報の量だけでなく、ノーティフィケーション サービスの効率と性能にも影響します。したがって、計画を慎重に行って、ノーティフィケーション サービスが現在のニーズだけでなく将来の規模拡大にも対応できるようにする必要があります。

ノーティフィケーション サービスでは、(1) ドメイン名、(2) 型名、(3) 優先順位、(4) フィルタ処理可能データ、および (5) 残りの本文の 5 段階のイベント設計がサポートされています。イベントを設計するときには、ドメイン名と型名を指定する必要があります (優先順位とフィルタ処理可能データは任意指定)。ドメイン名は、ビジネスに基づいて選択することができます。たとえば病院は医療ビジネス (health care business) に属しているので、病院のノーティフィケーション サービス アプリケーションでは「HEALTHCARE」をドメイン名として選択できます。保険業者の種類に基づいてイベントを分類する必要がある場合は、「HMO」または「UNINSURED」を型名として選択できます。支払い義務のあるエンティティを基準にイベントをさらに細かく定義する必要がある場合は、フィルタ処理可能データを使用して、特定の “HMO_Account” または特定の “Patient_Account” に対する “billing” としてエンティティを識別することも可能です。コード リスト 2-1 は、このタイプのイベント設計の例を示しています。

コード リスト 2-1 イベントの設計
domain_name = “HEALTHCARE”
type_name = “HMO”
#フィルタ処理可能データの名前/値ペア
filterable_data.name = “billing”
filterable_data.value = 4498
filterable_data.name = “patient_account”
filterable_data.value = 37621

当然、ノーティフィケーション サービス アプリケーションでポストおよび受信されるイベントの設計が詳細かつ厳密になればなるほど、ノーティフィケーション サービスで処理しなければならないイベントの数が少なくなります。このことは、システム リソースとコンフィグレーションの要件に直接的に影響します。したがって、イベントを設計するときには十分な考慮が必要です。

イベントの FML フィールド テーブル ファイルの作成

イベントのフィールド操作言語 (FML) フィールド テーブル ファイルは、次の機能のいずれかが必要な場合のみ作成する必要があります。どの機能も必要でない場合は、FML テーブルは不要です。

構造化イベントの filterable_data フィールドには、名前/値 (NV) ペアのリストが格納されます。イベントのデータは通常はこのリストに格納されます。FML フィールド テーブル ファイルのフィールド名は、構造化イベント内の名前と一致していなければなりません。フィールドの型には、carray を除くすべての FML 型 (longshortdoublefloatcharstring) を使用できます。構造化イベントの値は、フィールド テーブルで定義されている型と同じでなければなりません。表 2-1 は、Oracle Tuxedo でサポートされている CORBA Any 型を示しています。これらの Any 型を使用して、データのフィルタ処理と Oracle Tuxedo の相互運用性を実現できます。

コード リスト 2-2 は、FML フィールド テーブル ファイルの例です。*base 2000 は、フィールドのベース番号です。最初のエントリでは、フィールド名が billing、フィールド番号が 1 (ベース番号に基づく値)、フィールドの型が long となっています。

コード リスト 2-2 データ フィルタ処理の FML フィールド テーブル ファイル
*base 2000
#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 フィールド テーブル ファイルには、次のガイドラインと制限が適用されます。

FML フィールド テーブル ファイルの作成とコンフィグレーションの方法については、『Tuxedo コマンド リファレンス』の「field_tables」および『FML を使用した Tuxedo アプリケーションのプログラミング』を参照してください。

Oracle Tuxedo アプリケーションとの相互運用性

Oracle Tuxedo CORBA ノーティフィケーション サービスを使用するアプリケーションは、Oracle Tuxedo EventBroker を使用する Oracle Tuxedo アプリケーションと相互運用できます。Oracle Tuxedo ノーティフィケーション サービスを使用するアプリケーションでは、Oracle Tuxedo EventBroker のサブスクライバに配信されるイベントをポストでき、Oracle Tuxedo EventBroker によってポストされたイベントを受信できます。

この相互運用性を実現するには、Oracle Tuxedo で FML フィールド テーブルの内容を調整できるように、CosNotification 構造化イベントと Oracle Tuxedo FML バッファのマッピングを理解する必要があります。考慮すべき状況は 2 つあります。Oracle Tuxedo EventBroker を介して Oracle Tuxedo アプリケーションによって受信されるイベントのポストと、Oracle Tuxedo アプリケーションによってノーティフィケーション サービスのイベント チャネルにポストされたイベントの受信です。

イベントのポスト

Oracle Tuxedo アプリケーションによってポストされたイベントを Oracle Tuxedo アプリケーションでサブスクライブするには、Oracle Tuxedo 構造化イベントがポスト時にどのように FML32 およびイベント名にマッピングされるのかを理解する必要があります。マッピングは次のように行われます。

イベントの受信

Oracle Tuxedo のシステム イベントとユーザ イベントは、Oracle Tuxedo アプリケーションで受信できます。システム イベントを生成するのは、アプリケーションではなく、Oracle Tuxedo システムです。ユーザ イベントは、Oracle Tuxedo アプリケーションによって生成されます。システム イベントのリストについては、『Tuxedo コマンド リファレンス』の「EVENTS」を参照してください。システム イベントとユーザ イベントは、CosNotification 構造化イベントで次のようにマッピングされます。

構造化イベントのフィールド
domain_name
常に “TMEVT” に設定します。
type_name
空の文字列
event_name
空の文字列
Variable ヘッダ (優先順位)
空のシーケンス
Filterable 本文のフィールド
FML フィールド名と同じです。

注意 : Filterable 本文のフィールドの内容は名前/値ペアです。その名前部分は、FML フィールド名と同じです。

残りの本文
常に void に設定します。

Oracle Tuxedo システムでは、システムの警告と障害に関連する定義済みの特定のイベントが検出されてポストされます。たとえば、システム生成のイベントでは、コンフィグレーションの変更、状態の変化、接続の障害、およびマシンの分断が報告されます。

Oracle Tuxedo アプリケーションによってポストされたイベントを Oracle Tuxedo アプリケーションで受信するには、Oracle Tuxedo イベントが格納されている FML バッファをどのように使用して Oracle Tuxedo 構造化イベントが作成されるのかを理解する必要があります。また、domain_nametype_name の Oracle Tuxedo イベント名との関連を理解することも必要です。システム イベントとユーザ イベントの 2 つのケースを考慮する必要があります。

Oracle Tuxedo では、イベント名の先頭にドット (.) を使用してシステム生成のイベントをアプリケーション定義のイベントから区別します。たとえば、システム イベントには .SysNetworkDropped があります。ユーザ イベントの例としては、eventsdropped があります。それらのイベントをサブスクライブするために、ノーティフィケーション サービスのサブスクライバ アプリケーションではサブスクリプションを次のように定義する必要があります。

サブスクリプションの作成時に使用するパラメータ

サブスクリプションを作成するときには、次のパラメータを指定できます。これらのパラメータでは、Oracle のシンプル イベント API と CosNotification サービス API がサポートされています。

subscription_name

ノーティフィケーション サービスのサブスクリプションとサブスクライバを識別する名前を指定します。アプリケーションでは、システム管理者にとって意味のある名前を使用しなければなりません。なぜならこれが、管理者がアプリケーションとサブスクリプション、およびそのサブスクリプションを介してサブスクライバに配信されるイベントを関連付ける主要な手段だからです。このパラメータはオプションです (つまり、空の文字列を渡すことができる)。複数のサブスクリプションで同じ名前を使用できます。 subscription_name の長さは最大で 128 文字です。

domain_type

CORBA ベースのノーティフィケーション サービス仕様で定義されている、構造化イベントの Fixed ヘッダ部分の domain_type フィールドと同じパラメータです。このフィールドは、「Telecommunications」、「Finance」、および「Health Care」など、イベントの型が定義されている特定垂直産業のドメインを識別する文字列です。このパラメータは正規表現なので、フィルタ処理の基準となるドメイン パターンを設定するために使用することもできます。たとえば、文字 F で始まるすべてのドメインをサブスクライブするには、ドメインを「F.*」に設定します。正規表現を作成する方法については、『Oracle Tuxedo C リファレンス』で recomp コマンドを参照してください。

type_name

CORBA ベースのノーティフィケーション サービス仕様で定義されている、構造化イベントの Fixed ヘッダ部分の type_name フィールドと同じパラメータです。これは、Comm_alarm、StockQuote、VitalSigns など、ドメイン内で一意にイベントの型を分類する文字列です。このパラメータは正規表現なので、フィルタ処理の基準となるイベントの型のパターンを設定するために使用することもできます。たとえば、文字 F で始まるすべてのイベントの型をサブスクライブするには、型を「F.*」に設定します。正規表現を作成する方法については、『Oracle Tuxedo C リファレンス』で recomp コマンドを参照してください。

data_filter

フィルタ処理が行われるフィルタ処理可能データと Variable ヘッダのフィールドの値を指定します。たとえば、ニュース記事のサブスクリプションでは、ドメインが「News」、型が「Sports」、そして data_filter が「Scores > 20」になる場合が考えられます。 このパラメータでは、論理式でサブスクリプションが一致しなければならないデータを定義します。サポートされているデータ型は、shortlongcharfloatdouble、および string です。表 2-2 は、サポートされている論理式の演算子を示しています。

表 2-2 論理式の演算子
演算子
単項
+, -, !, ~
倍数
*, /, %
加法
+, -
比較
< , >, <=, >=, ==, !=
等価、一致
==, !=, %%, !%
排他論理和
^
論理積
&&
論理和
||

データのフィルタ処理を利用するには、FML テーブルを設定し、サブスクリプションにフィルタを含めて、データをフィルタ処理し、イベントをポストします。コード リスト 2-3 は、それらのタスクの例を示しています。

コード リスト 2-3 データのフィルタ処理の要件
// FML テーブルを設定
Field table file.
----------------
*base 2000
*Field Name    Field #   Field Type   Flags    Comments
----------- ------- --------- ------ ------
StockName 1 string - -
PricePerShare 2 double - -
CustomerId 3 long - -
CustomerName 4 string - -

// サブスクリプション データのフィルタ処理
1) "NumberOfShares > 100 && NumberOfShares < 1000"
2) "CustomerId == 3241234"
3) "PricePerShare > 125.00"
4) "StockName == 'BEAS'"
5) "CustomerName %% '.*Jones.*'" // CustomerName が「Jones」を格納
6) "StockName == 'BEAS' && PricePerShare > 150.00"
// イベントをポスト
// 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";
フィルタの文法の詳細については、「イベントの FML フィールド テーブル ファイルの作成」および『FML を使用した Tuxedo アプリケーションのプログラミング』の「フィールド化バッファの論理式」を参照してください。

push_consumer

ノーティフィケーション サービスで構造化イベントを配信するために使用されるコールバック オブジェクトを識別します。サブスクライバ アプリケーションでは、ノーティフィケーション サービスから呼び出してイベントを配信できるように CosNotifyComm::StructuredPushConsumer インタフェースを実装する必要があります。
注意 : 一時的または永続的のいずれかのオブジェクト参照をコールバック オブジェクトとして使用できます。どのタイプのオブジェクト参照を使用するのかを決めるときには、QoS とアプリケーションの実行回数の両方を考慮に入れる必要があります。使用するオブジェクト参照のタイプを決める際の参考情報については、表 2-3 を参照してください。

表 2-3 共同クライアント/サーバで一時的と永続的のどちらのオブジェクト参照を使用するのか
サブスクリプションの状況
一時的と永続的のどちらを使用するか
QoS が一時的で、起動と停止が 1 度行われる
一時的なオブジェクト参照を使用します。この場合は、システム リソースを解放するためにサブスクライバ アプリケーションで停止時にアンサブスクライブすることをお勧めしますが、必ずしも必要ではありません。
QoS が永続的で、起動と停止が 1 度行われる
一時的なオブジェクト参照を使用します。
QoS が永続的で、起動と停止が複数回行われる
永続的なオブジェクト参照を使用し、サブスクライバの停止と再起動のたびに同じホストとポートが使用されるようにホストとポートを保存します。この場合は、双方向の IIOP 機能は使用しないことをお勧めします。

注意 : ドメイン内で永続的なオブジェクト参照はサポートされていないので、共同クライアント/サーバを使用する場合はリモート (Oracle Tuxedo ドメインの外側) で使用する必要があります。

QoS が一時的で、起動と停止が複数回行われる
永続的なオブジェクト参照を使用できます。ただし、このコンフィグレーションを使用する場合は、サブスクライバの停止時にはこのサブスクライバに対するイベントがポストされないようにする必要があります。

qos (サービスの品質)

サブスクリプションのサービスの品質を指定します。一時的または永続的のいずれかを指定できます。 一時的なサブスクリプションの場合、ノーティフィケーション サービスではサブスクライバへのイベント配信が 1 回だけ試行されます。その試行が失敗した場合は、イベントは破棄されます。ノーティフィケーション サービスに CORBA::TRANSIENT 例外が届かない場合は、サブスクライバが停止しているかほかの理由で利用できないと判断され、サブスクリプションが取り消されます。配信が失敗して CORBA::TRANSIENT 例外を受信した場合、ノーティフィケーション サービスではサブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。 永続的なサブスクリプションの場合、配信の最初の試行が失敗すると、ノーティフィケーション サービスではそのイベントが保留キューに保持され、コンフィグレーション可能な再試行回数の上限に達するまでサブスクリプションの配信が繰り返されます。再試行回数の上限に達すると、イベントはエラー キューに移動されます。エラー キューに保持されたイベントは、システム管理者によって処理されます。システム管理者は、エラー キューからイベントを削除するか (事実上の破棄)、または再び配信できるように保留キューに戻します。
注意 : 永続的なサブスクリプションの場合、ノーティフィケーション サービスでは常にコールバック オブジェクトを二方向で呼び出してイベントを配信します。共同クライアント/サーバが orb->run を呼び出す前にコールバック オブジェクト (イベントの受信側) をアクティブにしない状況で、ノーティフィケーション サービスがコールバック オブジェクトを呼び出した場合、POA に関する限り、コールバック オブジェクトは存在しません。この場合は、CORBA::OBJECT_NOT_EXIST 例外が返されます。CORBA::OBJECT_NOT_EXIST 例外を受信した場合、ノーティフィケーション サービスではサブスクリプションとイベントを削除します。その例外を受信しない場合は、サブスクリプションは維持され、イベントは再試行されます。

 


Oracle シンプル イベント API

単純さと使いやすさが、Oracle シンプル イベント アプリケーション プログラミング インタフェース (API) の特徴と言えます。その機能は、Oracle Tuxedo EventBroker の機能と似ています。

Oracle シンプル イベント API は、次のインタフェースで構成されます (図 2-2 を参照)。

Tobj_SimpleEvents::Channel インタフェースと Tobj_SimpleEvents::ChannelFactory インタフェースは、ノーティフィケーション サービスによって実装されます (説明は後述)。

CosNotifyComm::StructuredPushConsumer インタフェースは、サブスクライバによって実装されます。このインタフェースの説明については、「CosNotifyComm::StructuredPushConsumer::push_structured_event」を参照してください。

注意 : この節で言及されている CosNotification サービスのクラスは、tuxdir/include ディレクトリにある CosNotification サービス IDL ファイルで完全に記述されています。
注意 : サポートされていないクラス オペレーションを使用すると、CORBA::NO_IMPLEMENT 例外が発生します。

TOBJ_SimpleEvents::Channel インタフェース

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 );
};
};

これらのオペレーションについては、次の節を参照してください。

 


Channel::subscribe

CORBA IDL

SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
// フィルタ式の長さは 1 で、名前は TRANSIENT_SUBSCRIPTION
// または PERSISTENT_SUBSCRIPTION でなければならない
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer
);

パラメータ

このオペレーションでサポートされているパラメータの説明については、「サブスクリプションの作成時に使用するパラメータ」を参照してください。

例外

CORBA::BAD_PARAM

次のいずれかの問題を示します。
Tobj_Events::SUB_INVALID_FILTER_EXPRESSION
Tobj_Events::SUB_UNSUPPORTED_QOS_VALUE

CORBA::IMP_LIMIT

次のいずれかの問題を示します。
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

CORBA::INV_OBJREF

次の問題を示します。 Tobj_Events::SUB_NIL_CALLBACK_REF
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

このオペレーションを使用すると、イベントをサブスクライブできます。このオペレーションは、特定のイベントのサブスクリプションを作成するために、ノーティフィケーション サービスのサブスクライバ アプリケーションによって呼び出されます。サブスクリプション名、ドメイン名、型名、データ フィルタ、サービスの品質、およびサブスクライバのコールバック オブジェクトのオブジェクト参照が渡されます。コールバック オブジェクトでは、CosNotifyComm::StructuredPushConsumer IDL インタフェースが実装されます。

注意 : 停止および再起動するサブスクライバについては、subscription_id を永続ストレージに書き込む必要があります。

データのフィルタ処理を利用するか、あるいは Oracle Tuxedo システム イベントまたは Oracle Tuxedo アプリケーションでポストされたイベントをサブスクライブするには、「イベントの FML フィールド テーブル ファイルの作成」および「Oracle Tuxedo アプリケーションとの相互運用性」を参照してください。

戻り値

ユニークなサブスクリプション識別子が返されます。このオペレーションの結果は即時には現れません。このオペレーションからの復帰とイベント配信の実際の開始の間には遅延があります。遅延期間の長さは、コンフィグレーション次第ではかなり長くなります。この遅延期間に影響する要素の詳細については、「データベースの同期」を参照してください。

注意 : 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、subscription_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

subscription_id = channel->subscribe(
subscription_name,
"News", // ドメイン
“Sports”, // 型
"", // データ フィルタなし
qos,
news_consumer.in()
);

 


Channel::unsubscribe

CORBA IDL

void unsubscribe( in SubscriptionID id );

パラメータ

subscription_id

サブスクリプション識別子

例外

CORBA::BAD_PARAM

次の問題を示します。Tobj_Events::INVALID_SUBSCRIPTION_ID
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

アンサブスクライブに使用します。サブスクライバ アプリケーションでは、このオペレーションを使用してサブスクリプションを終了します。このオペレーションから復帰すると、それ以降にイベントは配信できません。入力パラメータは、サブスクライブ時に取得した SubscriptionID 1 つです。

注意 : このオペレーションの結果は即時には現れません。このオペレーションからの復帰後も、サブスクライバでは一定の期間は継続してイベントを受信できます。その期間は、コンフィグレーション次第ではかなり長くなります。この期間に影響する要素の詳細については、「データベースの同期」を参照してください。

C++ サンプル コード

channel->unsubscribe(subscription_id);

 


Channel::push_structured_event

CORBA IDL

void push_structured_event(
in CosNotification::StructuredEvent notification
);

パラメータ

notification

このパラメータは、CosNotification サービス仕様で定義されている構造化イベントを格納します。

例外

CORBA_IMP_LIMIT

サブスクリプションに関する次のいずれかの問題を示します。 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
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

ノーティフィケーション サービスにイベントをポストするためにポスト元アプリケーションで使用されます。

注意 : このオペレーションには、トランザクションのコンテキストで使用される際のトランザクションの振る舞いがあります。詳細については、「トランザクションの使い方」を参照してください。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

channel->push_structured_event(notification);

 


Channel::exists

CORBA IDL

boolean exists(in SubscriptionID subscription_id);

パラメータ

subscription_id

サブスクリプション識別子

例外

CORBA::BAD_PARAM

次の問題を示します。Tobj_Events::INVALID_SUBSCRIPTION_ID
subscription_id が CosNotification サービス API を使用して作成されたサブスクリプションの識別子ではない場合は、常にこの例外が返されます。
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

サブスクリプションが存在するかどうかを確認するためにサブスクライバ アプリケーションによって使用されます。システム管理者はサブスクリプションを手動で削除でき、ノーティフィケーション サービスでは一時的なサブスクリプションを自動的に削除できるので、サブスクライバ アプリケーションでは必要に応じてサブスクリプションを再作成できるようにこのオペレーションを使用する必要があります。このオペレーションで使用する subscription_id は、サブスクライブ時に取得した同じ識別子です。

戻り値

サブスクリプションが存在する場合は true、存在しない場合は false が返されます。

C++ サンプル コード

if channel->exists (subscription_id) {
// サブスクリプションは依然として有効
} else {
// サブスクリプションはもう存在しない
}

TOBJ_SimpleEvents::ChannelFactory インタフェース

ChannelFactory インタフェースは、イベント チャネルの検索に使用します。このインタフェースには、find_channel という 1 つのオペレーションがあります。

このインタフェースの CORBA IDL は次のとおりです。

module Tobj_SimpleEvents
{
typedef long ChannelID;
interface ChannelFactory
{
Channel find_channel(
in ChannelID channel_id // DEFAULT_CHANNEL でなければならない
);
};
};

 


Channel_Factory::find_channel

CORBA IDL

Channel find_channel(
in ChannelID channel_id );

パラメータ

このリリースの Oracle Tuxedo では、イベント チャネルは 1 つだけです。したがって、ChannelIDTobj_SimpleEvents::DEFAULT_CHANNEL (C++) に設定する必要があります。

例外

CORBA::BAD_PARAM

次の問題を示します。 Tobj_Events::INVALID_CHANNEL_ID
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

ポスト元アプリケーションとサブスクライバ アプリケーションによって使用されます。このオペレーションを使用すると、イベント チャネルを見つけて、ポスト元ではイベントをポストし、サブスクライバではイベントをサブスクライブおよびアンサブスクライブできます。

戻り値

デフォルト イベント チャネルのオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネルの取得」を参照してください。

C++ サンプル コード

channel_factory->find_channel(
Tobj_SimpleEvents::DEFAULT_CHANNEL);

 


CosNotification サービス API

この節では、Oracle Tuxedo CORBA ノーティフィケーション サービスによって実装される CosNotification サービスで定義されるオペレーションについて説明します。それらのオペレーションは、オペレーション セット全体のサブセットです。このサブセットは、Oracle シンプル イベント API の代わりとして使用できる機能的に完全な API です。

この API は、Oracle シンプル イベント API よりも複雑です。それには、2 つの理由があります。まず、CosNotification サービス API がより複雑になっています。次に、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 サービスのクラスとそれらの関係を示しています。

図 2-3 実装されている CosNotification サービスのクラス

実装されている CosNotification サービスのクラス

各クラスでサポートされているオペレーションについては、以下に要約があります。詳細については、「CosNotification サービスのクラスの詳しい説明」を参照してください。

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

概要

フィルタ オブジェクトでドメイン、型、およびデータ フィルタの各パラメータを設定します。

OMG IDL

ConstraintInfoSeq add_constraints (
in ConstraintExpSeq constraint)
raises (InvalidConstraint);

例外

CosNotifyFilter::InvalidConstraint

発生することはありません。

CORBA::BAD_PARAM

次の問題を示します。Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.

CORBA_IMP_LIMIT

次のいずれかの問題を示します。 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
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

サブスクライブするときに使用します。このオペレーションは、サブスクライブするイベントの種類を定義するためにサブスクライバ アプリケーションで使用されます。フィルタ オブジェクトのドメイン、型、およびデータ フィルタの各パラメータを設定します。これらのパラメータの説明については、「サブスクリプションの作成時に使用するパラメータ」を参照してください。

注意 : add_constraints オペレーションの Oracle Tuxedo 実装は、呼び出しが 1 回限りであり、プロキシ オブジェクトにフィルタが追加される前に呼び出す必要があり、イベント型が 1 つの 1 つの制約のみで構成される必要があります。

戻り値

空のリストが返されます。呼び出し側では無視することをお勧めします。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

// フィルタ処理パラメータを設定
// (ドメイン = "News"、型、およびデータ フィルタなし)
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”);
// データ フィルタなし
constraints[0].constraint_expr = CORBA::string_dup(""); CosNotifyFilter::ConstraintInfoSeq_var
add_constraints_results = // この戻り値は無視
filter->add_constraints(constraints);

 


CosNotifyFilter::Filter::destroy

概要

フィルタ オブジェクトを破棄します。

OMG IDL

void destroy();

例外

CORBA::BAD_PARAM

次の問題を示します。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

概要

どのイベントがサブスクリプションに配信されるのかを指定します。

OMG IDL

Filter create_filter (
in string constraint_grammar)
raises (InvalidGrammar);

例外

CosNotifyFilter::InvalidGrammar

constraint_grammar がサポートされていないことを示します。

説明

新しいフィルタ オブジェクトを作成するためにサブスクライバ アプリケーションで使用されます。このフィルタは、どのイベントがサブスクリプションに配信されるのかを指定するために使用します。サブスクライバでは、フィルタを設定して 5 分以内にプロキシに追加する必要があります。5 分以内に追加しないと、フィルタは破棄されます。フィルタの文法は、Tobj_Notification::Constraint_grammar に設定する必要があります。そうしないと、InvalidGrammar 例外が発生します。

戻り値

新しいフィルタのオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

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 );
};
// 次のオペレーションが継承される
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

概要

サブスクリプションを完了します。

OMG IDL

void connect_structured_push_consumer (
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );

例外

CosEventChannelAdmin::TypeError

発生することはありません。

CORBA::INV_OREF

Tobj_Events::SUB_NIL_CALLBACK_REF

CORBA::IMP_LIMIT

次のいずれかの問題を示します。 Tobj_Events::SUB_DOMAIN_AND_TYPE_TOO_LONG Tobj_Events::SUB_NAME_TO_LONG Tobj_Events::TRANSIENT_ONLY_CONFIGURATION Tobj_Notification::SUBSCRIPTION_DOESNT_EXIST.

CORBA::OBJECT_NOT_EXIST

プロキシが存在しません。

CosEventChannelAdmin::AlreadyConnected

connect_structured_push_consumer オペレーションが既に呼び出されていることを示します。
注意 : 例外の定義および対応するマイナー コードについては、「例外のマイナー コード」を参照してください。

説明

このオペレーションは、サブスクライブするときに使用します。このオペレーションは、イベントをサブスクライブするためにサブスクライバ アプリケーションで使用されます。push_consumer パラメータは、サブスクライバのコールバック オブジェクトを識別します。

connect_structured_push_consumer が呼び出されると、ノーティフィケーション サービスはコールバック オブジェクトの push_structured_event オペレーションを呼び出してサブスクライバにイベントを送信します。connect_structured_push_consumer が既に呼び出されている場合は、AlreadyConnected 例外が発生します。

注意 : set_qosadd_filter は、connect_structured_push_consumer を呼び出す前に呼び出す必要があります。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

subscription->connect_structured_push_consumer(
news_consumer.in()
);

 


CosNotifyChannelAdmin::StructuredProxyPushSupplier::set_qos

概要

サブスクリプションの QoS を設定します。

OMG IDL

void set_qos(in QoSProperties qos)
raises (UnsupportedQoS);

例外

UnsupportedQoS

発生することはありません。

ORBA::IMP_LIMIT

次のいずれかの問題を示します。 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 です。詳細については、「サービスの品質」を参照してください。

サブスクリプションの名前は、名前と値のペアを作成して設定します。その名前は Tobj_Notification::SUBSCRIPTION_NAME で、値はユーザ定義の文字列です。

このパラメータの詳細については、「サブスクリプションの作成時に使用するパラメータ」を参照してください。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

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

概要

サブスクライバのコールバック オブジェクトでフィルタ オブジェクトを設定します。

OMG IDL

add_filter(
in Filter new_filter
);

例外

CORBA::IMP_LIMIT

次のいずれかの問題を示します。 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

CORBA::OBJECT_NOT_EXIST

サブスクリプションが存在しないことを示します。
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

サブスクライブするときに使用します。このオペレーションは、サブスクライバのコールバック オブジェクトのフィルタ オブジェクトを設定するためにサブスクライバ アプリケーションで使用されます。このオペレーションを使用するアプリケーションが停止されて再起動される場合は、filter_id を永続ストレージに書き込む必要があります。

注意 : このオペレーションは、サブスクライバのコールバック オブジェクトが接続された後に呼び出すことはできません (上記の connect_structured_push_consumer を参照)。また、複数回呼び出すこともできません。さらに、このオペレーションを呼び出すときには、フィルタの制約式が既にフィルタに存在していなくてはなりません (CosNotifyFilter::Filter add_constraints を参照)。
注意 : イベント チャネルのデフォルト フィルタ ファクトリで作成されたフィルタのみ追加することができます。

戻り値

filter_id が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

CosNotifyFilter::FilterID filter_id =
subscription->add_filter(filter.in());

 


CosNotifyChannelAdmin::StructuredProxyPushSupplier::get_filter

概要

サブスクライバのコールバック オブジェクトに現在関連付けられているフィルタのオブジェクト参照を取得します。

OMG IDL

Filter get_filter( in FilterID filter )
raises ( FilterNotFound);

例外

CosNotifyChannelAdmin::FilterNotFound

フィルタを見つけることができなかったことを示します。

説明

再起動可能なサブスクライバでアンサブスクライブする必要があるときに使用します。このオペレーションは、サブスクライバのコールバック オブジェクトと現在関連付けられているフィルタのオブジェクト参照を取得するためにサブスクライバ アプリケーションで使用されます。渡される FilterID は、サブスクライバの StructuredProxyPushSupplier オブジェクトで有効でなければなりません。FilterID がイベント チャネルと関連付けられているプロキシ オブジェクトで有効ではない場合は、FilterNotFound 例外が送出されます。このオペレーションは、停止して再起動されるサブスクライバでのみ使用されます。

制限事項

このオペレーションでは、次の制限とガイドラインが適用されます。

    1. このオペレーションから返されるフィルタのオブジェクト参照は、比較操作では使用できません。
    2. このオペレーションから返されるフィルタのオブジェクト参照は、CosNotifyFilter::Filter::destroy オペレーションで使用できますが、修正したりプロキシ オブジェクトに追加したりできないのでほとんど役に立ちません。

戻り値

サブスクライバのコールバック オブジェクトに現在関連付けられているフィルタのオブジェクト参照が返されます。

C++ サンプル コード

CosNotify::Filter_var filter = 
subscription->get_filter( filter_id() );

 


CosNotifyChannelAdmin::StructuredProxyPushSupplier::
disconnect_structured_push_supplier

概要

アンサブスクライブに使用します。

OMG IDL

void disconnect_structured_push_supplier();

例外

CORBA::OBJECT_NOT_EXIST

接続を解除するサブスクリプションが存在しないことを示します。
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

アンサブスクライブするときにサブスクライバ アプリケーションによって使用されます。このオペレーションは、ノーティフィケーション サービスとサブスクライバのコールバック オブジェクトの接続を終了するためにサブスクライバ アプリケーションで使用されます。

注意 : このオペレーションで、イベントの配信が即座に停止することはありません。このオペレーションからの復帰後も、サブスクライバでは一定の期間は継続してイベントを受信できます。

C++ サンプル コード

subscription->disconnect_structured_push_supplier();

 


CosNotifyChannelAdmin::StructuredProxyPushSupplier::MyType

概要

常に CosNotifyChannelAdmin::PUSH_STRUCTURED プロキシを返します。

OMG IDL

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);
// 次のオペレーションが継承される
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

概要

イベントを受信するようにノーティフィケーション サービスを準備します。

OMG IDL

void connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);

例外

CosEventChannelAdmin::AlreadyConnected

発生することはありません。

説明

イベントのポスト時にポスト元アプリケーションによって使用されます。このオペレーションを呼び出さないと、ノーティフィケーション サービスではイベント受信の準備ができません。また、このオペレーションを使用するときには NIL を渡す必要があります。次の順序で使用します。

  1. プロキシを作成します。
  2. このオペレーションを使用してノーティフィケーション サービスに接続し、NIL を渡します。
  3. イベントをポストします。
  4. ポスト元プログラムを終了する前に、接続を解除します。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

proxy_push_consumer->connect_structured_push_supplier(
CosNotifyComm::StructuredPushSupplier::_nil()
);

 


CosNotifyChannelAdmin::StructuredProxyPushConsumer::
push_structured_event

概要

イベント チャネルにイベントをポストします。

OMG IDL

void push_structured_event(
in CosNotification::StructuredEvent notification )
raises( CosEventComm::Disconnected );

例外

CosEventComm::Disconnected

発生することはありません。

CORBA::IMP_LIMIT

次のいずれかの問題を示します。 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
注意 : 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。

説明

イベントをポストするときに使用します。このオペレーションは、イベント チャネルにイベントをポストするためにポスト元アプリケーションで使用されます。

注意 : このオペレーションは、次の点で標準の CORBA 定義とは異なります。

a. イベントの Variable ヘッダの優先順位は、(指定する場合は) 1 ~ 100 の範囲の short 値でなければなりません。

b. (ドメインと型のみのフィルタ処理ではなく) イベントのフィルタ処理可能データのフィルタ処理が必要な場合、またはイベントが Oracle Tuxedo サブスクライバによって受信される場合は、制限が追加されます。「構造化イベントのフィールド、型、およびフィルタ」および「Oracle Tuxedo アプリケーションとの相互運用性」を参照してください。
注意 : このオペレーションには、トランザクションのコンテキストで使用される際のトランザクションの振る舞いがあります。詳細については、「トランザクションの使い方」を参照してください。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

proxy_push_consumer->push_structured_event(notification);

 


CosNotifyChannelAdmin::StructuredProxyPushConsumer::
disconnect_structured_push_consumer

概要

イベントのポストを停止します。

OMG IDL

void disconnect_structured_push_consumer();

説明

イベントをポストするときに使用します。このオペレーションは、イベントのポストを停止するためにポスト元アプリケーションによって使用されます。入力パラメータは不要で、値は返されません。次の順序で使用することをお勧めします。

  1. プロキシを作成します。
  2. ポスト元アプリケーションの実行ごとに接続し接続を解除します。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

proxy_push_consumer->disconnect_structured_push_consumer();

 


CosNotifyChannelAdmin::StructuredProxyPushConsumer::MyType

概要

常に CosNotifyChannelAmdmin::PUSH_STRUCTURED プロキシを返します。

OMG IDL

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

概要

プロキシ プッシュ サプライヤ オブジェクトを作成します。

OMG IDL

ProxySupplier obtain_notification_push_supplier (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )

例外

CosNotifyChannelAdmin::AdminLimitExceeded

発生することはありません。

CORBA::IMP_LIMIT

次の問題を示します。 Tobj_Notification::SUB_UNSUPPORTED_CLIENT_TYPE

説明

サブスクライブするときに使用します。このオペレーションは、プロキシ プッシュ サプライヤ オブジェクトを作成するためにサブスクライバ アプリケーションで使用されます。構造化イベントのみがサポートされています。つまり、ANY_EVENTSEQUENCE_EVENT ClientTypes はサポートされていません。したがって、ClientType 入力パラメータは CosNotifyComm::STRUCTURED_EVENT に設定する必要があります。サブスクライバを停止して再起動する場合で、サブスクリプションがプログラムの複数の実行にまたがって存続する場合は、このオペレーションで返される ProxyID を永続的に保存する必要があります。サブスクライバでは、プロキシ サプライヤを CosNotifyChannelAdmin::StructuredProxyPushSupplier にナロー変換する必要があります。必要なすべてのオペレーションは 5 分間で完了する必要があります。

注意 : 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、proxy_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。

戻り値

このオペレーションでは、新しいプロキシのオブジェクト参照が返されます。新しい proxy_id も、proxy_id 出力パラメータを通じて返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。

C++ サンプル コード

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 オペレーションを使用して作成されたプロキシ プッシュ サプライヤ オブジェクトを返します。

OMG IDL

    ProxySupplier get_proxy_supplier (
in ProxyID proxy_id )
raises ( ProxyNotFound );

例外

CosNotifyChannelAdmin::ProxyNotFound

ProxyID を見つけることができなかったことを示します。

説明

アンサブスクライブするときに使用します。このオペレーションは、コンシューマ管理オブジェクトの obtain_notification_push_supplier オペレーションを使用して作成されたプロキシ プッシュ サプライヤ オブジェクトを返すためにサブスクライバ アプリケーションで使用されます。ProxyID 入力パラメータは、プロキシ オブジェクトをユニークに識別します。呼び出し側では、一時的なサブスクリプションの配信エラーまたは ntsadmin 管理コマンドによってプロキシ オブジェクトが破棄される可能性があることを認識していなければなりません。プロキシ オブジェクトが破棄されると、関連付けられている ProxyID が無効になります。ProxyID が無効な場合は、ProxyNotFound 例外が発生します。サブスクライバでは、プロキシ サプライヤを CosNotifyChannelAdmin::StructuredProxyPushSupplier にナロー変換する必要があります。

戻り値

既存のプロキシのオブジェクト参照が返されます。

C++ サンプル コード

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

概要

プロキシ プッシュ コンシューマ オブジェクトを作成します。

OMG IDL

ProxyConsumer obtain_notification_push_consumer (
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );

例外

CosNotifyChannelAdmin::AdminLimitExceeded

発生することはありません。

CORBA::IMP_LIMIT

次の問題を示します。 Tobj_Notification::SUB_UNSUPPORTED_CLIENT_TYPE

説明

イベントをポストするときに使用します。このオペレーションは、プロキシ プッシュ コンシューマ オブジェクトを作成するためにポスト元アプリケーションで使用されます。ClientType は、“CosNotifyChannelAdmin::STRUCTURED_EVENT” に設定する必要があります。返される ProxyID は無視してください。プロキシ コンシューマは、CosNotifyChannelAdmin::StructuredProxyPushConsumer にナロー変換する必要があります。

注意 : 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、proxy_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。

戻り値

このオペレーションでは、新しいプロキシのオブジェクト参照が返されます。新しい proxy_id も、proxy_id 出力パラメータを通じて返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

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 オブジェクトを取得します。

OMG IDL

readonly attribute ConsumerAdmin default_consumer_admin;

説明

サブスクライブおよびアンサブスクライブするときに使用します。このオペレーションは、ConsumerAdmin オブジェクトを取得するためにサブスクライバ アプリケーションで使用されます。

戻り値

ConsumerAdmin オブジェクトのオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネル、ConsumerAdmin オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。

C++ サンプル コード

channel->default_consumer_admin();

 


CosNotifyChannelAdmin::EventChannel::
ConsumerAdmin default_supplier_admin

概要

SupplierAdmin オブジェクトを取得します。

OMG IDL

readonly attribute SupplierAdmin default_supplier_admin;

説明

イベントをポストするときに使用します。このオペレーションは、SupplierAdmin オブジェクトを取得するためにイベント ポスト元アプリケーションで使用されます。

戻り値

SupplierAdmin のオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。

C++ サンプル コード

channel->default_supplier_admin();

 


CosNotifyChannelAdmin::EventChannel::default_filter_factory

概要

デフォルトの FilterFactory オブジェクトを取得します。

OMG IDL

readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;

説明

サブスクライブするときに使用します。このオペレーションは、デフォルトの FilterFactory オブジェクトを取得するためにサブスクライバ アプリケーションで使用されます。

戻り値

デフォルトの FilterFactory オブジェクトのオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネル、ConsumerAdmin オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。

C++ サンプル コード

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

概要

EventChannel オブジェクトを取得します。

OMG IDL

EventChannel get_event_channel ( in ChannelID id )
raises (ChannelNotFound);

例外

CosNotifyChannelAdmin::ChannelNotFound

チャネルを見つけることができないことを示します。

説明

イベントをサブスクライブ、アンサブスクライブ、およびポストするときに使用します。このオペレーションは、EventChannel オブジェクトを取得するためにアプリケーションで使用されます。サブスクライブのときには、EventChannel オブジェクトを使用してフィルタ ファクトリ オブジェクトと ConsumerAdmin オブジェクトを取得します。アンサブスクライブのときには、EventChannel オブジェクトを使用して ConsumerAdmin オブジェクトを取得します。イベントをポストするときには、EventChannel オブジェクトを使用して SupplierAdmin オブジェクトを取得します。ChannelID パラメータは、Tobj_Notification::DEFAULT_CHANNEL に設定しなければなりません。そのように設定しないと、ChannelNotFound 例外が発生します。

戻り値

デフォルト イベント チャネルのオブジェクト参照が返されます。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネルの取得」および「イベント チャネル、ConsumerAdmin オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。

C++ サンプル コード

channel_factory->get_event_channel(
Tobj_Notification::DEFAULT_CHANNEL );

CosNotifyComm::StructuredPushConsumer インタフェース

このインタフェースは、イベントの配信を目的としてイベント サブスクライバ アプリケーションによって使用されます。このインタフェースを実装しないと、ノーティフィケーション サービスではサブスクライバにイベントを配信できません。このインタフェースには、実装しなければならない 3 つのメソッドがあります。

このクラスの OMG IDL は次のとおりです。

Module CosNotifyComm
{
interface StructuredPushConsumer : NotifyPublish {
    void push_structured_event(
in CosNotification::StructuredEvent
event)
raises(CosEventComm::Disconnected);
void disconnect_structured_push_consumer:
// 次のオペレーションが継承される
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
};
}; //
CosNotifyComm

 


CosNotifyComm::StructuredPushConsumer::push_structured_event

概要

構造化イベントを配信します。

OMG IDL

void push_structured_event(
in CosNotification::StructuredEvent
event)
raises(CosEventComm::Disconnected);

例外

CosEventComm::Disconnected

サブスクライバではこの例外を発生させてはなりません。

説明

サブスクライブするときに使用します。このオペレーションは、サブスクライバのコールバック オブジェクトによって実装され、構造化イベントが配信されるたびにノーティフィケーション サービスによって呼び出されます。このオペレーションには、1 つの入力パラメータ (構造化イベント) があります。

注意 : このオペレーションは、トランザクションでは呼び出されません。また、このオペレーションは呼び出されてもすぐに復帰しなければなりません。その理由は、このオペレーションが復帰するまで、ノーティフィケーション サービスではほかのサブスクライバへのイベント配信が開始されないからです。

注意 : ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「CosNotifyComm::StructuredPushConsumer インタフェースの実装」を参照してください。

C++ サンプル コード

virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
// イベントを処理
}

 


CosNotifyComm::StructuredPushConsumer::
disconnect_structured_push_consumer

概要

呼び出されることはありません。

OMG IDL

void disconnect_structured_push_consumer;

説明

このオペレーションが呼び出されることはありません。サブスクライバ アプリケーションでは、このオペレーションのスタブ アウト バージョンを用意する必要があります。

C++ サンプル コード

virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
throw new CORBA::NO_IMPLEMENT();
}

 


CosNotifyComm::StructuredPushConsumer::Offer_change

概要

呼び出されることはありません。

OMG IDL

 void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );

例外

CosNotifyComm::InvalidEventType

サブスクライバではこの例外を発生させてはなりません。

説明

このオペレーションが呼び出されることはありません。サブスクライバ アプリケーションでは、このオペレーションのスタブ アウト バージョンを用意する必要があります。

C++ サンプル コード

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_LIMITCORBA::CORBA::BAD_PARAMCORBA::BAD_INV_ORDERCORBA::INV_OBHJREF、および CORBA::OBJECT_NOT_EXIST) に基づいて構成されており、アルファベット順にリストされています。

表 2-4 Tobj_Events 例外のマイナー コード
例外シンボル
定義
マイナー コード (16 進数)
CORBA::IMP_LIMIT 例外
Tobj_Events::
POST_DOMAIN_AND_TYPE_TOO_LONG
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、組み合わせた長さが 31 文字を超えるドメイン名と型名が指定されました。
5455580D
Tobj_Events::
POST_DOMAIN_CONTAINS_SEPARATOR
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、「.」文字の含まれているドメイン名が指定されました。
54555802
Tobj_Events::POST_EMPTY_DOMAIN
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、空のドメイン名が指定されました。
5455580B
Tobj_Events::POST_EMPTY_TYPE
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、空の型名が指定されました。
5455580C
Tobj_Events::
POST_SYSTEM_EVENTS_UNSUPPORTED
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、Oracle Tuxedo システム イベント (つまり、ドメイン名が「TMEVT」で、型名が「.」文字で始まるイベント) のポストが試行されました。
54555804
Tobj_Events::
POST_TYPE_CONTAINS_SEPARATOR
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、「.」文字の含まれている型名が指定されました。
54555803
Tobj_Events::
POST_UNSUPPORTED_PRIORITY_VALUE
この例外の発生元
  • Tobj_SimpleEvents::
    Channel::push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、Variable ヘッダで「Priority」フィールドが追加されましたが、そのフィールドの値が 1 ~ 100 の範囲の「short」に設定されませんでした。
54555801
Tobj_Events::
POST_UNSUPPORTED_VALUE_IN_ANY
この例外の発生元
  • Tobj_SimpleEvents::
    Channel::push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
イベントをポストするときに、構造化イベント フィールドの「Any」の 1 つにサポートされていない型 (構造体、ユニオン、シーケンスなど) が挿入されました。そのサポートされていない型は、Variable ヘッダの値フィールド、フィルタ処理可能データの値フィールド、または remainder_of_body フィールドに挿入されています。
54555800
Tobj_Events::
SUB_DOMAIN_AND_TYPE_TOO_LONG
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    connect_structured_push_consumer
サブスクライブするときに、組み合わせた長さが 255 文字を超えるドメイン名と型名が指定されました。
54555809
Tobj_Events::
SUB_DOMAIN_BEGINS_WITH_SYSEV
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyFilter::Filter::
    add_constraints
サブスクライブするときに、「.」文字で始まるドメイン名が指定されました。
54555805
Tobj_Events::SUB_EMPTY_DOMAIN
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyFilter::Filter::
    add_constraints
サブスクライブするときに、空のドメイン名が指定されました。
54555807
Tobj_Events::SUB_EMPTY_TYPE
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyFilter::Filter::
    add_constraints
サブスクライブするときに、空の型名が指定されました。
54555808
Tobj_Events::SUB_FILTER_TOO_LONG
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyFilter::Filter::
    add_constraints
255 文字を超えるデータ フィルタ式が指定されました。
5,455,580A
Tobj_Events::SUB_NAME_TO_LONG
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    push_structured_event
  • CosNotifyChannelAdmin::
    StructuredProxyPushConsumer::
    push_structured_event
サブスクライブするときに、127 文字を超えるサブスクリプション名が指定されました。
5455580E
Tobj_Events::
TRANSIENT_ONLY_CONFIGURATION
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    connect_structured_push_consumer
永続的なサブスクリプションの作成が試行されましたが、システムが一時的なサブスクリプションのみをサポートするようにコンフィグレーションされていました。
54555806
CORBA::BAD_PARAM 例外
   
Tobj_Events::INVALID_CHANNEL_ID
この例外の発生元
  • Tobj_SimpleEvents::ChannelFactory::find_channel
シンプル イベント API を使用してチャネルを検索するときに、無効なチャネル ID (つまり、Tobj_SimpleEvents::DEFAULT_CHANNEL ではないチャネル ID) が指定されました。
54555813
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 が渡されました。
54555812
Tobj_Events::
SUB_INVALID_FILTER_EXPRESSION
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyFilter::Filter::
    add_constraints
サブスクライブするときに、無効なデータ フィルタ式が指定されました。フィルタ式が無効になるのは、式に構文エラーがあるか、式のフィールド名の 1 つが FML フィールドとして定義されていない場合です。
データのフィルタ処理が行われるすべてのフィールドが格納される FML フィールド テーブルが正しく作成されていることを確認し、フィールド テーブル ファイルが検索できるように UBBCONFIG ファイルが正しくコンフィグレーションされていることを確認してください。
54555810
Tobj_Events::
SUB_UNSUPPORTED_QOS_VALUE
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    set_qos
54555811
サブスクライブするときに、サブスクリプションの無効なサービス品質が指定されました。
シンプル イベント API の場合では、このことは指定されたサービス品質が次の要件のいずれかを満たしていないことを意味します。
  • シーケンスの長さは 1 でなければなりません。
  • 名前は 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 で、値がサブスクリプションの管理名の文字列である名前/値ペアでもかまいません。
CORBA::INV_OBHJREF
Tobj_Events::
SUB_NIL_CALLBACK_REF
この例外の発生元
  • Tobj_SimpleEvents::Channel::
    subscribe
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    connect_structured_push_consumer
サブスクライブするときに、イベントを受信するコールバック オブジェクトの NIL オブジェクト参照が指定されました。
54555830

表 2-5 Tobj_Notification 例外のマイナー コード
例外シンボル
定義
マイナー コード (16 進数)
CORBA::IMP_LIMIT 例外
   
Tobj_Notification::
SUB_ADD_CONS_ON_TIMED_OUT_FILTER
この例外の発生元
  • CosNotifyFilter::Filter::
    add_constraints
フィルタの作成後、CosNotification サブスクライバは 5 分以上経ってからそのフィルタの add_constraints を呼び出しました。そのフィルタは破棄されており (時間切れ)、サブスクライバでは新しいフィルタを作成しなければなりません。
54555858
Tobj_Notification::
SUB_ADD_CONS_TO_ADDED_FILTER
この例外の発生元
  • CosNotifyFilter::Filter::
    add_constraints
プロキシに既に追加されているフィルタの add_constraints が CosNotification サブスクライバによって呼び出されました。
5455585E
Tobj_Notification::
SUB_ADDED_TIMED_OUT_FILTER
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    add_filter
フィルタを作成してその「add_constraints」を呼び出した後、CosNotification サブスクライバは 5 分以上経ってからフィルタをプロキシに追加する add_filter を呼び出しました。そのフィルタは破棄されており (時間切れ)、サブスクライバでは新しいフィルタを作成しなければなりません。
5455585D
Tobj_Notification::
SUB_ADD_FILTER_AFTER_CONNECT
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    add_filter
プロキシへの接続後に、CosNotification サブスクライバが add_filter を呼び出しました。
54555852
Tobj_Notification::
SUB_CANT_SET_QOS_AFTER_CONNECT
この例外の発生元
  • CosNotifyChannelAdmin::StructuredProxyPushSupplier::set_qos
プロキシへの接続後に、CosNotification サブスクライバが set_qos を呼び出しました。
54555856
Tobj_Notification::
SUB_MULTIPLE_CALLS_TO_ADD_CONS
この例外の発生元
  • CosNotifyFilter::Filter::
    add_constraints
CosNotification サブスクライバがフィルタで add_constraints を複数回呼び出しました。
54555859
Tobj_Notification::
SUB_MULTIPLE_CALLS_TO_SET_FILTER
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    add_filter
CosNotification サブスクライバがプロキシで add_filter を複数回呼び出しました。
54555851
Tobj_Notification::
SUB_MULTIPLE_CALLS_TO_SET_QOS
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    set_qos
CosNotification サブスクライバがプロキシで set_qos を複数回呼び出しました。
54555855
Tobj_Notification::
SUB_MULTIPLE_CONSTRAINTS_IN_LIST
この例外の発生元
  • CosNotifyFilter::Filter::
    add_constraints
CosNotification サブスクライバがフィルタで add_constraints を呼び出したときに、複数の項目から成る制約のリストが渡されました。つまり、サブスクライバは 1 つのデータ フィルタではなくデータ フィルタのリストを送信しようとしました。
5,455,585A
Tobj_Notification::
SUB_MULTIPLE_TYPES_IN_CONSTRAINT
この例外の発生元
  • CosNotifyFilter::Filter::
    add_constraints
CosNotification サブスクライバがフィルタで add_constraints を呼び出したときに、複数のドメイン/型セットから成る制約が渡されました。つまり、サブスクライバは 1 つのイベント型ではなくイベント型のリストを送信しようとしました。
5,455,585B
Tobj_Notification::
SUB_NIL_FILTER_REF
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    add_filter
CosNotification サブスクライバが add_filter に NIL フィルタのオブジェクト参照を渡しました。
54555853
Tobj_Notification::
SUB_NO_CUSTOM_FILTERS
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    add_filter
CosNotification サブスクライバが、デフォルトのフィルタ ファクトリで作成されたものではないフィルタ オブジェクトを add_filter に渡しました。たとえば、CosNotification サブスクライバが「カスタム」フィルタ処理を実行するために CosNotifyFilter::Filter インタフェースを実装し、それらのフィルタ オブジェクトの 1 つを add_filter に渡しました。
54555854
Tobj_Notification::
SUB_SET_FILTER_NOT_CALLED
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    connect_structured_push_
    consumer
CosNotification サブスクライバが、プロキシに接続する前にプロキシに対する add_filter を呼び出しませんでした。
54555850
Tobj_Notification::
SUB_SET_QOS_NOT_CALLED
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    connect_structured_push_
    consumer
CosNotification サブスクライバが、プロキシに接続する前にプロキシに対する add_filter を呼び出しませんでした。
54555857
Tobj_Notification::
SUB_SYSTEM_EVENTS_UNSUPPORTED
この例外の発生元
  • CosNotifyChannelAdmin::
    StructuredProxyPushSupplier::
    set_qos
CosNotification サブスクライバが、ドメイン名「TMEVT」と「.」で始まる型名を渡しました。つまり、CosNotification サブスクライバは Tuxedo システム イベントをサブスクライブしようとしました。システム イベントのサブスクライブはサポートされていません。それはシンプル イベント API でのみサポートされています。
5455585C
Tobj_Notification::
SUB_UNSUPPORTED_CLIENT_TYPE
この例外の発生元
  • ConsumerAdmin::
    obtain_notification_push_
    supplier
  • SupplierAdmin::
    obtain_notification_push_
    consumer
プロキシを作成するときに、CosNotification のサブスクライバまたはポスト元が CosNotifyChannelAdmin::STRUCTURED_EVENT 以外のクライアント型を渡しました。
5455585F
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

注意 : connect_structured_push_consumer はこの例外を発生させる可能性があります。その理由は、ユーザがプロキシを作成し、ntsadmin ユーティリティを使用してサブスクリプションを削除してから、プロキシで connect_structured_push_consumer を呼び出すことができるからです。

CosNotification サブスクライバが既に破棄されているプロキシのメソッドを呼び出しました。そのプロキシは、次のいずれかのアクションによって破棄されています。
  • CosNotification サブスクライバがプロキシとの接続を解除した。
  • CosNotification サブスクライバがプロキシ作成から 5 分以上経ってからプロキシに接続した。つまり、サブスクリプションの完了に 5 分以上を要した。
  • 管理者が ntsadmin ユーティリティを使用してサブスクリプションを破棄した。
54555880


  ページの先頭       前  次