目次 前 次 PDF


CORBA通知サービスAPIのリファレンス

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)の設定があります。QoSはサブスクリプションのプロパティです。
永続的なサブスクリプション
永続的なサブスクリプションでは、イベント配信とサブスクリプションの永続性が強固に保証されます。ただし、システム・リソース(ディスク領域やCPUサイクルなど)が多く消費されるに伴い、多くの管理(キューの管理やデッド・サブスクライバの検出など)が必要になるため、永続的なサブスクリプションにはコストが伴います。
永続的なサブスクリプションのプロパティは次のとおりです。
サブスクリプションは、アンサブスクライブ操作が実行されるまで有効です。つまり、サブスクリプションをアクティブな状態のままにして、サブスクライバ・アプリケーションを停止できます。この場合、イベントはサブスクライバ用に保存され、サブスクライバの再起動時にサブスクリプションを再作成する必要なく、そのサブスクライバに配信されます。
イベントが配信できない場合、管理上の再試行回数の上限に達するまでイベントの配信が再試行されます。イベントの再試行制限を超えると、イベントが保留キューからエラー・キューに移されます。管理者はエラー・キューのイベントを保留キューに戻すことができ、そこで配信の試行が再び行われます。
イベントがサブスクライバに正常に配信されても、何らかの理由で「配信の成功」を通知する返信メッセージが通知サービスで受信されなかった場合、通知サービスで同じイベントが複数回配信されることがあります。
一時的なサブスクリプション
一時的なサブスクリプションは、最小限のオーバーヘッドで最高のパフォーマンスを発揮し、そのプロパティは次のとおりです。
一致する各サブスクリプションにイベントの配信が1回試行されます。その試行が失敗すると、イベントは失われます。
サブスクリプションは、イベント配信の失敗が検出されるまで有効です。配信の失敗が検出されると、サブスクリプションは終了します。通常、通知サービスでは、パフォーマンス上の理由で、一時的なサブスクライバにイベントが正常に配信されたかどうかを確認しません。ただし、通知サービスは、一時的なサブスクライバにイベントを配信する場合に、イベントが正常に配信されたかどうかを確認する場合があります。正常に配信されず、CORBA::TRANSIENT例外が戻されなかった場合、通知サービスでは、サブスクリプションが削除されたと判断し、サブスクリプションを取り消します。配信が失敗してCORBA::TRANSIENT例外を受信した場合、通知サービスでは、サブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。
デッド状態の一時的なサブスクリプションの自動的な取消しでは、アンサブスクライブされていない一時的なサブスクリプションのクリーンアップ・メカニズムが提供されます。ただし、通知サービスによる配信の確認はイベントがサブスクライバに最初に送信されたときに実行されますが、それから5分が経過し、別のイベントが配信されるまでは次の確認は行われません。したがって、確認が実行される間隔は短くて5分であり、5分経過後に配信するイベントがない場合、その間隔はさらに長くなります。5分という最短の間隔は固定であり、変更することはできません。このため、イベント配信の失敗は必ずしも最初の失敗の時点で検出されるわけではありません。これは、通知サービスで確認が行われたときにのみ検出されます。
チャネル・ファクトリの取得
チャネル・ファクトリは、イベント・チャネルを検索するために、イベント・ポスト元のアプリケーションとサブスクライバで使用されます。イベント・チャネルは、イベントのポスト、サブスクライブ(サブスクリプションの作成)、およびアンサブスクライブ(サブスクリプションの取消し)に使用されます。
通知サービスでは、Bootstrapオブジェクトを使用して、イベント・チャネル・ファクトリのオブジェクト参照を取得します。これは、Tobj_Bootstrap::resolve_initial_referencesオペレーションを使用して実行されます。Bootstrapオブジェクトでは、通知サービス・アプリケーションの2つのサービスID (NotificationServiceTobj_SimpleEventsService)がサポートされています。NotificationServiceオブジェクトは、CosNotificationサービスAPIを使用するアプリケーションで使用されます。Tobj_SimpleEventsServiceオブジェクトは、Oracle SimpleEvents APIを使用するアプリケーションで使用されます。
 
