ヘッダーをスキップ
Oracle XML DB開発者ガイド
11gリリース1(11.1)
E05669-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

37 Oracle Streams AQを使用したXMLデータの交換

Oracle Streamsアドバンスト・キューイング(AQ)には、次のデータベース統合化メッセージ・キューイング機能があります。

Oracle Databaseとメッセージ・キューイングの統合により、メッセージ・キューイングにOracle Databaseの整合性、信頼性、リカバリ能力、スケーラビリティ、パフォーマンスおよびセキュリティ機能が追加されます。また、メッセージ・フローからのインテリジェント機能の抽出が容易になります。

この章では、AQを使用してXMLデータを交換する方法を説明します。この章の内容は次のとおりです。

AQとXMLの相互補完

XMLは、企業間通信の標準フォーマットとして登場しました。XMLは、ビジネス・アプリケーション間で通信されるデータを表現するだけでなく、XMLでカプセル化されたビジネス・ロジックの表現にも使用されています。

Oracle Databaseでは、AQによって、ネイティブなXMLメッセージがサポートされ、AQ操作をXMLベースのInternet-Data-Access-Presentation(iDAP)形式で定義できます。拡張可能なメッセージの起動プロトコルであるiDAPは、インターネット標準に基づいて構築され、転送メカニズムとしてHTTPまたはHTTPSプロトコルおよび電子メール・プロトコルを使用し、データ表示用の言語としてXMLを使用します。クライアントは、iDAPを使用してAQにアクセスできます。

AQおよびXMLメッセージ・ペイロード

図37-1に、AQを使用して3つのアプリケーションと通信するOracle Databaseを示します(メッセージ・ペイロードとしてXMLを使用します)。この使用例においてAQが実行する一般的なタスクは、次のとおりです。

  • サブスクリプション・ルールを使用したメッセージ・フロー

  • メッセージ管理

  • メッセージからのビジネス・インテリジェンスの抽出

  • メッセージ変換

これは、XMLメッセージが、AQを使用してアプリケーション間で非同期に渡される、企業内業務および企業間業務での使用例です。

  • 企業内業務の典型的な使用例には、販売注文の遂行およびサプライチェーンの管理などがあります。

  • 企業間業務処理では、複数の統合ハブが、インターネットのバックプレーンを介して通信できます。企業間業務での使用例は、旅行の予約、メーカーとサプライヤ間の調整、銀行間での資金の移動、保険請求の清算などです。

    Oracleは、これを企業アプリケーション統合製品で使用します。XMLメッセージは、アプリケーションからAQハブへ送信されます。このサーバーは、メッセージを必要とするすべてのアプリケーションに対してメッセージ・サーバーとして機能します。このハブ・アンド・スポーク・アーキテクチャを介して、XMLメッセージを、疎結合された複数の受信側アプリケーションへ非同期に送信できます。

図37-1に、AQを使用して、次のアプリケーションを介して配送したXMLペイロード・メッセージを示します。

  • iDAPを使用し、HTTPおよびHTTPS接続を介したAQ操作を行うWebベースのアプリケーション

  • Net*接続を介してXMLメッセージを伝播するために、AQを使用するアプリケーション

  • AQを使用して、HTTP、HTTPSまたはSMTPを介してインターネットまたはXMLメッセージを直接データベースへ伝播するアプリケーション

この図は、AQクライアントが、OCI、JavaまたはPL/SQLを使用してデータにアクセスできることも示しています。

図37-1 Oracle Streamsアドバンスト・キューイングおよびXMLメッセージ・ペイロード

図37-1の説明が続きます
「図37-1 Oracle Streamsアドバンスト・キューイングおよびXMLメッセージ・ペイロード」の説明

アプリケーション統合のためのハブ・アンド・スポーク・アーキテクチャを可能にするAQ

今日の企業が直面している重大な問題の1つは、アプリケーションの統合です。アプリケーションの統合とは、複雑な業務トランザクションを実行するために複数の部門アプリケーションを協調、調整および同期化することです。

AQは、アプリケーション統合のためのハブ・アンド・スポーク・アーキテクチャを可能にします。このアーキテクチャを使用すると、統合化ソリューションの管理、構成およびビジネス・ニーズの変化に伴う変更が容易になります。

監査、追跡およびマイニング用に保存できるメッセージ

AQが提供するメッセージ管理では、異なるアプリケーション間でのメッセージ・フローを管理するだけでなく、将来のビジネス・インテリジェンスの監査、追跡および抽出のためにメッセージを保存することもできます。

SQLビューを使用したメッセージ内容の表示

AQは、メッセージを参照するためのSQLビューも提供します。これらのSQLビューは、システムにおける過去、現在および将来の動向を分析するために使用できます。

