|
| 注意: | 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サイクルなど)が多く消費されるに伴い、多くの管理(キューの管理やデッド・サブスクライバの検出など)が必要になるため、永続的なサブスクリプションにはコストが伴います。
一時的なサブスクリプションは、最小限のオーバーヘッドで最高のパフォーマンスを発揮し、そのプロパティは次のとおりです。
サブスクリプションは、イベント配信の失敗が検出されるまで有効です。配信の失敗が検出されると、サブスクリプションは終了します。通常、通知サービスでは、パフォーマンス上の理由で、一時的なサブスクライバにイベントが正常に配信されたかどうかを確認しません。ただし、通知サービスは、一時的なサブスクライバにイベントを配信する場合に、イベントが正常に配信されたかどうかを確認する場合があります。正常に配信されず、CORBA::TRANSIENT例外が戻されなかった場合、通知サービスでは、サブスクリプションが削除されたと判断し、サブスクリプションを取り消します。配信が失敗してCORBA::TRANSIENT例外を受信した場合、通知サービスでは、サブスクライバがビジー状態であると判断してイベントを破棄しますが、サブスクリプションは取り消されません。
デッド状態の一時的なサブスクリプションの自動的な取消しでは、アンサブスクライブされていない一時的なサブスクリプションのクリーンアップ・メカニズムが提供されます。ただし、通知サービスによる配信の確認はイベントがサブスクライバに最初に送信されたときに実行されますが、それから5分が経過し、別のイベントが配信されるまでは次の確認は行われません。したがって、確認が実行される間隔は短くて5分であり、5分経過後に配信するイベントがない場合、その間隔はさらに長くなります。5分という最短の間隔は固定であり、変更することはできません。このため、イベント配信の失敗は必ずしも最初の失敗の時点で検出されるわけではありません。これは、通知サービスで確認が行われたときにのみ検出されます。
チャネル・ファクトリは、イベント・チャネルを検索するために、イベント・ポスト元のアプリケーションとサブスクライバで使用されます。イベント・チャネルは、イベントのポスト、サブスクライブ(サブスクリプションの作成)、およびアンサブスクライブ(サブスクリプションの取消し)に使用されます。
通知サービスでは、Bootstrapオブジェクトを使用して、イベント・チャネル・ファクトリのオブジェクト参照を取得します。これは、Tobj_Bootstrap::resolve_initial_referencesオペレーションを使用して実行されます。Bootstrapオブジェクトでは、通知サービス・アプリケーションの2つのサービスID(NotificationServiceとTobj_SimpleEventsService)がサポートされています。NotificationServiceオブジェクトは、CosNotificationサービスAPIを使用するアプリケーションで使用されます。Tobj_SimpleEventsServiceオブジェクトは、Oracle SimpleEvents APIを使用するアプリケーションで使用されます。
| 注意: | リリース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アプリケーションにサブスクライブされる場合は、適用される制限が増えます。この制限は、イベントの内容に基づいてデータ型およびフィルタ処理に適用されます。次に、それらの制限について説明します。

