ヘッダーをスキップ
Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド
11gリリース1(11.1)
E05782-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

6 Oracle Streams AQへのインターネット・アクセス

インターネット上で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インタフェースを使用して通知に登録できます。

内容は次のとおりです。


関連項目:

  • 付録B「SOAPスキーマおよびOracle Streams AQ XMLスキーマ」。この付録は、このマニュアルのHTMLバージョンにのみ記載されています。

  • AQ XMLのデモの位置は、表1-3「Oracle Streams AQ XMLデモ」を参照してください。


6.1 インターネット経由のOracle Streams AQ操作の概要

内容は次のとおりです。

6.1.1 Oracle Streams AQのインターネット操作アーキテクチャ

図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サーバーに接続し、ユーザー・キューに対して操作を実行します。

図6-1 HTTPを使用してOracle Streams AQ操作を実行するためのアーキテクチャ

図adque430.gifの説明が続きます
図adque430.gifの説明

6.1.2 インターネット・メッセージ・ペイロード

Oracle Streams AQは、RAW、OracleオブジェクトおよびJava Message Service(JMS)の3つのメッセージ型をサポートしています。これらのメッセージ型はすべて、SOAPおよびWebサービスを使用してアクセスできます。キューにRAW、OracleオブジェクトまたはJMSフォーマットのメッセージが含まれる場合、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キューはサポートされていません。

6.1.3 POSTリクエストを送信するユーザーを認証するWebサーバーの構成

サーブレットのインストール後、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のインターネット・ユーザーとして認識されます。

6.1.4 HTTPを使用したクライアント・リクエスト

Oracle Streams AQクライアントは、サーバーへの接続をオープンし、HTTPを使用してOracle Streams AQサーブレットに対するリクエストを開始します。クライアントは、HTTPのBasic認証(SSLを使用する場合も使用しない場合も含む)またはSSL証明書ベースのクライアント認証を使用してサーバーにログインします。クライアントが、SEND、PUBLISH、RECEIVEまたはREGISTERリクエストを表すXMLメッセージを構成します。

リモート・サーバーで、クライアントがサーブレットにHTTPのPOSTリクエストを送信します。


関連項目:

HTTPを使用したPOSTリクエストを示すAQ XMLのデモの位置は、表1-3「Oracle Streams AQ XMLデモ」を参照してください。

6.1.4.1 ユーザー・セッションおよびトランザクション

クライアントが認証され、Oracle Streams AQサーブレットに接続すると、ユーザーのかわりにHTTPセッションが作成されます。そのセッションで初めてリクエストを行うと、新しいデータベース・トランザクションが暗黙的に開始します。このトランザクションは、明示的にコミットまたは終了するまでオープン状態のままになります。サーブレットからのレスポンスには、HTTPヘッダーにセッションIDがCookieとして含まれます。

クライアントが同一のトランザクションで作業を継続する場合、後続のリクエストにはセッションIDのCookieを含むこのHTTPヘッダーを含める必要があります。これは、ほとんどのWebブラウザで自動的に行われます。ただし、クライアントがJavaまたはCのクライアントを使用してリクエストを転送する場合、プログラムで行う必要があります。


関連項目:

同じセッションの一部としてリクエストを転送するためのJavaプログラムを示すAQ XMLのデモの位置は、表1-3「Oracle Streams AQ XMLデモ」を参照してください。

トランザクションを終了するには、明示的なコミットまたはロールバックを適用する必要があります。COMMITまたはROLLBACKリクエストは、他のOracle Streams AQ操作の一部に組み込むこともできます。

6.1.5 HTTPを使用した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ヘッダーに含まれます。

6.1.6 HTTPとHTTPSを使用したOracle Streams AQ伝播

Oracle Net ServicesではなくHTTPおよびHTTPS(SSLによるHTTP)上で伝播できます。HTTPは、Oracle Net Servicesとは異なり、ファイアウォールを簡単に構成できます。図6-2に示すように、伝播を行うバックグラウンド・プロセスがOracle Streams AQサーブレットにメッセージを転送し、そのサーブレットが接続先データベースにメッセージをエンキューします。

