ヘッダーをスキップ
Oracle® Databaseアドバンスト・キューイング・ユーザーズ・ガイド
12c リリース1 (12.1)
B71332-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 Oracle Database Advanced Queuingへのインターネット・アクセス

インターネット上でSimple Object Access Protocol(SOAP)を使用してOracle Database Advanced Queuing (AQ)にアクセスできます。Internet Data Access Presentation (IDAP)は、Oracle Database Advanced Queuing操作のためのSOAP仕様です。IDAPは、SOAPリクエストの本体に対してXMLメッセージ構造を定義します。IDAP構造のメッセージは、インターネット上でHTTPを使用して転送されます。

ユーザーは、IDAPインタフェースを使用して通知に登録できます。

内容は次のとおりです。


関連項目:

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

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


インターネット経由のOracle Database Advanced Queuing操作の概要

この項の内容は次のとおりです。

Oracle Database Advanced Queuingのインターネット操作アーキテクチャ

図6-1は、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 HTTPを使用してOracle Database Advanced Queuing操作を実行するためのアーキテクチャ」の説明

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

Oracle Database Advanced Queuingは、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キューはサポートされていません。

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リクエストを送信します。


関連項目:

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

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

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

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


関連項目:

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

トランザクションを終了するには、明示的なコミットまたはロールバックを適用する必要があります。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とは異なり、ファイアウォールを簡単に構成できます。図6-2に示すように、伝播を行うバックグラウンド・プロセスがOracle Database Advanced Queuingサーブレットにメッセージを転送し、そのサーブレットが接続先データベースにメッセージをエンキューします。

図6-2 HTTPでのOracle Database Advanced Queuing伝播

図6-2の説明が続きます
「図6-2 HTTPでの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サーブレットのデプロイ

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://docs.oracle.com/javase/にあるKeytoolのドキュメント

    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
    

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

SOAP本体

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

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

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

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

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

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

  • クライアントのエンキューデキューおよび登録リクエスト

  • クライアントのエンキュー、デキューおよび登録リクエストに対するサーバーのレスポンス

  • サーバーからクライアントへの通知


    注意:

    Oracle Database Advanced Queuingインターネット・アクセスは、8.1以上の形式のキューのみに対してサポートされています。

この項の内容は次のとおりです。

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

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

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

producer_options

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

  • destination

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

  • visibility

    この要素はオプションです。エンキューがいつ可視になるかを決定します。デフォルトはON_COMMITで、現行のトランザクションがコミットするとエンキューが可視になります。IMMEDIATEが指定されると、エンキューの状態は、リクエスト完了直後に可視になります。エンキューは現行のトランザクションの一部ではありません。操作がそれ自体でトランザクションを形成します。

  • 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_listrecipient要素として表現され、これには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メッセージ・ペイロードの説明は、「インターネット・メッセージ・ペイロード」を参照してください。

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が指定されると、デキューの状態は、リクエスト完了直後に可視になります。デキューは現行のトランザクションの一部ではありません。操作がそれ自体でトランザクションを形成します。

  • dequeue_mode

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

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

  • navigation_mode

    この要素はオプションです。取り出されるメッセージの位置を指定します。最初に位置が判断されます。次に検索基準が適用されます。最後にメッセージが取り出されます。可能な値は、FIRST_MESSAGENEXT_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_typeLDAPの場合、送信先の解決にLDAPサーバーが使用されます。

  • consumer_name

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

  • notify_url

    この要素は必須です。メッセージがエンキューされたときの通知の送信先を指定します。書式はhttp://urlmailto://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_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要素では、送信された各メッセージを一意に識別します。

デキュー・リクエストへの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要素では、デキューされたメッセージのセットを指定します。

登録リクエストへの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要素が含まれます。

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

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

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

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

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

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