サービスID
オブジェクト・タイプ
NotificationService
CosNotifyChannelAdmin::EventChannelFactory
Tobj_SimpleEventsService
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アプリケーションにサブスクライブされる場合は、適用される制限が増えます。この制限は、イベントの内容に基づいてデータ型およびフィルタリングに適用されます。次に、それらの制限について説明します。
図2-1 構造化イベント
固定ヘッダー・セクションは、構造化イベントの作成時に使用可能な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ペアで構成されます。これらのペアの値の型は、anylongunsigned longshortunsigned short、octet、charfloatdoublestringbooleanvoidおよびnullに制限されています。これらのフィールドはフィルタ式で使用できます。
残りの本文は、単一のANYで構成されます。値の型は、anylongunsigned longshortunsigned short、octet、charfloatdoublestringbooleanvoidおよびnullに制限されています。このフィールドはフィルタ式では使用できません。
イベントの設計
イベントの設計は、あらゆる通知サービスの基本です。この設計は、一致するサブスクリプションに配信される情報の量だけでなく、通知サービスの効率とパフォーマンスにも影響します。したがって、計画を慎重に行って、通知サービスが現在のニーズだけでなく将来の規模拡大にも対応できるようにする必要があります。
通知サービスでは、(1)ドメイン名、(2)型名、(3)優先度、(4)フィルタ処理可能データ、(5)本文の残りの5つのレベルのイベント設計がサポートされています。イベントを設計する場合は、ドメイン名と型名を指定する必要があります(優先度とフィルタ処理可能なデータは任意)。選択するドメイン名は各自の業務に関連付けることができます。たとえば、病院は医療業務になるため、病院用の通知サービス・アプリケーションでは、「HEALTHCARE」をドメイン名として選択できます。保険業者の種類別にイベントを分類する場合は、「HMO」や「UNINSURED」を型名として選択できます。支払いを担当する事業者別にイベントをさらに細かく定義する場合は、フィルタ処理可能データを使用して、特定の「HMO_Account」や「Patient_Account」に対する「billing」として事業者を指定できます。リスト2-1は、この型のイベント設計の例を示しています。
リスト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)フィールド表は、次の機能のいずれかが必要な場合にのみ作成する必要があります。それ以外の場合、FML表は不要です。
Oracle Tuxedoイベントのポスト元とイベント・サブスクライバの間の(ドメインおよび型フィールドに加えた)イベント・データのフィルタリング
Oracle Tuxedo通知サービスとOracle Tuxedo EventBroker間の相互運用性
構造化イベントのfilterable_dataフィールドには、名前/値(NV)のペアのリストが格納されます。イベントのデータは、通常はこのリストに格納されます。FMLフィールド表ファイルのフィールド名は、構造化イベント内の名前と一致する必要があります。フィールドの型は、carrayを除くすべてのFML型(longshortdoublefloatcharstring)を使用できます。構造化イベントの値は、フィールド表で定義されている型と同じにする必要があります。表2-1は、Oracle TuxedoでサポートされているCORBAのAny型を示しており、これらを使用すると、データのフィルタリングとOracle Tuxedoの相互運用性を実現できます。
表2-1 サポートされているCORBA Any型
CORBA Any型
データのフィルタリングとTuxedoの互換運用性サポート
short
あり
long
あり
unsigned short
なし
unsigned long
なし
float
あり
double
あり
char
あり
boolean
なし
octet
なし
string
あり
void
なし
null
なし
any
なし
リスト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ファイル名の長さは最大で15文字です。
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構造化イベントでマッピングされます。
 