図6-2 HTTPでのOracle Streams AQ伝播

図adque445.gifの説明が続きます
図adque445.gifの説明

既存のコードを変更せずに、アプリケーションがHTTPでのOracle Streams AQ伝播を使用するように設定できます。HTTPでのOracle Streams AQ伝播を使用するアプリケーションは、Oracle Net Services接続文字列を使用してデータベース・リンクを再作成するのみで、その他を変更しないで再びOracle Net Servicesでの伝播に容易に戻すことができます。

6.2 Oracle Streams AQ XMLサーブレットのデプロイ

OC4Jを使用してAQ XMLサーブレットをデプロイする手順は、次のとおりです。

  1. 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
    
    
  2. 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.jarjssl-1_1.jarおよびjavax-ssl-1_1.jarが必須です。

  3. 次のように入力してAQHttpRq.javaをコンパイルします。

    cd ORACLE_HOME/rdbms/demo
    javac AQHttpRq.java AQHttp.java
    
    
  4. 次のデータベース初期化パラメータを指定の値に設定します。

    job_queue_processes=2
    compatible=10.2.0
    
    
  5. データベースとリスナーを再起動します。

  6. キューを設定してユーザーを制限付きアクセスについて認証します。


    関連項目:

    詳細は、ORACLE_HOME/rdbms/demoにあるaqxmlREADME.txtおよびaqxmldmo.sqlを参照してください。

  7. サーブレットをデプロイしてOC4Jインスタンスを起動します。

    cd ORACLE_HOME/bin
    sh aqxmlctl deploy
    sh aqxmlctl start
    
    

    注意:

    OC4Jインスタンスの停止にはsh aqxmlctl stopを使用します。サーブレットをデプロイしてOC4Jインスタンスを起動する手順は、Oracle Databaseのインストール中に実行されている場合があります。これは、次の手順で確認できます。

  8. 次のファイルで、サーブレットのステータスと、サーブレットのデプロイに使用されたプロトコルとポート番号の情報を確認します。

    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
    
    
  9. Webブラウザで次のURLを入力します。

    https://hostname:portnumber/aqserv/servlet/AQDemoServlet
    
    

    hostnameはサーバー名、portnumberは前述の手順で検出された値です。ユーザー名とパスワードを求めるプロンプトに応答すると、サーブレットに次のように表示されます。

    Sample AQ Servlet
    AQxmlServlet is working!
    
    
  10. SSL証明書を作成してキーストアを生成します。次のファイルに例が用意されています。

    ORACLE_HOME/rdbms/demo/aqxmloc4j.cert
    ORACLE_HOME/rdbms/demo/keystore
    
    

    関連項目:

    http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/keytool.htmlにあるキーツール・ドキュメントを参照してください。

    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>を削除します。

  11. AQ XMLサーブレットを停止し、再起動します。

    sh aqxmlctl stop
    sh aqxmlctl start
    
    

6.3 Internet Data Access Presentation(iDAP)

Internet Data Access Presentation(iDAP)は、Content-Typeヘッダーのtext/xmlを使用して、SOAPリクエストの本体を指定します。XMLでは、iDAPリクエストおよびレスポンス・メッセージは、次のように表現されます。

6.3.1 SOAPメッセージの構造

SOAPは、次のようにメッセージ・リクエストまたはレスポンスを構造化します。

6.3.1.1 SOAPエンベロープ

SOAPエンベロープは、XMLツリーのルート要素または最上位要素です。タグはSOAP:Envelopeです。SOAPでは、グローバル属性SOAP:encodingStyleが定義されます。この属性は、SOAP仕様で記述されたルールのかわりに使用されるシリアライズ・ルールを示します。この属性はすべての要素に適用でき、要素のみでなくこの属性を含まないすべての子要素にも有効です。この属性が省略されている場合は、親要素によってオーバーライドされていないかぎり型指定に従っていることを意味します。

