インターネット上でSimple Object Access Protocol(SOAP)を使用してOracle Streams Advanced Queuing(AQ)にアクセスできます。Internet Data Access Presentation(iDAP)は、Oracle Streams AQ操作のためのSOAP仕様です。iDAPは、SOAPリクエストの本体に対してXMLメッセージ構造を定義します。iDAP構造のメッセージは、インターネット上でHTTPを使用して転送されます。
ユーザーは、iDAPインタフェースを使用して通知に登録できます。
内容は次のとおりです。
関連項目:
|
内容は次のとおりです。
図6-1は、HTTP上でOracle Streams AQ操作を実行するためのアーキテクチャを示しています。主要コンポーネントは次のとおりです。
Oracle Streams AQクライアント・プログラム
Oracle Streams AQサーブレットのホストWebサーバー/サーブレット・コンテナ
Oracle Databaseサーバー
Webブラウザまたは他の任意のHTTPクライアントをOracle Streams AQクライアント・プログラムとして使用し、Oracle Streams AQサーブレットにiDAP準拠のXMLメッセージを送信できます。Oracle Streams AQサーブレットは、着信XMLメッセージを解析します。Oracle Streams AQサーブレットはOracle Databaseサーバーに接続し、ユーザー・キューに対して操作を実行します。
Oracle Streams AQは、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 AQサーブレットにPOST
リクエストを送信するすべてのユーザーを認証するようにWebサーバーを構成する必要があります。Oracle Streams AQサーブレットは、認証されたユーザーのみにサーブレットへのアクセスを許可します。ユーザーが認証されていない場合、サーブレットからエラーが戻ります。
Webサーバーを構成してアクセスを制限するには、複数の方法があります。一般的な方法は、Secure Sockets Layer(SSL)上でBasic認証(ユーザー名およびパスワード)を行う方法およびクライアント証明書を使用する方法です。サーブレットへのアクセスを制限する方法については、Webサーバーのドキュメントを参照してください。
Oracle Streams AQサーブレットのコンテキストでは、Webサーバーへの接続に使用されるユーザー名は、Oracle Streams AQのHTTPエージェントまたはOracle Streams AQのインターネット・ユーザーとして認識されます。
Oracle Streams AQクライアントは、サーバーへの接続をオープンし、HTTPを使用してOracle Streams AQサーブレットに対するリクエストを開始します。クライアントは、HTTPのBasic認証(SSLを使用する場合も使用しない場合も含む)またはSSL証明書ベースのクライアント認証を使用してサーバーにログインします。クライアントが、SEND、PUBLISH、RECEIVEまたはREGISTERリクエストを表すXMLメッセージを構成します。
リモート・サーバーで、クライアントがサーブレットにHTTPのPOST
リクエストを送信します。
クライアントが認証され、Oracle Streams AQサーブレットに接続すると、ユーザーのかわりにHTTPセッションが作成されます。そのセッションで初めてリクエストを行うと、新しいデータベース・トランザクションが暗黙的に開始します。このトランザクションは、明示的にコミットまたは終了するまでオープン状態のままになります。サーブレットからのレスポンスには、HTTPヘッダーにセッションIDがCookieとして含まれます。
クライアントが同一のトランザクションで作業を継続する場合、後続のリクエストにはセッションIDのCookieを含むこのHTTPヘッダーを含める必要があります。これは、ほとんどのWebブラウザで自動的に行われます。ただし、クライアントがJavaまたはCのクライアントを使用してリクエストを転送する場合、プログラムで行う必要があります。
トランザクションを終了するには、明示的なコミットまたはロールバックを適用する必要があります。COMMITまたはROLLBACKリクエストは、他のOracle Streams AQ操作の一部に組み込むこともできます。
サーバーは、クライアントのHTTP(S)接続を受け入れて、クライアントにより指定されたユーザー(Oracle Streams AQエージェント)を認証します。サーバーはPOST
リクエストを受信して、Oracle Streams AQサーブレットを起動します。
このリクエストがこのクライアントからの最初のリクエストである場合、新しいHTTPセッションが作成されます。XMLメッセージが解析され、メッセージの内容が検証されます。HTTPヘッダーにクライアントによってセッションIDが渡される場合、この操作はそのセッションのコンテキストで実行されます。
サーブレットが、エージェントが操作を実行しようとしているオブジェクト(キューおよびトピック)を判断します。サーブレットが、このOracle Streams AQエージェントにマップするデータベース・ユーザーのリスト全体を検索します。いずれかのユーザーがリクエストに指定されたキュー/トピックへのアクセス権限を取得している場合、Oracle Streams AQサーブレットのスーパーユーザーは、このユーザーのためにセッションを作成します。
HTTPセッションにアクティブなトランザクションが存在しない場合は、新しいデータベース・トランザクションが開始されます。明示的なCOMMIT
またはROLLBACK
リクエストが行われるまで、セッションの後続のリクエストは同じトランザクションの一部になります。トランザクションは、そのトランザクションがコミットされるまで反映されません。トランザクションがアクティブでない状態が120秒間続くと、そのトランザクションは自動的に終了します。
要求された操作が実行されます。レスポンスがXMLメッセージとしてフォーマットされ、クライアントに戻されます。レスポンスには、セッションIDがCookieとしてHTTPヘッダーに含まれます。
Oracle Net ServicesではなくHTTPおよびHTTPS(SSLによるHTTP)上で伝播できます。HTTPは、Oracle Net Servicesとは異なり、ファイアウォールを簡単に構成できます。図6-2に示すように、伝播を行うバックグラウンド・プロセスがOracle Streams AQサーブレットにメッセージを転送し、そのサーブレットが接続先データベースにメッセージをエンキューします。
既存のコードを変更せずに、アプリケーションがHTTPでのOracle Streams AQ伝播を使用するように設定できます。HTTPでのOracle Streams AQ伝播を使用するアプリケーションは、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 AQ操作はiDAP名前空間で有効です。
送信者は、SOAP本体のiDAP要素および属性に名前空間を含めます。
受信者は、適切な名前空間を含むSOAPメッセージを処理し、不適切な名前空間を含むリクエストの場合はリクエストが無効であるというエラーを戻します。
SOAP名前空間の値はhttp://schemas.xmlsoap.org/soap/envelope/
です。
iDAP名前空間の値はhttp://ns.oracle.com/AQ/schemas/access
です。
SOAPは、次のようにメッセージ・リクエストまたはレスポンスを構造化します。
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 AQ XMLクライアント・リクエストのいずれかです。
レスポンスは、戻り値、またはクライアントに戻されるエラーまたは例外です。
受信サイトでは、リクエストの結果は次のいずれかになります。
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できます。この場合、HTTPインフラストラクチャはSOAPインフラストラクチャにヘッダーおよび本体を渡します。
受信サイトのHTTPインフラストラクチャが、リクエストを受信および処理できません。この場合、HTTPレスポンスには状態フィールドにHTTPエラーが含まれ、XMLの本体は含まれません。
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できます。この場合、メソッド・リクエストの結果はレスポンスまたはエラーで構成されます。
受信サイトのSOAPインフラストラクチャが、入力パラメータをデコードし、サーバー・アドレスで示される適切なサーバーにディスパッチし、メソッド・リクエストに示されているインタフェースまたはメソッドに意味的に対応するアプリケーション・レベルのファンクションを起動できません。この場合、メソッドの結果はエラーになり、受信側でのインフラストラクチャのディスパッチを正常終了させることができません。
最後の2つのケースの場合は、拡張性の目的で追加のメッセージ・ヘッダーをリクエストの結果に表示できます。
SOAPメッセージの本体は、iDAPメッセージです。このXML文書の名前空間は、http://ns.oracle.com/AQ/schemas/access
となります。本体は次の内容を表しています。
クライアントのエンキュー、デキューおよび登録リクエスト
クライアントのエンキュー、デキューおよび登録リクエストに対するサーバーのレスポンス
サーバーからクライアントへの通知
注意: Oracle Streams AQインターネット・アクセスは、8.1以上の形式のキューのみに対してサポートされています。 |
内容は次のとおりです。
クライアントは、リクエストの送信およびパブリッシュについて、シングル・コンシューマ・キューへのエンキューにはAQXmlSend
、マルチ・コンシューマ・キュー/トピックへのエンキューにはAQXmlPublish
を使用します。
AQXmlSend
およびAQXmlPublish
には、次の要素が含まれています。
producer_options
これは必須要素です。この要素には、次の子要素が含まれています。
宛先
これは必須要素です。メッセージを送信するキュー/トピックを指定します。この要素には、宛先値の解析方法を決定するオプションのlookup_type
属性が含まれます。lookup_typeがデフォルトであるDATABASE
の場合、宛先はschema.queue_name
と解析されます。lookup_type
がLDAP
の場合は、LDAPサーバーを使用して宛先が解決されます。
この要素はオプションです。エンキューが参照可能になる時期を決定します。デフォルトはON_COMMIT
で、エンキューは現行のトランザクションのコミット時に参照可能になります。IMMEDIATE
を指定すると、リクエストの完了直後にエンキューの効果が参照可能になります。エンキューは、現行のトランザクションの一部になりません。その操作のみで1つのトランザクションを構成します。
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
を指定すると、リクエストの完了直後にデキューの効果が参照可能になります。デキューは、現行のトランザクションの一部になりません。その操作のみで1つのトランザクションを構成します。
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 AQは、そのメッセージ・グループに属すメッセージの中から、検索基準に一致する次の使用可能なメッセージを取り出します。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
要素が含まれます。COMMITリクエストへのレスポンスのフォーマットは、次のようになります。
<?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 AQサーブレットが正しく設定されていないことを示します。
detail
この要素には、「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response
要素が含まれます。
ここでは、データベースの電子メール通知の設定手順を説明します。
Oracle Streams AQ管理者としてDBMS_AQELM.SET_MAILHOST
を起動し、SMTPメール・ホストを設定します。
Oracle Streams AQ管理者としてDBMS_AQELM.SET_MAILPORT
を起動し、SMTPメール・ポートを設定します。特別な場合を除き、デフォルトの25に設定します。
DBMS_AQELM.SET_SENDFROM
を起動してSendFromアドレスを設定します。
設定後、Oracle Call Interface(OCI)またはPL/SQL APIを使用することで、電子メール通知の登録ができます。