この章では、作業に必要な様々な言語オプションと要素、およびOracle Streams Advanced Queuing(AQ)アプリケーション環境を準備するときに考慮する必要がある問題点を説明します。
|
注意: Javaパッケージoracle.AQは、10gリリース1(10.1)ではサポートが廃止されました。既存のJava AQアプリケーションをOracle JMS(または他のJava API)に移行し、新しく設計するJava AQアプリケーションにはOracle JMS(または他のJava API)を使用することをお薦めします。
|
内容は次のとおりです。
表3-1は、Oracle Streams AQのプログラム・インタフェースと、各インタフェースでサポートされる機能、および構文の参照先を示しています。
表3-1 Oracle Streams AQのプログラム・インタフェース
| 言語 | プリコンパイラまたはインタフェース・プログラム | サポートされる機能 | 構文の参照先 |
|---|---|---|---|
| PL/SQL | DBMS_AQADMおよびDBMS_AQパッケージ
|
管理および操作 | 『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』 |
| C | Oracle Call Interface(OCI) | 操作のみ | 『Oracle Call Interfaceプログラマーズ・ガイド』 |
| Visual Basic | Oracle Objects for OLE(OO4O) | 操作のみ | Oracleインストール環境の「Application Development」サブメニューから使用可能なオンライン・ヘルプ |
| Java(JMS) | JDBC APIを介してのoracle.JMSパッケージ
|
管理および操作 | 『Oracle Streams Advanced Queuing Java API Reference』 |
| AQ XMLサーブレット | Internet Data Access Presentation(iDAP) | 操作のみ | 第6章「Oracle Streams AQへのインターネット・アクセス」 |
PL/SQLパッケージDBMS_AQADMおよびDBMS_AQは、ネイティブOracle Streams AQインタフェースを介して、Oracle Streams AQの管理機能および操作機能へのアクセスをサポートします。これらの機能には、次のものがあります。
キュー、キュー表、非永続キュー、マルチ・コンシューマ・キュー/トピック、RAWメッセージ、構造化データを持つメッセージの作成
キュー表、キュー、マルチ・コンシューマ・キュー/トピックの取得
キュー表、キュー/トピックの変更
キュー/トピックの削除
キュー/トピックの開始または停止
権限の付与および取消し
サブスクライバの追加、削除、変更
Oracle Streams AQインターネット・エージェントの追加、削除、変更
Oracle Streams AQインターネット・エージェントに対するデータベース・ユーザー権限の付与または取消し
伝播スケジュールの有効化、無効化、変更
シングル・コンシューマ・キュー(Point-to-Pointモデル)へのメッセージのエンキュー
マルチ・コンシューマ・キュー/トピック(パブリッシュ・サブスクライブ・モデル)へのメッセージのパブリッシュ
マルチ・コンシューマ・キューのメッセージに対するサブスクライブ
キューのメッセージのブラウズ
キュー/トピックからのメッセージの受信
メッセージの非同期受信登録
メッセージのリスニング: 複数キュー/トピック
匿名サブスクリプションへのメッセージの転送
Lightweight Directory Access Protocol(LDAP)サーバーのエージェントのバインドまたはアンバインド
LDAPサーバーのOracle Streams AQオブジェクトに対する別名の追加または削除
|
関連項目: 構文、パラメータ、パラメータ・タイプ、戻り値、例を含むDBMS_AQADMおよびDBMS_AQの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
|
OCIは、ネイティブOracle Streams AQインタフェースを介して、Oracle Streams AQの各機能へのインタフェースを提供します。
OCIクライアントは、次のアクションを実行できます。
メッセージのエンキュー
メッセージのデキュー
複数キュー上のメッセージのリスニング
メッセージ通知の受信登録
さらに、OCIクライアントは、OCISubscriptionRegisterを使用して、キューの新規メッセージの非同期通知を受信できます。
|
関連項目: 構文の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』のOCIおよびアドバンスト・キューイングおよびパブリッシュ・サブスクライブの通知に関する項を参照してください。 |
ユーザー定義のペイロード型のキューでは、OracleタイプのOCI/OCCIマッピングの生成にOracle Type Translatorを使用する必要があります。OCIクライアントは、Oracle Streams AQ記述子のメモリーおよびメッセージ・ペイロードを解放する必要があります。
|
関連項目: OCIインタフェースの例については、付録C「OCIの例」を参照してください。ただし、この付録は、このマニュアルのHTMLバージョンにのみ含まれています。 |
C++アプリケーションではOCCIを使用できます。OCCIは、メッセージ交換を行うクライアントがOracle Streams AQにアクセスするための、一連のOracle Streams AQインタフェースを提供します。OCCI AQは、メッセージ対応のデータベースに格納されているメッセージの送受信およびパブリッシュ・サブスクライブに必要なすべての操作機能をサポートします。メッセージ選択ルールに基づいて、同期および非同期でメッセージを処理できます。
|
関連項目: 『Oracle C++ Call Interfaceプログラマーズ・ガイド』のOracle Streams Advanced Queuingに関する項を参照してください。 |
Visual Basic(OO4O)は、ネイティブOracle Streams AQインタフェースを介して、Oracle Streams AQの操作機能へのアクセスをサポートします。
次の機能が含まれます。
コネクション、RAWメッセージ、構造化データを持つメッセージの作成
シングル・コンシューマ・キュー(Point-to-Pointモデル)へのメッセージのエンキュー
マルチ・コンシューマ・キュー/トピック(パブリッシュ・サブスクライブ・モデル)へのメッセージのパブリッシュ
キューのメッセージのブラウズ
キュー/トピックからのメッセージの受信
メッセージの非同期受信登録
|
注意: データベースがメッセージ伝播を処理するため、OO4Oはリモートおよびローカルの受信者を区別しません。メッセージをデキューするには、ローカルおよびリモートの受信者に対して、コール/ステップの順序が同じである必要があります。 |
Java Message Service(JMS)は、Sun社、オラクル社、IBM社およびその他のベンダーが定義したメッセージ交換機能標準です。JMSは、JMSクライアントが企業のメッセージ関連製品の機能にアクセスする方法を定義する、インタフェースおよび対応するセマンティクスの集合です。
Oracle Java Message Service(OJMS)には、JMS標準に基づいた、Oracle Streams AQ用のJava APIが用意されています。OJMSは、標準のJMSインタフェースをサポートしている他、標準以外の管理操作や他の機能をサポートする拡張機能を備えています。
標準JMS機能には、次のものが含まれます。
キューを使用したPoint-to-Point通信モデル
トピックを使用したパブリッシュ・サブスクライブ通信モデル
ObjectMessage、StreamMessage、TextMessage、BytesMessage、MapMessageの各メッセージ型
非同期および同期のメッセージ配信
メッセージ・ヘッダー・フィールドまたはプロパティに基づくメッセージ選択
Oracle JMSの拡張機能は、次のとおりです。
キュー表、キューおよびトピック作成用の管理API
トピックの受信者リストを使用したPoint-to-Multipoint通信
宛先間でのメッセージの伝播。アプリケーションでのリモート・サブスクライバの定義が可能になります。
トランザクション・セッションのサポート。1つのトランザクションでJMS操作およびSQL操作が可能になります。
メッセージがデキューされた後のメッセージ保存
メッセージ遅延。一定の遅延の後にメッセージが表示されます。
例外処理。メッセージを正常に処理できない場合、メッセージが例外キューに移動されます。
AdtMessageのサポート
これらはOracleオブジェクトとしてデータベースに格納されるため、メッセージのペイロードをエンキュー後に問い合せることができます。サブスクリプションは、メッセージ・プロパティのみでなく、これらのメッセージの内容にも定義できます。
トピックのブラウズ
永続サブスクライバは、パブリッシュ・サブスクライブ(トピック)の宛先にあるメッセージ全体をブラウズできます。オプションで、永続サブスクライバがブラウズしたメッセージを削除するようにし、これらのメッセージが永続サブスクライバ用にOracle Streams AQで保持されないようにできます。
|
関連項目:
|
標準JMSインタフェースはjavax.jmsパッケージにあります。Oracle JMSインタフェースはoracle.jmsパッケージにあります。Oracle JMSインタフェースを使用するには、DBMS_AQINおよびDBMS_AQJMSパッケージに対するEXECUTE権限が必要です。これらの権限は、AQ_USER_ROLEまたはAQ_ADMINSTRATOR_ROLEを使用しても取得できます。メッセージの送信または受信を行うには、適切なシステムおよびキュー権限またはトピック権限が必要です。
Oracle JMSは、Java Database Connectivity(JDBC)を使用してデータベースに接続するため、データベース外ではJDBC OCIドライバまたはJDBC Thinドライバを使用してOracle JMSアプリケーションを実行できます。
JDBC OCIドライバまたはJDBC Thinドライバの使用
データベース外で実行されるクライアントでJMSを使用するには、CLASSPATHに適切なJDBCドライバ、Java Naming and Directory Interface(JNDI)のjarファイルおよびOracle Streams AQのjarファイルを指定する必要があります。
JDK 1.3.x以上では、CLASSPATHに次のパスを指定します。
$ORACLE_HOME/jdbc/lib/classes12.jar $ORACLE_HOME/jdbc/lib/orail8n.jar $ORACLE_HOME/jdk/jre/lib/ext/jta.jar $ORACLE_HOME/jdk/jre/lib/ext/jta.jar $ORACLE_HOME/jlib/jndi.jar $ORACLE_HOME/lib/xmlparserv2.jar $ORACLE_HOME/rdbms/jlib/xdb.jar $ORACLE_HOME/rdbms/jlib/aqapi13.jar $ORACLE_HOME/rdbms/jlib/jmscommon.jar
JDK 1.2では、CLASSPATHに次のパスを指定します。
$ORACLE_HOME/jdbc/lib/classes12.jar $ORACLE_HOME/jdbc/lib/orail8n.jar $ORACLE_HOME/jdk/jre/lib/ext/jta.jar $ORACLE_HOME/jlib/jndi.jar $ORACLE_HOME/lib/xmlparserv2.jar $ORACLE_HOME/rdbms/jlib/xdb.jar $ORACLE_HOME/rdbms/jlib/aqapi12.jar $ORACLE_HOME/rdbms/jlib/jmscommon.jar
JServerでのOracleサーバー・ドライバの使用
アプリケーションがJServer内で実行される場合、JServerのインストール時に自動的にロードされたOracle JMSクラスにアクセスできる必要があります。これらのクラスが使用できない場合は、SQLスクリプト$ORACLE_HOME/rdbms/admin/initjmsを使用して、jmscommon.jarの後にaqapi.jarをロードする必要があります。
Oracle Streams AQ XMLサーブレットを使用すると、Simple Object Access Protocol(SOAP)およびInternet Data Access Presentation(iDAP)と呼ばれるOracle Streams AQ XMLメッセージ・フォーマットを使用して、HTTPを介してOracle Streams AQにアクセスできます。
Oracle Streams AQサーブレットを使用すると、クライアントは次のアクションを実行できます。
シングル・コンシューマ・キューへのメッセージの送信
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ
キューからのメッセージの受信
メッセージ通知の受信登録
表3-2〜表3-9は、Oracle Streams AQの各プログラム・インタフェースで使用可能な機能を用途別に示したものです。各利用方法の詳細は、第8章〜第10章および第12章〜第15章を参照してください。
表3-2は、Oracle Streams AQの管理における、PL/SQLとJava(JMS)のプログラム・インタフェースの同等の機能を示しています。
表3-2 Oracle Streams AQのプログラム・インタフェース別の比較: 管理インタフェース
| 利用方法 | PL/SQL | Java(JMS) |
|---|---|---|
| コネクション・ファクトリの作成 | 不可 |
AQjmsFactory.getQueue ConnectionFactory AQjmsFactory.getTopic ConnectionFactory |
| LDAPサーバーでのConnectionFactoryの登録 | 不可 |
AQjmsFactory.register ConnectionFactory |
| キュー表の作成 |
DBMS_AQADM.CREATE_QUEUE_TABLE |
|
| キュー表の取得 | schema.queue_table_nameを使用
|
AQjmsSession.getQueueTable |
| キュー表の変更 |
DBMS_AQADM.ALTER_QUEUE_TABLE |
AQQueueTable.alter |
| キュー表の削除 |
DBMS_AQADM.DROP_QUEUE_TABLE |
AQQueueTable.drop |
| キューの作成 |
DBMS_AQADM.CREATE_QUEUE |
AQjmsSession.createQueue |
| キューの取得 | schema.queue_nameを使用
|
AQjmsSession.getQueue |
| マルチ・コンシューマ対応のキュー表でのマルチ・コンシューマ・キュー/トピックの作成 |
DBMS_AQADM.CREATE_QUEUE |
AQjmsSession.createTopic |
| マルチ・コンシューマ・キュー/トピックの取得 | schema.queue_nameを使用
|
AQjmsSession.getTopic |
| キュー/トピックの変更 |
DBMS_AQADM.ALTER_QUEUE |
AQjmsDestination.alter |
| キュー/トピックの開始 |
DBMS_AQADM.START_QUEUE |
AQjmsDestination.start |
| キュー/トピックの停止 |
DBMS_AQADM.STOP_QUEUE |
AQjmsDestination.stop |
| キュー/トピックの削除 |
DBMS_AQADM.DROP_QUEUE |
AQjmsDestination.drop |
| システム権限の付与 |
DBMS_AQADM.GRANT_SYSTEM_ PRIVILEGE |
AQjmsSession.grantSystem Privilege |
| システム権限の取消し |
DBMS_AQADM.REVOKE_SYSTEM_ PRIVILEGE |
AQjmsSession.revokeSystem Privilege |
| キュー/トピック権限の付与 |
DBMS_AQADM.GRANT_QUEUE_ PRIVILEGE |
AQjmsDestination.grantQueue Privilege AQjmsDestination.grantTopic Privilege |
| キュー/トピック権限の取消し |
DBMS_AQADM.REVOKE_QUEUE_ PRIVILEGE |
AQjmsDestination.revokeQueue Privilege AQjmsDestination.revokeTopic Privilege |
| キュー・タイプの検証 |
DBMS_AQADM.VERIFY_QUEUE_TYPES |
未サポート |
| サブスクライバの追加 |
DBMS_AQADM.ADD_SUBSCRIBER |
表3-6を参照 |
| サブスクライバの変更 |
DBMS_AQADM.ALTER_SUBSCRIBER |
表3-6を参照 |
| サブスクライバの削除 |
DBMS_AQADM.REMOVE_SUBSCRIBER |
表3-6を参照 |
| 伝播のスケジューリング |
DBMS_AQADM.SCHEDULE_PROPAGATION |
AQjmsDestination.schedule Propagation |
| 伝播スケジュールの有効化 |
DBMS_AQADM.ENABLE_PROPAGATION_ SCHEDULE |
AQjmsDestination.enable PropagationSchedule |
| 伝播スケジュールの変更 |
DBMS_AQADM.ALTER_PROPAGATION_ SCHEDULE |
AQjmsDestination.alter PropagationSchedule |
| 伝播スケジュールの無効化 |
DBMS_AQADM.DISABLE_PROPAGATION_ SCHEDULE |
AQjmsDestination.disable PropagationSchedule |
| 伝播スケジュールの解除 |
DBMS_AQADM.UNSCHEDULE_ PROPAGATION |
AQjmsDestination.unschedule Propagation |
| Oracle Streams AQインターネット・エージェントの作成 |
DBMS_AQADM.CREATE_AQ_AGENT |
未サポート |
| Oracle Streams AQインターネット・エージェントの変更 |
DBMS_AQADM.ALTER_AQ_AGENT |
未サポート |
| Oracle Streams AQインターネット・エージェントの削除 |
DBMS_AQADM.DROP_AQ_AGENT |
未サポート |
| Oracle Streams AQインターネット・エージェントへのデータベース・ユーザー権限の付与 |
DBMS_AQADM.ENABLE_AQ_AGENT |
未サポート |
| Oracle Streams AQインターネット・エージェントからのデータベース・ユーザー権限の取消し |
DBMS_AQADM.DISABLE_AQ_AGENT |
未サポート |
| LDAPサーバーにおけるキュー、エージェント、ConnectionFactoryの別名の追加 |
DBMS_AQADM.ADD_ALIAS_TO_LDAP |
未サポート |
| LDAPサーバーにおけるキュー、エージェント、ConnectionFactory用の別名の削除 |
DBMS_AQADM.DEL_ALIAS_FROM_LDAP |
未サポート |
表3-3〜表3-9は、様々な利用方法でのOracle Streams AQ操作における、PL/SQL、OCI、Oracle Streams AQ XMLサーブレットおよびJMSの各プログラム・インタフェースの同等の機能を示しています。
表3-3 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—コネクション、セッション、メッセージの作成での利用方法
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| コネクションの作成 | 不可 |
OCIServer Attach |
Webサーバーを使用して、認証後にHTTPコネクションをオープンする。 |
AQjmsQueueConnectionFactory .createQueueConnection AQjmsTopicConnectionFactory .createTopicConnection |
| セッションの作成 | 不可 |
OCISession Begin |
HTTPサーブレットは最初のSOAPリクエストで自動的に開始される。 |
QueueConnection.createQueue Session TopicConnection.createTopic Session |
| RAWメッセージの作成 | メッセージにSQL RAW型を使用する。 | メッセージにOCIRawを使用する。 | XMLメッセージにメッセージ・ペイロードの16進表示を提供する。例: <raw>023f4523</raw>
|
未サポート |
| 構造化データを持つメッセージの作成 | メッセージにSQL Oracleオブジェクト型を使用する。 | メッセージにSQL Oracleオブジェクト型を使用する。 | JMSキュー以外の(AQ$_JMS_*型ではない)Oracleオブジェクト型キューでは、<message payload>に指定されているXMLをキュー表のペイロードのSQL型にマッピングする必要がある。
JMSキューでは、 |
Session.createTextMessage Session.createObjectMessage Session.createMapMessage Session.createBytesMessage Session.createStreamMessage AQjmsSession.createAdtMessage |
| メッセージ・プロデューサの作成 | 不可 | 不可 | 不可 |
QueueSession.createSender TopicSession.createPublisher |
表3-4 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—シングル・コンシューマ・キューへのメッセージのエンキュー(Point-to-Pointモデルでの利用方法)
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| シングル・コンシューマ・キューへのメッセージのエンキュー |
DBMS_AQ.enqueue |
OCIAQEnq |
<AQXmlSend> |
QueueSender.send |
| キューへのメッセージのエンキュー: 可視性オプションの指定 |
DBMS_AQ.enqueue次のものにvisibilityを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq OCIAQEnqOptionsにOCI_ATTR_VISIBILITYを指定する。
OCIAQEnqOptions |
<AQXmlSend>次のものに <visibility>を指定する。
<producer_options> |
未サポート |
| シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの優先順位と期限切れの指定 |
DBMS_AQ.enqueue次のものにpriority、expirationを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq次のものに OCI_ATTR_PRIORITY, OCI_ATTR_EXPIRATIONを指定する。
OCIAQMsgProperties |
<AQXmlSend>次のものに <priority>、<expiration> を指定する。
<message_header> |
QueueSender.sendの実行時に、priorityおよびTimeToLiveを指定する。
または .setTimeToLive および MessageProducer. setPriority その後に |
| シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの相関識別子、遅延、例外キューの指定 |
DBMS_AQ.enqueue次のものにcorrelation、delay、exception_queueを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq次のものに OCI_ATTR_CORRELATION、OCI_ATTR_DELAY、OCI_ATTR_EXCEPTION_QUEUEを指定する。
OCIAQMsgProperties |
<AQXmlSend>次のもの に<correlation_id>、<delay>、<exception_queue> を指定する。
<message_header> |
Message.setJMS CorrelationI遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。 JMS_OracleDelay JMS_OracleExcpQ その後に |
| シングル・コンシューマ・キューへのメッセージのエンキュー: ユーザー定義のメッセージ・プロパティの指定 | 未サポート
プロパティはペイロードの一部である必要がある。 |
未サポート
プロパティはペイロードの一部である必要がある。 |
<AQXmlSend>次のものに、 <name>と<int_value>、<string_value>、<long_value>,などを指定する。
<user_properties> |
Message.setInt Property Message.setString Property Message.setBoolean Propertyなど。その後に QueueSender.sendを指定する。
|
| シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ変換の指定 |
DBMS_AQ.enqueue次のものにtransformationを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq次のものに OCI_ATTR_TRANSFORMATIONを指定する。
OCIAQEnqOptions |
<AQXmlSend>次のものに <transformation>を指定する。
<producer_options> |
AQjmsQueueSender. setTransformationその後に QueueSender.sendを指定する。
|
表3-5 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ(パブリッシュ・サブスクライブ・モデルでの利用方法)
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: デフォルトのサブスクリプション・リストの使用 |
DBMS_AQ.enqueue次のものの recipient_listをNULLに設定する。
MESSAGE_PROPERTIES |
OCIAQEnq次のものの OCI_ATTR_RECIPIENT_LISTをNULLに設定する。
OCIAQMsgProperties |
<AQXmlPublish> |
TopicPublisher. publish |
| マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 特定の受信者リストの使用 |
DBMS_AQ.enqueue次のものに受信者リストを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq次のものに OCI_ATTR_RECIPIENT_LISTを指定する。
OCIAQMsgProperties |
<AQXmlPublish>次のものに <recipient_list>を指定する。
<message_header> |
AQjmsTopic Publisher.publish AQjmsAgentの配列として受信者を指定する。
|
| マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: メッセージ・プロパティの優先順位と期限切れの指定 |
DBMS_AQ.enqueue次のものにpriority、expirationを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq次のものに OCI_ATTR_PRIORITY, OCI_ATTR_EXPIRATIONを指定する。
OCIAQMsgProperties |
<AQXmlPublish>次のものに <priority>、<expiration>を指定する。
<message_header> |
TopicPublisher.publishの実行時に、priorityおよびTimeToLiveを指定する。
または MessageProducer. setTimeToLive および MessageProducer. setPriority その後に |
| マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 送信オプション(相関識別子、遅延、例外キュー)の指定 |
DBMS_AQ.enqueue次のものにcorrelation、delay、 exception_queueを指定する。
MESSAGE_PROPERTIES |
OCIAQEnq次のものに OCI_ATTR_CORRELATION、OCI_ATTR_DELAY、OCI_ATTR_EXCEPTION_QUEUEを指定する。
OCIAQMsgProperties |
<AQXmlPublish>次のものに <correlation_id>、<delay>、<exception_queue>を指定する。
<message_header> |
Message.setJMS CorrelationID遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。 JMS_OracleDelay JMS_OracleExcpQ その後に |
| トピックへのメッセージのパブリッシュ: ユーザー定義のメッセージ・プロパティの指定 | 未サポート
プロパティはペイロードの一部である必要がある。 |
未サポート
プロパティはペイロードの一部である必要がある。 |
<AQXmlPublish>次のものに、 <name>と<int_value>、<string_value>、<long_value>,などを指定する。
<user_properties> |
Message.setInt Property Message.setString Property Message.setBoolean Propertyなど。その後に TopicPublisher.publishを指定する。
|
| トピックへのメッセージのパブリッシュ: メッセージ変換の指定 |
DBMS_AQ.enqueue次のものにtransformationを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq次のものに OCI_ATTR_TRANSFORMATIONを指定する。
OCIAQEnqOptions |
<AQXmlPublish>次のものに <transformation>を指定する。
<producer_options> |
AQjmsTopic Publisher.set Transformationその後に TopicPublisher.publishを指定する。
|
表3-6 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—マルチ・コンシューマ・キュー/トピックのメッセージに対するサブスクライブ(パブリッシュ・サブスクライブ・モデルでの利用方法)
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| サブスクライバの追加 | 管理インタフェースを参照 | 未サポート | 未サポート |
TopicSession. createDurable Subscriber AQjmsSession. createDurable Subscriber |
| サブスクライバの変更 | 管理インタフェースを参照 | 未サポート | 未サポート |
TopicSession. createDurable Subscriber AQjmsSession. createDurable Subscriber新しいセレクタを使用する。 |
| サブスクライバの削除 | 管理インタフェースを参照 | 未サポート | 未サポート |
AQjmsSession. unsubscribe |
表3-7 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—キューのメッセージのブラウズでの利用方法
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| キュー/トピックのメッセージのブラウズ |
DBMS_AQ. dequeue次のものの dequeue_modeをBROWSEに設定する。
DEQUEUE_OPTIONS |
OCIAQDeq次のものの OCI_ATTR_DEQ_MODEをBROWSEに設定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <dequeue_mode> BROWSEを指定する。
<consumer_options> |
QueueSession.createBrowser QueueBrowser.getEnumerationトピックでは未サポート oracle.jms.AQjmsSession. createBrowser oracle.jms.TopicBrowser. getEnumeration |
| キュー/トピックのメッセージのブラウズ: ブラウズ中のメッセージのロック |
DBMS_AQ.dequeue次のものの dequeue_modeをLOCKEDに設定する。
DEQUEUE_OPTIONS |
OCIAQDeq次のものの OCI_ATTR_DEQ_MODEをLOCKEDに設定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <dequeue_mode> LOCKED を指定する。
<consumer_options> |
AQjmsSession.createBrowser次のものの lockedをTRUEに設定する。
QueueBrowser.getEnumeration トピックでは未サポート oracle.jms.AQjmsSession. createBrowser oracle.jms.TopicBrowser. getEnumeration |
表3-8 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—キュー/トピックからのメッセージの受信での利用方法
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| メッセージ受信用のコネクションの起動 | 不可 | 不可 | 不可 |
Connection.start |
| メッセージ・コンシューマの作成 | 不可 | 不可 | 不可 |
QueueSession. createQueueReceiver TopicSession.create DurableSubscriber AQjmsSession.create TopicReceiver |
| キュー/トピックからのメッセージのデキュー: 可視性の指定 |
DBMS_AQ.dequeue次のものにvisibilityを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq次のものに OCI_ATTR_VISIBILITYを指定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <visibility>を指定する。
<consumer_options> |
未サポート |
| キュー/トピックからのメッセージのデキュー: 変換の指定 |
DBMS_AQ.dequeue次のものにtransformationを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq次のものに OCI_ATTR_TRANSFORMATIONを指定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <transformation>を指定する。
<consumer_options> |
AQjmsQueueReceiver. setTransformation AQjmsTopicSubscriber. setTransformation AQjmsTopicReceiver. setTransformation |
| キュー/トピックからのメッセージのデキュー: ナビゲーション・モードの指定 |
DBMS_AQ.dequeue次のものにnavigationを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq次のものに OCI_ATTR_NAVIGATIONを指定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <navigation>を指定する。
<consumer_options> |
AQjmsQueueReceiver. setNavigationMode AQjmsTopicSubscriber. setNavigationMode AQjmsTopicReceiver. setNavigationMode |
| シングル・コンシューマ・キューからのメッセージのデキュー |
DBMS_AQ.dequeue次のものの dequeue_modeをREMOVEに設定する。
DEQUEUE_OPTIONS |
OCIAQDeq次のものの OCI_ATTR_DEQ_MODEをREMOVEに設定する。
OCIAQDeqOptions |
<AQXmlReceive> |
QueueReceiver.receiveまたは QueueReceiver.receive NoWait または AQjmsQueueReceiver. receiveNoData |
| マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: サブスクリプション名を使用 |
DBMS_AQ.dequeue次のものの dequeue_modeをREMOVEに設定し、consumer_nameにサブスクリプション名を設定する。
DEQUEUE_OPTIONS |
OCIAQDeq次のものの OCI_ATTR_DEQ_MODEをREMOVEに設定し、OCI_ATTR_CONSUMER_NAMEにサブスクリプション名を設定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <consumer_name> を指定する。
<consumer_options> |
サブスクリプション名を使用してトピックに永続的なTopicSubscriberを作成し、その後に次のいずれかを指定する。
TopicSubscriber. receive または TopicSubscriber. receiveNoWait または AQjmsTopicSubscriber. receiveNoData |
| マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: 受信者名を使用 |
DBMS_AQ.dequeue次のものの dequeue_modeをREMOVEに設定し、consumer_nameに受信者名を設定する。
DEQUEUE_OPTIONS |
OCIAQDeq次のものの OCI_ATTR_DEQ_MODEをREMOVEに設定し、OCI_ATTR_CONSUMER_NAMEに受信者名を設定する。
OCIAQDeqOptions |
<AQXmlReceive>次のものに <consumer_name>を指定する。
<consumer_options> |
受信者名を使用してトピックにTopicReceiverを作成する。その後に、次のいずれかを指定する。
AQjmsSession.create TopicReceiver AQjmsTopicReceiver. receive または AQjmsTopicReceiver. receiveNoWait または AQjmsTopicReceiver. receiveNoData |
表3-9 Oracle Streams AQのプログラム・インタフェース別の比較: 操作インタフェース—キュー/トピックからメッセージを非同期受信するための登録での利用方法
| 利用方法 | PL/SQL | OCI | AQ XMLサーブレット | JMS |
|---|---|---|---|---|
| メッセージの非同期受信: シングル・コンシューマ・キューから | PL/SQLコールバック・プロシージャを定義する。
次のものを使用して登録する。 DBMS_AQ.REGISTER |
OCISubscription Register queue_nameをサブスクリプション名として指定する。
OCISubscription Enable |
<AQXmlRegister> <destination>にキュー名を指定し、次のものに通知メカニズムを指定する。
<notify_url> |
キューに対してQueueReceiverを作成した後、次のものを指定する。
QueueReceiver.set MessageListener |
| メッセージの非同期受信: マルチ・コンシューマ・キュー/トピックから | PL/SQLコールバック・プロシージャを定義する。
次のものを使用して登録する。 DBMS_AQ.REGISTER |
OCISubscription Register queue:OCI_ATTR_CONSUMER_NAMEをサブスクリプション名として指定する。
OCISubscription Enable |
<AQXmlRegister> <destination>にキュー名、<consumer_name>にコンシューマ、<notify_url>に通知メカニズムを指定する。
|
トピックに対してTopicSubscriberまたはTopicReceiverを作成した後、次のものを指定する。
TopicSubscriber. setMessageListener |
| メッセージのリスニング: 複数キュー/トピック | - | - | - | - |
| メッセージのリスニング: 1つ(または多数)のシングル・コンシューマ・キュー |
DBMS_AQ.LISTEN agent_listのすべてのエージェントのagent_nameにNULLを使用する。
|
OCIAQListen agent_listのすべてのエージェントのagent_nameにNULLを使用する。
|
未サポート | 1つのQueueSessionに複数のQueueReceiversを作成した後、次のものを指定する。
QueueSession.set MessageListener |
| メッセージのリスニング: 1つ(または多数)のマルチ・コンシューマ・キュー/トピック |
DBMS_AQ.LISTEN agent_listのすべてのエージェントのagent_nameを指定する。
|
OCIAQListen agent_listのすべてのエージェントのagent_nameを指定する。
|
未サポート | 1つのTopicSessionに複数のTopicSubscribersまたはTopicReceiversを作成した後、次のものを指定する。
TopicSession.set MessageListener |