any、long、unsigned long、short、unsigned short、octet、char、float、double、string、boolean、voidおよびnullに制限されています。これらのフィールドはフィルタ式で使用できます。ANYで構成されます。値の型は、any、long、unsigned long、short、unsigned short、octet、char、float、double、string、boolean、voidおよびnullに制限されています。このフィールドはフィルタ式では使用できません。イベントの設計は、あらゆる通知サービスの基本です。この設計は、一致するサブスクリプションに配信される情報の量だけでなく、通知サービスの効率とパフォーマンスにも影響します。したがって、計画を慎重に行って、通知サービスが現在のニーズだけでなく将来の規模拡大にも対応できるようにする必要があります。
通知サービスでは、(1)ドメイン名、(2)型名、(3)優先度、(4)フィルタ処理可能データ、(5)本文の残りの5つのレベルのイベント設計がサポートされています。イベントを設計する場合は、ドメイン名と型名を指定する必要があります(優先度とフィルタ処理可能なデータは任意)。選択するドメイン名は各自の業務に関連付けることができます。たとえば、病院は医療業務になるため、病院用の通知サービス・アプリケーションでは、「HEALTHCARE」をドメイン名として選択できます。保険業者の種類別にイベントを分類する場合は、「HMO」や「UNINSURED」を型名として選択できます。支払いを担当する事業者別にイベントをさらに細かく定義する場合は、フィルタ処理可能データを使用して、特定の「HMO_Account」や「Patient_Account」に対する「billing」として事業者を指定できます。リスト2-1は、この型のイベント設計の例を示しています。
domain_name = “HEALTHCARE”
type_name = “HMO”
#Filterable data name/value pairs.
filterable_data.name = “billing”
filterable_data.value = 4498
filterable_data.name = “patient_account”
filterable_data.value = 37621
当然、通知サービス・アプリケーションでポストおよび受信されるイベント設計が詳細かつ厳密になればなるほど、通知サービスで処理しなければならないイベントの数が少なくなります。このことは、システム・リソースと構成の要件に直接的に影響します。したがって、イベントを設計するときには十分な注意が必要です。
イベントのフィールド操作言語(FML)フィールド表は、次の機能のいずれかが必要な場合にのみ作成する必要があります。それ以外の場合、FML表は不要です。
構造化イベントのfilterable_dataフィールドには、名前/値(NV)のペアのリストが格納されます。イベントのデータは、通常はこのリストに格納されます。FMLフィールド表ファイルのフィールド名は、構造化イベント内の名前と一致する必要があります。フィールドの型は、carrayを除くすべてのFML型(long、short、double、float、char、string)を使用できます。構造化イベントの値は、フィールド表で定義されている型と同じにする必要があります。表2-1は、Oracle TuxedoでサポートされているCORBAの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フィールド表ファイルの作成および構成方法の詳細は、『Oracle Tuxedoコマンド・リファレンス』のfield_tablesに関する項および『FMLを使用したOracle Tuxedo ATMIアプリケーションのプログラミング』を参照してください。
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およびイベント名にどのようにマッピングされるかについて理解する必要があります。マッピングは次のようになります。
Oracle Tuxedoシステム・イベントおよびユーザー・イベントは、Oracle Tuxedoアプリケーションで受信できます。システム・イベントは、アプリケーションではなく、Oracle Tuxedoシステムによって生成されます。ユーザー・イベントはOracle Tuxedoアプリケーションによって生成されます。システム・イベントのコード・リストの詳細は、『Oracle 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 ATMI C関数リファレンス』のrecompコマンドに関する項を参照してください。
type_name
type_nameフィールドと同じパラメータです。このフィールドは、Comm_alarm、StockQuote、VitalSignsなど、ドメイン内でイベントの型を一意に分類する文字列です。このパラメータは正規表現のため、フィルタ処理の基準となるイベントの型のパターンを設定するために使用することもできます。たとえば、Fの文字で始まるすべてのイベント型をサブスクライブするには、型を「F.*」に設定します。正規表現の作成方法の詳細は、『Oracle Tuxedo ATMI C関数リファレンス』のrecompコマンドに関する項を参照してください。
data_filter
short、long、char、float、doubleおよびstringです。表2-2は、サポートされるブール式の演算子を示しています。
データのフィルタ処理を使用するには、FML表を設定して、サブスクリプションにフィルタを含め、データをフィルタ処理してイベントをポストする必要があります。リスト2-3は、これらのタスクの例を示しています。
//Setting up the FML Table
Field table file.
----------------
*base 2000
*Field Name Field # Field Type Flags Comments
----------- ------- --------- ------ ------
StockName 1 string - -
PricePerShare 2 double - -
CustomerId 3 long - -
CustomerName 4 string - -
//Subscription data filtering.
1) "NumberOfShares > 100 && NumberOfShares < 1000"
2) "CustomerId == 3241234"
3) "PricePerShare > 125.00"
4) "StockName == 'BEAS'"
5) "CustomerName %% '.*Jones.*'" // CustomerName contains "Jones"
6) "StockName == 'BEAS' && PricePerShare > 150.00"
//Posting the event.
// C++
CosNotification::StructuredEvent ev;
...
ev.filterable_data[0].name = CORBA::string_dup("StockName");
ev.filterable_data[0].value <<= "BEAS";
ev.filterable_data[1].name = CORBA::string_dup("PricePerShare");
ev.filterable_data[1].value <<= CORBA::Double(175.00);
ev.filterable_data[2].name = CORBA::string_dup("CustomerId");
ev.filterable_data[2].value <<= CORBA::Long(1234567);
ev.filterable_data[3].name = CORBA::string_dup("CustomerName");
ev.filterable_data[3].value <<= "Jane Jones";
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例外が発生します。 |
module Tobj_SimpleEvents
{
typedef long SubscriptionID;
typedef string RegularExpression;
typedef string FilterExpression; const SubscriptionType TRANSIENT_SUBSCRIPTION = 0;
const SubscriptionType PERSISTENT_SUBSCRIPTION = 1;interface Channelvoid push_structured_event(
{
in CosNotification::StructuredEvent event);
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer);
boolean exists( in SubscriptionID id ); void unsubscribe( in SubscriptionID id );
};
};
SubscriptionID subscribe (
in string subscription_name,
in RegularExpression domain,
in RegularExpression type,
in FilterExpression data_filter,
// The filter expression must length 1 and the name must
// be TRANSIENT_SUBSCRIPTION or PERSISTENT_SUBSCRIPTION.
in CosNotification::QoSProperties qos,
in CosNotifyComm::StructuredPushConsumer push_consumer
);このオペレーションでサポートされるパラメータの詳細は、「サブスクリプションの作成時に使用するパラメータ」を参照してください。
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", // domain
“Sports”, // type
"", // No data filter.
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) {
// The subscription is still valid.
} else {
// The subscription no longer exists.} ChannelFactoryインタフェースは、イベント・チャネルの検索に使用されます。このインタフェースでは、find_channelという1つのオペレーションが提供されます。
module Tobj_SimpleEvents
{
typedef long ChannelID;interface ChannelFactory
{
Channel find_channel(
in ChannelID channel_id // Must be 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つあります。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ベースの通知サービスの標準サービスの品質ではなく、別のサービス品質がサポートされています。
図2-3は、このリリースのOracle Tuxedoで(完全または部分的に)に実装されているCosNotificationサービスのクラスとそれらの関係を示しています。

各クラスでサポートされるオペレーションを次にまとめます。詳細は、「CosNotificationサービスのクラスの詳しい説明」を参照してください。
このクラスは、イベント・ポスト元アプリケーションとサブスクライバ・アプリケーションで使用されます。サポートするのはget_channel_factoryオペレーションで、イベントのポスト、サブスクライブおよびアンサブスク時にライブチャネル・ファクトリを取得するのに使用されます。
このクラスは、イベント・ポスト元アプリケーションとサブスクライバ・アプリケーションで使用されます。次の3つのオペレーションがサポートされます。
このクラスは、イベント・ポスト元アプリケーションで使用されます。サポートするのはobtain_notification_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);
voiddestroy();
};
}; //CosNotifyFilter
フィルタ・オブジェクトのドメイン、型およびデータ・フィルタのパラメータを設定します。
ConstraintInfoSeqadd_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回のみ呼出し可能で、(2) フィルタがプロキシ・オブジェクトに追加される前に呼び出す必要があり、(3)イベント型が1つしかない単一の制約でのみ構成される必要があります。 |
空のリストを戻します(呼出し側で無視することをお薦めします)。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「サブスクリプションの作成」を参照してください。 |
// set the filtering parameters
// (domain = "News", type, and no data filter)
CosNotifyFilter::ConstraintExpSeq constraints;
constraints.length(1);
constraints[0].event_types.length(1);
constraints[0].event_types[0].domain_name =
CORBA::string_dup("News");
constraints[0].event_types[0].type_name =
CORBA::string_dup (“Sports”);
// no data filter
constraints[0].constraint_expr = CORBA::string_dup(""); CosNotifyFilter::ConstraintInfoSeq_var
add_constraints_results = // ignore this returned value
filter->add_constraints(constraints);
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分以内にフィルタを設定してプロキシに追加する必要があり、そうしないと、フィルタは破棄されます。フィルタの文法はTobj_Notification::Constraint_grammarに設定する必要があり、そうしないと、InvalidGrammar例外が発生します。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「サブスクリプションの作成」を参照してください。 |
filter_factory->create_filter(
Tobj_Notification::CONSTRAINT_GRAMMAR
);このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface StructuredProxyPushSupplier :
ProxySupplier,
CosNotifyComm::StructuredPushSupplier {voidconnect_structured_push_consumer(// The following operations are inherited.
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例外が発生します。
| 注意: | connect_structured_push_consumerを呼び出す前に、set_qosとadd_filterを呼び出す必要があります。 |
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「サブスクリプションの作成」を参照してください。 |
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を永続ストレージに書き込む必要があります。
| 注意: | このオペレーションは、(1)サブスクライバのコールバック・オブジェクトが接続された後に呼び出したり(前述のconnect_structured_push_consumerを参照)、(2)複数回呼び出すことはできず、(3)呼び出す場合は、フィルタ制約式がフィルタに存在している必要があります(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() );
Used to unsubscribe.
void disconnect_structured_push_supplier();
CORBA::OBJECT_NOT_EXIST
| 注意: | 例外および対応するマイナー・コードの詳細は、「例外のマイナー・コード」を参照してください。 |
アンサブスクライブ時にサブスクライバ・アプリケーションで使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、通知サービスサブスクライバのコールバック・オブジェクト間の接続を終了します。
| 注意: | このオペレーションでは、イベントの配信を即座に停止することはありません。このオペレーションからの復帰後も、サブスクライバでは一定の時間は継続してイベントを受信できます。 |
subscription->disconnect_structured_push_supplier();
Always returns CosNotifyChannelAdmin::PUSH_STRUCTURED proxy.readonly attribute ProxyType MyType CosNotifyChannelAdmin::PUSH_STRUCTUREDプロキシを常に戻します。
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin
{
interface StructuredProxyPushConsumer :
ProxyConsumer,
CosNotifyComm::StructuredPushConsumer {voidconnect_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
Prepares the Notification Service to receive an event.
voidconnect_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. イベントの変数ヘッダー・セクションの優先度(指定される場合)は、範囲が1 - 100の short値であることが必要です。b. フィルタ処理可能なデータによるイベントのフィルタ処理(標準定義ではドメインと型のみのフィルタ処理)が必要な場合、またはイベントがOracle Tuxedoサブスクライバで受信される場合、追加の制約が適用されます。「構造化イベントのフィールド、型、およびフィルタ」および「Oracle Tuxedoアプリケーションとの相互運用性」を参照してください。 |
| 注意: | このオペレーションには、トランザクションのコンテキストで使用される際のトランザクション動作があります。詳細は、「トランザクションの使用」を参照してください。 |
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベントの作成とポスト」を参照してください。 |
proxy_push_consumer->push_structured_event(notification);
Stops posting events.
void disconnect_structured_push_consumer();イベントのポスト時に使用されます。このオペレーションはポスト元アプリケーションで使用され、イベントのポストを停止します。入力パラメータは不要で、値は戻されません。次の順序で使用することをお薦めします。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベントの作成とポスト」を参照してください。 |
proxy_push_consumer->disconnect_structured_push_consumer();
Always returns CosNotifyChannelAmdmin::PUSH_STRUCTURED proxy.readonly attribute ProxyType MyType CosNotifyChannelAmdmin::PUSH_STRUCTUREDプロキシを常に戻します。
このクラスは、イベント・サブスクライバ・アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin{
interface ConsumerAdmin :
CosNotification::QoSAdmin,
CosNotifyComm::NotifySubscribe,
CosNotifyFilter::FilterAdmin,
CosEventChannelAdmin::ConsumerAdmin {ProxySupplierobtain_notification_push_supplier(
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded )
ProxySupplierget_proxy_supplier(
in ProxyID proxy_id )
raises ( ProxyNotFound );
};
}; //CosNotifyChannelAdmin
Creates proxy push supplier objects.
ProxySupplierobtain_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オペレーションを使用して作成されるプロキシ・プッシュ・サプライヤ・オブジェクトを戻します。
ProxySupplierget_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 {
ProxyConsumerobtain_notification_push_consumer(SupplierAdmin
in ClientType ctype,
out ProxyID proxy_id)
raises ( AdminLimitExceeded );
};
}; //
Creates proxy push consumer objects.
ProxyConsumerobtain_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 attributeConsumerAdmin default_consumer_admin;
readonly attributeSupplierAdmin default_supplier_admin;
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;CosNotifyChannelAdmin
};
}; //
readonly attributeConsumerAdmin default_consumer_admin;
サブスクライブおよびアンサブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、ConsumerAdminオブジェクトを取得します。
ConsumerAdminオブジェクトのオブジェクト参照を戻します。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベント・チャネル、ConsumerAdminオブジェクト、およびフィルタ・ファクトリ・オブジェクトの取得」を参照してください。 |
channel->default_consumer_admin();
readonly attributeSupplierAdmin default_supplier_admin;
イベントのポスト時に使用されます。このオペレーションはイベント・ポスト元アプリケーションで使用され、SupplierAdminオブジェクトを取得します。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベントの作成とポスト」を参照してください。 |
channel->default_supplier_admin();
デフォルトのFilterFactoryオブジェクトを取得します。
readonly attribute CosNotifyFilter::FilterFactory
default_filter_factory;
サブスクライブ時に使用されます。このオペレーションはサブスクライバ・アプリケーションで使用され、デフォルトのFilterFactoryオブジェクトを取得します。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベント・チャネル、ConsumerAdminオブジェクト、およびフィルタ・ファクトリ・オブジェクトの取得」を参照してください。 |
channel->default_filter_factory();
このクラスは、イベント・ポスト元アプリケーションで使用されます。このクラスのOMG IDLは次のとおりです。
Module CosNotifyChannelAdmin{
interface EventChannelFactory {
EventChannelget_event_channel( in ChannelID id )CosNotifyChannelAdmin
raises (ChannelNotFound);
};
}; //
Gets the EventChannel object.EventChannelget_event_channel( in ChannelID id )
raises (ChannelNotFound);
CosNotifyChannelAdmin::ChannelNotFound
イベントのサブスクライブ、サブスクライブ解除およびポスト時に使用されます。このオペレーションはアプリケーションで使用され、EventChannelオブジェクトを取得します。サブスクライブ時には、フィルタ・ファクトリ・オブジェクトとConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。サブスクライブ解除時には、ConsumerAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。イベントのポスト時には、SupplierAdminオブジェクトを取得するためにEventChannelオブジェクトが使用されます。渡されるChannelIDパラメータは、Tobj_Notification::DEFAULT_CHANNELに設定される必要があります。それ以外の場合、ChannelNotFound例外が発生します。
デフォルトのイベント・チャネルのオブジェクト参照を戻します。
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「イベント・チャネルの取得」および「イベント・チャネル、ConsumerAdminオブジェクト、およびフィルタ・ファクトリ・オブジェクトの取得」を参照してください。 |
channel_factory->get_event_channel(
Tobj_Notification::DEFAULT_CHANNEL );
このインタフェースは、イベントの配信を目的としてイベント・サブスクライバ・アプリケーションで使用されます。このインタフェースで通知サービスを呼び出してイベントをサブスクライバに配信できるように実装する必要があります。実装する必要のあるメソッドは3つあります。
Module CosNotifyComm{
interface StructuredPushConsumer : NotifyPublish {
voidpush_structured_event(event
in CosNotification::StructuredEvent)CosNotifyComm
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 );
};
}; //
voidpush_structured_event(event
in CosNotification::StructuredEvent)
raises(CosEventComm::Disconnected);
CosEventComm::Disconnected
サブスクライブ時に使用されます。このオペレーションはサブスクライバのコールバック・オブジェクトで実装され、構造化イベントが配信されるたびに通知サービスによって呼び出されます。このオペレーションには、入力パラメータが1つ(構造化イベント)があります。
| 注意: | このオペレーションはトランザクションでは呼び出されません。また、このオペレーションが復帰するまで、通知サービスでは他のサブスクライバにイベントの配信が開始されない場合があるため、このオペレーションが呼び出されて、もすぐに復帰する必要があります。 |
| 注意: | ここで紹介するサンプル・コードは全体の一部です。完全なサンプル・コードについては、「CosNotifyComm::StructuredPushConsumerインタフェースの実装」を参照してください。 |
virtual void push_structured_event(
const CosNotification::StructuredEvent& notification );
{
// Process the event.
}
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)に基づいて構成されており、アルファベット順にリストされています。 |
シンプル・イベントAPIを使用してアンサブスクライブするときに、無効なサブスクリプションID(存在しないサブスクリプションIDまたはCosNotificationサブスクリプションID)が指定されました。
|
||
|
|
||
|
||||
|