名前空間で修飾されている場合、SOAPエンベロープには名前空間宣言およびその他の属性も含まれます。本体には、名前空間で修飾された他のサブ要素を続けることができます。

6.3.1.2 SOAPヘッダー

SOAPヘッダーは、ルート下の最初の要素です。タグはSOAP:Headerです。SOAPヘッダーは、トランザクションIDなどの必要な情報を渡します。ヘッダーは、SOAP:EnvelopeというXML要素の子としてエンコードされます。ヘッダーは名前要素で識別され、名前空間で修飾されます。ヘッダー・エントリは、埋込み要素としてエンコードされます。

6.3.1.3 SOAP本体

SOAP本体はOracle Streams AQ XML文書です。タグはSOAP:Bodyで、最初のサブ要素を含みます。このサブ要素の名前はメソッド名です。メソッドをリクエストするこの要素には、各入力パラメータおよび出力パラメータの要素が含まれます。要素名はパラメータ名になります。本体には、エラーに関する情報を示すSOAP:Faultも含まれます。Oracle Streams AQ XML文書の名前空間は、http://ns.oracle.com/AQ/schemas/accessとなります。

6.3.2 SOAPメソッドの起動

メソッドの起動は、リクエストのヘッダーおよび本体を作成し、戻されたレスポンスのヘッダーおよび本体を処理することによって実行されます。リクエストおよびレスポンスのヘッダーは、標準の転送プロトコル固有のヘッダーおよび拡張ヘッダーで構成されます。

6.3.2.1 HTTPヘッダー

HTTPリクエストのヘッダー内のPOSTメソッドによって、SOAPメソッドの起動が実行されます。リクエストには、ヘッダーSOAPMethodNameを含める必要があります。このヘッダーの値は、ターゲットで起動するメソッドを示します。値の書式はURI#method nameです。次に例を示します。

SOAPMethodName: http://ns.oracle.com/AQ/schemas/access#AQXmlSend

インタフェースに使用するURIは、ペイロードのSOAP:Body部に存在する、メソッド名要素の暗示または指定された名前空間修飾に一致する必要があります。メソッド名に#文字を含めることはできません。

6.3.2.2 メソッド起動本体

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つのケースの場合は、拡張性の目的で追加のメッセージ・ヘッダーをリクエストの結果に表示できます。

6.3.2.3 メソッド・リクエストの結果

リクエストの結果は、リクエスト/レスポンスの形式で提供されます。HTTPのレスポンスでは、Content-Typeヘッダーがtext/xmlである必要があります。SOAPの結果は成功を示し、エラーは失敗を示します。メソッド・レスポンスには、結果とエラーの両方が含まれることはありません。

6.4 リクエストおよびレスポンスのiDAPドキュメント

SOAPメッセージの本体は、iDAPメッセージです。このXML文書の名前空間は、http://ns.oracle.com/AQ/schemas/accessとなります。本体は次の内容を表しています。

内容は次のとおりです。

6.4.1 iDAPクライアントのエンキュー・リクエスト

クライアントは、リクエストの送信およびパブリッシュについて、シングル・コンシューマ・キューへのエンキューにはAQXmlSend、マルチ・コンシューマ・キュー/トピックへのエンキューにはAQXmlPublishを使用します。

AQXmlSendおよびAQXmlPublishには、次の要素が含まれています。

producer_options

