日本語PDF

3 Oracle Database 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へのアクセスに必要なプログラム・インタフェース

この表は、Oracle Database Advanced Queuingのプログラム・インタフェースと、各インタフェースでサポートされる機能、および構文の参照先を示しています。

表3-1 Oracle Database Advanced Queuingのプログラム・インタフェース

言語 プリコンパイラまたはインタフェース・プログラム サポートされる機能 構文の参照先

PL/SQL

DBMS_AQADMおよびDBMS_AQパッケージ

管理および操作

『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』

C

Oracle Call Interface(OCI)

操作のみ

『Oracle Call Interfaceプログラマーズ・ガイド』

Java (JMS)

JDBC APIを介してのoracle.JMSパッケージ

管理および操作

『Oracle Database Advanced Queuing Java APIリファレンス』

AQ XMLサーブレット

Internet Data Access Presentation(iDAP)

操作のみ

『Oracle XML DB開発者ガイド』

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を使用して、キューの新規メッセージの非同期通知を受信できます。シャード・キューは、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 Database Advanced Queuing管理インタフェース

この表は、Oracle Database Advanced Queuingの管理における、PL/SQLとJava (JMS)のプログラム・インタフェースの同等の機能を示しています。

表3-2 Oracle Database Advanced Queuingのプログラム・インタフェース別の比較: 管理インタフェース

ユース・ケース PL/SQL Java (JMS)

コネクション・ファクトリの作成

該当なし

AQjmsFactory.getQueue
ConnectionFactory
AQjmsFactory.getTopic
ConnectionFactory

LDAPサーバーでのConnectionFactoryの登録

該当なし

AQjmsFactory.register
ConnectionFactory

キュー表の作成

DBMS_AQADM.CREATE_QUEUE_TABLE
AQjmsSession.createQueueTable

キュー表の取得

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.CREATE_SHARDED_QUEUE AQjmsDestination.createJMSShardedQueue

シャード・キューの削除

DBMS_AQADM.DROP_SHARDED_QUEUE AQjmsDestination.dropJMSShardedQueue

シャード・キューの変更

DBMS_AQADM.ALTER_SHARDED_QUEUE

なし。PL/SQL APIを使用してください。

システム権限の付与

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進表示を提供する。例: <raw>023f4523</raw>

サポートされません

構造化データを持つメッセージの作成

メッセージにSQL Oracleオブジェクト型を使用する。

メッセージにSQL Oracleオブジェクト型を使用する。

JMSキュー以外の(AQ$_JMS_*型ではない)Oracleオブジェクト型キューでは、<message payload>に指定されているXMLをキュー表のペイロードのSQL型にマッピングする必要がある。

JMSキューでは、<jms_text_message><jms_map_message><jms_bytes_message><jms_object_message>のいずれかを、<message_payload>内のXMLに指定する必要がある。

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

OCIAQEnqOptionsOCI_ATTR_VISIBILITYを指定する。

OCIAQEnqOptions
<AQXmlSend>

次のものに<visibility>を指定する

<producer_options>

サポートされません

シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの優先順位と期限切れの指定

DBMS_AQ.enqueue

次のものにpriority、expirationを指定する。

MESSAGE_PROPERTIES
OCIAQEnq

次のものにOCI_ATTR_PRIORITYOCI_ATTR_EXPIRATIONを指定する。

OCIAQMsgProperties
<AQXmlSend>

次のものに<priority><expiration>を指定する。

<message_header>

の実行時に、priorityおよびTimeToLiveを指定する。

QueueSender.send

または

.setTimeToLive

および

MessageProducer.
setPriority

その後に次を指定します

QueueSender.send

シングル・コンシューマ・キューへのメッセージのエンキュー: メッセージ・プロパティの相関識別子、遅延、例外キューの指定

DBMS_AQ.enqueue

次のものにcorrelation、delay、exception_queueを指定する。

MESSAGE_PROPERTIES
OCIAQEnq

次のものにOCI_ATTR_CORRELATIONOCI_ATTR_DELAYOCI_ATTR_EXCEPTION_QUEUEを指定する。