構造化イベントのフィールド
domain_name
常に“TMEVT”に設定
type_name
空の文字列
event_name
空の文字列
変数ヘッダー(優先度)
空のシーケンス
フィルタ処理可能な本文のフィールド
FMLフィールド名と同じ
注意:
フィルタ処理可能な本文のフィールドは名前/値のペアで構成され、名前の部分はFMLフィールド名と同じです。
残りの本文
常にvoidに設定
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
通知サービスとサブスクライバのサブスクリプションを識別する名前を指定します。アプリケーションでは、システム管理者にとって意味のある名前を使用する必要がありますが、これは、管理者がアプリケーションとサブスクリプション、およびそのサブスクリプションを介してサブスクライバに配信されるイベントを関連付ける主要な手段だからです。このパラメータは任意です(空の文字列を渡すこともできます)。複数のサブスクリプションで同じ名前を使用できます。
 
subscription_nameの長さは最大で128文字です。
domain_type
CORBAベースの通知サービス仕様で定義されている構造化イベントの固定ヘッダー部分のdomain_typeフィールドと同じパラメータです。このフィールドは、Telecommunications(通信)、Finance(金融)、Health Care(医療)など、イベントの型が定義されている特定の垂直産業の分野(ドメイン)を識別する文字列です。このパラメータは正規表現のため、フィルタ処理の基準となるドメイン・パターンの設定に使用することもできます。たとえば、Fの文字で始まるすべてのドメインをサブスクライブするには、ドメインを「F.*」に設定します。正規表現の作成方法の詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』recompコマンドに関する項を参照してください。
type_name
CORBAベースの通知サービス仕様で定義されている構造化イベントの固定ヘッダー部分のtype_nameフィールドと同じパラメータです。このフィールドは、Comm_alarm、StockQuote、VitalSignsなど、ドメイン内でイベントの型を一意に分類する文字列です。このパラメータは正規表現のため、フィルタ処理の基準となるイベントの型のパターンを設定するために使用することもできます。たとえば、Fの文字で始まるすべてのイベント型をサブスクライブするには、型を「F.*」に設定します。正規表現の作成方法の詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』recompコマンドに関する項を参照してください。
data_filter
フィルタ処理可能なデータとフィルタ処理を実行する変数ヘッダーのフィールドの値を指定します。たとえば、ニュース記事のサブスクリプションには、ドメインがNews(ニュース)、型がSports(スポーツ)、data_filterが「Scores > 20」になる場合が考えられます。
 
このパラメータでは、ブール式でサブスクリプションが一致する必要があるデータを定義します。サポートされるデータ型は、shortlongcharfloatdoubleおよびstringです。表2-2は、サポートされるブール式の演算子を示しています。
 
表2-2 ブール式の演算子
演算子
単項
+, -, !, ~
乗算
*, /, %
加算
+, -
関係
< , >, <=, >=, ==, !=
等価、一致
==, !=, %%, !%
排他論理和
^
論理積
&&
論理和
||
データのフィルタリングを使用するには、FML表を設定して、サブスクリプションにフィルタを含め、データをフィルタしてイベントをポストする必要があります。リスト2-3は、これらのタスクの例を示しています。
リスト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";
 
フィルタ文法の詳細は、-7ページの「イベントのFMLフィールド表ファイルの作成」、および『FMLを使用したOracle Tuxedo ATMIアプリケーションのプログラミング』のフィールド化バッファのブール式に関する項を参照してください。
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
図2-2 Oracleシンプル・イベント・インタフェース
 