これは必須要素です。この要素には、次の子要素が含まれています。

  • 宛先

    これは必須要素です。メッセージを送信するキュー/トピックを指定します。この要素には、宛先値の解析方法を決定するオプションのlookup_type属性が含まれます。lookup_typeがデフォルトであるDATABASEの場合、宛先はschema.queue_nameと解析されます。lookup_typeLDAPの場合は、LDAPサーバーを使用して宛先が解決されます。

  • visibility

    この要素はオプションです。エンキューが参照可能になる時期を決定します。デフォルトは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_nameaddressprotocolおよびagent_aliasの各要素を含めることができます。agent_alias要素は、LDAPを使用して名前、アドレスおよびプロトコルを解決します。

  • message_id

    この要素はオプションです。デキュー中に指定されるメッセージの一意識別子です。

  • correlation

    この要素はオプションです。メッセージの相関識別子です。

  • delay

    この要素はオプションです。メッセージの処理が可能な秒数を指定します。

  • expiration

    この要素はオプションです。メッセージのデキューが可能な秒数を指定します。このパラメータは、遅延に対するオフセットです。デフォルトでは、メッセージに期限はありません。期限切れになる前にデキューされない場合、メッセージはEXPIRED状態で例外キューに移されます。

  • priority

    この要素はオプションです。メッセージの優先順位を指定します。優先順位には、負の数を含むすべての数値を指定できます。数値が小さいほど、優先順位が高いことを表します。

  • recipient_list

    この要素はオプションです。デフォルトのサブスクライバ・リストをオーバーライドする受信者リストです。各受信者は、recipient_list内のrecipient要素で表され、agent_nameaddressprotocolおよびagent_aliasの各要素を含めることができます。agent_alias要素は、LDAPを使用して名前、アドレスおよびプロトコルを解決します。

  • message_state

    この要素はオプションです。メッセージの状態を指定します。デキュー中に自動的に入力されます。message_stateが0(ゼロ)の場合、メッセージはすぐに処理できます。1の場合はメッセージ遅延に至っていません。2の場合、メッセージは処理され、保存されています。3の場合、メッセージは例外キューに移されています。

  • exception_queue

    この要素はオプションです。デキューが正常に行われなかった回数がmax_retriesを超えた場合、またはメッセージが期限切れになった場合に、メッセージが移されるキューの名前を指定します。例外キュー内のすべてのメッセージは、EXPIREDの状態です。

    メッセージの移動時に指定された例外キューが存在しない場合、メッセージはキュー表に対応付けられたデフォルトの例外キューに移され、アラート・ログに警告が記録されます。デフォルトの例外キューが使用されると、デキュー時にパラメータがNULL値を戻します。

message_payload

これは必須要素です。宛先キュー/トピックのペイロード型に基づく異なる要素を持つことができます。様々なペイロード型については、「iDAPクライアントのデキュー・リクエスト」を参照してください。

AQXmlCommit

これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。


関連項目:

iDAPメッセージ・ペイロードの説明は、「インターネット・メッセージ・ペイロード」を参照してください。

6.4.2 iDAPクライアントのデキュー・リクエスト

クライアントのデキュー・リクエストでは、次の要素を含むAQXmlReceiveを使用します。

consumer_options

