インターネット上でSimple Object Access Protocol(SOAP)を使用してOracle Streams Advanced Queuing(AQ)にアクセスできます。Internet Data Access Presentation(iDAP)は、Oracle Streams Advanced Queuing操作のためのSOAP仕様です。iDAPは、SOAPリクエストの本体に対してXMLメッセージ構造を定義します。iDAP構造のメッセージは、インターネット上でHTTPを使用して転送されます。
ユーザーは、iDAPインタフェースを使用して通知に登録できます。
内容は次のとおりです。
関連項目:
|
この項の内容は次のとおりです。
図6-1は、HTTP上でOracle Streams Advanced Queuing操作を実行するためのアーキテクチャを示しています。主要コンポーネントは次のとおりです。
Oracle Streams Advanced Queuingクライアント・プログラム
Oracle Streams Advanced QueuingサーブレットのホストWebサーバー/サーブレット・コンテナ
Oracle Databaseサーバー
Webブラウザまたはその他の任意のHTTPクライアントを、Oracle Streams Advanced Queuingのクライアント・プログラムとして使用できます。これらは、XMLメッセージ(IDAP準拠)をOracle Streams Advanced Queuingサーブレットに送信し、サーブレットによって受信XMLメッセージが解析されます。Oracle Streams Advanced Queuingサーブレットは、Oracle Databaseサーバーに接続し、ユーザー・キューに対して操作を実行します。
図6-1 HTTPを使用してOracle Streams Advanced Queuing操作を実行するためのアーキテクチャ
Oracle Streams Advanced Queuingは、RAW、OracleオブジェクトおよびJava Message Service(JMS)の3つのメッセージ型をサポートしています。これらのメッセージ型はすべて、SOAPおよびWebサービスを使用してアクセスできます。キューにRAW、OracleオブジェクトまたはJMSフォーマットのメッセージが含まれる場合、XMLのペイロードはエンキュー中に適切な内部フォーマットに変換され、キューに格納されます。デキュー中、前述のいずれかのフォーマットのメッセージを含むキューからメッセージが取得された場合、そのメッセージはクライアントに送信される前にXMLに変換されます。
メッセージ・ペイロード型は、操作が実行されているキュー・タイプによって異なります。
RAWキューの内容は、バイト列です。XMLメッセージに、次の例のようにメッセージ・ペイロードを16進数で指定する必要があります。例: <raw>023f4523</raw>
JMSキューではない(AQ$_JMS_*
型ではない)Oracleオブジェクト型のキューの場合、ペイロードの型はキューを格納するキュー表の作成時に指定した型によって決まります。XML要素の内容は、キュー表のオブジェクト型の属性にマップする必要があります。
JMS型のキュー(ペイロード型がAQ$_JMS_*
のキュー)の場合、JMS型に応じて4つのXML要素があります。iDAPでは、次のJMS型のキューまたはトピックがサポートされています。
TextMessage
MapMessage
BytesMessage
ObjectMessage
iDAPでは、ペイロード型StreamMessage
のJMSキューはサポートされていません。
サーブレットのインストール後、Oracle Streams Advanced QueuingサーブレットにPOST
リクエストを送信するすべてのユーザーを認証するようにWebサーバーを構成する必要があります。Oracle Streams Advanced Queuingサーブレットは、認証されたユーザーのみにサーブレットへのアクセスを許可します。ユーザーが認証されていない場合、サーブレットからエラーが戻ります。
Webサーバーを構成してアクセスを制限するには、複数の方法があります。一般的な方法は、Secure Sockets Layer(SSL)上でBasic認証(ユーザー名およびパスワード)を行う方法およびクライアント証明書を使用する方法です。サーブレットへのアクセスを制限する方法については、Webサーバーのドキュメントを参照してください。
Oracle Streams Advanced Queuingサーブレットのコンテキストでは、Webサーバーへの接続に使用されるユーザー名は、Oracle Streams Advanced QueuingのHTTPエージェントまたはOracle Streams Advanced Queuingのインターネット・ユーザーとして認識されます。
Oracle Streams Advanced Queuingクライアントは、サーバーへの接続をオープンし、HTTPを使用してOracle Streams Advanced Queuingサーブレットに対するリクエストを開始します。クライアントは、HTTPのBasic認証(SSLを使用する場合も使用しない場合も含む)またはSSL証明書ベースのクライアント認証を使用してサーバーにログインします。クライアントが、SEND、PUBLISH、RECEIVEまたはREGISTERリクエストを表すXMLメッセージを構成します。
リモート・サーバーで、クライアントがサーブレットにHTTPのPOST
リクエストを送信します。
クライアントが認証され、Oracle Streams Advanced Queuingサーブレットに接続すると、ユーザーのかわりにHTTPセッションが作成されます。そのセッションで初めてリクエストを行うと、新しいデータベース・トランザクションが暗黙的に開始します。このトランザクションは、明示的にコミットまたは終了するまでオープン状態のままになります。サーブレットからのレスポンスには、HTTPヘッダーにセッションIDがCookieとして含まれます。
クライアントが同一のトランザクションで作業を継続する場合、後続のリクエストにはセッションIDのCookieを含むこのHTTPヘッダーを含める必要があります。これは、ほとんどのWebブラウザで自動的に行われます。ただし、クライアントがJavaまたはCのクライアントを使用してリクエストを転送する場合、プログラムで行う必要があります。
関連項目: 同じセッションの一部としてリクエストを転送するためのJavaプログラムを示すAQ XMLのデモの位置は、表1-3「Oracle Streams Advanced Queuing XMLデモ」を参照してください。 |
トランザクションを終了するには、明示的なコミットまたはロールバックを適用する必要があります。COMMITまたはROLLBACKリクエストは、他のOracle Streams Advanced Queuing操作の一部に組み込むこともできます。
サーバーは、クライアントのHTTP(S)接続を受け入れて、クライアントにより指定されたユーザー(Oracle Streams Advanced Queuingエージェント)を認証します。サーバーはPOST
リクエストを受信して、Oracle Streams Advanced Queuingサーブレットを起動します。
このリクエストがこのクライアントからの最初のリクエストである場合、新しいHTTPセッションが作成されます。XMLメッセージが解析され、メッセージの内容が検証されます。HTTPヘッダーにクライアントによってセッションIDが渡される場合、この操作はそのセッションのコンテキストで実行されます。
サーブレットが、エージェントが操作を実行しようとしているオブジェクト(キューおよびトピック)を判断します。サーブレットが、このOracle Streams Advanced Queuingエージェントにマップするデータベース・ユーザーのリスト全体を検索します。いずれかのユーザーがリクエストに指定されたキュー/トピックへのアクセス権限を取得している場合、Oracle Streams Advanced Queuingサーブレットのスーパーユーザーは、このユーザーのためにセッションを作成します。
HTTPセッションにアクティブなトランザクションが存在しない場合は、新しいデータベース・トランザクションが開始されます。明示的なCOMMIT
またはROLLBACK
リクエストが行われるまで、セッションの後続のリクエストは同じトランザクションの一部になります。トランザクションは、そのトランザクションがコミットされるまで反映されません。トランザクションがアクティブでない状態が120秒間続くと、そのトランザクションは自動的に終了します。
要求された操作が実行されます。レスポンスがXMLメッセージとしてフォーマットされ、クライアントに戻されます。レスポンスには、セッションIDがCookieとしてHTTPヘッダーに含まれます。
Oracle Net ServicesではなくHTTPおよびHTTPS(SSLによるHTTP)上で伝播できます。HTTPは、Oracle Net Servicesとは異なり、ファイアウォールを簡単に構成できます。図6-2に示すように、伝播を行うバックグラウンド・プロセスがOracle Streams Advanced Queuingサーブレットにメッセージを転送し、そのサーブレットが接続先データベースにメッセージをエンキューします。
既存のコードを変更せずに、アプリケーションがHTTPでのOracle Streams Advanced Queuing伝播を使用するように設定できます。HTTPでのOracle Streams Advanced Queuing伝播を使用するアプリケーションは、Oracle Net Services接続文字列を使用してデータベース・リンクを再作成するのみで、その他を変更しないで再びOracle Net Servicesでの伝播に容易に戻すことができます。
OC4Jを使用してAQ XMLサーブレットをデプロイする手順は、次のとおりです。
JDK 1.2.xまたはJDK 1.3.xの場合は、CLASSPATH
に次のように挿入します。
ORACLE_HOME/jdbc/lib/classes12.zip ORACLE_HOME/jdbc/lib/nls_charset12.zip ORACLE_HOME/jlib/javax-ssl-1_1.jar ORACLE_HOME/jlib/jndi.jar ORACLE_HOME/jlib/jssl-1_1.jar ORACLE_HOME/jlib/jta.jar ORACLE_HOME/jlib/orai18n.jar ORACLE_HOME/jlib/orai18n-collation.jar ORACLE_HOME/jlib/orai18n-mapping.jar ORACLE_HOME/jlib/orai18n-utility.jar ORACLE_HOME/lib/http_client.jar ORACLE_HOME/lib/lclasses12.zip ORACLE_HOME/lib/servlet.jar ORACLE_HOME/lib/xmlparserv2.jar ORACLE_HOME/lib/xschema.jar ORACLE_HOME/lib/xsu12.jar ORACLE_HOME/rdbms/jlib/aqapi.jar ORACLE_HOME/rdbms/jlib/aqxml.jar ORACLE_HOME/rdbms/jlib/jmscommon.jar ORACLE_HOME/rdbms/jlib/xdb.jar ORACLE_HOME/rdbms/jlib/xsu12.jar
JDK 1.4.xの場合は、CLASSPATH
に次のように挿入します。
ORACLE_HOME/jdbc/lib/ojdbc14.jar ORACLE_HOME/jlib/javax-ssl-1_1.jar ORACLE_HOME/jlib/jndi.jar ORACLE_HOME/jlib/jssl-1_1.jar ORACLE_HOME/jlib/jta.jar ORACLE_HOME/jlib/orai18n.jar ORACLE_HOME/jlib/orai18n-collation.jar ORACLE_HOME/jlib/orai18n-mapping.jar ORACLE_HOME/jlib/orai18n-utility.jar ORACLE_HOME/lib/http_client.jar ORACLE_HOME/lib/lclasses12.zip ORACLE_HOME/lib/servlet.jar ORACLE_HOME/lib/xmlparserv2.jar ORACLE_HOME/lib/xschema.jar ORACLE_HOME/lib/xsu12.jar ORACLE_HOME/rdbms/jlib/aqapi.jar ORACLE_HOME/rdbms/jlib/aqxml.jar ORACLE_HOME/rdbms/jlib/jmscommon.jar ORACLE_HOME/rdbms/jlib/xdb.jar
注意: AQHttp.java およびAQHttpRq.java で使用されるHTTPClient には、http_client.jar 、jssl-1_1.jar およびjavax-ssl-1_1.jar が必須です。 |
次のように入力してAQHttpRq.java
をコンパイルします。
cd ORACLE_HOME/rdbms/demo
javac AQHttpRq.java AQHttp.java
次のデータベース初期化パラメータを指定の値に設定します。
job_queue_processes=2 compatible=10.2.0
データベースとリスナーを再起動します。
キューを設定してユーザーを制限付きアクセスについて認証します。
関連項目: 詳細は、ORACLE_HOME /rdbms/demo にあるaqxmlREADME.txt およびaqxmldmo.sql を参照してください。 |
サーブレットをデプロイしてOC4Jインスタンスを起動します。
cd ORACLE_HOME/bin
sh aqxmlctl deploy
sh aqxmlctl start
注意: OC4Jインスタンスの停止にはsh aqxmlctl stop を使用します。サーブレットをデプロイしてOC4Jインスタンスを起動する手順は、Oracle Databaseのインストール中に実行されている場合があります。これは、次の手順で確認できます。 |
次のファイルで、サーブレットのステータスと、サーブレットのデプロイに使用されたプロトコルとポート番号の情報を確認します。
ORACLE_HOME/rdbms/demo/aqxml.ini ORACLE_HOME/oc4j/j2ee/OC4J_AQ/config/rmi.xml ORACLE_HOME/oc4j/j2ee/OC4J_AQ/config/http-web-site.xml
Webブラウザで次のURLを入力します。
https://hostname:portnumber/aqserv/servlet/AQDemoServlet
hostname
はサーバー名、portnumber
は前述の手順で検出された値です。ユーザー名とパスワードを求めるプロンプトに応答すると、サーブレットに次のように表示されます。
Sample AQ Servlet AQxmlServlet is working!
SSL証明書を作成してキーストアを生成します。次のファイルに例が用意されています。
ORACLE_HOME/rdbms/demo/aqxmloc4j.cert ORACLE_HOME/rdbms/demo/keystore
ORACLE_HOME
/oc4j/j2ee/OC4J_AQ/config/http-web-site.xml
に示される次のタグは、Webサイトがセキュアで、SSL認証にキーストアが使用されることを示しています。
<web-site port="443" secure="true">
....
<ssl-config
keystore="ORACLE_HOME/oc4j/j2ee/home/keystore"
keystore-password="welcome" />
</web-site>
サイトからHTTPリクエストにのみアクセスするには、http-web-site.xml>
からsecure="true"
および<ssl-config>
を削除します。
AQ XMLサーブレットを停止し、再起動します。
sh aqxmlctl stop sh aqxmlctl start
Internet Data Access Presentation(iDAP)は、Content-Typeヘッダーのtext/xml
を使用して、SOAPリクエストの本体を指定します。XMLでは、iDAPリクエストおよびレスポンス・メッセージは、次のように表現されます。
すべてのリクエスト・タグおよびレスポンス・タグは、SOAP名前空間で有効です。
Oracle Streams Advanced Queuing操作はiDAP名前空間で有効です。
送信者は、SOAP本体のiDAP要素および属性に名前空間を含めます。
受信者は、適切な名前空間を含むSOAPメッセージを処理し、不適切な名前空間を含むリクエストの場合はリクエストが無効であるというエラーを戻します。
SOAP名前空間の値はhttp://schemas.xmlsoap.org/soap/envelope/
です。
iDAP名前空間の値はhttp://ns.oracle.com/AQ/schemas/access
です。
SOAPは、次のようにメッセージ・リクエストまたはレスポンスを構造化します。
これは、XMLツリーのルートまたは最上位要素です。タグはSOAP:Envelope
です。SOAPは、グローバル属性SOAP:encodingStyle
を定義し、これはSOAP仕様によって記述されるルールのかわりに使用されるシリアライズ・ルールを示します。この属性は、任意の要素で使用でき、この要素と、このような要素が含まれていないすべての子要素で有効です。この属性が省略されている場合、親要素によってオーバーライドされた場合を除き、型の指定に従うことを示します。
名前空間で修飾されている場合、SOAPエンベロープには名前空間宣言およびその他の属性も含まれます。本体には、名前空間で修飾された他のサブ要素を続けることができます。
SOAPヘッダーは、ルート下の最初の要素です。タグはSOAP:Header
です。SOAPヘッダーは、トランザクションIDなどの必要な情報を渡します。ヘッダーは、SOAP:Envelope
というXML要素の子としてエンコードされます。ヘッダーは名前要素で識別され、名前空間で修飾されます。ヘッダー・エントリは、埋込み要素としてエンコードされます。
メソッドの起動は、リクエストのヘッダーおよび本体を作成し、戻されたレスポンスのヘッダーおよび本体を処理することによって実行されます。リクエストおよびレスポンスのヘッダーは、標準の転送プロトコル固有のヘッダーおよび拡張ヘッダーで構成されます。
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 Streams Advanced QueuingのXMLクライアント・リクエストの1つに含められます。
レスポンスは、戻り値、またはクライアントに戻されるエラーまたは例外です。
受信サイトでは、リクエストの結果は次のいずれかになります。
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できます。この場合、HTTPインフラストラクチャはSOAPインフラストラクチャにヘッダーおよび本体を渡します。
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できません。この場合、HTTPレスポンスには状態フィールドにHTTPエラーが含まれ、XMLの本体は含まれません。
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できます。この場合、メソッド・リクエストの結果はレスポンスまたはエラーで構成されます。
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているインタフェースまたはメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できません。この場合、メソッドの結果はエラーになり、受信側でのインフラストラクチャのディスパッチを正常終了させることができません。
最後の2つのケースの場合は、拡張性の目的で追加のメッセージ・ヘッダーをリクエストの結果に表示できます。
SOAPメッセージの本体は、iDAPメッセージです。このXML文書の名前空間は、http://ns.oracle.com/AQ/schemas/access
となります。本体は次の内容を表しています。
クライアントのエンキュー、デキューおよび登録リクエストに対するサーバーのレスポンス
サーバーからクライアントへの通知
注意: Oracle Streams Advanced Queuingインターネット・アクセスは、8.1以上の形式のキューのみに対してサポートされています。 |
この項の内容は次のとおりです。
クライアントは、リクエストの送信およびパブリッシュについて、シングル・コンシューマ・キューへのエンキューには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
これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。
クライアントのデキュー・リクエストでは、次の要素を含む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
はデフォルトで、メッセージは読み取られて削除されます。メッセージは、retentionプロパティに基づいて、キュー表に保存できます。BROWSE
を指定すると、メッセージのロックを取得しないで、メッセージを読み取ります。これは、SELECT文と同じです。LOCKED
を指定すると、メッセージを読み取って書込みロックを取得します。ロックは、トランザクションが継続している間、有効です。これはUPDATE文の選択と同じです。
navigation_mode
この要素はオプションです。取り出されるメッセージの位置を指定します。最初に位置が判断されます。次に検索基準が適用されます。最後にメッセージが取り出されます。可能な値は、FIRST_MESSAGE
、NEXT_MESSAGE
およびNEXT_TRANSACTION
です。
FIRST_MESSAGE
は、使用可能で検索基準と一致する最初のメッセージを取り出します。その結果、位置がキューの先頭にリセットされます。NEXT_MESSAGE
はデフォルトで、使用可能で検索基準と一致する次のメッセージを取り出します。前のメッセージがメッセージ・グループに属する場合は、Oracle Streams Advanced Queuingにより、検索基準に一致し、メッセージ・グループに属する次の使用可能なメッセージが取り出されます。NEXT_TRANSACTION
によって、現行のトランザクション・グループの残りのメッセージがスキップされ、次のトランザクション・グループの最初のメッセージが取り出されます。このオプションは、現行のキューに対してメッセージをグループ化できる場合のみ使用できます。
transformation
この要素はオプションです。メッセージをデキューした後に、PL/SQL変換を開始するように指定します。
AQXmlCommit
これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。
登録のクライアント・リクエストには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
を使用できます。
セッション中にユーザーが実行するすべてのアクションのコミット・リクエストには、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>
セッション中にユーザーが実行するすべてのアクションのロールバック・リクエストには、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>
シングル・コンシューマ・キューへのエンキュー・リクエストに対するレスポンスでは、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
要素では、送信された各メッセージを一意に識別します。
デキュー・リクエストに対するレスポンスでは、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
要素では、デキューされたメッセージのセットを指定します。
登録リクエストに対するレスポンスでは、AQXmlRegisterResponse
を使用します。これには、「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
コミット・リクエストに対するレスポンスでは、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>
ロールバック・リクエストに対するレスポンスでは、AQXmlRollbackResponse
を使用します。これには、「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
クライアントが登録したイベントが発生した場合、REGISTER
リクエストで指定したURLにAQXmlNotification
を使用してクライアントへの通知が送信されます。次の要素が含まれています。
notification_options
この要素には、子要素destination
およびconsumer_name
があります。destination
要素では、イベントが発生した送信先キューまたはトピックを指定します。consumer_name要素では、イベントが発生したコンシューマ名を指定します。マルチ・コンシューマ・キューまたはトピックにのみ適用されます。
message_set
この要素ではメッセージ・プロパティのセットを指定します。
前述のいずれかのリクエストでエラーが発生した場合、FAULT
要素が生成されます。FAULT
要素には、次の要素が含まれます。
faultcode
この要素では、失敗を示すエラー・コードを指定します。
faultstring
この要素は、クライアント・エラーまたはサーバー・エラーを示します。クライアント・エラーは、リクエストが無効であることを示します。サーバー・エラーは、Oracle Streams Advanced Queuingサーブレットが正しく設定されていないことを示します。
detail
この要素には、「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
ここでは、データベースの電子メール通知の設定手順を説明します。
Oracle Streams Advanced Queuing管理者としてDBMS_AQELM.SET_MAILHOST
を起動し、SMTPメール・ホストを設定します。
Oracle Streams Advanced Queuing管理者としてDBMS_AQELM.SET_MAILPORT
を起動し、SMTPメール・ポートを設定します。特別な場合を除き、デフォルトの25に設定します。
DBMS_AQELM.SET_SENDFROM
を起動してSendFromアドレスを設定します。
設定後、Oracle Call Interface(OCI)またはPL/SQL APIを使用することで、電子メール通知の登録ができます。