3 Oracle Transactional Event QueuesおよびAdvanced Queuing: プログラム・インタフェース
次のトピックでは、作業に必要な様々な言語オプションと要素、およびOracle Database Advanced Queuing (AQ)アプリケーション環境を準備するときに考慮する必要がある問題点を説明します。
ノート:
Javaパッケージoracle.AQ
は、10gリリース1(10.1)では非推奨になりました。既存のJava AQアプリケーションをOracle JMS(または他のJava API)に移行し、新しく設計するJava AQアプリケーションにはOracle JMS(または他のJava API)を使用することをお薦めします。
トピック:
Oracle Database Advanced Queuingへのアクセスに必要なプログラム・インタフェース
PL/SQLを使用したOracle Database Advanced Queuingへのアクセス
PL/SQLパッケージDBMS_AQADM
およびDBMS_AQ
は、ネイティブOracle Database Advanced Queuingインタフェースを使用した、Oracle Database Advanced Queuingの管理および操作機能へのアクセスをサポートします。
これらの機能には、次のものがあります。
-
キュー、トランザクション・イベント・キュー、キュー表、非永続キュー、マルチ・コンシューマ・キュー/トピック、RAW メッセージ、または構造化データを持つメッセージの作成
-
キュー表、キュー、マルチ・コンシューマ・キュー/トピックの取得
-
キュー表、キュー/トピックの変更
-
キュー/トピックの削除
-
キュー/トピックの開始または停止
-
権限の付与および取消し
-
サブスクライバの追加、削除、変更
-
Oracle Database Advanced Queuingインターネット・エージェントの追加、削除または変更
-
Oracle Database Advanced Queuingインターネット・エージェントに対するデータベース・ユーザー権限の付与または取消し
-
伝播スケジュールの有効化、無効化、変更
-
シングル・コンシューマ・キュー(Point-to-Pointモデル)へのメッセージのエンキュー
-
マルチ・コンシューマ・キュー/トピック(パブリッシュ・サブスクライブ・モデル)へのメッセージのパブリッシュ
-
マルチ・コンシューマ・キューのメッセージに対するサブスクライブ
-
キューのメッセージのブラウズ
-
キュー/トピックからのメッセージの受信
-
メッセージの非同期受信登録
-
メッセージのリスニング: 複数キュー/トピック
-
匿名サブスクリプションへのメッセージの転送
-
Lightweight Directory Access Protocol(LDAP)サーバーのエージェントのバインドまたはアンバインド
-
LDAPサーバーのOracle Database Advanced Queuingオブジェクトに対する別名の追加または削除
PL/SQLのDBMS_AQADM
およびDBMS_AQ
で使用可能な機能の詳細は、表3-2から表3-9を参照してください。
関連項目:
構文、パラメータ、パラメータ・タイプ、戻り値、例を含むDBMS_AQADM
およびDBMS_AQ
の詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
OCIおよびThin JDBCドライバを使用したOracle Database Advanced Queuingへのアクセス
Oracle Call Interface (OCI)は、ネイティブOracle Database Advanced Queuingインタフェースを介して、Oracle Database Advanced Queuingの各機能へのインタフェースを提供します。
OCIクライアントは、次のアクションを実行できます。
-
メッセージのエンキュー
-
メッセージのデキュー
-
複数キュー上のメッセージのリスニング
-
メッセージ通知の受信登録
さらに、OCIクライアントは、OCISubscriptionRegister
を使用して、キューの新規メッセージの非同期通知を受信できます。Transactional Event Queues (TEQ)は、OCIクライアントをサポートしていません。
Oracle Type Translator
ユーザー定義のペイロード型のキューでは、OracleタイプのOCI/OCCIマッピングの生成にOracle Type Translatorを使用する必要があります。OCIクライアントは、Oracle Database Advanced Queuing記述子のメモリーおよびメッセージ・ペイロードを解放する必要があります。
関連項目:
構文の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』のOCIおよびアドバンスト・キューイングおよびパブリッシュ・サブスクライブの通知に関する項を参照してください。
Oracle Database Advanced Queuingのプログラム・インタフェース別の比較
次の各トピックでは、Oracle Database Advanced Queuing管理インタフェースとOracle Database Advanced Queuing操作インタフェースを一覧および比較しています。
表3-2から表3-9は、Oracle Database Advanced Queuingの各プログラム・インタフェースで使用可能な機能を用途別に示したものです。ユース・ケースについては、Oracle Database Advanced Queuing管理インタフェースからPL/SQLを使用したOracle Database Advanced Queuing操作、およびOracle Java Message Serviceの基本操作からOracle Java Message Serviceの共有インタフェースで説明しています。
Oracle Transactional Event QueuesおよびAdvanced Queuingの管理インタフェース
この表は、PL/SQLおよびJava (JMS)のプログラム・インタフェースに相当するOracle Transactional Event Queues(TEQ)およびAdvanced Queuing(AQ)の管理機能を示しています。
表3-2 Oracle Transactional Event QueuesおよびAdvanced Queuingのプログラム・インタフェースの比較: 管理インタフェース
ユース・ケース | PL/SQL | Java (JMS) |
---|---|---|
トランザクション・イベント・キューの作成 |
|
|
トランザクション・イベント・キューの削除 |
|
|
トランザクション・イベント・キューの変更 |
|
|
コネクション・ファクトリの作成 |
該当なし |
AQjmsFactory.getQueue ConnectionFactory AQjmsFactory.getTopic ConnectionFactory |
LDAPサーバーでのConnectionFactoryの登録 |
該当なし |
AQjmsFactory.register ConnectionFactory |
キュー表の作成 |
DBMS_AQADM.CREATE_QUEUE_TABLE |
|
キュー表の取得 |
|
AQjmsSession.getQueueTable |
キュー表の変更 |
DBMS_AQADM.ALTER_QUEUE_TABLE |
AQQueueTable.alter |
キュー表の削除 |
DBMS_AQADM.DROP_QUEUE_TABLE |
AQQueueTable.drop |
キューの作成 |
DBMS_AQADM.CREATE_QUEUE |
AQjmsSession.createQueue |
キューの取得 |
|
AQjmsSession.getQueue |
マルチ・コンシューマ対応のキュー表でのマルチ・コンシューマ・キュー/トピックの作成 |
DBMS_AQADM.CREATE_QUEUE |
AQjmsSession.createTopic |
マルチ・コンシューマ・キュー/トピックの取得 |
|
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 Database Advanced Queuingインターネット・エージェントの作成 |
DBMS_AQADM.CREATE_AQ_AGENT |
サポートされません |
Oracle Database Advanced Queuingインターネット・エージェントの変更 |
DBMS_AQADM.ALTER_AQ_AGENT |
サポートされません |
Oracle Database Advanced Queuingインターネット・エージェントの削除 |
DBMS_AQADM.DROP_AQ_AGENT |
サポートされません |
Oracle Database Advanced Queuingインターネット・エージェントのへのデータベース・ユーザー権限の付与 |
DBMS_AQADM.ENABLE_AQ_AGENT |
サポートされません |
Oracle Database Advanced Queuingインターネット・エージェントからのデータベース・ユーザー権限の取消し |
DBMS_AQADM.DISABLE_AQ_AGENT |
サポートされません |
LDAPサーバーにおけるキュー、エージェント、ConnectionFactoryの別名の追加 |
DBMS_AQADM.ADD_ALIAS_TO_LDAP |
サポートされません |
LDAPサーバーにおけるキュー、エージェント、ConnectionFactory用の別名の削除 |
DBMS_AQADM.DEL_ALIAS_FROM_LDAP |
サポートされません |
Oracle Database Advanced Queuing操作インタフェース
次の各表は、様々な利用方法別に、Oracle Database Advanced Queuingの操作における、プログラム・インタフェースPL/SQL、OCI、Oracle Database Advanced Queuing XMLサーブレットおよびJMSの同等の機能を示しています。
表3-3 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—コネクション、セッション、メッセージの作成での利用方法
ユース・ケース | 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進表示を提供する。例: |
サポートされません |
構造化データを持つメッセージの作成 |
メッセージにSQL Oracleオブジェクト型を使用する。 |
メッセージにSQL Oracleオブジェクト型を使用する。 |
JMSキュー以外の( JMSキューでは、 |
Session.createTextMessage Session.createObjectMessage Session.createMapMessage Session.createBytesMessage Session.createStreamMessage AQjmsSession.createAdtMessage |
メッセージ・プロデューサの作成 |
該当なし |
該当なし |
該当なし |
QueueSession.createSender TopicSession.createPublisher |
表3-4 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—シングル・コンシューマ・キューへのメッセージのエンキュー(Point-to-Pointモデルでの利用方法)
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
シングル・コンシューマ・キューへのメッセージのエンキュー |
DBMS_AQ.enqueue |
OCIAQEnq |
<AQXmlSend> |
QueueSender.send |
キューへのメッセージのエンキュー: 可視性オプションの指定 |
DBMS_AQ.enqueue 次のものにvisibilityを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq
OCIAQEnqOptions |
<AQXmlSend> 次のものに <producer_options> |
サポートされません |
シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの優先順位と期限切れの指定 |
DBMS_AQ.enqueue 次のものにpriority、expirationを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq 次のものに OCIAQMsgProperties |
<AQXmlSend> 次のものに <message_header> |
の実行時に、 QueueSender.send または .setTimeToLive および MessageProducer. setPriority その後に次を指定します QueueSender.send |
シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの相関識別子、遅延、例外キューの指定 |
DBMS_AQ.enqueue 次のものにcorrelation、delay、exception_queueを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq 次のものに OCIAQMsgProperties |
<AQXmlSend> 次のものに <message_header> |
Message.setJMS CorrelationI 遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。 JMS_OracleDelay JMS_OracleExcpQ その後に次を指定します QueueSender.send |
シングル・コンシューマ・キューへのメッセージのエンキュー: ユーザー定義のメッセージ・プロパティの指定 |
サポートされません プロパティはペイロードの一部である必要がある。 |
サポートされません プロパティはペイロードの一部である必要がある。 |
<AQXmlSend> 次のものに、 <user_properties> |
Message.setInt Property Message.setString Property Message.setBoolean Property など。その後にを指定する。 QueueSender.send |
シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ変換の指定 |
DBMS_AQ.enqueue 次のものにtransformationを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq 次のものに OCIAQEnqOptions |
<AQXmlSend> 次のものに <producer_options> |
AQjmsQueueSender. setTransformation その後に次を指定します QueueSender.send |
表3-5 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ(パブリッシュ・サブスクライブ・モデルでの利用方法)
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: デフォルトのサブスクリプション・リストの使用 |
DBMS_AQ.enqueue 次のものの MESSAGE_PROPERTIES |
OCIAQEnq 次のものの OCIAQMsgProperties |
<AQXmlPublish> |
TopicPublisher. publish |
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 特定の受信者リストの使用 脚注1を参照 |
DBMS_AQ.enqueue 次のものに受信者リストを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq 次のものに OCIAQMsgProperties |
<AQXmlPublish> 次のものに <message_header> |
AQjmsTopic Publisher.publish
|
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: メッセージ・プロパティの優先順位と期限切れの指定 |
DBMS_AQ.enqueue 次のものにpriority、expirationを指定する。 MESSAGE_PROPERTIES |
OCIAQEnq 次のものに OCIAQMsgProperties |
<AQXmlPublish> 次のものに <message_header> |
の実行時に、 TopicPublisher. publish または MessageProducer. setTimeToLive および MessageProducer. setPriority その後に次を指定します TopicPublisher. publish |
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 送信オプション(相関識別子、遅延、例外キュー)の指定 |
DBMS_AQ.enqueue 次のものにcorrelation、delay、 MESSAGE_PROPERTIES |
OCIAQEnq 次のものに OCIAQMsgProperties |
<AQXmlPublish> 次のものに <message_header> |
Message.setJMS CorrelationID 遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。 JMS_OracleDelay JMS_OracleExcpQ その後に次を指定します TopicPublisher. publish |
トピックへのメッセージのパブリッシュ: ユーザー定義のメッセージ・プロパティの指定 |
サポートされません プロパティはペイロードの一部である必要がある。 |
サポートされません プロパティはペイロードの一部である必要がある。 |
<AQXmlPublish> 次のものに、 <user_properties> |
Message.setInt Property Message.setString Property Message.setBoolean Property など。その後にを指定する。 TopicPublisher. publish |
トピックへのメッセージのパブリッシュ: メッセージ変換の指定 |
DBMS_AQ.enqueue 次のものにtransformationを指定する。 ENQUEUE_OPTIONS |
OCIAQEnq 次のものに OCIAQEnqOptions |
<AQXmlPublish> 次のものに <producer_options> |
AQjmsTopic Publisher.set Transformation その後に次を指定します TopicPublisher. publish |
表3-6 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—マルチ・コンシューマ・キュー/トピックのメッセージに対するサブスクライブ(パブリッシュ・サブスクライブ・モデルでの利用方法)
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
サブスクライバの追加 |
管理インタフェースを参照 |
サポートされません |
サポートされません |
TopicSession. createDurable Subscriber AQjmsSession. createDurable Subscriber |
サブスクライバの変更 |
管理インタフェースを参照 |
サポートされません |
サポートされません |
TopicSession. createDurable Subscriber AQjmsSession. createDurable Subscriber 新しいセレクタを使用する。 |
サブスクライバの削除 |
管理インタフェースを参照 |
サポートされません |
サポートされません |
AQjmsSession. unsubscribe |
表3-7 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—キューのメッセージのブラウズでの利用方法
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
キュー/トピックのメッセージのブラウズ |
DBMS_AQ. dequeue 次のものの DEQUEUE_OPTIONS |
OCIAQDeq 次のものの OCIAQDeqOptions |
<AQXmlReceive> 次のものの <consumer_options> |
QueueSession.createBrowser QueueBrowser.getEnumeration トピックでは未サポート oracle.jms.AQjmsSession. createBrowser oracle.jms.TopicBrowser. getEnumeration |
キュー/トピックのメッセージのブラウズ: ブラウズ中のメッセージのロック |
DBMS_AQ.dequeue 次のものの DEQUEUE_OPTIONS |
OCIAQDeq 次のものの OCIAQDeqOptions |
<AQXmlReceive> 次のものの <consumer_options> |
AQjmsSession.createBrowser 次のものの QueueBrowser.getEnumeration トピックでは未サポート oracle.jms.AQjmsSession. createBrowser oracle.jms.TopicBrowser. getEnumeration |
表3-8 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—キュー/トピックからのメッセージの受信での利用方法
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
メッセージ受信用のコネクションの起動 |
該当なし |
該当なし |
該当なし |
Connection.start |
メッセージ・コンシューマの作成 |
該当なし |
該当なし |
該当なし |
QueueSession. createQueueReceiver TopicSession.create DurableSubscriber AQjmsSession.create TopicReceiver |
キュー/トピックからのメッセージのデキュー: 可視性の指定 |
DBMS_AQ.dequeue 次のものにvisibilityを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq 次のものに OCIAQDeqOptions |
<AQXmlReceive> 次のものに <consumer_options> |
サポートされません |
キュー/トピックからのメッセージのデキュー: 変換の指定 |
DBMS_AQ.dequeue 次のものにtransformationを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq 次のものに OCIAQDeqOptions |
<AQXmlReceive> 次のものに <consumer_options> |
AQjmsQueueReceiver. setTransformation AQjmsTopicSubscriber. setTransformation AQjmsTopicReceiver. setTransformation |
キュー/トピックからのメッセージのデキュー: ナビゲーション・モードの指定 |
DBMS_AQ.dequeue 次のものにnavigationを指定する。 DEQUEUE_OPTIONS |
OCIAQDeq 次のものに OCIAQDeqOptions |
<AQXmlReceive> 次のものに <consumer_options> |
AQjmsQueueReceiver. setNavigationMode AQjmsTopicSubscriber. setNavigationMode AQjmsTopicReceiver. setNavigationMode |
シングル・コンシューマ・キューからのメッセージのデキュー |
DBMS_AQ.dequeue 次のものの DEQUEUE_OPTIONS |
OCIAQDeq 次のものの OCIAQDeqOptions |
<AQXmlReceive> |
QueueReceiver.receive または QueueReceiver.receive NoWait または AQjmsQueueReceiver. receiveNoData |
マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: サブスクリプション名を使用 |
DBMS_AQ.dequeue 次のものの DEQUEUE_OPTIONS |
OCIAQDeq 次のものの OCIAQDeqOptions |
<AQXmlReceive> 次のものに <consumer_options> |
サブスクリプション名を使用してトピックに永続的なTopicSubscriberを作成し、その後に次のいずれかを指定する。 TopicSubscriber. receive または TopicSubscriber. receiveNoWait または AQjmsTopicSubscriber. receiveNoData |
マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: 受信者名を使用 |
DBMS_AQ.dequeue 次のものの DEQUEUE_OPTIONS |
OCIAQDeq 次のものの OCIAQDeqOptions |
<AQXmlReceive> 次のものに <consumer_options> |
受信者名を使用してトピックに AQjmsSession.create TopicReceiver AQjmsTopicReceiver. receive または AQjmsTopicReceiver. receiveNoWait または AQjmsTopicReceiver. receiveNoData |
表3-9 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—キュー/トピックからメッセージを非同期受信するための登録での利用方法
ユース・ケース | PL/SQL | OCI | AQ XMLサーブレット | JMS |
---|---|---|---|---|
メッセージの非同期受信: シングル・コンシューマ・キューから |
PL/SQLコールバック・プロシージャを定義する。 次のものを使用して登録する。 DBMS_AQ.REGISTER |
OCISubscription Register
OCISubscription Enable |
<AQXmlRegister>
<notify_url> |
キューに対して QueueReceiver.set MessageListener |
メッセージの非同期受信: マルチ・コンシューマ・キュー/トピックから |
PL/SQLコールバック・プロシージャを定義する。 次のものを使用して登録する。 DBMS_AQ.REGISTER |
OCISubscription Register
OCISubscription Enable |
<AQXmlRegister>
|
トピックに対して TopicSubscriber. setMessageListener |
メッセージのリスニング: 複数キュー/トピック |
- |
- |
- |
- |
メッセージのリスニング: 1つ(または多数)のシングル・コンシューマ・キュー |
DBMS_AQ.LISTEN
|
OCIAQListen
|
サポートされません |
1つの QueueSession.set MessageListener |
メッセージのリスニング: 1つ(または多数)のマルチ・コンシューマ・キュー/トピック |
DBMS_AQ.LISTEN
|
OCIAQListen
|
サポートされません |
1つの TopicSession.set MessageListener |
OCCIを使用したOracle Database Advanced Queuingへのアクセス
C++アプリケーションはOCCIを使用できますが、これには、メッセージ・クライアントによるOracle Database Advanced Queuingへのアクセスを可能にするOracle Database Advanced Queuingインタフェースのセットが含まれます。
OCCI AQでは、メッセージが使用可能なデータベースでのメッセージの送受信、およびパブリッシュ/サブスクライブに必要な操作関数をすべてサポートしています。メッセージ選択ルールに基づいた同期および非同期メッセージの受入れが可能です。Transactional Event Queues (TEQ)は、OCCIクライアントをサポートしていません。
関連項目:
『Oracle C++ Call Interfaceプログラマーズ・ガイド』のOracle Database Advanced Queuingに関する項
Oracle Java Message Service (Oracle JMS)を使用したOracle Database Advanced Queuingへのアクセス
Java Message Service(JMS)は、Sun社、オラクル社、IBM社およびその他のベンダーによって定められたメッセージングの標準規格です。JMSは、JMSクライアントが企業のメッセージ関連製品の機能にアクセスする方法を定義する、インタフェースおよび対応するセマンティクスの集合です。Oracle Java Message Service (Oracle JMS)には、JMS標準に基づいた、Oracle Database Advanced Queuing用のJava APIが用意されています。
Oracle Java Message Service (Oracle JMS)は、標準のJMSインタフェースをサポートしている他、標準以外の管理操作や他の機能をサポートする拡張機能を備えています。
標準Java Message Service (JMS)機能には次のような機能があります。
-
キューを使用したPoint-to-Point通信モデル
-
トピックを使用したパブリッシュ・サブスクライブ通信モデル
-
ObjectMessage
、StreamMessage
、TextMessage
、BytesMessage
、MapMessage
の各メッセージ型 -
非同期および同期のメッセージ配信
-
メッセージ・ヘッダー・フィールドまたはプロパティに基づくメッセージ選択
Oracle JMSの拡張機能は、次のとおりです。
-
キュー表、キューおよびトピック作成用の管理API
-
トピックの受信者リストを使用したPoint-to-Multipoint通信
-
宛先間でのメッセージの伝播。アプリケーションでのリモート・サブスクライバの定義が可能になります。
-
トランザクション・セッションのサポート。1つのトランザクションでJMS操作およびSQL操作が可能になります。
-
メッセージがデキューされた後のメッセージ保存
-
メッセージ遅延。一定の遅延の後にメッセージが表示されます。
-
例外処理。メッセージを正常に処理できない場合、メッセージが例外キューに移動されます。
-
AdtMessage
のサポートこれらはOracleオブジェクトとしてデータベースに格納されるため、メッセージのペイロードをエンキュー後に問い合せることができます。サブスクリプションは、メッセージ・プロパティのみでなく、これらのメッセージの内容にも定義できます。
-
トピックのブラウズ
これにより、永続サブスクライバがメッセージをパブリッシュ・サブスクライブ(トピック)先でブラウズできます。オプションで、これらのサブスクライバがブラウズ済メッセージをパージして、そのサブスクライバについてはメッセージがOracle Database Advanced Queuingによって保持されないようにできます。
関連項目:
-
『Java Message Service Specification』、バージョン1.1、2002年3月18日、Sun Microsystems, Inc.
-
標準およびOracle JMSアプリケーションへのアクセス
標準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 Database Advanced Queuingのjarファイルを指定する必要があります。
Oracle Databaseは、JDK 1.2、JDK 1.3、JDK 1.4、JDK5.nおよびすべてのclasses12*.*ファイルをサポートしていないことに注意してください。JDK 6.nおよびJDK 7.nでそれぞれojdbc6.jar
ファイルおよび ojbc7.jar
ファイルを使用する必要があります。次のjarファイルとzipファイルは使用しているJDKのリリースに基づくCLASSPATH
にある必要があります。
JDK 1.5.xの場合、CLASSPATH
に次のパスを含める必要があります。
ORACLE_HOME/jdbc/lib/ojdbc6.jar
JDK 1.6.xの場合、CLASSPATH
に次のパスを含める必要があります。
ORACLE_HOME/jdbc/lib/ojdbc7.jar
いずれかのJDKバージョンに次のファイルを使用します。
ORACLE_HOME/lib/jta.jar ORACLE_HOME/xdk/lib/xmlparserv2.jar ORACLE_HOME/rdbms/jlib/xdb.jar ORACLE_HOME/rdbms/jlib/aqapi.jar ORACLE_HOME/rdbms/jlib/jmscommon.jar
JServerでのOracleサーバー・ドライバの使用
アプリケーションがJServer内で実行される場合、JServerのインストール時に自動的にロードされたOracle JMSクラスにアクセスできる必要があります。これらのクラスが使用できない場合は、SQLスクリプト$ORACLE_HOME/rdbms/admin/initjms
を使用して、jmscommon.jar
の後にaqapi.jar
をロードする必要があります。
Oracle Database Advanced Queuing XMLサーブレットを使用したOracle Database Advanced Queuingへのアクセス
Oracle Database Advanced Queuing XMLサーブレットを使用して、HTTPでOracle Database Advanced Queuingにアクセスできますが、これには、Internet Data Access Presentation (IDAP)と呼ばれるSimple Object Access Protocol (SOAP)およびOracle Database Advanced Queuing XMLメッセージ・フォーマットが使用されます。
Oracle Database Advanced Queuingサーブレットを使用すると、クライアントは次のアクションを実行できます。
-
シングル・コンシューマ・キューへのメッセージの送信
-
マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ
-
キューからのメッセージの受信
-
メッセージ通知の受信登録