これは必須要素です。この要素には、次の子要素が含まれています。

  • destination

    これは必須要素です。メッセージを受信するキュー/トピックを指定します。destination要素には、宛先値の解析方法を決定するオプションのlookup_type属性が含まれます。lookup_typeがデフォルトであるDATABASEの場合、宛先はschema.queue_nameと解析されます。lookup_typeLDAPの場合は、LDAPサーバーを使用して宛先が解決されます。

  • consumer_name

    この要素はオプションです。コンシューマの名前を指定します。コンシューマ名に一致するメッセージのみがアクセスされます。キューがマルチ・コンシューマ用に設定されていない場合は、このフィールドを指定しないでください。

  • wait_time

    この要素はオプションです。検索基準に一致するメッセージが現在存在しない場合の待機秒数を指定します。

  • selector

    この要素はオプションです。メッセージの選択基準を指定します。子要素correlationmessage_idまたはconditionを含めることができます。

    デキューのcondition要素は、SQL問合せのWHERE句に類似した構文を使用するブール式で指定します。このブール式には、メッセージ・プロパティ、ユーザー・オブジェクト・ペイロードのデータ・プロパティおよびPL/SQLまたはSQLファンクションに関する条件を含めることができます。メッセージ・プロパティには、prioritycorridおよびキュー表内の他の列を含めることができます。

    メッセージ・ペイロードにデキュー条件を指定するには、句にオブジェクト型の属性を使用します。各属性には、ペイロードを格納するキュー表の特定の列を示す識別子として、接頭辞tab.user_dataが必要です。

    デキューのcondition要素は4000文字以内です。


    注意:

    デキュー条件または相関識別子を使用すると、メッセージのデキュー順序が不定になり、キューのソート順序は考慮されません。

  • visibility

    この要素はオプションです。デキューが参照可能になる時期を決定します。デフォルトはON_COMMITで、デキューは現行のトランザクションのコミット時に参照可能になります。IMMEDIATEを指定すると、リクエストの完了直後にデキューの効果が参照可能になります。デキューは、現行のトランザクションの一部になりません。その操作のみで1つのトランザクションを構成します。

  • dequeue_mode

    この要素はオプションです。デキューに関連付けられたロック動作を指定します。可能な値はREMOVEBROWSEおよびLOCKEDです。

    REMOVEはデフォルトで、メッセージは読み取られて削除されます。メッセージは、retentionプロパティに基づいて、キュー表に保存できます。BROWSEを指定すると、メッセージのロックを取得しないで、メッセージを読み取ります。これは、SELECT文と同じです。LOCKEDを指定すると、メッセージを読み取って書込みロックを取得します。ロックは、トランザクションが継続している間、有効です。これはUPDATE文の選択と同じです。

  • navigation_mode

    この要素はオプションです。取り出すメッセージの位置を指定します。まず、位置を決定します。次に、検索基準を適用します。最後に、メッセージを取り出します。可能な値はFIRST_MESSAGENEXT_MESSAGEおよびNEXT_TRANSACTIONです。

    FIRST_MESSAGEを指定すると、使用可能で検索基準に一致する最初のメッセージを取り出します。これによって、位置がキューの先頭にリセットされます。NEXT_MESSAGEはデフォルトで、使用可能で検索基準に一致する次のメッセージを取り出します。前のメッセージがメッセージ・グループに属す場合、Oracle Streams AQは、そのメッセージ・グループに属すメッセージの中から、検索基準に一致する次の使用可能なメッセージを取り出します。NEXT_TRANSACTIONを指定すると、現行のトランザクション・グループの残りをスキップし、次のトランザクション・グループの最初のメッセージを取り出します。このオプションは、現行のキューでメッセージのグループ化が可能な場合のみに使用できます。

  • transformation

    この要素はオプションです。メッセージをデキューした後に、PL/SQL変換を開始するように指定します。

AQXmlCommit

これはオプションの空要素です。この要素が含まれている場合、トランザクションはリクエストの終了時にコミットされます。

6.4.3 iDAPクライアントの登録リクエスト

クライアントの登録リクエストでは、AQXmlRegisterを使用します。これにはregister_options要素を含める必要があります。register_options要素には、次の子要素が含まれます。

  • destination

    これは必須要素です。通知を登録するキューまたはトピックを指定します。destination要素には、宛先値の解析方法を決定するオプションのlookup_type属性が含まれます。lookup_typeがデフォルトであるDATABASEの場合、宛先はschema.queue_nameと解析されます。lookup_typeLDAPの場合は、LDAPサーバーを使用して宛先が解決されます。

  • consumer_name

    この要素はオプションです。マルチ・コンシューマ・キューまたはトピックのコンシューマ名を指定します。シングル・コンシューマ・キューの場合、このパラメータは指定できません。

  • notify_url

    これは必須要素です。メッセージのエンキュー時に通知を送信する場所を指定します。フォームは、http://urlmailto://email addressまたはplsql://pl/sql procedureです。

6.4.4 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>

6.4.5 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>

6.4.6 エンキュー・リクエストへのiDAPサーバー・レスポンス

シングル・コンシューマ・キューへのエンキュー・リクエストに対するレスポンスでは、AQXmlSendResponseを使用します。次の要素が含まれています。

  • status_response

    この要素には子要素status_codeerror_codeおよびerror_messageが含まれます。status_code要素は、成功した場合は値0、失敗した場合は値-1を取ります。error_code 要素には、Oracleエラー・コードが含まれます。error_message要素には、エラーの説明が含まれます。

  • send_result

    この要素には、子要素destinationおよびmessage_idが含まれます。destination要素では、メッセージが送信された場所を指定します。message_id要素では、送信された各メッセージを一意に識別します。