AQを使用するメリット

AQを使用すると、異なるアプリケーション間での通信を柔軟に構成できます。

Oracle StreamsおよびAQ

Oracle Streams(Streams)を使用すると、ストリーム内のデータおよびイベントを共有できます。ストリームは、この情報をデータベース内またはデータベース間で伝播できます。ストリームは、指定された情報を指定された宛先にルーティングします。これによって、イベントを取得および管理し、他のデータベースおよびアプリケーションとイベントを共有するための従来のソリューションより、機能性と柔軟性が向上します。

Streamsを使用すると、あるソリューションを使用したために別のソリューションが使用できなくなるということがなくなります。Streamsを使用すると、分散した企業とアプリケーション、データ・ウェアハウスおよび高可用性ソリューションを構築および操作できます。Oracle Streamsのすべての機能は同時に使用できます。

Streamsを使用して、次の操作を実行できます。

Streamsメッセージ・キューイング

Streamsを使用すると、ユーザー・アプリケーションは次の操作を実行できます。

  • 様々な型のメッセージのエンキュー

  • 使用可能なメッセージの伝播

  • 宛先データベースでのメッセージのデキュー

Streamsでは、SYS.AnyData型のメッセージをステージングする新しいタイプのキューが導入されています。ほぼすべての型のメッセージをSYS.AnyDataラッパーでラップし、SYS.AnyDataキューにステージングできます。Streamsは、Advanced Queuing(AQ)と相互に作用します。これによって、マルチ・コンシューマ・キュー、パブリッシュとサブスクライブ、コンテンツ・ベースのルーティング、インターネット伝播、変換、他のメッセージ・サブシステムへのゲートウェイなど、メッセージ・キューイング・システムのすべての標準機能がサポートされます。


関連項目:

『Oracle Streams概要および管理』およびその付録Aの「LCRのXML Schema」を参照してください。

オブジェクト型のXMLType属性

XMLType属性を持つOracleオブジェクト型を使用するキューを作成できます。これらのキューは、XML文書であるメッセージを転送および格納するために使用できます。XMLTypeを使用すると、次の操作を実行できます。

Internet Data Access Presentation(iDAP)

SOAPを使用して、インターネット上でAQにアクセスできます。Internet Data Access Presentation(iDAP)は、AQ操作に対するSOAP仕様です。iDAPによって、SOAPリクエストの本体にXMLメッセージ構造が定義されます。iDAPによって構造化されたメッセージは、HTTP、HTTPSまたはSMTPなどの転送プロトコルを使用してインターネット上で転送されます。

iDAPは、Content-Typeのtext/xmlを使用して、SOAPリクエストの本体を指定します。XMLは、iDAPリクエストおよび応答メッセージの表示方法を次のとおり定義します。

iDAPアーキテクチャ

図37-2に、HTTPまたはHTTPSメッセージを送信するために必要な次のコンポーネントを示します。

図37-2 HTTPまたはHTTPSを使用してAQ操作を実行するためのiDAPアーキテクチャ

図37-2の説明が続きます
「図37-2 HTTPまたはHTTPSを使用してAQ操作を実行するためのiDAPアーキテクチャ」の説明

XMLTypeキュー・ペイロード

XMLType属性を含むペイロードを持つキューを作成できます。これらのペイロードは、XML文書を含むメッセージの転送および格納に使用できます。XMLType属性を持つOracleオブジェクトを定義すると、次の操作を実行できます。

  • 複数の型のXML文書を同じキュー内に格納します。この文書は、CLOBインスタンスとして内部的に格納されます。

  • existsNodeextractなどのSQL関数を使用して、XMLType属性を持つメッセージを選択的にデキューします。

  • 変換を定義して、OracleオブジェクトをXMLTypeに変換します。

  • existsNode()extract()などのXMLTypeメソッドを使用して、メッセージ内容を問い合せるルールベースのサブスクライバを定義します。

例37-1 XMLTypeおよびAQ: 表とキューの作成およびメッセージの変換

BooksOnlineのアプリケーションの海外向け出荷サイトでは、注文がSYS.XMLTypeを使用して表現されると想定します。注文入力サイトでは、注文がOracleオブジェクトのORDER_TYPとして表現されます。

海外向けキュー表およびキューは、次のとおり作成されます。

BEGIN
  DBMS_AQADM.create_queue_table(
    queue_table        => 'OS_orders_pr_mqtab',
    comment            => 'Overseas Shipping MultiConsumer Orders queue table',
    multiple_consumers => TRUE,
    queue_payload_type => 'SYS.XMLTtype',
    compatible         => '8.1');