OCIAQMsgProperties
<AQXmlSend>

次のものに<correlation_id><delay><exception_queue>を指定する。

<message_header>
Message.setJMS
CorrelationI

遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。

JMS_OracleDelay
JMS_OracleExcpQ

その後に次を指定します

QueueSender.send

シングル・コンシューマ・キューへのメッセージのエンキュー: ユーザー定義のメッセージ・プロパティの指定

サポートされません

プロパティはペイロードの一部である必要がある。

サポートされません

プロパティはペイロードの一部である必要がある。

<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 Database Advanced Queuingのプログラム・インタフェース別の比較: 操作インタフェース—マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ(パブリッシュ・サブスクライブ・モデルでの利用方法)

ユース・ケース PL/SQL OCI AQ XMLサーブレット JMS

マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: デフォルトのサブスクリプション・リストの使用

DBMS_AQ.enqueue

次のもののrecipient_listNULLに設定する。

MESSAGE_PROPERTIES
OCIAQEnq

次のもののOCI_ATTR_RECIPIENT_LISTNULLに設定する。

OCIAQMsgProperties
<AQXmlPublish>
TopicPublisher.
publish

マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 特定の受信者リストの使用

脚注1を参照

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_PRIORITYOCI_ATTR_EXPIRATIONを指定する。

OCIAQMsgProperties
<AQXmlPublish>

次のものに<priority><expiration>を指定する。

<message_header>

の実行時に、priorityおよびTimeToLiveを指定する。

TopicPublisher.
publish

または

MessageProducer.
setTimeToLive

および

MessageProducer.
setPriority

その後に次を指定します

TopicPublisher.
publish

マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ: 送信オプション(相関識別子、遅延、例外キュー)の指定

DBMS_AQ.enqueue

次のものにcorrelation、delay、exception_queueを指定する。

MESSAGE_PROPERTIES
OCIAQEnq

次のものにOCI_ATTR_CORRELATIONOCI_ATTR_DELAYOCI_ATTR_EXCEPTION_QUEUEを指定する。

OCIAQMsgProperties
<AQXmlPublish>

次のものに<correlation_id><delay><exception_queue>を指定する。

<message_header>
Message.setJMS
CorrelationID

遅延および例外キューは、次のプロバイダ固有のメッセージ・プロパティで指定。

JMS_OracleDelay
JMS_OracleExcpQ

その後に次を指定します

TopicPublisher.
publish

トピックへのメッセージのパブリッシュ: ユーザー定義のメッセージ・プロパティの指定

サポートされません

プロパティはペイロードの一部である必要がある。

サポートされません

プロパティはペイロードの一部である必要がある。

<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 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_modeBROWSEに設定する。

DEQUEUE_OPTIONS
OCIAQDeq

次のもののOCI_ATTR_DEQ_MODEBROWSEに設定する。

OCIAQDeqOptions
<AQXmlReceive>

次のものの<dequeue_mode>BROWSEに指定する。

<consumer_options>
QueueSession.createBrowser
QueueBrowser.getEnumeration

トピックでは未サポート

oracle.jms.AQjmsSession.
createBrowser
oracle.jms.TopicBrowser.
getEnumeration

キュー/トピックのメッセージのブラウズ: ブラウズ中のメッセージのロック

DBMS_AQ.dequeue

次のもののdequeue_modeLOCKEDに設定する。

DEQUEUE_OPTIONS
OCIAQDeq

次のもののOCI_ATTR_DEQ_MODELOCKEDに設定する。

OCIAQDeqOptions
<AQXmlReceive>

次のものの<dequeue_mode>をLOCKEDに設定する。

<consumer_options>
AQjmsSession.createBrowser

次のもののlockedTRUEに設定する。

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

次のものに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_modeREMOVEに設定する。

DEQUEUE_OPTIONS
OCIAQDeq

次のもののOCI_ATTR_DEQ_MODEREMOVEに設定する。

OCIAQDeqOptions
<AQXmlReceive>
QueueReceiver.receive

または

QueueReceiver.receive
NoWait

または

AQjmsQueueReceiver.
receiveNoData

マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: サブスクリプション名を使用

DBMS_AQ.dequeue

次のもののdequeue_modeREMOVEに設定し、consumer_nameにサブスクリプション名を設定する。

DEQUEUE_OPTIONS
OCIAQDeq

次のもののOCI_ATTR_DEQ_MODEREMOVEに設定し、OCI_ATTR_CONSUMER_NAMEにサブスクリプション名を設定する。

OCIAQDeqOptions
<AQXmlReceive>

次のものに<consumer_name>を指定する。

<consumer_options>

サブスクリプション名を使用してトピックに永続的なTopicSubscriberを作成し、その後に次のいずれかを指定する。

TopicSubscriber.
receive

または

TopicSubscriber.
receiveNoWait

または

AQjmsTopicSubscriber.
receiveNoData

マルチ・コンシューマ・キュー/トピックからのメッセージのデキュー: 受信者名を使用

DBMS_AQ.dequeue

次のもののdequeue_modeREMOVEに設定し、consumer_nameに受信者名を設定する。

DEQUEUE_OPTIONS
OCIAQDeq

次のもののOCI_ATTR_DEQ_MODEREMOVEに設定し、OCI_ATTR_CONSUMER_NAMEに受信者名を設定する。

OCIAQDeqOptions
<AQXmlReceive>

次のものに<consumer_name>を指定する。

<consumer_options>

受信者名を使用してトピックにTopicReceiverを作成する。その後に、次のいずれかを指定する。

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

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_nameNULLを使用する。

OCIAQListen

agent_listのすべてのエージェントのagent_nameNULLを使用する。

サポートされません

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

OCCIを使用したOracle Database Advanced Queuingへのアクセス

C++アプリケーションはOCCIを使用できますが、これには、メッセージ・クライアントによるOracle Database Advanced Queuingへのアクセスを可能にするOracle Database Advanced Queuingインタフェースのセットが含まれます。

OCCI AQでは、メッセージが使用可能なデータベースでのメッセージの送受信、およびパブリッシュ/サブスクライブに必要な操作関数をすべてサポートしています。メッセージ選択ルールに基づいた同期および非同期メッセージの受入れが可能です。シャード・キューは、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通信モデル

  • トピックを使用したパブリッシュ・サブスクライブ通信モデル

  • ObjectMessageStreamMessageTextMessageBytesMessageMapMessageの各メッセージ型

  • 非同期および同期のメッセージ配信

  • メッセージ・ヘッダー・フィールドまたはプロパティに基づくメッセージ選択

Oracle JMSの拡張機能は、次のとおりです。

  • キュー表、キューおよびトピック作成用の管理API

  • トピックの受信者リストを使用したPoint-to-Multipoint通信

  • 宛先間でのメッセージの伝播。アプリケーションでのリモート・サブスクライバの定義が可能になります。

  • トランザクション・セッションのサポート。1つのトランザクションでJMS操作およびSQL操作が可能になります。

  • メッセージがデキューされた後のメッセージ保存

  • メッセージ遅延。一定の遅延の後にメッセージが表示されます。

  • 例外処理。メッセージを正常に処理できない場合、メッセージが例外キューに移動されます。

  • AdtMessageのサポート

    これらはOracleオブジェクトとしてデータベースに格納されるため、メッセージのペイロードをエンキュー後に問い合せることができます。サブスクリプションは、メッセージ・プロパティのみでなく、これらのメッセージの内容にも定義できます。

  • トピックのブラウズ

    これにより、永続サブスクライバがメッセージをパブリッシュ・サブスクライブ(トピック)先でブラウズできます。オプションで、これらのサブスクライバがブラウズ済メッセージをパージして、そのサブスクライバについてはメッセージがOracle Database Advanced Queuingによって保持されないようにできます。

    関連項目:

標準および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サーブレットを使用すると、クライアントは次のアクションを実行できます。

  • シングル・コンシューマ・キューへのメッセージの送信

  • マルチ・コンシューマ・キュー/トピックへのメッセージのパブリッシュ

  • キューからのメッセージの受信

  • メッセージ通知の受信登録