|
注意 : | 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 を使用するアプリケーションで使用します。
注意 : | リリース 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 アプリケーションによってサブスクライブされる場合は、適用される制限が増えます。それらの制限は、データ型、および内容に基づくフィルタ処理に適用されます。次に、それらの制限について説明します。
any
、long
、unsigned long
、short
、unsigned short
、octet、char
、float
、double
、string
、boolean
、void
、および null
に制限されています。これらのフィールドは、フィルタ式で使用できます。ANY
です。値の型は、any
、long
、unsigned long
、short
、unsigned short
、octet、char
、float
、double
、string
、boolean
、void
、および null
に制限されています。このフィールドは、フィルタ式で使用できません。
イベントの設計は、あらゆるノーティフィケーション サービスの基本です。イベントの設計は、一致するサブスクリプションに配信される情報の量だけでなく、ノーティフィケーション サービスの効率と性能にも影響します。したがって、計画を慎重に行って、ノーティフィケーション サービスが現在のニーズだけでなく将来の規模拡大にも対応できるようにする必要があります。
ノーティフィケーション サービスでは、(1) ドメイン名、(2) 型名、(3) 優先順位、(4) フィルタ処理可能データ、および (5) 残りの本文の 5 段階のイベント設計がサポートされています。イベントを設計するときには、ドメイン名と型名を指定する必要があります (優先順位とフィルタ処理可能データは任意指定)。ドメイン名は、ビジネスに基づいて選択することができます。たとえば病院は医療ビジネス (health care business) に属しているので、病院のノーティフィケーション サービス アプリケーションでは「HEALTHCARE」をドメイン名として選択できます。保険業者の種類に基づいてイベントを分類する必要がある場合は、「HMO」または「UNINSURED」を型名として選択できます。支払い義務のあるエンティティを基準にイベントをさらに細かく定義する必要がある場合は、フィルタ処理可能データを使用して、特定の “HMO_Account” または特定の “Patient_Account” に対する “billing” としてエンティティを識別することも可能です。コード リスト 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 テーブルは不要です。
構造化イベントの filterable_data
フィールドには、名前/値 (NV) ペアのリストが格納されます。イベントのデータは通常はこのリストに格納されます。FML フィールド テーブル ファイルのフィールド名は、構造化イベント内の名前と一致していなければなりません。フィールドの型には、carray
を除くすべての FML 型 (long
、short
、double
、float
、char
、string
) を使用できます。構造化イベントの値は、フィールド テーブルで定義されている型と同じでなければなりません。表 2-1 は、Oracle Tuxedo でサポートされている CORBA Any 型を示しています。これらの Any 型を使用して、データのフィルタ処理と Oracle Tuxedo の相互運用性を実現できます。
コード リスト 2-2 は、FML フィールド テーブル ファイルの例です。*base
2000 は、フィールドのベース番号です。最初のエントリでは、フィールド名が billing、フィールド番号が 1
(ベース番号に基づく値)、フィールドの型が long となっています。
*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 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 構造化イベントで次のようにマッピングされます。
|
|||
Oracle Tuxedo システムでは、システムの警告と障害に関連する定義済みの特定のイベントが検出されてポストされます。たとえば、システム生成のイベントでは、コンフィグレーションの変更、状態の変化、接続の障害、およびマシンの分断が報告されます。
Oracle Tuxedo アプリケーションによってポストされたイベントを Oracle Tuxedo アプリケーションで受信するには、Oracle Tuxedo イベントが格納されている FML バッファをどのように使用して Oracle Tuxedo 構造化イベントが作成されるのかを理解する必要があります。また、domain_name
と type_name
の Oracle Tuxedo イベント名との関連を理解することも必要です。システム イベントとユーザ イベントの 2 つのケースを考慮する必要があります。
Oracle Tuxedo では、イベント名の先頭にドット (.) を使用してシステム生成のイベントをアプリケーション定義のイベントから区別します。たとえば、システム イベントには .SysNetworkDropped
があります。ユーザ イベントの例としては、eventsdropped
があります。それらのイベントをサブスクライブするために、ノーティフィケーション サービスのサブスクライバ アプリケーションではサブスクリプションを次のように定義する必要があります。
サブスクリプションを作成するときには、次のパラメータを指定できます。これらのパラメータでは、Oracle のシンプル イベント API と CosNotification サービス API がサポートされています。
subscription_name
subscription_name
の長さは最大で 128 文字です。
domain_type
domain_type
フィールドと同じパラメータです。このフィールドは、「Telecommunications」、「Finance」、および「Health Care」など、イベントの型が定義されている特定垂直産業のドメインを識別する文字列です。このパラメータは正規表現なので、フィルタ処理の基準となるドメイン パターンを設定するために使用することもできます。たとえば、文字 F で始まるすべてのドメインをサブスクライブするには、ドメインを「F.*
」に設定します。正規表現を作成する方法については、『Oracle Tuxedo C リファレンス』で recomp
コマンドを参照してください。
type_name
type_name
フィールドと同じパラメータです。これは、Comm_alarm、StockQuote、VitalSigns など、ドメイン内で一意にイベントの型を分類する文字列です。このパラメータは正規表現なので、フィルタ処理の基準となるイベントの型のパターンを設定するために使用することもできます。たとえば、文字 F で始まるすべてのイベントの型をサブスクライブするには、型を「F.*
」に設定します。正規表現を作成する方法については、『Oracle Tuxedo C リファレンス』で recomp
コマンドを参照してください。
data_filter
short
、long
、char
、float
、double
、および string
です。表 2-2 は、サポートされている論理式の演算子を示しています。
データのフィルタ処理を利用するには、FML テーブルを設定し、サブスクリプションにフィルタを含めて、データをフィルタ処理し、イベントをポストします。コード リスト 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";
push_consumer
注意 : | 一時的または永続的のいずれかのオブジェクト参照をコールバック オブジェクトとして使用できます。どのタイプのオブジェクト参照を使用するのかを決めるときには、QoS とアプリケーションの実行回数の両方を考慮に入れる必要があります。使用するオブジェクト参照のタイプを決める際の参考情報については、表 2-3 を参照してください。 |
qos
(サービスの品質)
CORBA::TRANSIENT
例外が届かない場合は、サブスクライバが停止しているかほかの理由で利用できないと判断され、サブスクリプションが取り消されます。配信が失敗して CORBA::TRANSIENT
例外を受信した場合、ノーティフィケーション サービスではサブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。
注意 : | 永続的なサブスクリプションの場合、ノーティフィケーション サービスでは常にコールバック オブジェクトを二方向で呼び出してイベントを配信します。共同クライアント/サーバが orb->run を呼び出す前にコールバック オブジェクト (イベントの受信側) をアクティブにしない状況で、ノーティフィケーション サービスがコールバック オブジェクトを呼び出した場合、POA に関する限り、コールバック オブジェクトは存在しません。この場合は、CORBA::OBJECT_NOT_EXIST 例外が返されます。CORBA::OBJECT_NOT_EXIST 例外を受信した場合、ノーティフィケーション サービスではサブスクリプションとイベントを削除します。その例外を受信しない場合は、サブスクリプションは維持され、イベントは再試行されます。 |
単純さと使いやすさが、Oracle シンプル イベント アプリケーション プログラミング インタフェース (API) の特徴と言えます。その機能は、Oracle Tuxedo EventBroker の機能と似ています。
Oracle シンプル イベント API は、次のインタフェースで構成されます (図 2-2 を参照)。
Tobj_SimpleEvents::Channel
インタフェースと Tobj_SimpleEvents::ChannelFactory
インタフェースは、ノーティフィケーション サービスによって実装されます (説明は後述)。
CosNotifyComm::StructuredPushConsumer
インタフェースは、サブスクライバによって実装されます。このインタフェースの説明については、「CosNotifyComm::StructuredPushConsumer::push_structured_event」を参照してください。
注意 : | この節で言及されている CosNotification サービスのクラスは、tuxdir/include ディレクトリにある CosNotification サービス IDL ファイルで完全に記述されています。 |
注意 : | サポートされていないクラス オペレーションを使用すると、CORBA::NO_IMPLEMENT 例外が発生します。 |
このインタフェースの CORBA IDL は次のとおりです。
module Tobj_SimpleEvents
{
typedef long SubscriptionID;
typedef string RegularExpression;
typedef string FilterExpression;
const SubscriptionType TRANSIENT_SUBSCRIPTION = 0;
const SubscriptionType PERSISTENT_SUBSCRIPTION = 1;
interface Channel
void push_structured_event(
{
in CosNotification::StructuredEvent event);
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer);
boolean exists( in SubscriptionID id );
void unsubscribe( in SubscriptionID id );
};
};
これらのオペレーションについては、次の節を参照してください。
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
// フィルタ式の長さは 1 で、名前は TRANSIENT_SUBSCRIPTION
// または PERSISTENT_SUBSCRIPTION でなければならない
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer
);
このオペレーションでサポートされているパラメータの説明については、「サブスクリプションの作成時に使用するパラメータ」を参照してください。
CORBA::BAD_PARAM
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
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
このオペレーションを使用すると、イベントをサブスクライブできます。このオペレーションは、特定のイベントのサブスクリプションを作成するために、ノーティフィケーション サービスのサブスクライバ アプリケーションによって呼び出されます。サブスクリプション名、ドメイン名、型名、データ フィルタ、サービスの品質、およびサブスクライバのコールバック オブジェクトのオブジェクト参照が渡されます。コールバック オブジェクトでは、CosNotifyComm::StructuredPushConsumer IDL インタフェースが実装されます。
注意 : | 停止および再起動するサブスクライバについては、subscription_id を永続ストレージに書き込む必要があります。 |
データのフィルタ処理を利用するか、あるいは Oracle Tuxedo システム イベントまたは Oracle Tuxedo アプリケーションでポストされたイベントをサブスクライブするには、「イベントの FML フィールド テーブル ファイルの作成」および「Oracle Tuxedo アプリケーションとの相互運用性」を参照してください。
ユニークなサブスクリプション識別子が返されます。このオペレーションの結果は即時には現れません。このオペレーションからの復帰とイベント配信の実際の開始の間には遅延があります。遅延期間の長さは、コンフィグレーション次第ではかなり長くなります。この遅延期間に影響する要素の詳細については、「データベースの同期」を参照してください。
注意 : | 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、subscription_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
subscription_id = channel->subscribe(
subscription_name,
"News", // ドメイン
“Sports”, // 型
"", // データ フィルタなし
qos,
news_consumer.in()
);
void unsubscribe( in SubscriptionID id );
subscription_id
CORBA::BAD_PARAM
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
アンサブスクライブに使用します。サブスクライバ アプリケーションでは、このオペレーションを使用してサブスクリプションを終了します。このオペレーションから復帰すると、それ以降にイベントは配信できません。入力パラメータは、サブスクライブ時に取得した SubscriptionID
1 つです。
注意 : | このオペレーションの結果は即時には現れません。このオペレーションからの復帰後も、サブスクライバでは一定の期間は継続してイベントを受信できます。その期間は、コンフィグレーション次第ではかなり長くなります。この期間に影響する要素の詳細については、「データベースの同期」を参照してください。 |
channel->unsubscribe(subscription_id);
void push_structured_event(
in CosNotification::StructuredEventnotification
);
notification
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
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
ノーティフィケーション サービスにイベントをポストするためにポスト元アプリケーションで使用されます。
注意 : | このオペレーションには、トランザクションのコンテキストで使用される際のトランザクションの振る舞いがあります。詳細については、「トランザクションの使い方」を参照してください。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
channel->push_structured_event(notification);
boolean exists(in SubscriptionID subscription_id);
subscription_id
CORBA::BAD_PARAM
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
サブスクリプションが存在するかどうかを確認するためにサブスクライバ アプリケーションによって使用されます。システム管理者はサブスクリプションを手動で削除でき、ノーティフィケーション サービスでは一時的なサブスクリプションを自動的に削除できるので、サブスクライバ アプリケーションでは必要に応じてサブスクリプションを再作成できるようにこのオペレーションを使用する必要があります。このオペレーションで使用する subscription_id
は、サブスクライブ時に取得した同じ識別子です。
サブスクリプションが存在する場合は true、存在しない場合は false が返されます。
if channel->exists (subscription_id) {
// サブスクリプションは依然として有効
} else {
// サブスクリプションはもう存在しない
}
ChannelFactory
インタフェースは、イベント チャネルの検索に使用します。このインタフェースには、find_channel
という 1 つのオペレーションがあります。
このインタフェースの CORBA IDL は次のとおりです。
module Tobj_SimpleEvents
{
typedef long ChannelID;
interface ChannelFactory
{
Channel find_channel(
in ChannelID channel_id // DEFAULT_CHANNEL でなければならない
);
};
};
Channel find_channel(
in ChannelID channel_id );
このリリースの Oracle Tuxedo では、イベント チャネルは 1 つだけです。したがって、ChannelID
は Tobj_SimpleEvents::DEFAULT_CHANNEL
(C++) に設定する必要があります。
CORBA::BAD_PARAM
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
ポスト元アプリケーションとサブスクライバ アプリケーションによって使用されます。このオペレーションを使用すると、イベント チャネルを見つけて、ポスト元ではイベントをポストし、サブスクライバではイベントをサブスクライブおよびアンサブスクライブできます。
デフォルト イベント チャネルのオブジェクト参照が返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネルの取得」を参照してください。 |
channel_factory->find_channel(
Tobj_SimpleEvents::DEFAULT_CHANNEL);
この節では、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 ベースのノーティフィケーション サービスの標準のサービス品質がサポートされていず、別のサービス品質がサポートされています。
図 2-3 は、このリリースの Oracle Tuxedo で (完全または部分的に) 実装されている CosNotification サービスのクラスとそれらの関係を示しています。
各クラスでサポートされているオペレーションについては、以下に要約があります。詳細については、「CosNotification サービスのクラスの詳しい説明」を参照してください。
このクラスは、イベント ポスト元とサブスクライバ アプリケーションによって使用されます。このクラスでは、イベントをポスト、サブスクライブ、およびアンサブスクライブするときにチャネル ファクトリを取得するために使用される get_channel_factory
オペレーションがサポートされています。
このクラスは、イベント ポスト元とサブスクライバ アプリケーションによって使用されます。このクラスでは、次の 3 つのオペレーションがサポートされています。
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスでは、obtain_notification_push_consumer
オペレーションがサポートされています。ポスト元アプリケーションでは、このオペレーションを使用して、ノーティフィケーション サービスにイベントをポストするために使用するプロキシ プッシュ コンシューマ オブジェクトを作成します。
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスでは、次のオペレーションがサポートされています。
connect_structured_push_supplier
- プロキシ プッシュ サプライヤをノーティフィケーション サービスのイベント チャネルに接続するためにイベント ポスト元アプリケーションによって使用されます。push_structured_event
- ノーティフィケーション サービスのイベント チャネルにイベントをポストするためにイベント ポスト元アプリケーションによって使用されます。disconnect_structured_push_consumer
- ノーティフィケーション サービスのイベント チャネルからプロキシ プッシュ サプライヤの接続を解除するためにイベント ポスト元アプリケーションによって使用されます。
このクラスは、フィルタ オブジェクトを作成するためにイベント サブスクライバ アプリケーションによって使用されます。このクラスでは、create_filter
オペレーションがサポートされています。フィルタ オブジェクトでは、ドメイン、型、およびフィルタ処理可能データを含めたすべてのデータのフィルタ処理が提供されます。
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスでは、次のオペレーションがサポートされています。
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスでは、次のオペレーションがサポートされています。
obtain_notification_push_supplier
- サブスクライバのコールバック オブジェクトにイベントを配信するために使用されるプロキシ プッシュ サプライヤ オブジェクトを作成するためにイベント サブスクライバ アプリケーションによって使用されます。get_proxy_supplier
- プロキシ プッシュ サプライヤ オブジェクトのオブジェクト参照を取得するためにイベント サブスクライバ アプリケーションによって使用されます。このオペレーションは、サブスクライバ アプリケーションが停止して再起動し、サブスクリプションを取り消す場合にのみ使用されます。その理由は、サブスクライバでは最初の実行のオブジェクト参照を破棄し、次の実行でオブジェクト参照を再び取得する必要があるからです。サブスクライバでは、実行をまたがってオブジェクト参照を再利用することはできません。
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスでは、次のオペレーションがサポートされています。
connect_structured_push_consumer
- サブスクライバをプロキシ プッシュ サプライヤに接続するためにイベント サブスクライバ アプリケーションによって使用されます。set_qos
- サブスクリプションのサービスの品質を設定するためにイベント サブスクライバ アプリケーションによって使用されます。add_filter
- フィルタ オブジェクトをサブスクリプションに追加するためにイベント サブスクライバ アプリケーションによって使用されます。get_filter
- サブスクリプションと関連付けられているフィルタを取得するためにアンサブスクライブ処理の実行時にイベント サブスクライバ アプリケーションによって使用されます。このオペレーションは、サブスクライバ アプリケーションが停止して再起動する場合にのみ使用されます。disconnect_structured_push_supplier
- アンサブスクライブするためにイベント サブスクライバ アプリケーションによって使用されます。
このインタフェースは、イベント サブスクライバ アプリケーションによって実装されます。このインタフェースでは、push_structured_event
オペレーションがサポートされています。ノーティフィケーション サービスでは、このオペレーションを呼び出してイベントをサブスクライバに配信します。
この節では、このリリースの Oracle Tuxedo で実装される CosNotification サービスのクラスについて説明します。それらのクラスは、tuxdir\include
ディレクトリにある CosNotification サービスの IDL ファイルで完全に記述されています。
注意 : | サポートされていないクラス オペレーションを使用すると、CORBA::NO_IMPLEMENT 例外が発生します。 |
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスの OMG IDL は次のとおりです。
Module CosNotifyFilter
{
interface Filter {
ConstraintInfoSeqadd_constraints
(
in ConstraintExpSeq constraint)
raises (InvalidConstraint);
void
destroy
();
};
}; //CosNotifyFilter
フィルタ オブジェクトでドメイン、型、およびデータ フィルタの各パラメータを設定します。
ConstraintInfoSeq
add_constraints
(
in ConstraintExpSeq constraint)
raises (InvalidConstraint);
CosNotifyFilter::InvalidConstraint
CORBA::BAD_PARAM
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 つの制約のみで構成される必要があります。 |
空のリスト
が返されます。呼び出し側では無視することをお勧めします。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
// フィルタ処理パラメータを設定
// (ドメイン = "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);
CORBA::BAD_PARAM
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
アンサブスクライブするときに使用します。このオペレーションは、フィルタ オブジェクトを破棄するためにサブスクライバ アプリケーションで使用されます。
注意 : | 対応するサブスクリプションを取り消す準備ができるまでは、フィルタ オブジェクトを破棄しないでください。 |
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスの OMG IDL は次のとおりです。
Module CosNotifyFilter
{
interface FilterFactory {
Filtercreate_filter
(
in string constraint_grammar)
raises (InvalidGrammar);
destroy
();
}; //
};CosNotifyFilter
どのイベントがサブスクリプションに配信されるのかを指定します。
Filter
create_filter
(
in string constraint_grammar)
raises (InvalidGrammar);
CosNotifyFilter::InvalidGrammar
新しいフィルタ オブジェクトを作成するためにサブスクライバ アプリケーションで使用されます。このフィルタは、どのイベントがサブスクリプションに配信されるのかを指定するために使用します。サブスクライバでは、フィルタを設定して 5 分以内にプロキシに追加する必要があります。5 分以内に追加しないと、フィルタは破棄されます。フィルタの文法は、Tobj_Notification::Constraint_grammar
に設定する必要があります。そうしないと、InvalidGrammar
例外が発生します。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
filter_factory->create_filter(
Tobj_Notification::CONSTRAINT_GRAMMAR
);
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスの 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
void
connect_structured_push_consumer
(
in CosNotifyComm::StructuredPushConsumer push_consumer)
raises(CosEventChannelAdmin::AlreadyConnected,
CosEventChannelAdmin::TypeError );
CosEventChannelAdmin::TypeError
CORBA::INV_OREF
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
注意 : | 例外の定義および対応するマイナー コードについては、「例外のマイナー コード」を参照してください。 |
このオペレーションは、サブスクライブするときに使用します。このオペレーションは、イベントをサブスクライブするためにサブスクライバ アプリケーションで使用されます。push_consumer
パラメータは、サブスクライバのコールバック オブジェクトを識別します。
connect_structured_push_consumer
が呼び出されると、ノーティフィケーション サービスはコールバック オブジェクトの push_structured_event
オペレーションを呼び出してサブスクライバにイベントを送信します。connect_structured_push_consumer
が既に呼び出されている場合は、AlreadyConnected
例外が発生します。
注意 : | set_qos と add_filter は、connect_structured_push_consumer を呼び出す前に呼び出す必要があります。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
subscription->connect_structured_push_consumer(
news_consumer.in()
);
void set_qos(in QoSProperties qos)
raises (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
で、値はユーザ定義の文字列です。
このパラメータの詳細については、「サブスクリプションの作成時に使用するパラメータ」を参照してください。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
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);
サブスクライバのコールバック オブジェクトでフィルタ オブジェクトを設定します。
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 を参照)。 |
注意 : | イベント チャネルのデフォルト フィルタ ファクトリで作成されたフィルタのみ追加することができます。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
CosNotifyFilter::FilterID filter_id =
subscription->add_filter(filter.in());
サブスクライバのコールバック オブジェクトに現在関連付けられているフィルタのオブジェクト参照を取得します。
Filter get_filter( in FilterID filter )
raises ( FilterNotFound);
CosNotifyChannelAdmin::FilterNotFound
再起動可能なサブスクライバでアンサブスクライブする必要があるときに使用します。このオペレーションは、サブスクライバのコールバック オブジェクトと現在関連付けられているフィルタのオブジェクト参照を取得するためにサブスクライバ アプリケーションで使用されます。渡される FilterID
は、サブスクライバの StructuredProxyPushSupplier オブジェクトで有効でなければなりません。FilterID
がイベント チャネルと関連付けられているプロキシ オブジェクトで有効ではない場合は、FilterNotFound
例外が送出されます。このオペレーションは、停止して再起動されるサブスクライバでのみ使用されます。
このオペレーションでは、次の制限とガイドラインが適用されます。
サブスクライバのコールバック オブジェクトに現在関連付けられているフィルタのオブジェクト参照が返されます。
CosNotify::Filter_var filter =
subscription->get_filter( filter_id() );
アンサブスクライブに使用します。
void disconnect_structured_push_supplier();
CORBA::OBJECT_NOT_EXIST
注意 : | 例外および対応するマイナー コードの詳細については、「例外のマイナー コード」を参照してください。 |
アンサブスクライブするときにサブスクライバ アプリケーションによって使用されます。このオペレーションは、ノーティフィケーション サービスとサブスクライバのコールバック オブジェクトの接続を終了するためにサブスクライバ アプリケーションで使用されます。
注意 : | このオペレーションで、イベントの配信が即座に停止することはありません。このオペレーションからの復帰後も、サブスクライバでは一定の期間は継続してイベントを受信できます。 |
subscription->disconnect_structured_push_supplier();
常に CosNotifyChannelAdmin::PUSH_STRUCTURED
プロキシを返します。
readonly attribute ProxyType MyType
常に CosNotifyChannelAdmin::PUSH_STRUCTURED
プロキシを返します。
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスの 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
イベントを受信するようにノーティフィケーション サービスを準備します。
void
connect_structured_push_supplier
(
in CosNotifyComm::StructuredPushSupplier push_supplier)
raises(CosEventChannelAdmin::AlreadyConnected);
CosEventChannelAdmin::AlreadyConnected
イベントのポスト時にポスト元アプリケーションによって使用されます。このオペレーションを呼び出さないと、ノーティフィケーション サービスではイベント受信の準備ができません。また、このオペレーションを使用するときには NIL を渡す必要があります。次の順序で使用します。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
proxy_push_consumer->connect_structured_push_supplier(
CosNotifyComm::StructuredPushSupplier::_nil()
);
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 アプリケーションとの相互運用性」を参照してください。 |
注意 : | このオペレーションには、トランザクションのコンテキストで使用される際のトランザクションの振る舞いがあります。詳細については、「トランザクションの使い方」を参照してください。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
proxy_push_consumer->push_structured_event(notification);
イベントのポストを停止します。
void disconnect_structured_push_consumer();
イベントをポストするときに使用します。このオペレーションは、イベントのポストを停止するためにポスト元アプリケーションによって使用されます。入力パラメータは不要で、値は返されません。次の順序で使用することをお勧めします。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
proxy_push_consumer->disconnect_structured_push_consumer();
常に CosNotifyChannelAmdmin::PUSH_STRUCTURED
プロキシを返します。
readonly attribute ProxyType MyType
常に CosNotifyChannelAmdmin::PUSH_STRUCTURED
プロキシを返します。
このクラスは、イベント サブスクライバ アプリケーションによって使用されます。このクラスの 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
プロキシ プッシュ サプライヤ オブジェクトを作成します。
ProxySupplier
obtain_notification_push_supplier
(
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )
CosNotifyChannelAdmin::AdminLimitExceeded
CORBA::IMP_LIMIT
サブスクライブするときに使用します。このオペレーションは、プロキシ プッシュ サプライヤ オブジェクトを作成するためにサブスクライバ アプリケーションで使用されます。構造化イベントのみがサポートされています。つまり、ANY_EVENT
と SEQUENCE_EVENT ClientTypes
はサポートされていません。したがって、ClientType
入力パラメータは CosNotifyComm::STRUCTURED_EVENT
に設定する必要があります。サブスクライバを停止して再起動する場合で、サブスクリプションがプログラムの複数の実行にまたがって存続する場合は、このオペレーションで返される ProxyID
を永続的に保存する必要があります。サブスクライバでは、プロキシ サプライヤを CosNotifyChannelAdmin::StructuredProxyPushSupplier
にナロー変換する必要があります。必要なすべてのオペレーションは 5 分間で完了する必要があります。
注意 : | 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、proxy_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。 |
このオペレーションでは、新しいプロキシのオブジェクト参照が返されます。新しい proxy_id
も、proxy_id
出力パラメータを通じて返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「サブスクリプションの作成」を参照してください。 |
CosNotifyChannelAdmin::ProxySupplier_var generic_proxy =
consumer_admin->obtain_notification_push_supplier(
CosNotifyChannelAdmin::STRUCTURED_EVENT,
proxy_id
);
CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxy =
CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(
generic_proxy.in ()
);
コンシューマ管理オブジェクトの obtain_notification_push_supplier
オペレーションを使用して作成されたプロキシ プッシュ サプライヤ オブジェクトを返します。
ProxySupplier
get_proxy_supplier
(
in ProxyID proxy_id )
raises ( ProxyNotFound );
ProxyNotFound
アンサブスクライブするときに使用します。このオペレーションは、コンシューマ管理オブジェクトの obtain_notification_push_supplier
オペレーションを使用して作成されたプロキシ プッシュ サプライヤ オブジェクトを返すためにサブスクライバ アプリケーションで使用されます。ProxyID
入力パラメータは、プロキシ オブジェクトをユニークに識別します。呼び出し側では、一時的なサブスクリプションの配信エラーまたは ntsadmin
管理コマンドによってプロキシ オブジェクトが破棄される可能性があることを認識していなければなりません。プロキシ オブジェクトが破棄されると、関連付けられている ProxyID
が無効になります。ProxyID
が無効な場合は、ProxyNotFound
例外が発生します。サブスクライバでは、プロキシ サプライヤを CosNotifyChannelAdmin::StructuredProxyPushSupplier
にナロー変換する必要があります。
CosNotifyChannelAdmin::ProxySupplier_var generic_proxy =
m_consumer_admin->get_proxy_supplier(
m_subscription_info.news_proxy_id()
);
CosNotifyChannelAdmin::StructuredProxyPushSupplier_var proxy =
CosNotifyChannelAdmin::StructuredProxyPushSupplier::_narrow(
generic_proxy.in()
);
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスの OMG IDL は次のとおりです。
Module CosNotifyChannelAdmin{
interface SupplierAdmin :
CosNotification::QoSAdmin,
CosNotifyComm::NotifyPublish,
CosNotifyFilter::FilterAdmin,
CosEventChannelAdmin::SupplierAdmin {
ProxyConsumer
obtain_notification_push_consumer
(
SupplierAdmin
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
};
}; //
プロキシ プッシュ コンシューマ オブジェクトを作成します。
ProxyConsumer
obtain_notification_push_consumer
(
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
CosNotifyChannelAdmin::AdminLimitExceeded
CORBA::IMP_LIMIT
イベントをポストするときに使用します。このオペレーションは、プロキシ プッシュ コンシューマ オブジェクトを作成するためにポスト元アプリケーションで使用されます。ClientType
は、“CosNotifyChannelAdmin::STRUCTURED_EVENT”
に設定する必要があります。返される ProxyID
は無視してください。プロキシ コンシューマは、CosNotifyChannelAdmin::StructuredProxyPushConsumer
にナロー変換する必要があります。
注意 : | 1 度だけ起動および停止されるノーティフィケーション サービス アプリケーションでは、proxy_id を使用してサブスクリプションが自動的にまたはシステム管理者によって取り消されているかどうかを確認できます。 |
このオペレーションでは、新しいプロキシのオブジェクト参照が返されます。新しい proxy_id
も、proxy_id
出力パラメータを通じて返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
CosNotifyChannelAdmin::ProxyConsumer_var generic_proxy_consumer =
supplier_admin->obtain_notification_push_consumer(
CosNotifyChannelAdmin::STRUCTURED_EVENT,
proxy_id
);
CosNotifyChannelAdmin::StructuredProxyPushConsumer_var
proxy_push_consumer =
CosNotifyChannelAdmin::StructuredProxyPushConsumer::_narrow(
generic_proxy_consumer
);
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスの OMG IDL は次のとおりです。
Module CosNotifyChannelAdmin{
interface EventChannel :
CosNotification::QoSAdmin,
CosNotification::AdminPropertiesAdmin,
CosEventChannelAdmin::EventChannel {
readonly attribute
ConsumerAdmin default_consumer_admin
;
readonly attributeSupplierAdmin default_supplier_admin
;
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory
;
CosNotifyChannelAdmin
};
}; //
readonly attribute
ConsumerAdmin default_consumer_admin
;
サブスクライブおよびアンサブスクライブするときに使用します。このオペレーションは、ConsumerAdmin オブジェクトを取得するためにサブスクライバ アプリケーションで使用されます。
ConsumerAdmin オブジェクトのオブジェクト参照が返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネル、ConsumerAdmin オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。 |
channel->default_consumer_admin();
readonly attribute
SupplierAdmin default_supplier_admin
;
イベントをポストするときに使用します。このオペレーションは、SupplierAdmin オブジェクトを取得するためにイベント ポスト元アプリケーションで使用されます。
SupplierAdmin のオブジェクト参照が返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベントの作成とポスト」を参照してください。 |
channel->default_supplier_admin();
デフォルトの FilterFactory オブジェクトを取得します。
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory
;
サブスクライブするときに使用します。このオペレーションは、デフォルトの FilterFactory オブジェクトを取得するためにサブスクライバ アプリケーションで使用されます。
デフォルトの FilterFactory オブジェクトのオブジェクト参照が返されます。
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「イベント チャネル、ConsumerAdmin オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。 |
channel->
default_filter_factory
();
このクラスは、イベント ポスト元アプリケーションによって使用されます。このクラスの OMG IDL は次のとおりです。
Module CosNotifyChannelAdmin{
interface EventChannelFactory {
EventChannelget_event_channel
( in ChannelID id )
CosNotifyChannelAdmin
raises (ChannelNotFound);
};
}; //
EventChannel
オブジェクトを取得します。
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 オブジェクト、およびフィルタ ファクトリ オブジェクトの取得」を参照してください。 |
channel_factory->
get_event_channel
(
Tobj_Notification::DEFAULT_CHANNEL );
このインタフェースは、イベントの配信を目的としてイベント サブスクライバ アプリケーションによって使用されます。このインタフェースを実装しないと、ノーティフィケーション サービスではサブスクライバにイベントを配信できません。このインタフェースには、実装しなければならない 3 つのメソッドがあります。
Module CosNotifyComm{
interface StructuredPushConsumer : NotifyPublish {
void
push_structured_event
(
event
in CosNotification::StructuredEvent)
CosNotifyComm
raises(CosEventComm::Disconnected);
void disconnect_structured_push_consumer:
// 次のオペレーションが継承される
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
};
}; //
void
push_structured_event
(
event
in CosNotification::StructuredEvent)
raises(CosEventComm::Disconnected);
CosEventComm::
Disconnected
サブスクライブするときに使用します。このオペレーションは、サブスクライバのコールバック オブジェクトによって実装され、構造化イベントが配信されるたびにノーティフィケーション サービスによって呼び出されます。このオペレーションには、1 つの入力パラメータ (構造化イベント) があります。
注意 : | このオペレーションは、トランザクションでは呼び出されません。また、このオペレーションは呼び出されてもすぐに復帰しなければなりません。その理由は、このオペレーションが復帰するまで、ノーティフィケーション サービスではほかのサブスクライバへのイベント配信が開始されないからです。 |
注意 : | ここで紹介するサンプル コードは全体の一部分です。完全なサンプル コードについては、「CosNotifyComm::StructuredPushConsumer インタフェースの実装」を参照してください。 |
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
// イベントを処理
}
void disconnect_structured_push_consumer;
このオペレーションが呼び出されることはありません。サブスクライバ アプリケーションでは、このオペレーションのスタブ アウト バージョンを用意する必要があります。
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
throw new CORBA::NO_IMPLEMENT();
}
void offer_change(
in CosNotification::EventTypeSeq added,
in CosNotification::EventTypeSeq removed )
raises ( InvalidEventType );
CosNotifyComm::InvalidEventType
このオペレーションが呼び出されることはありません。サブスクライバ アプリケーションでは、このオペレーションのスタブ アウト バージョンを用意する必要があります。
virtual void offer_change(
const CosNotification::EventTypeSeq& added,
const CosNotification::EventTypeSeq& removed )
{
throw CORBA::NO_IMPLEMENT();
}
この節では、ノーティフィケーション サービスの例外シンボルとマイナー コードについて説明します。マイナー コードは、Tobj_Events.idl
ファイルと Tobj_Notification.idl
ファイルにあります。それらのファイルは、tuxdir\include
ディレクトリ (Microsoft Windows の場合) および tuxdir/include
ディレクトリ (UNIX の場合) に配置されています。
表 2-4 と表 2-5 は、それぞれ Tobj_Events 例外と Tobj_Notification 例外の例外シンボルと対応するマイナー コードを示しています。CORBA システム イベントにはマイナー コード フィールドがあり、それらのマイナー コードも以下の表で定義されています。
注意 : | 表の中の例外シンボルは、より高いレベルの例外 (CORBA::IMP_LIMIT 、CORBA::CORBA::BAD_PARAM 、CORBA::BAD_INV_ORDER 、CORBA::INV_OBHJREF 、および CORBA::OBJECT_NOT_EXIST ) に基づいて構成されており、アルファベット順にリストされています。 |
|
||