END;
BEGIN
  DBMS_AQADM.create_queue(queue_name   => 'OS_bookedorders_que',
                          queue_table  => 'OS_orders_pr_mqtab');
END;

海外向け出荷サイトの注文の表現は、注文入力サイトでの注文の表現と異なるため、メッセージが注文入力サイトから海外向け出荷サイトに伝播される前に、変換が適用されます。

/* Add a rule-based subscriber for overseas shipping to the booked-orders
   queues with transformation. Overseas Shipping handles orders outside the US. */
DECLARE
  subscriber AQ$_AGENT;
BEGIN
  subscriber := AQ$_AGENT('Overseas_Shipping', 'OS.OS_bookedorders_que', null);
  DBMS_AQADM.add_subscriber(
    queue_name     => 'OE.OE_bookedorders_que',
    subscriber     => subscriber,
    rule           => 'tab.user_data.orderregion = ''INTERNATIONAL''',
    transformation => 'OS.OE2XML');
END;

注文入力アプリケーションによって使用される型から、海外向け出荷によって使用される型への変換の定義の詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』の第8章の変換の作成に関する項を参照してください。

例37-2 XMLTypeおよびAQ: メッセージのデキュー

アプリケーションが、カナダの顧客の注文を処理すると想定します。このアプリケーションは、次のプロシージャを使用してメッセージをデキューできます。

/* Create procedure to enqueue into single-consumer queues: */
CREATE OR REPLACE PROCEDURE get_canada_orders() AS
  deq_msgid             RAW(16);
  dopt                  DBMS_AQ.dequeue_options_t;
  mprop                 DBMS_AQ.message_properties_t;
  deq_order_data        SYS.XMLTtype;
  no_messages           EXCEPTION;
  PRAGMA EXCEPTION_INIT (no_messages, -25228);
  new_orders            BOOLEAN := TRUE;
BEGIN
  dopt.wait := 1;
  /* Specify dequeue condition to select Orders for Canada */
  dopt.deq_condition :=
    'tab.user_data.extract(        ''/ORDER_TYP/CUSTOMER/COUNTRY/text()'').getStringVal()=''CANADA''';
  dopt.consumer_name : = 'Overseas_Shipping';
  WHILE (new_orders) LOOP
    BEGIN
      DBMS_AQ.dequeue(queue_name         => 'OS.OS_bookedorders_que',
                      dequeue_options    => dopt,
                      message_properties => mprop,
                      payload            => deq_order_data,
                      msgid              => deq_msgid);
      COMMIT;
      DBMS_OUTPUT.put_line('Order for Canada - Order: ' ||
                           deq_order_data.getStringVal());
    EXCEPTION
      WHEN no_messages THEN
        DBMS_OUTPUT.put_line (' ---- NO MORE ORDERS  ---- ');
        new_orders := FALSE;
    END;
  END LOOP;
END;
CREATE TYPE mypayload_type as OBJECT (xmlDataStream CLOB, dtd CLOB, pdf BLOB);

XMLおよびOracle Streamsアドバンスト・キューイングを使用する場合のガイドライン

この項では、XMLおよびOracle Streamsアドバンスト・キューイングを使用する場合のガイドラインについて説明します。

多くのPDFファイルを持つOracle Streams AQ XMLメッセージを1つのレコードとして格納する方法

Oracle Streamsアドバンスト・キューイングを使用して、企業間でXML文書を交換できます。受信または送信される各メッセージには、XMLヘッダー、XMLアタッチメント(XMLデータ・ストリーム)、DTDおよびPDFファイルが含まれ、データをqueuetableのようなデータベース表に格納できます。メッセージは、1つのレコードまたは1つのピースとしてOracleキュー表にエンキューできます。または、メッセージを複数のレコード(XMLデータ・ストリームに対するCLOB型としての1つのレコード、PDFファイルに対するRAWとしての1つのレコードなど)としてエンキューできます。メッセージのデキューもできます。

次の方法で可能です。

  • CLOBRAWなどの属性を持つオブジェクト型を定義し、これを単一メッセージとして格納します。

  • AQメッセージ・グループ化機能を使用して、該当するメッセージを複数のメッセージに格納します。この場合、メッセージのプロパティは1つのグループに対応付けられます。メッセージ・グループ化機能を使用するには、すべてのメッセージのペイロード型が同じである必要があります。

ペイロードを指定するには、最初に、次の例のようにオブジェクト型を作成します。

CREATE TYPE mypayload_type as OBJECT (xmlDataStream CLOB, dtd CLOB, pdf BLOB);

次に、このオブジェクト型を単一のメッセージとして格納します。

メッセージをエンキューした後の新しい受信者の追加