Tobj_SimpleEvents::ChannelインタフェースおよびTobj_SimpleEvents::ChannelFactoryインタフェースは、通知サービスによって実装され、次のとおりです。
CosNotifyComm::StructuredPushConsumerインタフェースはサブスクライバによって実装されます。このインタフェースの詳細は、-51ページの「CosNotifyComm::StructuredPushConsumer::push_structured_event」を参照してください。
注意:
この項で説明するCosNotificationサービスのクラスの詳細は、tuxdir/includeディレクトリにあるCosNotificationサービスIDLファイルで完全に記述されています。
注意:
サポートされていないクラス・オペレーションを使用する場合は、CORBA::NO_IMPLEMENT例外が発生します。
TOBJ_SimpleEvents::Channelインタフェース
チャネル・インタフェースは次のように使用されます。
サブスクライバで使用され、イベントをサブスクライブおよびアンサブクスライブしたり、サブスクリプションが存在するかどうかを確認します。
ポスト元で使用され、通知サービスにイベントポストします。
このインタフェースには、次のオペレーションがあります。
subscribe()
unsubscribe()
exists()
push_structured_event()
このインタフェースの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,
// 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
);
パラメータ
このオペレーションでサポートされるパラメータの詳細は、-11ページの「サブスクリプションの作成時に使用するパラメータ」を参照してください。
例外
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
イベントをサブスクライブするには、このオペレーションを使用します。このオペレーションは、通知サービスのサブスクライバ・アプリケーションによって呼び出され、特定のイベントへのサブスクリプションが作成されます。サブスクリプション名、ドメイン名、型名、データ・フィルタ、サービスの品質、およびサブスクライバのコールバック・オブジェクトの オブジェクト参照が渡されます。コールバック・オブジェクトでは、CosNotifyComm::StructuredPushConsumer IDLインタフェースが実装されます。
注意:
停止および再起動するサブスクライバでは、subscription_idを永続ストレージに書き込む必要があります。
データのフィルタリングを使用する場合や、Oracle Tuxedoシステム・イベントまたはOracle Tuxedoアプリケーションでポストされるイベントをサブスクライブするには、-7ページの「イベントのFMLフィールド表ファイルの作成」および-9ページの「Oracle Tuxedoアプリケーションとの相互運用性」を参照してください。
戻り値
一意のサブスクリプション識別子を戻します。このオペレーションの結果は即座には現れません。このオペレーションからの復帰とイベント配信の実際の開始の間には遅延が発生する場合があります。遅延時間の長さは、構成によっては大きくなる場合があります。遅延時間に影響する要因の詳細は、-23ページの「データベースの同期」を参照してください。
注意:
停止と再起動を1回のみ実行する通知サービス・アプリケーションでは、subscription_idを使用することで、サブスクリプションが自動的に取り消されたか、またはシステム管理者によって取り消されたかを確認できます。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-8ページの「サブスクリプションの作成」を参照してください。
C++サンプル・コード:
subscription_id = channel->subscribe(
subscription_name,
"News", // domain
���Sports���, // type
"", // No data filter.
qos,
news_consumer.in()
);
Channel::unsubscribe
CORBA IDL
void unsubscribe( in SubscriptionID id );
パラメータ
subscription_id
サブスクリプション識別子。
例外
CORBA::BAD_PARAM
次の問題を示します。Tobj_Events::INVALID_SUBSCRIPTION_ID
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
アンサブスクライブに使用されます。サブスクライバ・アプリケーションでは、このオペレーションを使用してサブスクリプションを終了します。このオペレーションから復帰すると、それ以降にイベントは配信できません。入力パラメータは、サブスクライブ時に取得したSubscriptionIDの1つです。
注意:
このオペレーションの結果は即座には現れません。このオペレーションからの復帰後も、サブスクライバでは一定の時間は継続してイベントを受信できます。この時間は、構成によっては長くなる場合があります。この時間に影響する要因の詳細は、-23ページの「データベースの同期」を参照してください。
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
ポスト元アプリケーションで使用され、通知サービスにイベントをポストします。
注意:
このオペレーションには、トランザクションのコンテキストで使用される際のトランザクション動作があります。詳細は、-4ページの「トランザクションの使用」を参照してください。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
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を使用して作成されるサブスクリプション用の場合は、この例外が常に戻されます。
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
サブスクライバ・アプリケーションで使用され、サブスクリプションが存在するかどうかを確認します。システム管理者はサブスクリプションを手動で削除、通知サービスでは一時的なサブスクリプションを自動的に削除できるため、サブスクライバ・アプリケーションでは、必要に応じてサブスクリプションを再作成できるように、このオペレーションを使用する必要があります。このオペレーションで使用されるsubscription_idは、サブスクライブ時に取得したものと同じです。
戻り値
ブール値を戻します(サブスクリプションが存在する場合はTRUE、存在しない場合はFALSEを戻します)。
C++サンプル・コード:
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
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
ポスト元アプリケーションおよびサブスクライバ・アプリケーションで使用されます。このオペレーションを使用すると、イベント・チャネルを検索し、それを使用してポスト元でイベントをポストし、サブスクライバでイベントをサブスクライブおよびアンサブスクライブできます。
戻り値
デフォルトのイベント・チャネルのオブジェクト参照を戻します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-2ページの「イベント・チャネルの取得」を参照してください。
C++サンプル・コード:
channel_factory->find_channel(
Tobj_SimpleEvents::DEFAULT_CHANNEL);
CosNotificationサービスAPI
この項では、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サービスのクラスとそれらの関係を示しています。
図2-3 実装されているCosNotificationサービスのクラス
各クラスでサポートされるオペレーションを次にまとめます。詳細は、-27ページの「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
概要
フィルタ・オブジェクトのドメイン、型およびデータ・フィルタのパラメータを設定します。
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクライブするイベントの種類を定義します。設定するのは、フィルタ・オブジェクトのドメイン、型およびデータ・フィルタのパラメータです。これらのパラメータの詳細は、-11ページの「サブスクリプションの作成時に使用するパラメータ」を参照してください。
注意:
add_constraintsオペレーションのOracle Tuxedo実装は、(1) 1回のみ呼出し可能で、(2) フィルタがプロキシ・オブジェクトに追加される前に呼び出す必要があり、(3)イベント型が1つしかない単一の制約でのみ構成される必要があります。
戻り値
空のリストを戻します(呼出し側で無視することをお薦めします)。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
C++サンプル・コード:
// 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
概要
フィルタ・オブジェクトを破棄します。
OMG IDL
void destroy();
例外
CORBA::BAD_PARAM
次の問題を示します。Tobj_Events::SUB_INVALID_FILTER_EXPRESSION.
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
アンサブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、ターゲットのフィルタ・オブジェクトを破棄します。
注意:
対応するサブスクリプションを取り消す準備ができるまでは、フィルタ・オブジェクトを破棄しないでください。
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分以内にフィルタを設定してプロキシに追加する必要があり、そうしないと、フィルタは破棄されます。フィルタの文法はTobj_Notification::Constraint_grammarに設定する必要があり、そうしないと、InvalidGrammar例外が発生します。
戻り値
新しいフィルタのオブジェクト参照を戻します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
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 );
};
// 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
概要
サブスクリプションを完了します。
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オペレーションがすでに呼び出されていることを示します。
注意:
例外の定義および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
このオペレーションはサブスクライブ時に使用します。このオペレーションはサブスクライバ・アプリケーションで使用され、イベントをサブスクライブします。push_consumer パラメータでは、サブスクライバのコールバック・オブジェクトを指定します。
connect_structured_push_consumerが呼び出されると、通知サービスがコールバック・オブジェクトのpush_structured_eventオペレーションを呼び出し、イベントをサブスクライバに送信します。connect_structured_push_consumerがすでに呼び出されている場合は、AlreadyConnected例外が発生します。
注意:
connect_structured_push_consumerを呼び出す前に、set_qosadd_filterを呼び出す必要があります。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクリプションのQoSを設定します。サブスクライバがリクエストしているサービス品質のプロパティ設定をカプセル化する名前/値ペアのシーケンスを入力パラメータとして使用します。
QoSには、サブスクリプションのタイプとサブスクリプションの名前の2つの構成要素があります。サブスクリプションのタイプは、名前/値のペアを構成して設定され、名前はTobj_Notification::SUBSCRIPTION_TYPE、値はTobj_Notification::PERSISTENT_SUBSCRIPTIONまたはTobj_Notification::TRANSIENT_SUBSCRIPTIONのいずれかになります。使用方法の詳細は、-2ページの「サービスの品質」を参照してください。
サブスクリプションの名前は、名前/値のペアを構成して設定され、名前はTobj_Notification::SUBSCRIPTION_NAME、値はユーザー定義の文字列です。
このパラメータの詳細は、-11ページの「サブスクリプションの作成時に使用するパラメータ」を参照してください。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
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
サブスクリプションが存在しないことを示します。
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、サブスクライバのコールバック・オブジェクトにフィルタ・オブジェクトを設定します。このオペレーションを使用するアプリケーションが停止して再起動される場合は、filter_idを永続ストレージに書き込む必要があります。
注意:
このオペレーションは、(1)サブスクライバのコールバック・オブジェクトが接続された後に呼び出したり(前述のconnect_structured_push_consumerを参照)、(2)複数回呼び出すことはできず、(3)呼び出す場合は、フィルタ制約式がフィルタに存在している必要があります(CosNotifyFilter::Filter add_constraintsを参照)。
注意:
追加できるのは、イベント・チャネルのデフォルトのファクトリで作成されるフィルタのみです。
戻り値
filter_idを戻します
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
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例外がスローされます。このオペレーションは、停止して再起動するサブスクライバでのみ使用されます。
制限
このオペレーションには、使用方法に関して次の制約とガイドラインが適用されます。
a.
このオペレーションから戻されるフィルタのオブジェクト参照は、比較操作に使用できません。
b.
このオペレーションから戻されるフィルタのオブジェクト参照はCosNotifyFilter::Filter::destroyオペレーションで使用できますが、変更したりプロキシ・オブジェクトに追加できないため、ほとんど使用されません。
戻り値
サブスクライバのコールバック・オブジェクトに現在関連付けられているフィルタのオブジェクト参照を戻します。
C++サンプル・コード:
CosNotify::Filter_var filter =
subscription->get_filter( filter_id() );
CosNotifyChannelAdmin::StructuredProxyPushSupplier::
disconnect_structured_push_supplier
概要
Used to unsubscribe.
OMG IDL
void disconnect_structured_push_supplier();
例外
CORBA::OBJECT_NOT_EXIST
切断するサブスクリプションが存在しないことを示します。
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
アンサブスクライブ時にサブスクライバ・アプリケーションで使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、通知サービスサブスクライバのコールバック・オブジェクト間の接続を終了します。
注意:
このオペレーションでは、イベントの配信を即座に停止することはありません。このオペレーションからの復帰後も、サブスクライバでは一定の時間は継続してイベントを受信できます。
C++サンプル・コード:
subscription->disconnect_structured_push_supplier();
CosNotifyChannelAdmin::StructuredProxyPushSupplier::MyType
概要
Always returns CosNotifyChannelAdmin::PUSH_STRUCTURED proxy.
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);
// 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.
OMG IDL
void connect_structured_push_supplier (
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
例外
CosEventChannelAdmin::AlreadyConnected
発生することはありません。
説明
イベントのポスト時にポスト元アプリケーションで使用されます。イベントを受信できるように通知サービスを準備するには、このオペレーションを呼び出す必要があり、このオペレーションを使用する場合は、NILを渡す必要があります。使用順序は次のとおりです。
1.
プロキシを作成します。
2.
このオペレーションを使用して、通知サービスに接続し、NILを渡します。
3.
イベントをポストします。
4.
ポスト元プログラムを終了する前に、接続を終了します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
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
注意:
例外および対応するマイナー・コードの詳細は、-53ページの「例外のマイナー・コード」を参照してください。
説明
イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、イベント・チャネルにイベントをポストします。
注意:
このオペレーションは、標準のCORBA定義とは次の点で異なります。

a. イベントの変数ヘッダー・セクションの優先度(指定される場合)は、範囲が1 - 100のshort値であることが必要です。

b. フィルタリング可能なデータによるイベントのフィルタリング(標準定義ではドメインと型のみのフィルタリング)が必要な場合、またはイベントがOracle Tuxedoサブスクライバで受信される場合、追加の制約が適用されます。-5ページの「構造化イベントのフィールド、型、およびフィルタ」および-9ページの「Oracle Tuxedoアプリケーションとの相互運用性」を参照してください。
注意:
このオペレーションには、トランザクションのコンテキストで使用される際のトランザクション動作があります。詳細は、2-4ページの「トランザクションの使用」を参照してください。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
C++サンプル・コード:
proxy_push_consumer->push_structured_event(notification);
CosNotifyChannelAdmin::StructuredProxyPushConsumer::
disconnect_structured_push_consumer
概要
Stops posting events.
OMG IDL
void disconnect_structured_push_consumer();
説明
イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、イベントのポストを停止します。入力パラメータは不要で、値は戻されません。次の順序で使用することをお薦めします。
1.
プロキシを作成します。
2.
ポスト元アプリケーションの実行ごとに接続および切断します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
C++サンプル・コード:
proxy_push_consumer->disconnect_structured_push_consumer();
CosNotifyChannelAdmin::StructuredProxyPushConsumer::MyType
概要
Always returns CosNotifyChannelAmdmin::PUSH_STRUCTURED proxy.
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
概要
Creates proxy push supplier objects.
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_idproxy_id出力パラメータで戻されます。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-10ページの「サブスクリプションの作成」を参照してください。
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
概要
Creates proxy push consumer objects.
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_idproxy_id出力パラメータで戻されます。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
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オブジェクトのオブジェクト参照を戻します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-8ページの「イベント・チャネル、ConsumerAdminオブジェクト、およびフィルタ・ファクトリ・オブジェクトの取得」を参照してください。
C++サンプル・コード:
channel->default_consumer_admin();
CosNotifyChannelAdmin::EventChannel::
ConsumerAdmin default_supplier_admin
概要
SupplierAdminオブジェクトを取得します。
OMG IDL
readonly attribute SupplierAdmin default_supplier_admin;
説明
イベントのポスト時に使用されます。このオペレーションはイベント・ポスト元アプリケーションで使用され、SupplierAdminオブジェクトを取得します。
戻り値
SupplierAdminのオブジェクト参照。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-3ページの「イベントの作成とポスト」を参照してください。
C++サンプル・コード:
channel->default_supplier_admin();
CosNotifyChannelAdmin::EventChannel::default_filter_factory
概要
デフォルトのFilterFactoryオブジェクトを取得します。
OMG IDL
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;
説明
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、デフォルトのFilterFactoryオブジェクトを取得します。
戻り値
デフォルトのFilterFactoryオブジェクト参照
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-8ページの「イベント・チャネル、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
概要
Gets the EventChannel object.
OMG IDL
EventChannel get_event_channel ( in ChannelID id )
raises (ChannelNotFound);
例外
CosNotifyChannelAdmin::ChannelNotFound
チャネルが見つからないことを示します。
説明
イベントのサブスクライブ、サブスクライブ解除およびポスト時に使用されます。このオペレーションはアプリケーションで使用され、EventChannelオブジェクトを取得します。サブスクライブ時には、フィルタ・ファクトリ・オブジェクトとConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。サブスクライブ解除時には、ConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。イベントのポスト時には、SupplierAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。渡されるChannelIDパラメータは、Tobj_Notification::DEFAULT_CHANNELに設定される必要があります。それ以外の場合、ChannelNotFound例外が発生します。
戻り値
デフォルトのイベント・チャネルのオブジェクト参照を戻します。
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-2ページの「イベント・チャネルの取得」および-8ページの「イベント・チャネル、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:
//The following operations are inherited.
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つ(構造化イベント)があります。
注意:
このオペレーションはトランザクションでは呼び出されません。また、このオペレーションが復帰するまで、通知サービスでは他のサブスクライバにイベントの配信が開始されない場合があるため、このオペレーションが呼び出されて、もすぐに復帰する必要があります。
 
注意:
ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、-5ページの「CosNotifyComm::StructuredPushConsumerインタフェースの実装」を参照してください。
C++サンプル・コード:
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
// Process the event.
}
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
イベントのポスト時に、変数ヘッダーに優先度フィールドが追加されました。しかし、フィールドの値が1 - 100の範囲の"short"に設定されていません。
54555801
Tobj_Events::
POST_UNSUPPORTED_VALUE_IN_ANY
この例外の発生元:
Tobj_SimpleEvents::
Channel::push_structured_event
CosNotifyChannelAdmin::
StructuredProxyPushConsumer::
push_structured_event
イベントのポスト時に、サポートされていない型(構造、ユニオン、シーケンスなど)を構造化イベント・フィールドのanysの1つに挿入されました。サポートされていない型は、変数ヘッダーの値フィールド、フィルタ処理可能なデータの値フィールドまたは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文字を超えるデータ・フィルタ式が指定されました。
5455580A
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サブスクライバがそのフィルタでadd_constraintsを呼び出すのに、5分以上待機しています。つまり、フィルタが破棄されており(タイムアウト)、サブスクライバで新しいフィルタを作成する必要があります。
54555858
Tobj_Notification::
SUB_ADD_CONS_TO_ADDED_FILTER
この例外の発生元:
CosNotifyFilter::Filter::
add_constraints
プロキシにずでに追加されているフィルタで、CosNotificationサブスクライバがadd_constraintsを呼び出しました。
5455585E
Tobj_Notification::
SUB_ADDED_TIMED_OUT_FILTER
この例外の発生元:
CosNotifyChannelAdmin::
StructuredProxyPushSupplier::
add_filter
フィルタを作成して、add_constraintsを呼び出した後、CosNotificationサブスクライバがadd_filterを呼び出してフィルタをプロキシに追加するのに、5分以上待機しています。つまり、フィルタが破棄されており(タイムアウト)、サブスクリプションで新しいフィルタを作成する必要があります。
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つのデータ・フィルタではなく、データ・フィルタのリストで送信しようとしました)。
5455585A
Tobj_Notification::
SUB_MULTIPLE_TYPES_IN_CONSTRAINT
この例外の発生元:
CosNotifyFilter::Filter::
add_constraints
CosNotificationサブスクライバがフィルタでadd_constraintsを呼び出したときに、複数のドメイン/型のセットを含む制約のリストをサブスクライバが渡しました(サブスクライバが1つのイベント型ではなく、目的のイベント型のリストで送信しようとしました)。
5455585B
Tobj_Notification::
SUB_NIL_FILTER_REF
この例外の発生元:
CosNotifyChannelAdmin::
StructuredProxyPushSupplier::
add_filter
CosNotificationサブスクライバがNILフィルタのオブジェクト参照をadd_filterに渡しました。
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
注意:
ユーザーがプロキシを作成し、ntsadminユーティリティを使用してサブスクリプションを削除してから、プロキシでconnect_structured_push_
consumer
を呼び出すことができるため、connect_structured_push_
consumer
でこの例外が発生する場合があます。
すでに破棄されているプロキシのメソッドをCosNotificationサブスクライバが呼び出しました。プロキシは、次のいずれかの操作によって破棄されています。
CosNotificationサブスクライバがプロキシを切断した。
プロキシを作成してから接続するまでCosNotificationサブスクライバが5分以上待機している(サブスクリプションの完了に5分以上を要した)。
管理者がntsadminユーティリティを使用してサブスクリプションを破棄した。
54555880
 

Copyright ©1994, 2017,Oracle and/or its affiliates. All rights reserved