6 Oracle Database Advanced Queuingへのインターネット・アクセス
非シャード・キューではSOAPを使用してインターネットを介してOracle Database Advanced Queuing (AQ)にアクセスできます。IDAPはOracle Database Advanced Queuing操作のためのSOAP仕様です。
IDAPは、SOAP (Simple Object Access Protocol)リクエストの本体のXMLメッセージ構造を定義します。IDAP (Internet Data Access Presentation)構造のメッセージは、HTTPを使用してインターネット上で転送されます。
ユーザーは、iDAPインタフェースを使用して通知に登録できます。
トピック:
インターネット経由のOracle Database Advanced Queuing操作の概要
この項では次のトピックについて説明します。
Oracle Database Advanced Queuingのインターネット操作アーキテクチャ
この図は、HTTP上でOracle Database Advanced Queuing操作を実行するためのアーキテクチャを示しています。
-
Oracle Database Advanced Queuingクライアント・プログラム
-
Oracle Database Advanced QueuingサーブレットのホストWebサーバー/サーブレット・コンテナ
-
Oracle Databaseサーバー
Webブラウザまたはその他の任意のHTTPクライアントを、Oracle Database Advanced Queuingのクライアント・プログラムとして使用できます。これらは、XMLメッセージ(IDAP準拠)をOracle Database Advanced Queuingサーブレットに送信し、サーブレットによって受信XMLメッセージが解析されます。Oracle Database Advanced Queuingサーブレットは、Oracle Databaseサーバーに接続し、ユーザー・キューに対して操作を実行します。
図6-1 HTTPを使用してOracle Database Advanced Queuing操作を実行するためのアーキテクチャ
![図6-1の説明が続きます 図6-1の説明が続きます](img/adque430.gif)
「図6-1 HTTPを使用してOracle Database Advanced Queuing操作を実行するためのアーキテクチャ」の説明
インターネット・メッセージ・ペイロード
Oracle Database Advanced Queuingは、3つのタイプのメッセージ(RAW、OracleオブジェクトおよびJMS)をサポートします。これらのメッセージ型はすべて、SOAPおよびWebサービスを使用してアクセスできます。
キューにRAW、OracleオブジェクトまたはJMS (Java Message Service)フォーマットのメッセージが含まれる場合、XMLのペイロードはエンキュー中に適切な内部フォーマットに変換され、キューに格納されます。デキュー中、前述のいずれかのフォーマットのメッセージを含むキューからメッセージが取得された場合、そのメッセージはクライアントに送信される前にXMLに変換されます。
メッセージ・ペイロード型は、操作が実行されているキュー・タイプによって異なります。
RAWキュー
RAWキューの内容は、バイト列です。XMLメッセージに、次の例のようにメッセージ・ペイロードを16進数で指定する必要があります。例: <raw>023f4523</raw>
Oracleオブジェクト型のキュー
JMSキューではない(AQ$_JMS_*
型ではない)Oracleオブジェクト型のキューの場合、ペイロードの型はキューを格納するキュー表の作成時に指定した型によって決まります。XML要素の内容は、キュー表のオブジェクト型の属性にマップする必要があります。
JMS型のキュー/トピック
JMS型のキュー(ペイロード型がAQ$_JMS_*
のキュー)の場合、JMS型に応じて4つのXML要素があります。iDAPでは、次のJMS型のキューまたはトピックがサポートされています。
-
TextMessage
-
MapMessage
-
BytesMessage
-
ObjectMessage
iDAPでは、ペイロード型StreamMessage
のJMSキューはサポートされていません。
POSTリクエストを送信するユーザーを認証するWebサーバーの構成
サーブレットのインストール後、Oracle Database Advanced QueuingサーブレットにPOST
リクエストを送信するすべてのユーザーを認証するようにWebサーバーを構成する必要があります。Oracle Database Advanced Queuingサーブレットは、認証されたユーザーのみにサーブレットへのアクセスを許可します。ユーザーが認証されていない場合、サーブレットからエラーが戻ります。
Webサーバーを構成してアクセスを制限するには、複数の方法があります。一般的な方法は、SSL上でBasic認証(ユーザー名およびパスワード)を行う方法およびクライアント証明書を使用する方法です。サーブレットへのアクセスを制限する方法については、Webサーバーのドキュメントを参照してください。
Oracle Database Advanced Queuingサーブレットの場合、Webサーバーへの接続に使用されるユーザー名は、Oracle Database Advanced Queuing HTTPエージェントまたはOracle Database Advanced Queuingインターネット・ユーザーと呼ばれます。
HTTPを使用したクライアント・リクエスト
Oracle Database Advanced Queuingクライアントは、サーバーへの接続をオープンし、HTTPを使用してOracle Database Advanced Queuingサーブレットへのリクエストを開始します。クライアントは、HTTPのBasic認証(SSLを使用する場合も使用しない場合も含む)またはSSL証明書ベースのクライアント認証を使用してサーバーにログインします。クライアントが、SEND、PUBLISH、RECEIVEまたはREGISTERリクエストを表すXMLメッセージを構成します。
リモート・サーバーで、クライアントがサーブレットにHTTPのPOST
リクエストを送信します。
関連項目:
ユーザー・セッションおよびトランザクション
クライアントが認証され、Oracle Database Advanced Queuingサーブレットに接続すると、ユーザーのかわりにHTTPセッションが作成されます。そのセッションで初めてリクエストを行うと、新しいデータベース・トランザクションが暗黙的に開始します。このトランザクションは、明示的にコミットまたは終了するまでオープン状態のままになります。サーブレットからのレスポンスには、HTTPヘッダーにセッションIDがCookieとして含まれます。
クライアントが同一のトランザクションで作業を継続する場合、後続のリクエストにはセッションIDのCookieを含むこのHTTPヘッダーを含める必要があります。これは、ほとんどのWebブラウザで自動的に行われます。ただし、クライアントがJavaまたはCのクライアントを使用してリクエストを転送する場合、プログラムで行う必要があります。
トランザクションを終了するには、明示的なコミットまたはロールバックを適用する必要があります。COMMITまたはROLLBACKリクエストは、他のOracle Database Advanced Queuing操作の一部に組み込むこともできます。
HTTPを使用したOracle Database Advanced Queuingサーブレットのレスポンス
サーバーは、クライアントのHTTP(S)接続を受け入れて、クライアントにより指定されたユーザー(Oracle Database Advanced Queuingエージェント)を認証します。サーバーはPOST
リクエストを受信して、Oracle Database Advanced Queuingサーブレットを起動します。
このリクエストがこのクライアントからの最初のリクエストである場合、新しいHTTPセッションが作成されます。XMLメッセージが解析され、メッセージの内容が検証されます。HTTPヘッダーにクライアントによってセッションIDが渡される場合、この操作はそのセッションのコンテキストで実行されます。
サーブレットが、エージェントが操作を実行しようとしているオブジェクト(キューおよびトピック)を判断します。サーブレットが、このOracle Database Advanced Queuingエージェントにマップするデータベース・ユーザーのリスト全体を検索します。いずれかのユーザーがリクエストに指定されたキュー/トピックへのアクセス権限を取得している場合、Oracle Database Advanced Queuingサーブレットのスーパーユーザーは、このユーザーのためにセッションを作成します。
HTTPセッションにアクティブなトランザクションが存在しない場合は、新しいデータベース・トランザクションが開始されます。明示的なCOMMIT
またはROLLBACK
リクエストが行われるまで、セッションの後続のリクエストは同じトランザクションの一部になります。トランザクションは、そのトランザクションがコミットされるまで反映されません。トランザクションがアクティブでない状態が120秒間続くと、そのトランザクションは自動的に終了します。
要求された操作が実行されます。レスポンスがXMLメッセージとしてフォーマットされ、クライアントに戻されます。レスポンスには、セッションIDがCookieとしてHTTPヘッダーに含まれます。
関連項目:
HTTPとHTTPSを使用したOracle Database Advanced Queuing伝播
Oracle Net ServicesではなくHTTPおよびHTTPS(SSLによるHTTP)上で伝播できます。HTTPは、Oracle Net Servicesとは異なり、ファイアウォールを簡単に構成できます。図に示すように、伝播を行うバックグラウンド・プロセスがOracle Database Advanced Queuingサーブレットにメッセージを転送し、そのサーブレットが接続先データベースにメッセージをエンキューします。
既存のコードを変更せずに、アプリケーションがHTTPでのOracle Database Advanced Queuing伝播を使用するように設定できます。HTTPでのOracle Database Advanced Queuing伝播を使用するアプリケーションは、Oracle Net Services接続文字列を使用してデータベース・リンクを再作成するのみで、その他を変更しないで再びOracle Net Servicesでの伝播に容易に戻すことができます。
Oracle Database Advanced Queuing XMLサーブレットのデプロイ
AQサーブレットは任意のWebサーバー(Tomcatなど)を使用してデプロイできます。Tomcatを使用してAQ XMLサーブレットをデプロイするステップは、次のとおりです。
Internet Data Access Presentation(IDAP)
Internet Data Access Presentation(iDAP)は、Content-Typeヘッダーのtext/xml
を使用して、SOAPリクエストの本体を指定します。
XMLでは、iDAPリクエストおよびレスポンス・メッセージは、次のように表現されます。
-
すべてのリクエスト・タグおよびレスポンス・タグは、SOAP名前空間で有効です。
-
Oracle Database Advanced Queuing操作はIDAP名前空間で有効です。
-
送信者は、SOAP本体のiDAP要素および属性に名前空間を含めます。
-
受信者は、適切な名前空間を含むSOAPメッセージを処理し、不適切な名前空間を含むリクエストの場合はリクエストが無効であるというエラーを戻します。
-
SOAP名前空間の値は
http://schemas.xmlsoap.org/soap/envelope/
です。 -
iDAP名前空間の値は
http://ns.oracle.com/AQ/schemas/access
です。
SOAPメッセージの構造
次のトピックでは、SOAPによってメッセージ・リクエストまたはレスポンスが構造化される仕組みを説明します。
SOAPエンベロープ
これは、XMLツリーのルートまたは最上位要素です。タグはSOAP:Envelope
です。SOAPは、グローバル属性SOAP:encodingStyle
を定義し、これはSOAP仕様によって記述されるルールのかわりに使用されるシリアライズ・ルールを示します。
この属性は、任意の要素で使用でき、この要素と、このような要素が含まれていないすべての子要素で有効です。この属性が省略されている場合、親要素によってオーバーライドされた場合を除き、型の指定に従うことを示します。
名前空間で修飾されている場合、SOAPエンベロープには名前空間宣言およびその他の属性も含まれます。本体には、名前空間で修飾された他のサブ要素を続けることができます。
SOAPヘッダー
これは、ルート下の最初の要素です。タグはSOAP:Header
です。SOAPヘッダーは、トランザクションIDなどの必要な情報を渡します。
ヘッダーは、SOAP:Envelope
というXML要素の子としてエンコードされます。ヘッダーは名前要素で識別され、名前空間で修飾されます。ヘッダー・エントリは、埋込み要素としてエンコードされます。
SOAPメソッドの起動
メソッドの起動は、リクエストのヘッダーおよび本体を作成し、戻されたレスポンスのヘッダーおよび本体を処理することによって実行されます。リクエストおよびレスポンスのヘッダーは、標準の転送プロトコル固有のヘッダーおよび拡張ヘッダーで構成されます。
HTTPヘッダー
HTTPリクエスト・ヘッダー内のPOST
メソッドにより、SOAPのメソッドが起動されます。リクエストにはヘッダーSOAPMethodName
が含まれている必要があります。このヘッダーの値は、ターゲットに対して起動するメソッドを示します。この値の形式はURI
#
method name
です。
次に例を示します。
SOAPMethodName: http://ns.oracle.com/AQ/schemas/access#AQXmlSend
インタフェースに使用するURIは、ペイロードのSOAP:Body
部に存在する、メソッド名要素の暗示または指定された名前空間修飾に一致する必要があります。メソッド名に#文字を含めることはできません。
メソッド起動本体
SOAPメソッドの起動は、メソッド・リクエストおよびメソッド・レスポンス(オプション)で構成されます。SOAPのメソッド・リクエストおよびメソッド・レスポンスは、それぞれHTTPのリクエストおよびレスポンスで、その内容は、ルート要素および必須の本体要素で構成されるXML文書です。
この項では、このXML文書をSOAPペイロードと呼びます。
SOAPペイロードの定義は次のとおりです。
-
SOAPのルート要素は、XMLツリーの最上位要素です。
-
SOAPペイロードのヘッダーには、リクエストとともに送信する必要がある追加情報が含まれます。
-
メソッド・リクエストは、パラメータ用の追加要素を持つXML要素として表現されます。これは
SOAP:Body
要素の最初の子です。このリクエストは、次の項で説明するOracle Database Advanced QueuingのXMLクライアント・リクエストの1つに含められます。 -
レスポンスは、戻り値、またはクライアントに戻されるエラーまたは例外です。
受信サイトでは、リクエストの結果は次のいずれかになります。
-
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できません。この場合、HTTPインフラストラクチャはSOAPインフラストラクチャにヘッダーおよび本体を渡します。
-
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できません。この場合、HTTPレスポンスには状態フィールドにHTTPエラーが含まれ、XMLの本体は含まれません。
-
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できます。この場合、メソッド・リクエストの結果はレスポンスまたはエラーで構成されます。
-
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているインタフェースまたはメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できません。この場合、メソッドの結果はエラーになり、受信側でのインフラストラクチャのディスパッチを正常終了させることができません。
最後の2つのケースの場合は、拡張性の目的で追加のメッセージ・ヘッダーをリクエストの結果に表示できます。
リクエストおよびレスポンスのIDAPドキュメント
SOAPメッセージの本体は、iDAPメッセージです。このXML文書の名前空間は、http://ns.oracle.com/AQ/schemas/access
となります。
-
クライアントのエンキュー、デキューおよび登録リクエストに対するサーバーのレスポンス
-
サーバーからクライアントへの通知
注意:
Oracle Database Advanced Queuingインターネット・アクセスは、8.1以上の形式のキューのみに対してサポートされています。
シャード・キューはSOAPを介したインターネット・アクセスをサポートしていません。
この項の内容は次のとおりです。
IDAPクライアントのエンキュー・リクエスト
クライアントは、リクエストの送信およびパブリッシュについて、シングル・コンシューマ・キューへのエンキューにはAQXmlSend
、マルチ・コンシューマ・キュー/トピックへのエンキューにはAQXmlPublish
を使用します。
AQXmlSend
およびAQXmlPublish
には、次の要素が含まれています。
producer_options
これは必須要素です。次の子要素が含まれます。
-
destination
この要素は必須です。メッセージの送信先キューまたはトピックを指定します。送信先の値の解析方法を決定する、オプションの
lookup_type
属性を持ちます。lookup_typeがDATABASE
の場合(デフォルト)、送信先はschema.queue_name
として解析されます。lookup_type
がLDAP
の場合、送信先の解決にLDAPサーバーが使用されます。 -
この要素は省略可能です。エンキューがいつ可視になるかを決定します。デフォルトは
ON_COMMIT
で、現行のトランザクションがコミットするとエンキューが可視になります。IMMEDIATE
が指定されると、エンキューの状態は、リクエスト完了直後に可視になります。エンキューは現行のトランザクションの一部ではありません。操作がそれ自体でトランザクションを形成します。 -
transformation
この要素は省略可能です。メッセージをエンキューする前に、PL/SQL変換を開始するように指定します。
message_set
これは必須要素で、1つ以上のメッセージが含まれます。各メッセージはmessage_headerおよびmessage_payloadで構成されます。
message_header
この要素は省略可能です。次の子要素が含まれます。
-
sender_id
message_header
要素が含まれている場合は、アプリケーション固有の識別子を指定するsender_id
要素を含める必要があります。sender_id
要素には、agent_name
、address
、protocol
およびagent_alias
の各要素を含めることができます。agent_alias
要素は、LDAPを使用して名前、アドレスおよびプロトコルを解決します。 -
message_id
この要素は省略可能です。デキュー時に提供されるメッセージの一意の識別子です。
-
correlation
この要素は省略可能です。メッセージの相関識別子です。
-
delay
この要素は省略可能です。メッセージが処理可能になるまでの期間(秒)を指定します。
-
expiration
この要素は省略可能です。メッセージがデキュー可能な期間(秒)を指定します。このパラメータは、遅延からのオフセットです。デフォルトでは、メッセージは期限切れになりません。期限切れになる前にデキューされない場合、メッセージは
EXPIRED
状態で例外キューに移されます。 -
priority
この要素は省略可能です。メッセージの優先度を指定します。優先度は、負数も含めたあらゆる数値で指定できます。数値が小さいほど高い優先度を示します。
-
recipient_list
この要素は省略可能です。デフォルトのサブスクライバ・リストに優先する受信者のリストです。各受信者は
recipient_list
でrecipient
要素として表現され、これにはagent_name
、address
、protocol
およびagent_alias
要素を含めることができます。agent_alias
要素は、LDAPを使用して名前、アドレスおよびプロトコルを解決します。 -
message_state
この要素は省略可能です。メッセージの状態を指定します。デキュー時に自動的に決定されます。
message_state
が0(ゼロ)の場合、メッセージは処理可能な状態です。1の場合、メッセージは遅延の指定秒数に達していません。2の場合、メッセージは処理され、保存されています。3の場合は、メッセージが例外キューに移動されたことを示します。 -
exception_queue
この要素は省略可能です。デキューが
max_retries
以内の回数で成功しなかった場合、またはメッセージの有効期限が切れた場合、メッセージの移動先キューの名前を指定します。例外キューのメッセージはすべてEXPIRED
状態です。指定した例外キューが移動時に存在しない場合、そのメッセージは、キュー表に関連付けられているデフォルトの例外キューに移動され、アラート・ログに警告ログが記録されます。デフォルトの例外キューが使用されると、デキュー時にパラメータが
NULL
値を戻します。
message_payload
これは必須要素です。送信先キューまたはトピックのペイロード型により、異なる要素が含まれます。様々なペイロード型については、「IDAPクライアントのデキュー・リクエスト」で説明しています。
AQXmlCommit
これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。
関連項目:
IDAPメッセージ・ペイロードの説明は、「インターネット・メッセージ・ペイロード」を参照してください。
IDAPクライアントのデキュー・リクエスト
クライアントのデキュー・リクエストでは、次の要素を含むAQXmlReceive
を使用します。
consumer_options
これは必須要素です。次の子要素が含まれます。
-
destination
この要素は必須です。メッセージの受信先キューまたはトピックを指定します。
destination
要素は、送信先の値の解析方法を決定する、オプションのlookup_type
属性を持ちます。lookup_typeがDATABASE
の場合(デフォルト)、送信先はschema.queue_name
として解析されます。lookup_type
がLDAP
の場合、送信先の解決にLDAPサーバーが使用されます。 -
consumer_name
この要素は省略可能です。コンシューマの名前を指定します。コンシューマ名が一致するメッセージのみアクセスされます。キューがマルチ・コンシューマ用に設定されていない場合、このフィールドは指定しないでください。
-
wait_time
この要素は省略可能です。検索基準に一致するメッセージが存在していない場合の待機秒数を指定します。
-
selector
この要素は省略可能です。メッセージの選択に使用する基準を指定します。子要素
correlation
、message_id
またはcondition
を含められます。デキューの
condition
要素は、SQL問合せのWHERE
句に類似した構文を使用するブール式で指定します。このブール式には、メッセージ・プロパティ、ユーザー・オブジェクトのペイロード・データ・プロパティおよびPL/SQLまたはSQL関数に関する条件を含めることができます。メッセージ・プロパティには、priority
、corrid
およびキュー表内の他の列を含めることができます。メッセージ・ペイロードにデキュー条件を指定するには、句にオブジェクト型の属性を使用します。各属性には、ペイロードを格納するキュー表の特定の列を示す識別子として、接頭辞
tab
.user_data
が必要です。デキューの
condition
要素は4000文字以内です。注意:
デキュー条件または相関識別子を使用すると、メッセージのデキュー順序が不定になり、キューのソート順序は考慮されません。
-
この要素は省略可能です。デキューがいつ可視になるかを決定します。デフォルトは
ON_COMMIT
で、現行のトランザクションがコミットするとデキューが可視になります。IMMEDIATE
が指定されると、デキューの状態は、リクエスト完了直後に可視になります。デキューは現行のトランザクションの一部ではありません。操作がそれ自体でトランザクションを形成します。 -
dequeue_mode
この要素は省略可能です。デキューに対応付けられたロック動作を指定します。可能な値は、
REMOVE
、BROWSE
、およびLOCKED
です。REMOVE
はデフォルトで、メッセージは読み取られて削除されます。メッセージは保存プロパティに基づいてキュー表に保存されます。BROWSE
を指定すると、メッセージのロックを取得しないで、メッセージを読み取ります。これは、SELECT文と同じです。LOCKED
を指定すると、メッセージを読み取って書込みロックを取得します。ロックは、トランザクションの間、存続します。これはUPDATE文の選択と同じです。 -
navigation_mode
この要素は省略可能です。取り出されるメッセージの位置を指定します。最初に位置が判断されます。次に検索基準が適用されます。最後にメッセージが取り出されます。可能な値は、
FIRST_MESSAGE
、NEXT_MESSAGE
およびNEXT_TRANSACTION
です。FIRST_MESSAGE
は、使用可能で検索基準と一致する最初のメッセージを取り出します。これにより、位置はキューの先頭にリセットされます。NEXT_MESSAGE
はデフォルトで、使用可能で検索基準と一致する次のメッセージを取り出します。前のメッセージがメッセージ・グループに属する場合は、Oracle Database Advanced Queuingにより、検索基準に一致し、メッセージ・グループに属する次の使用可能なメッセージが取り出されます。NEXT_TRANSACTION
によって、現行のトランザクション・グループの残りのメッセージがスキップされ、次のトランザクション・グループの最初のメッセージが取り出されます。このオプションは、現行のキューに対してメッセージをグループ化できる場合のみ使用できます。 -
transformation
この要素は省略可能です。メッセージをデキューした後に、PL/SQL変換を開始するように指定します。
AQXmlCommit
これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。
IDAPクライアントの登録リクエスト
登録のクライアント・リクエストにはAQXmlRegister
が使用され、これにはregister_options
要素が含まれている必要があります。register_options
要素には、次の子要素が含まれます。
-
destination
この要素は必須です。通知の登録先キューまたはトピックを指定します。
destination
要素は、送信先の値の解析方法を決定する、オプションのlookup_type
属性を持ちます。lookup_typeがDATABASE
の場合(デフォルト)、送信先はschema.queue_name
として解析されます。lookup_type
がLDAP
の場合、送信先の解決にLDAPサーバーが使用されます。 -
consumer_name
この要素は省略可能です。マルチ・コンシューマ・キューまたはトピックのコンシューマ名を指定します。シングル・コンシューマ・キューの場合はこのパラメータを指定しないでください。
-
notify_url
この要素は必須です。メッセージがエンキューされたときの通知の送信先を指定します。書式は
http://
url
、mailto://
email address
またはplsql://
pl/sql procedure
を使用できます。
IDAPクライアントのトランザクション・コミット・リクエスト
セッション中にユーザーが実行するすべてのアクションのコミット・リクエストには、AQXmlCommit
を使用します。
COMMITリクエストのフォーマットは、次のようになります。
<?xml version="1.0"?> <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <AQXmlCommit xmlns="http://ns.oracle.com/AQ/schemas/access"/> </Body> </Envelope>
iDAPクライアントのトランザクション・ロールバック・リクエスト
セッション中にユーザーが実行するすべてのアクションのロールバック・リクエストには、AQXmlRollback
を使用します。可視性をIMMEDIATE
に設定して実行するアクションは、ロールバックされません。
iDAPクライアントのROLLBACKリクエストのフォーマットは次のとおりです。
<?xml version="1.0"?> <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <AQXmlRollback xmlns="http://ns.oracle.com/AQ/schemas/access"/> </Body> </Envelope>
エンキュー・リクエストへのIDAPサーバー・レスポンス
シングル・コンシューマ・キューへのエンキュー・リクエストに対するレスポンスでは、AQXmlSendResponse
を使用します。
次の要素が含まれています。
-
status_response
この要素には、子要素
status_code
、error_code
およびerror_message
が含まれます。status_code
要素は、成功した場合は値0
、失敗した場合は値-1
を取ります。error_code
要素には、Oracleエラー・コードが含まれます。error_message
要素には、エラーの説明が含まれます。 -
send_result
この要素には、子要素
destination
およびmessage_id
が含まれます。destination
要素では、メッセージが送信された場所を指定します。message_id
要素では、送信された各メッセージを一意に識別します。
マルチ・コンシューマ・キューまたはトピックへのエンキュー・リクエストに対するレスポンスでは、AQXmlPublishResponse
を使用します。次の要素が含まれています。
-
status_response
この要素には、子要素
status_code
、error_code
およびerror_message
が含まれます。status_code
要素は、成功した場合は値0
、失敗した場合は値-1
を取ります。error_code
要素には、Oracleエラー・コードが含まれます。error_message
要素には、エラーの説明が含まれます。 -
publish_result
この要素には、子要素
destination
およびmessage_id
が含まれます。destination
要素では、メッセージが送信された場所を指定します。message_id
要素では、送信された各メッセージを一意に識別します。
デキュー・リクエストへのIDAPサーバー・レスポンス
デキュー・リクエストに対するレスポンスでは、AQXmlReceiveResponse
を使用します。
次の要素が含まれています。
-
status_response
この要素には、子要素
status_code
、error_code
およびerror_message
が含まれます。status_code
要素は、成功した場合は値0
、失敗した場合は値-1
を取ります。error_code
要素には、Oracleエラー・コードが含まれます。error_message
要素には、エラーの説明が含まれます。 -
receive_result
この要素には、子要素
destination
およびmessage_set
が含まれます。destination
要素では、メッセージが送信された場所を指定します。message_set
要素では、デキューされたメッセージのセットを指定します。
登録リクエストへのIDAPサーバー・レスポンス
登録リクエストに対するレスポンスでは、AQXmlRegisterResponse
を使用します。
これには、「デキュー・リクエストへのIDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
IDAPコミット・レスポンス
コミット・リクエストに対するレスポンスでは、AQXmlCommitResponse
を使用します。
これには、「デキュー・リクエストへのIDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。コミット・リクエストに対するレスポンスは、次のような書式になります。
<?xml version = '1.0'?> <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"> <Body> <AQXmlCommitResponse xmlns="http://ns.oracle.com/AQ/schemas/access"> <status_response> <status_code>0</status_code> </status_response> </AQXmlCommitResponse> </Body> </Envelope>
IDAPロールバック・レスポンス
ロールバック・リクエストに対するレスポンスでは、AQXmlRollbackResponse
を使用します。
これには、「デキュー・リクエストへのIDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
IDAP通知
クライアントが登録したイベントが発生した場合、REGISTER
リクエストで指定したURLにAQXmlNotification
を使用してクライアントへの通知が送信されます。
次の要素が含まれています。
-
notification_options
この要素には、子要素
destination
およびconsumer_name
があります。destination
要素では、イベントが発生した送信先キューまたはトピックを指定します。consumer_name要素では、イベントが発生したコンシューマ名を指定します。マルチ・コンシューマ・キューまたはトピックにのみ適用されます。 -
message_set
この要素ではメッセージ・プロパティのセットを指定します。
エラー発生時のIDAPレスポンス
前述のいずれかのリクエストでエラーが発生した場合、FAULT
要素が生成されます。
FAULT
要素には、次の要素が含まれます。
-
faultcode
この要素では、失敗を示すエラー・コードを指定します。
-
faultstring
この要素は、クライアント・エラーまたはサーバー・エラーを示します。クライアント・エラーは、リクエストが無効であることを示します。サーバー・エラーは、Oracle Database Advanced Queuingサーブレットが正しく設定されていないことを示します。
-
detail
この要素には、「デキュー・リクエストへのIDAPサーバー・レスポンス」で説明した
status_response
要素が含まれます。
電子メールによるメッセージの通知
ここでは、データベースの電子メール通知の設定ステップを説明します。
- Oracle Database Advanced Queuing管理者として
DBMS_AQELM.SET_MAILHOST
を起動し、SMTPメール・ホストを設定します。 - Oracle Database Advanced Queuing管理者として
DBMS_AQELM.SET_MAILPORT
を起動し、SMTPメール・ポートを設定します。特別な場合を除き、デフォルトの25に設定します。 DBMS_AQELM.SET_SENDFROM
を起動してSendFromアドレスを設定します。- 設定後、Oracle Call Interface(OCI)またはPL/SQL APIを使用することで、電子メール通知の登録ができます。