キュー表を使用して、メッセージ割当てをサポートできます。たとえば、他の企業は、メッセージを特定の企業に送信するときに、これらのメッセージを処理するために誰が割り当てられるかは認識していません。ただし、そのメッセージが人事部宛てであることは認識しています。そのため、すべてのメッセージは人事部管理者へ送信されます。この時点で、メッセージはキュー表にエンキューされます。このメッセージの受信者は人事部管理者のみであり、その他のすべての人事部社員はこのキューのサブスクライバとして事前定義されています。

メッセージがエンキューされた後に受信者のリストを変更することはできません。受信者のリストを指定しない場合、サブスクライバはそのキューをサブスクライブし、メッセージをデキューできます。この場合は、新しい受信者がそのキューのサブスクライバである必要があります。それ以外の場合は、メッセージをデキューし、そのメッセージを新しい受信者が再度エンキューする必要があります。

XMLメッセージのエンキューおよびデキュー

Oracle Streams AQは、オブジェクトのエンキューおよびデキューをサポートします。これらのオブジェクトは、XML文書を含むXMLType型の属性、およびメッセージとともに送信すると有用な、抽出されたメタデータ属性を持つことができます。詳細および例は、最新のAQのドキュメント『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

XMLコンテンツを持つメッセージのOracle Streams AQキューからの解析

XMLコンテンツを持つメッセージをOracle Streams AQキューから解析し、ODS(Operational Data Store)にある表およびフィールドを更新する必要のある場合があります。つまり、XML文書を取り出して解析し、特定のフィールドをデータベース表およびデータベース列にマップすることが必要になる場合があります。特定のXMLタグ値の問合せに基づいて、AQエンキューまたはAQデキューの回数やJMSヘッダー情報などのメタデータを取得するための最も簡単な方法は、(Oracle Database内で)Oracle Streams AQと同時に、Oracle XML Parser for JavaおよびJavaストアド・プロシージャを使用することです。

  • XMLをCLOBで格納する場合、Oracle Textを使用して検索できますが、この場合は、ある基準に一致する特定のメッセージのみを検索できます。

  • メタデータ上で集計操作を行うには、既存の関連ツールからメタデータを参照するか、または通常のSQL述語をメタデータに使用します。この場合、CLOBにXMLで格納するのみでは十分ではありません。

Oracle TextのXML検索と、抽出された列などの重複したメタデータ記憶域を組み合せ、通常のSQL述語とOracle Textのcontains式を組み合せるSQLを使用すると、これらの両オプションの最適な機能を利用できます。

XML文書が処理されるまでのリスナー停止の回避

クライアントからのXMLメッセージの受信後、すぐにメッセージを処理する必要がある場合があります。各XML文書の処理には、約15秒かかります。PL/SQLでは、XML文書を処理するために、1つのプロシージャがリスナーの開始、メッセージのデキュー、別のプロシージャのコールを行い、XML文書が処理されるまで、リスナーが停止する場合があります。その間、メッセージがキューに蓄積します。

メッセージを受信後、DBMS_JOBパッケージを使用してジョブを送信します。ジョブは、異なるデータベース・セッションで非同期に起動されます。

Oracle Databaseでは、Oracle Streams AQ通知フレームワークにPL/SQLコールバックが追加されました。これによって、メッセージがキューに入れられると非同期に起動されるPL/SQLコールバックを登録できます。

AQでのHTTPSの使用

HTTPSを使用してXMLメッセージをサプライヤに送信し、レスポンスを受信するには、Oracle Streams AQのインターネット・アクセス機能を使用できます。XMLを使用して、確実なトランザクション処理でHTTPを介してメッセージをエンキューまたはデキューできます。


関連項目:

『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』

Oracle Streams AQメッセージ・ペイロードへのXMLの格納

XMLは、ユーザー定義型の一部としてsys.xmltypeを使用し、ユーザー定義型をペイロードに含める以外に、Oracle Streams AQメッセージ・ペイロードにネイティブに格納できます。Oracle9iリリース2(9.2)以上では、XMLTypeのペイロードおよび属性を持つキューを作成できます。

iDAPとSOAPの比較

iDAPは、AQ操作に対するSOAP仕様です。iDAPは、Oracle Streams AQ操作に対するXML仕様です。SOAPは、サービスを起動するための共通のメカニズムを定義します。iDAPは、AQ操作を実行するためのメカニズムを定義します。

さらにiDAPには、SOAPが定義していない、次の主要なプロパティが含まれます。

  • トランザクション動作。AQ操作をトランザクションとして実行できます。トランザクションは、複数のiDAPリクエストにまたがることができます。

  • セキュリティ。すべてのiDAP操作は、許可済ユーザーおよび認証済ユーザーのみが実行できます。