マルチ・コンシューマ・キューまたはトピックへのエンキュー・リクエストのレスポンスには、AQXmlPublishResponseを使用します。次の要素が含まれています。

  • status_response

    この要素には子要素status_codeerror_codeおよびerror_messageが含まれます。status_code要素は、成功した場合は値0、失敗した場合は値-1を取ります。error_code 要素には、Oracleエラー・コードが含まれます。error_message要素には、エラーの説明が含まれます。

  • publish_result

    この要素には、子要素destinationおよびmessage_idが含まれます。destination要素では、メッセージが送信された場所を指定します。message_id要素では、送信された各メッセージを一意に識別します。

6.4.7 デキュー・リクエストへのiDAPサーバー・レスポンス

デキュー・リクエストへのレスポンスでは、AQXmlReceiveResponseを使用します。次の要素が含まれています。

  • status_response

    この要素には子要素status_codeerror_codeおよびerror_messageが含まれます。status_code要素は、成功した場合は値0、失敗した場合は値-1を取ります。error_code 要素には、Oracleエラー・コードが含まれます。error_message要素には、エラーの説明が含まれます。

  • receive_result

    この要素には、子要素destinationおよびmessage_setが含まれます。destination要素では、メッセージが送信された場所を指定します。message_set要素では、デキューされたメッセージのセットを指定します。

6.4.8 登録リクエストへのiDAPサーバー・レスポンス

登録リクエストへのレスポンスでは、AQXmlRegisterResponseを使用します。「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response要素が含まれます。

6.4.9 iDAPコミット・レスポンス

コミット・リクエストへのレスポンスでは、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>

6.4.10 iDAPロールバック・レスポンス

ロールバック・リクエストへのレスポンスでは、AQXmlRollbackResponseを使用します。「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response要素が含まれます。

6.4.11 iDAP通知

クライアントが登録したイベントが発生した場合、REGISTERリクエストで指定したURLにAQXmlNotificationを使用してクライアントへの通知が送信されます。次の要素が含まれています。

  • notification_options

    この要素には、子要素destinationおよびconsumer_nameが含まれます。destination要素では、イベントが発生した宛先キューまたはトピックを指定します。consumer_name要素では、イベントが発生したコンシューマ名を指定します。この要素はマルチ・コンシューマ・キューまたはトピックにのみ適用されます。

  • message_set

    この要素ではメッセージ・プロパティのセットを指定します。

6.4.12 エラー発生時のiDAPレスポンス

前述のいずれかのリクエストでエラーが発生した場合、FAULT要素が生成されます。FAULT要素には、次の要素が含まれます。

  • faultcode

    この要素では、失敗を示すエラー・コードを指定します。

  • faultstring

    この要素は、クライアント・エラーまたはサーバー・エラーを示します。クライアント・エラーは、リクエストが無効であることを示します。サーバー・エラーは、Oracle Streams AQサーブレットが正しく設定されていないことを示します。

  • detail

    この要素には、「デキュー・リクエストへのiDAPサーバー・レスポンス」で説明したstatus_response要素が含まれます。

6.5 電子メールによるメッセージの通知

ここでは、データベースの電子メール通知の設定手順を説明します。

  1. Oracle Streams AQ管理者としてDBMS_AQELM.SET_MAILHOSTを起動し、SMTPメール・ホストを設定します。

  2. Oracle Streams AQ管理者としてDBMS_AQELM.SET_MAILPORTを起動し、SMTPメール・ポートを設定します。特別な場合を除き、デフォルトの25に設定します。

  3. DBMS_AQELM.SET_SENDFROMを起動してSendFromアドレスを設定します。

  4. 設定後、Oracle Call Interface(OCI)またはPL/SQL APIを使用することで、電子メール通知の登録ができます。