7 AQ用のOracle JCAアダプタ

Oracle JCA Adapter for AQ (Oracle AQアダプタ)を使用して、Oracle BPEL Process Manager (Oracle BPEL PM)またはOracle Mediatorによるシングル・コンシューマまたはマルチ・コンシューマ・キューの操作を可能にします。

7.1 Oracle AQアダプタの概要

Oracle Advanced Queuing (AQ)では、関連するアプリケーション間の双方向の非同期通信用に柔軟なメカニズムが提供されます。

アドバンスト・キューはOracleデータベースの機能であるため、高いスケーラビリティと信頼性を備えています。バックアップとリカバリ(Point-in-Timeリカバリも含む)、ロギング、トランザクション・サービスおよびシステム管理など、Oracleデータベースの他の機能もアドバンスト・キューによって継承されます。また、単一のアプリケーションを複数のキューで処理できるため、メッセージを様々な方法で分割したり、ロード・バランシングを介して別のレベルのスケーラビリティを提供したりできます。

Oracle AQの詳細は、Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイドを参照してください。

7.1.1 Oracle AQアダプタとOracle BPEL Process ManagerおよびOracle Mediatorの統合

JCA 1.5リソース・アダプタとOracle BPEL Process ManagerおよびOracle Mediatorを双方向で統合するために、JCAバインディング・コンポーネントが使用されています。JCAバインディング・コンポーネントは規格に準拠しており、基盤となるJCA相互作用をWebサービスとして公開するためのWeb Service Invocation Framework (WSIF)テクノロジが使用されています。

Oracle AQアダプタのアーキテクチャ、アダプタとOracle BPEL Process ManagerおよびOracle Mediatorの統合およびアダプタのデプロイの詳細は、アダプタとOracle Application Serverコンポーネントの統合を参照してください。

7.1.2 Oracle AQアダプタOracle Mediatorの統合

メディエータ・サーバーはOracle AQアダプタをサポートしており、それぞれのインバウンドおよびアウトバウンドのアダプタ・サービスを定義できます。インバウンド・アダプタ・サービスでは、Oracle AQアダプタからデータが受信されてXMLメッセージに変換されます。アウトバウンド・アダプタ・サービスでは、XMLメッセージが特定のアダプタのネイティブ・フォーマットに変換され、データがターゲット・アプリケーションに送信されます。

メディエータ・サーバーを使用すると、Oracle Advanced Queuingのシングル・コンシューマ・キューまたはマルチ・コンシューマ・キューとの間でメッセージを送受信できます。

ノート:

メディエータOracle BPEL PMの後継であり、このガイドのほとんどの部分は、Oracle BPEL PMを使用することを想定しています。ただし、Oracle AQアダプタの動作はOracle BPEL PMでもメディエータでも同じです。ここでOracle BPEL PMに言及している箇所は、メディエータで置き換えてかまいません。

7.2 Oracle AQアダプタの機能

Oracle AQアダプタは、AQメッセージのプロデューサでもありコンシューマでもあります。エンキュー操作は、JCAアウトバウンド相互作用として公開されています。デキュー操作は、JCAインバウンド相互作用として公開されています。

Oracle AQアダプタでは、ペイロードとしてADT (Oracleオブジェクト・タイプ)、XMLTypeおよびRAWキューをサポートしています。また、1つのADTメンバー列からのペイロードの抽出もサポートしています。

Oracle AQアダプタでは、エンキューおよびデキュー操作用として正規化されたプロパティがサポートされています。

Oracle AQアダプタでサポートされているプロパティの詳細は、Oracle AQアダプタのプロパティ」を参照してください。

7.2.1 エンキュー固有の機能(メッセージ生成)

Oracle AQアダプタでは、Oracle Streams AQの次の機能をサポートしています。

  • 相関識別子

    アダプタ構成ウィザードでは、特定メッセージの取得に使用するエンキュー操作の定義時に相関識別子を指定できます。

  • マルチ・コンシューマ・キュー

    Oracle Streams AQでは、複数のコンシューマで1つのメッセージの処理と消費を実行できます。この機能を使用するには、マルチ・コンシューマ・キューを作成し、そのキューにメッセージをエンキューする必要があります。この構成では、デフォルトのサブスクリプション・リストまたはオーバーライド受信者リストのいずれかを使用して、単一のメッセージが複数のAQコンシューマによって消費(デキュー操作)されます。このシナリオでは、指定したすべてのコンシューマ・エージェントによって消費されるまで、メッセージはキューに残ります。Oracle AQアダプタのエンキュー・ヘッダー・プロパティ(jca.aq.RecipientList)を使用すると、キューからのメッセージ取得が可能なオーバーライド受信者リスト(カンマ区切りの文字列値)を指定できます。サブスクライバとしてマルチ・コンシューマ・キューに追加されたすべてのコンシューマでは、Recipientパラメータに一意の値が必要です。2つのサブスクライバでNAMEADDRESSおよびPROTOCOL属性に同じ値を使用することはできません。

  • メッセージの優先度

    エンキュー済のメッセージに優先度を指定すると、メッセージは優先度に従ってデキューされます。2つのメッセージの優先度が同じ場合、デキューの順番はエンキュー時間で決定されます。また、メッセージのソート順としてエンキュー時間の優先度を指定することで、優先度が格納順の取出し(FIFO)のキューを作成することもできます。この優先度は、Oracle AQアダプタのエンキュー・ヘッダーのプロパティです。エンキュー時間は、基礎となるAQアプリケーションによって自動的に設定されます。

    次に、FIFOキューの作成方法の例を示します。

    EXECUTE DBMS_AQADM.CREATE_QUEUE_TABLE( \
    queue_table => 'OE_orders_pr_mqtab', \
    sort_list =>'priority,enq_time', \
    comment => 'Order Entry Priority \
    MultiConsumer Orders queue table',\
    multiple_consumers => TRUE, \
    queue_payload_type => 'BOLADM.order_typ', \
    compatible => '8.1', \
    primary_instance => 2, \
    secondary_instance => 1);
    EXECUTE DBMS_AQADM.CREATE_QUEUE ( \
    queue_name => 'OE_bookedorders_que', \
    queue_table => 'OE_orders_pr_mqtab');
    
  • 時間の指定とスケジュール

    Oracle Streams AQでは、遅延間隔と有効期限の間隔を指定できます。遅延間隔は、メッセージのエンキュー後に、エンキュー済のメッセージがデキュー元で使用可能とマークされる時期を決定します。遅延時間の設定されたメッセージがエンキューされると、メッセージはWAIT状態とマークされます。WAIT状態のメッセージは、デフォルトのデキュー・コールからマスクされます。有効期限のプロパティは有効期限の指定に使用され、メッセージが有効期限の前に消費されない場合、メッセージは自動的に例外キューに移動されます。

7.2.2 デキューおよびエンキューの機能

Oracle Streams AQには、次のデキュー・オプションがあります。

  • ポーリング・オプション

  • 通知オプション

ポーリング・オプションは、着信の都度のメッセージの処理や、メッセージの継続的なポーリングに関連します。Oracle AQアダプタでは、AQメッセージ消費のポーリング・メカニズムをサポートしています。

Oracle AQアダプタでは、Oracle Streams AQの次の機能をサポートしています。

  • マルチ・コンシューマ・キュー

    Oracle AQアダプタは、マルチ・コンシューマ・キューからメッセージを取得できます。

  • デキュー処理用のメッセージの移動

    メッセージをエンキューと同じ順序でデキューする必要はありません。相関識別子を使用してデキューの順序を指定できます。アダプタ構成ウィザードで、デキュー操作の相関IDを定義できます。

  • 遅延を伴う再試行

    再試行回数は、Oracle AQアダプタのデキュー・ヘッダーのプロパティです。再試行回数が制限を超えると、メッセージは指定の例外キューに移動されます。この例外キューは、Oracle AQアダプタのエンキュー・ヘッダーのプロパティです。

  • ルールベースのサブスクリプション

    Oracle Streams AQでは、コンテンツベースおよびサブジェクトベースのメッセージのフィルタ処理が可能です。ルールには、そのルールに一致するメッセージのサブスクライブを目的とした1つ以上のコンシューマが定義されます。サブジェクトベースのルールの場合、SQL問合せのWHERE句に似た構文を使用してブール式を指定します。このブール式には、メッセージ・プロパティの条件(現状では優先度と相関ID)、ユーザー・データ・プロパティ(オブジェクト・ペイロードのみ)および関数(SQL問合せのWHERE句の指定と同様)を含めることができます。

    マルチ・コンシューマ・キューへのルール・ベースのサブスクリプションの作成例は、「デキュー中のメッセージのフィルタ処理に対するメッセージ・セレクタ・ルールの使用」を参照してください。

  • Oracle AQアダプタのヘッダー・プロパティ

    Oracle AQアダプタのヘッダー・プロパティの詳細は、Oracle AQアダプタのプロパティ」を参照してください。

  • デキュー条件

    デキュー条件は、Oracle AQアダプタで使用されるアドバンスト・キューイング製品の機能です。デキュー条件が指定され、指定された条件を満たすメッセージがない場合は、デキューが実行されません。

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

    マルチ・サブスクライバ・キューでデキューが実行される際には、メッセージを選別して特定の条件を満たすもののみを着信することが必要な場合があります。これらの条件は、優先度1のメッセージのみを選択する場合などはヘッダー情報に、$100,000を超えるローン・アプリケーションのみを選択する場合などはメッセージ・ペイロードの一部に関係します。

    マルチ・サブスクライバ・キューを選択した場合は、「メッセージ・セレクタ・ルール」フィールドが「Oracle AQアダプタ・サービスの定義」のステップ11に表示されます。priority = 1またはTAB.USER_DATA.amount > 1000など、SQLのWHERE句に似た構文を使用したブール式でサブスクリプション・ルールを入力します。アダプタにより、このブール式がtrueのメッセージのみがデキューされます。

    ノート:

    MessageSelectorRuleは、ネストされた問合せをサポートするためにDequeueConditionと組み合せて使用できます。マルチ・コンシューマ・キューへのルール・ベースのサブスクリプションの作成例は、「デキュー中のメッセージのフィルタ処理に対するメッセージ・セレクタ・ルールの使用」を参照してください。

    ヘッダー情報にアクセスするには、「ペイロード以外のフィールドへのアクセスも必要」チェック・ボックスを選択する必要があります。

    このチェック・ボックスを選択すると、生成されるWSDLファイルのtypeセクションにコードが追加されます。

    <?xml version = '1.0' encoding = 'UTF-8'?>
    <?binding.jca Inbound_aq.jca?>
    <definitions name="Inbound"   targetNamespace="http://xmlns.oracle.
       com/pcbpel/adapter/aq/Inbound/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT" xmlns:imp1="http://www.oracle.com/ipdemo">
        <types>
            <schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT">
                <import namespace="http://xmlns.oracle.com/xdb/SCOTT" schemaLocation="xsd/SCOTT_MAGAZINE_TYPE.xsd"/>
                <import namespace="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" schemaLocation="xsd/aqAdapterInboundHeader.xsd"/>
                <complexType name="HeaderCType">
                    <sequence>
                        <element name="QueueHeader" 
                                 type="hdr:HeaderType"/>
                        <element name="PayloadHeader" 
                            type="obj1:MAGAZINE_TYPE"/>
                    </sequence>
                </complexType>
                <element name="Header" type="tns:HeaderCType"/>
            </schema>
            <schema xmlns="http://www.w3.org/2001/XMLSchema">
                <import namespace="http://www.oracle.com/ipdemo" schemaLocation="xsd/simpleMagazine.xsd"/>
            </schema>
        </types>
        <message name="simpleMagazine_msg">
            <part name="simpleMagazine" 
                        element="imp1:simpleMagazine"/>
        </message>
        <message name="Header_msg">
            <part name="Header" element="tns:Header"/>
        </message>
        <portType name="Dequeue_ptt">
            <operation name="Dequeue">
                <input message="tns:simpleMagazine_msg"/>
            </operation>
        </portType>
        <plt:partnerLinkType name="Dequeue_plt">
            <plt:role name="Dequeue_role">
                <plt:portType name="tns:Dequeue_ptt"/>
            </plt:role>
        </plt:partnerLinkType>
    </definitions>
    

    PayloadHeaderは、キューのADT全体のタイプであることに注意してください。ペイロードには選択したペイロード・フィールドのみが含まれます。「ペイロード以外のフィールドへのアクセスも必要」を選択した場合、PayloadHeader(. jca.aq.HeaderDocument)にはADT全体が含まれます(ヘッダーにも存在しアダプタでは無視されるペイロード・フィールドも含まれます)。

Oracle AQアダプタのアーキテクチャ、アダプタとOracle BPEL Process ManagerおよびOracle Mediatorの統合およびアダプタのデプロイの詳細は、Oracle JCAアダプタの概要」を参照してください。

7.2.3 同期リクエスト/レスポンス

AQアダプタ構成ウィザードを使用すると、Oracle AQアダプタを同期リクエスト/レスポンス相互作用パターンに使用できるプロセスをモデル化できます。

このシナリオでは、Oracle AQアダプタはリクエスト・キューにリクエストを送信し、リプライ・キューからのレスポンスを待ってから実行を継続します。内部では、Oracle AQアダプタにより新規の相互作用パターンAQRequestReplyInteractionSpecが使用されます。この相互作用の仕様では、リクエストとリプライの宛先名を構成できます。

バリエーションにより、リプライ・キューの一部として一時的な宛先を使用できます。その後、アダプタはAQReplyToヘッダーをリプライの宛先に設定します。

7.2.3.1 AQ同期リクエスト/レスポンス相互作用パターンの構成ウィザード・フロー

次のステップに従って、AQアダプタ構成ウィザードを使用して、同期リクエスト/レスポンス用にAQアダプタを構成します。

  1. AQアダプタ構成ウィザードを開き、各初期ステップに進みます。AQアダプタの「操作」ページで、「エンキュー/デキュー」を選択します。ページの「操作名」セクションは有効です。

    「同期」を選択し、指定された操作名Enqueue_Dequeueを使用するか、独自の名前に変更します。

    図7-1 「エンキュー/デキュー」と「同期」操作が選択されたAQアダプタ構成ウィザードの「操作」画面

    図7-1の説明が続きます
    「図7-1 「エンキュー/デキュー」と「同期」操作が選択されたAQアダプタ構成ウィザードの「操作」画面」の説明
  2. 「キュー名」画面で、「アウトバウンド・キュー情報」および「インバウンド・キュー情報」を指定します。データベース・スキーマを参照して適切な「キュー名」を選択するか、デフォルト・スキーマを使用して、選択したデフォルト・スキーマで使用可能なリストから「キュー名」を選択します。
  3. 「キュー・パラメータ」画面が表示されます。次の情報を指定してから、「次へ」を選択します。次のことに注意してください
    • 「コンシューマ」フィールドで、マルチ・コンシューマ・キューのコンシューマ名を指定します。

    • 「メッセージ・セレクタ・ルール」フィールドで、メッセージ・セレクタ・ルールを指定します。メッセージ・セレクタ・ルールの使用方法の詳細は、「デキューおよびエンキューの機能」を参照してください。

    • 「デキュー条件」で、メッセージに関する条件を指定します。デキュー条件の使用方法の詳細は、「デキューおよびエンキューの機能」を参照してください。

  4. AQアダプタ構成ウィザードの「オブジェクト・ペイロード」画面が表示されます。この画面では、インバウンド・キューとアウトバウンド・キューの両方のオブジェクト・ペイロードに関する情報を入力できます。

    図7-2 AQアダプタ構成ウィザードの「オブジェクト・ペイロード」画面

    図7-2の説明が続きます
    「図7-2 AQアダプタ構成ウィザードの「オブジェクト・ペイロード」画面」の説明
    • 上部のテキストは、構造化されたオブジェクト・ペイロードを指定します。残りのテキストは、ペイロードに関する追加情報を提供します。「ビジネス・ペイロード」の場合は、オブジェクト全体または「オブジェクト内のフィールド」です。

    • 「オブジェクト内のフィールド」を選択した場合は、「ペイロード・フィールド・オプション」セクションが有効になります。ここで、直接入力するか、「参照」を選択して、フィールド名を入力します。

      「参照」を選択した場合は、「ペイロード・フィールドの選択」ブラウザが開きます。ビジネス・ペイロードが含まれるフィールド(1つまたは複数)を選択し、「OK」をクリックして、「オブジェクト・ペイロード」画面でフィールド名を移入します。

      「ペイロードの検証」を選択して、デキュー操作のペイロードを検証することもできます。このオプションが選択されている場合は、他の処理を行う前に、結果のXMLペイロードがスキーマに対して検証されます。失敗した場合、メッセージは拒否されます。

      図7-3 AQアダプタ構成ウィザードの「ペイロード・フィールドの選択」ブラウザ

      図7-3の説明が続きます
      「図7-3 AQアダプタ構成ウィザードの「ペイロード・フィールドの選択」ブラウザ」の説明

      スキーマがこれらのフィールドに生成されるようにする必要もある場合は、「ペイロード以外のフィールドへのアクセスが必要」チェック・ボックスを選択します。ADTオブジェクト属性がヘッダー・プロパティとして使用できるようにする場合は、このチェック・ボックスを選択します。たとえば、ペイロードがJPGイメージであるとします。ペイロード以外のフィールドで人物の名前を指定することが必要な場合があります。これにより、追加のヘッダー・スキーマ・ファイル(object_name.xsd、object_nameはキューで使用する構造化されたペイロード・オブジェクト)が生成されます。xsd名には、スキーマによって接頭辞が追加で付けられ、スキーマscottに接続すると、その名前はSCOTT_object_name.xsdになります。「オブジェクト」ページでADTフィールドを選択した場合、またはADT全体のペイロードが選択されている場合、スキーマを指定するための「メッセージ」ページが表示されます。構造化されたオブジェクト内のADTフィールドを指定した場合、アウトバウンドADTフィールド名はインバウンドADTフィールド名と同じである必要があります。

    • AQアダプタ構成ウィザードの「オブジェクト・ペイロード」画面の残り半分でのアウトバウンド・キューの場合と同じ方法で情報を入力します。

    • 「次へ」をクリックします。

  5. AQアダプタ構成ウィザードの「メッセージ」画面が表示されます。
    • この画面で、指定した両方のキューのフィールドに含まれるメッセージを定義するように求められます。このアダプタおよび他のアダプタの他のメッセージ画面と同様、メッセージが不透明であるかどうか、ネイティブ・フォーマット変換が必要であるかどうかを示したり、スキーマおよびURLとスキーマ要素を提供してスキーマを指定することができます。

    • 「次へ」をクリックして、同期リクエスト/レスポンス相互作用パターンでのAQアダプタの構成を完了します。

    図7-4 AQアダプタ構成ウィザードの「メッセージ」画面

    図7-4の説明が続きます
    「図7-4 AQアダプタ構成ウィザードの「メッセージ」画面」の説明
7.2.3.1.1 同期リクエスト/リプライ相互作用パターンを使用したAQアダプタの編集

SOAコンポジット・エディタを使用し、AQアダプタ・ウィザードを編集モードで起動して、前に構成したAQアダプタを選択することもできます。ただし、この方法を使用した場合、すでに定義している操作タイプは変更できませんが、選択したキューとキュー・パラメータの変更や、ペイロード・スキーマの変更は可能です。

7.2.4 同期デキュー

AQの「操作タイプ」ページで「同期デキュー」操作タイプを選択して、AQアダプタのアウトバウンド同期デキューを構成できます。

7.2.4.1 AQ同期デキューの構成ウィザード・フロー

次のステップに従って、AQアダプタ構成ウィザードを使用して、同期デキュー用にAQを構成します。

  1. 操作タイプとして「同期デキュー」を選択します。同期デキューに付けられる操作名はデフォルトでSync_Dequeueに設定されます。ただし、必要な場合はこの名前を上書きできます。

    図7-5 「同期デキュー」操作が選択され、「操作名」が「Sync_Dequeue Shown」のAQアダプタ構成ウィザードの「操作」画面

    図7-5の説明が続きます
    「図7-5 「同期デキュー」操作が選択され、「操作名」が「Sync_Dequeue Shown」のAQアダプタ構成ウィザードの「操作」画面」の説明
  2. 「次へ」をクリックします。AQアダプタ構成ウィザードの「キュー名」画面が表示されます。この画面で、このサービスに使用されるデータベース・スキーマとインバウンドおよびアウトバウンド・キューを指定できます。「次へ」をクリックします。

    図7-6 「データベース・スキーマ」がデフォルト設定され、「キュー名」が選択されたAQアダプタ構成ウィザードの「キュー名」画面

    図7-6の説明が続きます
    「図7-6 「データベース・スキーマ」がデフォルト設定され、「キュー名」が選択されたAQアダプタ構成ウィザードの「キュー名」画面」の説明
  3. 「キュー・パラメータ」画面では、デキュー操作(「コンシューマ」「メッセージ・セレクタ・ルール」および「デキュー条件」)を指定し、「次へ」をクリックします。(この画面が表示されるのは、マルチ・コンシューマ・キューを選択した場合のみです。)シングル・コンシューマ・キューを選択した場合は、2つのフィールド(「相関ID」「デキュー条件」)のみが含まれた画面が表示されます。その場合、構成ウィザードに「コンシューマ」「メッセージ・セレクタ・ルール」は表示されません。
    • コンシューマ: マルチ・コンシューマ・キューのコンシューマ名を指定します。

    • 相関ID: 1文字から30文字までの長さでオプションの相関IDを入力します。

    • メッセージ・セレクタ・ルール: メッセージ・セレクタ・ルールを指定します。メッセージ・セレクタ・ルールの使用方法の詳細は、「デキューおよびエンキューの機能」を参照してください。

    • デキュー条件: 「操作」ページでデキューを選択した場合にのみ表示され、メッセージに関する条件を指定できます。デキュー条件の使用方法の詳細は、「デキューおよびエンキューの機能」を参照してください。

    図7-7 AQアダプタ構成ウィザードの「キュー・パラメータ」画面

    図7-7の説明が続きます
    「図7-7 AQアダプタ構成ウィザードの「キュー・パラメータ」画面」の説明
7.2.4.2 同期リクエスト/リプライのJCAファイル

次の項では、同期リクエスト/リプライと同期デキューの両方のファイル・アーティファクトを指定します。次の例では、同期リクエスト/リプライ・シナリオのjcaファイルを示します。

<adapter-config name="AQService" adapter="AQ" wsdlLocation="../WSDLs/AQRequestReply.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
  <connection-factory location="eis/AQ/slc01gid" UIConnectionName="slc01gid"/>
  <endpoint-interaction portType="Enqueue_Dequeue_ptt" operation="Enqueue_Dequeue" UITransmissionPrimitive="Request-response">
    <interaction-spec className="oracle.tip.adapter.aq.v2.jca.AQRequestReplyInteractionSpec">
     <property name="EnqueueQueue" value="EDN_OAOO_QUEUE"/>
      <property name="RecipientList" value="recp1"/>
      <property name="DequueQueue" value="EDN_EVENT_QUEUE"/>
      <property name="ObjectFieldName" value="PAYLOAD"/>
     <property name="Consumer" value="cons1"/>
    </interaction-spec>
  </endpoint-interaction>
</adapter-config>
7.2.4.3 同期デキューのJCAファイル

次の例では、同期デキュー・シナリオのjcaファイルを示します。

<adapter-config name="AQSyncDequeue" adapter="AQ" wsdlLocation="../WSDLs/AQSyncDequeue.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
  <connection-factory location="eis/AQ/slc01gid" UIConnectionName="slc01gid"/>
  <endpoint-interaction portType="Sync_Dequeue_ptt" operation="Sync_Dequeue">
    <interaction-spec className="oracle.tip.adapter.aq.v2.jca.AQReceiveNoWaitInteractionSpec">
      <property name="Consumer" value="cons1"/>
      <property name="SchemaValidation" value="false"/>
      <property name="QueueName" value="EDN_OAOO_QUEUE"/>
      <property name="ObjectFieldName" value="PAYLOAD"/>
    </interaction-spec>
  </endpoint-interaction>
</adapter-config>

7.2.5 サポートされているADTペイロード・タイプ

Oracle AQアダプタでは、次のRAWタイプをサポートしています。

  • BLOB

  • CHAR

  • CLOB

  • DATE

  • DECIMAL

  • DOUBLE PRECISION

  • FLOAT

  • INTEGER

  • NUMBER

  • REAL

  • SMALLINT

  • TIMESTAMP

  • VARCHAR2

前述のリストに示したRAWタイプ以外にも、Oracle AQアダプタは、プリミティブ型およびオブジェクトの配列もサポートしています。

ノート:

現在、Oracle AQアダプタは、ADT列のTIMESTAMP WITH LOCAL TIMEZONEデータ型およびTIMESTAMP WITH TIMEZONEデータ型に対応していません。

ADT全体ではなくペイロード・フィールドを選択する場合は、ペイロード・フィールドとして次のデータ型の1つを選択します。

  • CLOB (XSDまたは不透明(Opaque)スキーマのいずれか)

  • VARCHAR2 (XSDまたは不透明(Opaque)スキーマのいずれか)

  • BLOB(不透明(Opaque)スキーマのみ)

  • XMLTYPE (XSDまたは不透明(Opaque)スキーマのいずれか)

7.2.6 ネイティブ・フォーマット・ビルダー・ウィザード

Oracle JDeveloperのネイティブ・フォーマット・ビルダー・ウィザードを使用して、AQ RAWペイロード用のファイルを含む様々なフォーマットのXSDファイルを定義できます。

ネイティブ・フォーマット・ビルダー・ウィザードの詳細は、ネイティブ・フォーマット・ビルダー・ウィザードを参照してください。

ペイロード・スキーマ

ペイロード・スキーマはペイロード・タイプに依存します。ADT全体の場合、スキーマはアダプタ構成ウィザードによって完全に生成されます。ペイロードとしてBLOBが選択されたADTの場合、次のように定義された不透明(Opaque)スキーマを使用する必要があります。

<element name="opaqueElement" type="base64Binary" />

その他すべての場合には、表7-1に示すように、スキーマを指定するか不透明(Opaque)スキーマを使用できます。

表7-1 ペイロード・スキーマ

ペイロード・タイプ サポートされているスキーマ

RAW

ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。

ADT全体

アダプタ構成ウィザードによって生成された、キュー構造に基づくスキーマを使用する必要があります。

ペイロードとしてVARCHAR2が選択されたADT

ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。

ユーザー指定のスキーマまたは不透明(Opaque)スキーマのペイロードとしてCLOBが選択されたADT

ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。

不透明(Opaque)スキーマのペイロードとしてBLOBが選択されたADT

不透明(Opaque)スキーマ。

XMLTYPE

ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。

XSDファイルはないがペイロード・データが(カンマ区切り値(CSV)形式などで)書式設定されている場合は、ネイティブ・フォーマット・ビルダー・ウィザードを使用して適切なXSDを生成できます。アダプタ構成ウィザードは、ネイティブ・フォーマット・ビルダー・ウィザードと統合されています。「アダプタ構成ウィザード - メッセージ」ウィンドウで、「ネイティブ・フォーマットのスキーマの定義」をクリックしてネイティブ・フォーマット・ビルダー・ウィザードにアクセスします。

7.2.7 正規化されたメッセージのサポート

ヘッダーの操作と伝播は、重要なビジネス統合メッセージング要件です。Oracle BPEL PMメディエータOracle JCAおよびB2Bは、顧客の統合ニーズを解決する上でヘッダー・サポートに大きく依存しています。たとえば、メッセージ・ヘッダーを介してファイル名を伝播することで、そのファイル名をソース・ディレクトリからターゲット・ディレクトリに保存できます。Oracle BPEL PMメディエータでは、様々なUIサポート・レベルでヘッダーにアクセスし、操作して設定できます。

ノート:

リリース10.1.3でサポートされているAQアダプタのインバウンド・ヘッダーとアウトバウンド・ヘッダーは、リリース11gでは正規化されたメッセージ・プロパティを介してサポートされています。

詳細は、「アダプタ内での相関サポート」を参照してください。

正規化されたメッセージのヘッダーの伝播

正規化されたメッセージは、プロパティとペイロードという2つの部分のみを持つように簡素化されています。通常、プロパティはスカラー型の名前-値のペアです。既存の複雑なヘッダーをプロパティに合せるために、プロパティはスカラー型にフラット化されています。

設計時のヘッダーの操作

複雑なプロパティは事前に決定されているため、設計時にヘッダーを操作する際のユーザー操作は合理化されています。メディエータまたはBPELデザイナでは、なんらかの予約済キーワードを使用してヘッダーを操作できます。たとえば、現在、メディエータでは、次の式を使用してインバウンド・ファイル・アダプタのfileNameヘッダーにアクセスできます:

$nmproperty.InboundFileHeaderType.fileName

ただし、この方法はユーザー入力に基づいて動的に生成されるプロパティに対処していません。たとえば、AQアダプタ・ウィザードでは、AQオブジェクトからの一部のフィールドをヘッダーとして伝播できます。選択内容に基づいてヘッダーが定義されます。これらの定義はあらかじめ決まらないため、あらかじめ決められたプロパティ定義のリストでは対応できません。動的プロパティが定義される前に、動的プロパティのヘッダー操作を設計することはできません。この制限に対応するには、必要なすべてのサービス(コンポジット・エントリ・ポイント)と参照を生成する必要があります。この制約は、動的プロパティを生成することが想定されるサービスに適用されます。動的プロパティが生成された後、コンポジットごとに格納される必要があります。その後にのみ、メディエータまたはBPELデザイナで動的プロパティを操作できます。

正規化されたメッセージのライフサイクル中に伝播する必要のあるプロパティの識別

プロパティには、メッセージのライフサイクル全体にわたって伝播される必要があるものもあれば、伝播されてはいけないものもあります。伝播される必要があるプロパティは伝播可能プロパティと呼ばれ、伝播されてはいけないプロパティは伝播不可プロパティと呼ばれます。

7.2.8 DOM2準拠

Oracle AQアダプタはDocument Object Model Level 2 (DOM 2)に準拠しているため、AQアダプタではDOM2仕様に準拠する文書オブジェクトを生成できます。

7.2.9 メッセージ・サイズ対応

Oracle AQアダプタはメッセージ・サイズ対応です。つまり、Oracle AQアダプタではメッセージ・サイズが計算され、サイズがJCAバインディング・コンポーネントにレポートされます。JCAバインディング・コンポーネントにより公開されるサイズ関連APIは、レポート目的に使用できます。

7.2.10 複数の受信者スレッド

Oracle AQアダプタは、アクティブ化エンドポイント・プロパティadapter.aq.dequeue.threadsをサポートしています。アダプタとエンタープライズ情報システム(EIS)間のインバウンド・メッセージ・フロー用として複数のスレッドを生成するには、このプロパティを設定することをお薦めします。Oracle AQアダプタの以前のバージョンでは、複数のエンドポイントを開始するためにJCAバインディング・コンポーネントによって使用されていたactivationInstancesに依存していました。

7.2.11 DequeueTimeoutプロパティ

DequeueTimeOutプロパティは、複数のインバウンド・デキュー・スレッドをサポートしています。このプロパティの値により、dequeue() APIがメッセージを待機する秒数が決まります。この秒数が経過すると、このAPIが返されて次のポーリング・サイクルが開始されます。

次の例に示すように、このプロパティをcomposite.xmlファイルに追加します。

<service name="Inbound" ui:wsdlLocation="Inbound.wsdl">
<interface.wsdl interface="http://xmlns.oracle.com/pcbpel/adapter/aq/AQ_InboundRetry_Mediator/AQ2JMSInboundRetry/Inbound%2F#wsdl.interface(Dequeue_ptt)"/>
<binding.jca config="Inbound_aq.jca">
<property name="DequeueTimeOut" type="xs:integer" many="false"override="may">10
</property>
</binding.jca>
</service>

7.2.12 デキュー・タイムアウトおよび複数のインバウンド・ポーリング・スレッドの制御

Oracle AQアダプタには、プロセスごとではなくJava仮想マシン(JVM)ごとにシステム全体単位でデキュー・タイムアウトおよび複数のインバウンド・ポーリング・スレッドを制御するためのシステム・プロパティが用意されています。

デキュー・タイムアウトを制御するためにOracle AQアダプタに用意されているシステム・プロパティは、oracle.adapter.aq.waitです。インバウンド・ポーリング・スレッドを制御するプロパティは、adapter.aq.dequeue.threadsです。

7.2.13 ストリーム・ペイロードのサポート

Oracle AQアダプタには、ストリーム・ペイロードのサポートが用意されています。この機能を有効化すると、ペイロードはメモリーDOM内のSOAランタイムで操作されるかわりにデータベースにストリーミングされます。この機能は、大きなペイロードの処理中に使用します。ストリーム・ペイロードのサポートを有効化するには、Oracle JDeveloper (JDeveloper)でデキュー操作パラメータを定義する際に「ストリーミングの有効化」チェック・ボックスを選択する必要があります。「ストリーミングの有効化」チェック・ボックスを選択すると、次の例に示すように、対応するブール・プロパティEnableStreamingがそれぞれの.jcaファイルに定義されているActivationSpecプロパティに追加されます。EnableStreamingプロパティが存在しない場合は、デフォルト値のfalseとみなされます。このプロパティは、Rawメッセージ、XMLTypeメッセージおよびADT属性を介してペイロードが指定されるADTタイプのメッセージを処理する際に適用可能です。

<activation-spec className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
      <property name="QueueName" value="RAW_IN_QUEUE"/>
      <property name="DatabaseSchema" value="SCOTT"/>
      <property name="EnableStreaming" value="true"/>
</activation-spec>

7.2.14 Oracle AQアダプタのインバウンドの再試行

Oracle AQアダプタのインバウンド再試行を構成し、jca.retry.countサービスのバインディング・プロパティを指定して、再試行可能な例外に6回以上再試行する場合は、jca.retry.countに使用されている値よりも大きいmax_retries値でキューが作成されるようにしてください。何も指定しなければ、キューはmax_retries値5を使用して作成されますが、これは、メッセージが5回の再試行後に例外キューに送られ、以降の処理のためにアダプタに配信されないことを意味します。5以下の値を使用して jca.retry.countを指定すれば、キューのmax_retriesプロパティを変更する必要はありません。

キューの作成時に、次のコードを使用してmax_retriesプロパティを変更します。

begin
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'RAW_IN_QUEUE_TABLE',queue_payload_type => 'RAW');
DBMS_AQADM.CREATE_QUEUE ( queue_name => 'RAW_IN_QUEUE',queue_table=> 'RAW_IN_QUEUE_TABLE', max_retries=>1500);
DBMS_AQADM.START_QUEUE ( queue_name => 'RAW_IN_QUEUE');
DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'RAW_OUT_QUEUE_TABLE', queue_payload_type => 'RAW');
DBMS_AQADM.CREATE_QUEUE ( queue_name  => 'RAW_OUT_QUEUE', queue_table => 'RAW_OUT_QUEUE_TABLE');
DBMS_AQADM.START_QUEUE ( queue_name => 'RAW_OUT_QUEUE');
end;

7.2.15 エラー処理のサポート

エラー処理については、「エラー処理」を参照してください。

7.2.16 パフォーマンス・チューニング

Oracle AQアダプタでは、パフォーマンス・チューニング機能がサポートされています。

詳細は、「Oracle JCAアダプタ・チューニング・ガイド」および「Oracle JCAアダプタのプロパティ」を参照してください。

7.3 Oracle AQアダプタのデプロイメント

Oracle AQアダプタは、インストールの一部としてアプリケーション・サーバーにデプロイされます。これには、データソースjdbc/aqSampleを指す単一アダプタ・インスタンス・エントリeis/AQ/aqSampleが含まれています。データソースはインストールの一部として作成されないため、手動で作成する必要があります。データベースへの接続情報は、データソース定義内にあります。

インストールの時点で存在するOracle AQアダプタ・インスタンスeis/AQ/aqSampleを使用するSOAプロジェクトをデプロイする場合は、最初にデータソースjdbc/aqSampleを作成する必要があります。一方、新しいアダプタ・インスタンスを使用する場合は、新しいアダプタ・インスタンスを追加してアプリケーション・サーバーを再起動する必要があります。これは、既存のアダプタ・インスタンスjdbc/aqSampleで参照されるデータソースとは別のデータソースを指すようにする場合や、まだ存在しないアダプタ・インスタンスの名前を選択した場合などです。たとえば、JDeveloperでDBConnection1という名前の接続を作成した場合、図7-12に示すように、AQアダプタ・サービスはデフォルトでeis/AQ/DBConnection1を指します。

また、次のコード・スニペットに示すように.jca ファイルを確認することによって、サービスがどのアダプタ・インスタンスを指しているかを確認できます。

<connection-factory location="eis/AQ/aqSample" … />

前述の例では、場所は実行時のアダプタ・インスタンスのJNDI名です。

新しいAQアダプタ・インスタンスを作成するには、「アダプタ・コネクション・ファクトリの追加」の説明に従ってOracle WebLogic管理コンソールを使用するか、weblogic-ra.xmlファイルを直接編集します。weblogic-ra.xmlを編集するステップは、次のとおりです。

  1. fmwhome/でAqAdapter.rarを検索します。

  2. ファイルを解凍します。

  3. META-INF/weblogic-ra.xml(および、場合によってはra.xml)を編集します。

  4. このファイルから再びJARを作成します。

  5. アプリケーション・サーバーを再起動します。

weblogic-ra.xmlに含まれるサンプルAQアダプタ・インスタンスを次に示します。

例 - weblogic-ra.xmlに含まれるサンプルAQアダプタ・インスタンス

<connection-instance>
  <jndi-name>eis/AQ/aqSample</jndi-name>
  <connection-properties>
    <properties>
      <property>
         <name>XADataSourceName</name>
         <value>jdbc/aqSample</value>
      </property>
      <property>
    <name>DataSourceName</name>
    <value></value>
      </property>
      <property>
    <name>ConnectionString</name>
    <value></value>
      </property>
      <property>
    <name>UserName</name>
    <value></value>
      </property>
      <property>
    <name>Password</name>
    <value></value>
      </property>
      <property>
    <name>DefaultNChar</name>
    <value>false</value>
      </property>
      <property>
    <name>UseDefaultConnectionManager</name>
    <value>false</value>
      </property>
    </properties>
  </connection-properties>
</connection-instance>

必須プロパティは、jndi-nameXADataSourceNameまたはDataSourceNameです。jndi-nameプロパティは、.jcaファイル内の場所属性に一致している必要があり、アダプタ・インスタンスの名前を表しています。XADataSourceNameまたはDataSourceNameプロパティは、基礎となるデータソース(接続情報が設定されている)の名前です。XADataSourceNameまたはDataSourceNameのいずれかのプロパティを指定します。使用方法は、シナリオに関与していてアダプタもグローバル・トランザクションに加える必要があるかどうか、またはローカル・トランザクション・セマンティクスが十分かどうかに応じて異なります。前者の場合にはXADataSourceNameを指定する必要があり、後者の場合にはDataSourceNameを指定する必要があります。XADataSourceNameプロパティを指定する場合は、プロパティによって参照される物理データソースでXAが有効化されていることを確認します。ただし、DataSourceNameプロパティを指定する場合は、プロパティによって参照される物理データソースでXAが有効化されている場合もされていない場合もあります。

最も一般的なミス

デプロイメントに関する最も一般的なミスとして、次の2つがあります。

  • .jcaファイル内の場所属性に一致するアダプタ・インスタンス・エントリが作成されていません(または、インスタンスが1つも作成されていません)。

  • .jcaファイル内の場所属性にデータソース名を直接設定しています。

後者の場合は、アダプタ・インスタンス名(eis/AQ/...)を指定し、このインスタンス名がデータソース・プール(jdbc/...)を指すというように間接的に指定する必要があります。一般的なミスは、このように間接的に指定せず、名前jdbc/...を場所属性に直接指定することです。

その他のアダプタ・インスタンス・プロパティ

AQアダプタ・インスタンスには、xADataSourceNamedataSourceName以外にもプロパティがあります。

Oracle AQアダプタ・インスタンス・プロパティの詳細は、Oracle AQアダプタのプロパティ」を参照してください。

7.4 Oracle AQアダプタの使用例

この項では、Oracle AQアダプタに関する次の使用例を説明します。

7.4.1 一般的な使用例

次の使用例には、アダプタ構成ウィザードの概要が含まれ、様々な状況において通常の手順を変更する方法の例も示します。それぞれの例では、生成されるWSDLファイルとJCAファイルの関連部分を示しています。

この項には次のトピックが含まれます:

7.4.1.1 アダプタ構成ウィザードの概要

この例では、service_typeオブジェクト内の1つのフィールドであるペイロードとユーザー定義スキーマを設定して、メッセージをservice_in_queueキューにデキューするOracle AQアダプタ・サービスを作成します。

この項では、JDeveloperでアダプタ構成ウィザードを使用してOracle AQアダプタを構成する際の必須タスクについて説明します。

この項には次のトピックが含まれます:

7.4.1.1.1 前提条件

この例は、基本的なBPELコンストラクト(アクティビティやパートナ・リンクなど)と、BPELコンポジットを作成およびデプロイするJDeveloper環境をよく理解していることを前提としています。

SCOTTスキーマを持つデータベースへのアクセス権限が必要です。

この使用例を実行するには、まず次のファイルを作成し、次の順序で実行する必要があります:

  • setup_user.sql

  • create_type_service.sql

  • create_queues.sql

  • dequeue_service.sql

  • enqueue_service.sql

setup_user.sqlの内容

grant connect, resource to scott;
;
grant aq_administrator_role to scott;
;

create_type_service.sqlの内容

create type SERVICE_TYPE as OBJECT (
        MSG_ID                                          VARCHAR2(128),
        INREPLYTO_MSG_ID                                VARCHAR2(128),
	    FROM_PARTY                                      VARCHAR2(512),
	    TO_PARTY                                        VARCHAR2(512),
        ACTION_NAME                                     VARCHAR2(512),
        DOCTYPE_NAME                                    VARCHAR2(512),
        DOCTYPE_REVISION                                VARCHAR2(512),
        MSG_TYPE                                        INT,
        PAYLOAD                                         CLOB
)
/

create_queues.sqlの内容

begin
  dbms_aqadm.create_queue_table('service_in_table', 'service_type');   
  dbms_aqadm.create_queue('service_in_queue', 'service_in_table');
  dbms_aqadm.start_queue('service_in_queue');
  dbms_aqadm.create_queue_table('service_out_table', 'service_type');   
  dbms_aqadm.create_queue('service_out_queue', 'service_out_table');
  dbms_aqadm.start_queue('service_out_queue');
end;
/

dequeue_service.sqlの内容

set serveroutput on;
DECLARE
   enqueue_options     dbms_aq.enqueue_options_t;
   dequeue_options     dbms_aq.dequeue_options_t;
   message_properties  dbms_aq.message_properties_t;
   message_handle      RAW(16);
   msg_varchar         varchar2(4000);
   service1           service_type;
BEGIN
   dequeue_options.wait:=180;
   DBMS_AQ.DEQUEUE(
      queue_name          =>     'SERVICE_OUT_QUEUE',
      dequeue_options      =>    dequeue_options,
      message_properties  =>     message_properties,
      payload             =>     service1,
      msgid               =>     message_handle);
	 dbms_output.put_line('SERVICE.MSG_ID="' || SERVICE1.MSG_ID || '"');
	 dbms_output.put_line('SERVICE.INREPLYTO_MSG_ID="' || SERVICE1.INREPLYTO_MSG_ID || '"');		
	 dbms_output.put_line('SERVICE.FROM_PARTY="' || SERVICE1.FROM_PARTY || '"');		
	 dbms_output.put_line('SERVICE.TO_PARTY="' || SERVICE1.TO_PARTY || '"');				
	 dbms_output.put_line('SERVICE.ACTION_NAME="' || SERVICE1.ACTION_NAME || '"');				
	 dbms_output.put_line('SERVICE.DOCTYPE_NAME ="' || SERVICE1.DOCTYPE_NAME  || '"');	
	 dbms_output.put_line('SERVICE.DOCTYPE_REVISION ="' || SERVICE1.DOCTYPE_REVISION  || '"');
	 dbms_output.put_line('SERVICE.MSG_TYPE="' || SERVICE1.MSG_TYPE || '"');				
	 dbms_output.put_line('SERVICE.PAYLOAD="' || SERVICE1.PAYLOAD|| '"');				
END;
/

enqueue_service.sqlの内容

DECLARE
  enqueue_options     dbms_aq.enqueue_options_t;
  message_properties  dbms_aq.message_properties_t;
  msgid               RAW(16);
  qname                VARCHAR2(100);
  service                service_type;
BEGIN
  qname := 'service_in_queue';
  service := service_type('reply123', 'request123', 'seller', 'buyer', 'ack','b2bDoc', '1.1', 1, '<?xml version="1.0" encoding="UTF-8"?><SERVICE xmlns="http://www.oracle.com/service/contract"><DESCRIPTION>ADT with CLOB payload testcase</DESCRIPTION><RATE>100.00</RATE></SERVICE>');  
      dbms_aq.enqueue(queue_name         => qname,           
                      enqueue_options    => enqueue_options,       
                      message_properties => message_properties,     
                      payload            => service,               
                      msgid              => msgid);
  commit;
END;
/
7.4.1.1.2 アプリケーションおよびSOAプロジェクトの作成

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。アプリケーションとSOAプロジェクトを作成するステップは、次のとおりです:

  1. JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。図7-8に示すように、「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
  3. 「アプリケーション名」フィールドにアプリケーションの名前を入力します。
  4. 「アプリケーション・テンプレート」リストで、「汎用アプリケーション」を選択します。

    図7-8 「汎用アプリケーションの作成 - アプリケーションの名前付け」ページ

    図7-8の説明が続きます
    「図7-8 「汎用アプリケーションの作成 - アプリケーションの名前付け」ページ」の説明
  5. 「次へ」をクリックします。

    図7-9に示すように、「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。

  6. 「プロジェクト名」フィールドにわかりやすい名前を入力します。

    たとえば、SOACompositeと入力します。

  7. 「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。

    図7-9 「汎用アプリケーションの作成 - 汎用プロジェクトの名前付け」ページ

    図7-9の説明が続きます
    「図7-9 「汎用アプリケーションの作成 - 汎用プロジェクトの名前付け」ページ」の説明
  8. 「次へ」をクリックします。

    図7-10に示すように、「汎用アプリケーションの作成 - SOA設定の設定」ページが表示されます。

    図7-10 「汎用アプリケーションの作成 - SOA設定の設定」ページ

    図7-10の説明が続きます
    「図7-10 「汎用アプリケーションの作成 - SOA設定の設定」ページ」の説明
  9. 「コンポジット・テンプレート」リストから「BPELを使用するコンポジット」を選択して、「終了」をクリックします。

    新しいアプリケーションとSOAプロジェクトが作成されました。これにより、SOAコンポジットが自動的に作成されます。

    図7-11に示すように、「BPELプロセスの作成」ページが表示されます。

    図7-11 「BPELプロセスの作成」ページ

    図7-11の説明が続きます
    「図7-11 「BPELプロセスの作成」ページ」の説明
  10. 「名前」フィールドにBPELプロセスの名前を入力します。たとえば、CustomerDetailsと入力します。
  11. 「テンプレート」リストで「サービスを後で定義」を選択し、「OK」をクリックします。

    CustomerDetails BPELプロセスが作成されました。

7.4.1.1.3 Oracle AQアダプタ・サービスの定義

次のステップは、Oracle AQアダプタ・サービスを定義することです。次のステップに従ってOracle AQアダプタ・サービスを作成します。

  1. 「コンポーネント」から、AQアダプタを「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. サービス名を指定して「次へ」をクリックします。

    「サービス接続」ページが表示されます。

    図7-12 「アダプタ構成ウィザード - サービス接続」ページ

    図7-12の説明が続きます
    「図7-12 「アダプタ構成ウィザード - サービス接続」ページ」の説明
  3. プラス・アイコンをクリックしてデータベース接続を作成します。

    「データベース接続の作成」ページが表示されます。

    ノート:

    Oracle Applicationsを実行中のデータベースに接続する必要があります。

  4. 次の情報を入力します。

    1. 「接続の作成場所」で、「アプリケーション・リソース」を選択します。

    2. 「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。

      この例では、DBConnection1と入力します。

    3. 「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。

    4. 「ユーザー名」フィールドで、データベースへのアクセスが認証されているユーザー名を指定します。

      この例では、scottと入力します。

    5. 「ロール」フィールドで、必要に応じてロールを入力します。

      これは、データベースに指定されているSYSDBAなどの特定のデータベース・ロールである必要があります。このフィールドはオプションです。この例では、「ロール」フィールドは空白にしておきます。

    6. 「パスワード」フィールドで、指定されたユーザー名に関連付けるパスワードを指定します。

      この例では、tigerと入力します。

    7. 「パスワードの保存」「パスワードのデプロイ」を順番に選択します。

    8. 「ドライバ」リストから「thin」を選択します。

    9. 「ホスト名」フィールドで、Oracleサーバーを実行するシステムを識別する値を入力します。

      TCP/IPで解決できるIPアドレスまたはホスト名(myserverなど)を使用します。デフォルト値はlocalhostです。

    10. 「JDBCポート」フィールドで、TCP/IPポートを識別する値を入力します。デフォルトは1521です。

    11. 「SID」フィールドで、Oracleデータベース・インスタンスの一意のシステム識別子(SID)の値を入力します。

      デフォルトはXEです。

    12. 「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。

      成功メッセージが表示されます。

    13. 「OK」をクリックします。

      作成した接続が「サービス名」ページの「接続」フィールドに表示されます。

      データベース接続の作成を完了すると、「JNDI名」フィールドにJava Naming and Directory Interface (JNDI)名が移入されます。JNDI名は、サービスがBPELサーバーにデプロイされるときに使用される接続のプレースホルダとなります。JNDIをプレースホルダとして使用すると、開発とその後の本番に異なるデータベースを使用できます。

      アダプタが管理モードで確実に実行されるように、JNDI名で指定した値がOracle AQアダプタweblogic-ra.xmlファイルに存在する必要があります。デフォルトの接続インスタンスeis/AQ/aqSampleが用意されており、このフィールドのデフォルト値として使用できます。この接続インスタンスを使用するには、JNDI名jdbc/aqSampleを使用してデータソースを作成する必要もあります。

  5. 「次へ」をクリックすると、「アダプタ・インタフェース」ページが表示されます。

  6. 「操作およびスキーマから定義(後で指定)」を選択し、「次へ」をクリックします。

  7. 「操作」ページが表示されます。Oracle AQアダプタでは、3つの操作をサポートしています。

    • デキュー: キューから受信するメッセージをポーリングします。

    • エンキュー: 発信メッセージをキューに置きます。

    • エンキュー/デキュー: 発信メッセージをキューに置き、キュー上でレスポンス・メッセージを待機します。

    この例では、「Dequeue」を選択します。操作には、選択した操作名に基づいて名前が自動的に付けられます。ただし、「操作名」フィールドは編集できます。

    ノート:

    インバウンドOracle AQ Adapterを使用してADT (抽象データ型)に基づいてキューからデキューするSOAコンポジットを作成する場合、.jca configファイルのSchemaValidationプロパティがtrueに設定されていると、データを持たないフィールドは、<FIELD_NAME xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=""/>として返されます。

    SchemaValidationfalseに設定されている場合は、同じフィールドが<FILED_NAME NULL="TRUE"/>として返されます

    前者は有効なXMLで、後者は無効なXMLです。後者は11gとの下位互換性を確保するために返され、返されるXMLではスキーマの検証は行われません。次に示すのは、ADT型のCREATE OR REPLACE TYPE persons_address AS OBJECTの例です
    ( 
      streetNumber NUMBER, 
      streetName   VARCHAR2(30), 
      citySuburb   VARCHAR2(30), 
      state        VARCHAR2(4), 
      postCode     NUMBER 
    ); 
  8. 「次へ」をクリックすると、「キュー名」ページが表示されます。

  9. 「データベース・スキーマ」リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例で、「参照」をクリックします。「キューの選択」ダイアログが表示されます。

    図7-13 「キューの選択」ダイアログ

    図7-13の説明が続きます
    「図7-13 「キューの選択」ダイアログ」の説明
  10. 必要なキューを選択して「OK」をクリックし、「次へ」をクリックします。「キュー・パラメータ」ページが表示されます。

  11. パラメータ値を入力して「次へ」をクリックします。

    • コンシューマ: AQアダプタ・キュー・パラメータ・ページの「コンシューマ」セクションを使用して、キューにサブスクライブするエージェントの名前を指定します。このフィールドは、インバウンド・マルチコンシューマ・キューの場合に表示されます。

    • 相関ID: 1文字から30文字までの長さでオプションの相関IDを入力します。これは、同じ相関IDを使用したデキュー・アクティビティによって後から取得されるメッセージの識別に使用されます。

      入力する値は、非同期通信のためにエンキューの送信元とデキューの受信先で同意されています。相関IDはAQヘッダー・プロパティにマップされます。インバウンド方向の相関IDにより、デキューするメッセージの選択が可能になります。このフィールドはオプションです。値を入力しない場合は、キューにあるすべてのメッセージが処理されます。

      アウトバウンド方向の相関IDの値を入力した場合、適切なIDを持つすべてのアウトバウンド・メッセージが入力した値に設定されます。この値はアウトバウンド・ヘッダーの相関フィールドで、メッセージごとにオーバーライドできます。

    • メッセージ・セレクタ・ルール: AQアダプタ・キュー・パラメータ・ページの「メッセージ・セレクタ・ルール」を使用して、コンシューマ名を使用するエージェントを指定します。ただし、これはデキュー操作用のマルチ・コンシューマ・キューを備えたアドバンスト・キュー・アダプタ・ウィザードを使用している場合にかぎります。このフィールドに入力した場合、コンシューマ名とルールを使用するエージェントがキューに作成されます。アダプタでは、以前に作成したエージェントのルールは変更されないため、コンシューマ名は新しいエージェント名にする必要があります。入力したロジックの検証が実行されません。このフィールドはインバウンド・マルチコンシューマ・キューの場合に表示されます。

      メッセージ・セレクタ・ルールの使用方法の詳細は、「デキューおよびエンキューの機能」を参照してください。

    • デキュー条件: 「操作」ページでデキューを選択した場合にのみ表示されます。

      SQL問合せのWHERE句に似たブール式を入力します。このブール式には、メッセージ・プロパティ、ユーザー・データ・プロパティ(オブジェクト・ペイロードのみ)およびPL/SQLまたはSQL関数に関する条件を含めることができます。複数のメッセージがデキュー条件を満たす場合、デキュー順序は不定になり、キューのソート順は考慮されません。

      このフィールドは、インバウンド・シングル・コンシューマおよびマルチ・コンシューマ・キューに対して表示されます。

  12. 「次へ」をクリックします。「オブジェクト・ペイロード」ページが表示されます

    図7-14 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ

    図7-14の説明が続きます
    「図7-14 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ」の説明
    1. 「ビジネス・ペイロード」で、「オブジェクト内のフィールド」を選択します。

    2. 「ペイロード・フィールド・オプション」セクションで「参照」をクリックし、ビジネス・ペイロードが含まれるフィールドを選択します。

      図7-15 「ペイロード・フィールドの選択」ダイアログ

      図7-15の説明が続きます
      「図7-15 「ペイロード・フィールドの選択」ダイアログ」の説明
  13. フィールドを選択して「OK」をクリックします。

    この例では、「PAYLOAD (CLOB)」を選択します。

  14. 「ペイロード以外のフィールドへのアクセスも必要」を選択して「次へ」をクリックします。「メッセージ」ページが表示されます。

    「メッセージ」ページには、次のオプションが表示されます。

    • ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする): スキーマを指定しない場合は、このオプションを選択します。このオプションを選択すると、「メッセージ・スキーマ」の他のフィールドがすべて無効化されます。

    • URL: スキーマ・ファイルURLのパスを入力するか、「参照」をクリックしてパスを参照できます。

    • スキーマ要素: スキーマ要素名。

  15. この例では、「スキーマ・ファイルを参照」をクリックしてスキーマ・ファイルURLを参照します。

    「タイプ・チューザ」ダイアログが表示されます。

    図7-16 「タイプ・チューザ」ダイアログ

    図7-16の説明が続きます
    「図7-16 「タイプ・チューザ」ダイアログ」の説明
  16. リストからSERVICEを選択し、「OK」をクリックして「次へ」をクリックします。

    図7-17 「アダプタ構成ウィザード - メッセージ」ページ

    図7-17の説明が続きます
    「図7-17 「アダプタ構成ウィザード - メッセージ」ページ」の説明
  17. 「JCAエンドポイント・プロパティ」画面で「次へ」をクリックします。

  18. 「終了」画面で「終了」をクリックします。

7.4.1.1.4 生成されたWSDLおよびJCAファイル

アダプタ・サービスにより、定義済のアダプタ・インタフェースとして機能するWSDLおよびJCAファイルが生成されます。

デキュー操作用に生成されたWSDLファイルを次に示します。

<definitions name="Inbound" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT" xmlns:imp1="http://www.oracle.com/service/contract">
    <types>
    <schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT">
       <import namespace="http://xmlns.oracle.com/xdb/SCOTT" schemaLocation="xsd/SCOTT_SERVICE_TYPE.xsd"/>
        <import namespace="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" schemaLocation="xsd/aqAdapterInboundHeader.xsd"/>
            <complexType name="HeaderCType">
                <sequence>
                    <element name="QueueHeader" type="hdr:HeaderType"/>
                    <element name="PayloadHeader" type="obj1:SERVICE_TYPE"/>
                </sequence>
            </complexType>
            <element name="Header" type="tns:HeaderCType"/>
        </schema>
        <schema xmlns="http://www.w3.org/2001/XMLSchema">
            <import namespace="http://www.oracle.com/service/contract" schemaLocation="xsd/service.xsd"/>
        </schema>
    </types>
    <message name="SERVICE_msg">
        <part name="SERVICE" element="imp1:SERVICE"/>
    </message>
    <message name="Header_msg">
        <part name="Header" element="tns:Header"/>
    </message>
    <portType name="Dequeue_ptt">
        <operation name="Dequeue">
            <input message="tns:SERVICE_msg"/>
        </operation>
    </portType>
    <plt:partnerLinkType name="Dequeue_plt">
        <plt:role name="Dequeue_role">
            <plt:portType name="tns:Dequeue_ptt"/>
        </plt:role>
    </plt:partnerLinkType>
</definitions>
7.4.1.2 オブジェクトとADTペイロードのデキューおよびエンキュー

デキューとエンキューについては、「ADTキュー」を参照してください。

オブジェクト全体をペイロードとしてエンキューまたはデキューするには、次のステップを実行します:

ノート:

ALTER OBJECTなどの展開コマンドを使用してADTタイプを修正した場合は、AQアダプタによりORA-25215 SQL例外がスローされます。

この例外を回避するには、CREATE OBJECTのみを使用して(ALTER OBJECTなどの展開コマンドを発行することなく) ADTタイプに属性を追加します。

7.4.1.3 オブジェクト・ペイロードの1つの列のデキュー

これは、オブジェクト・ペイロード内の単一のフィールドまたは列をデキューする例です。

オブジェクト内の1つのフィールドをデキューするOracle AQアダプタを作成するには、アダプタ構成ウィザードの「オブジェクト・ペイロード」ページで次のステップを実行します:

  1. 「オブジェクト内のフィールド」を選択します。
  2. 「フィールド名」フィールドの端にある「参照」をクリックします。

    「ペイロード・フィールドの選択」ダイアログが表示されます。

  3. ビジネス・ペイロードを格納するフィールドを選択して「OK」をクリックします。

    図7-18に示すように、「フィールド名」フィールドに選択したフィールドが移入された状態でアダプタ構成ウィザードの「オブジェクト・ペイロード」ページが表示されます。

    図7-18 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ

    図7-18の説明が続きます
    「図7-18 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ」の説明
  4. 「ペイロード以外のフィールドへのアクセスも必要」を選択して「次へ」をクリックします。

生成されたJCAファイルの次のセグメントには、ペイロード・ヘッダー・フィールド以外に、1つのフィールド(この場合はPAYLOADという名前のフィールド)がデキューされることが指定されています。

<adapter-config name="Inbound" adapter="AQ Adapter" xmlns="http://platform.integration.oracle/blocks
    /adapter/fw/metadata">
    <connection-factory location="eis/AQ/aqSample" 
       UIConnectionName="Connection1" adapterRef=""/>
  <endpoint-activation portType="Dequeue_ptt" operation="Dequeue">
    <activation-spec    className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
      <property name="QueueName" value="SERVICE_IN_QUEUE"/>
      <property name="ObjectFieldName" value="PAYLOAD"/>
      <property name="PayloadHeaderRequired" value="true"/>
      <property name="SchemaValidation" value="false"/>
    </activation-spec>
  </endpoint-activation>
</adapter-config>
7.4.1.4 エンキュー/デキュー操作タイプの構成

この使用例では、Oracle AQアダプタが発信メッセージをキューに蓄積し、別のキュー上のレスポンス・メッセージを待機する、Oracle AQアダプタのエンキュー/デキュー操作タイプを構成する手順について説明します。

この項には次のトピックが含まれます:

7.4.1.4.1 アプリケーションおよびSOAプロジェクトの作成

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。「アプリケーションおよびSOAプロジェクトの作成」に記載されたステップに従って、アプリケーションおよびSOAプロジェクトを作成します。

7.4.1.4.2 Oracle AQアダプタ・サービスの定義

発信メッセージをキューに蓄積し、キューのレスポンス・メッセージを待機するOracle AQアダプタ・サービスを作成するステップは、次のとおりです。

  1. 「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. サービス名を指定して「次へ」をクリックします。「サービス接続」ページが表示されます。

  3. プラス・アイコンをクリックしてデータベース接続を作成します。「データベース接続の作成」ページが表示されます。

    ノート:

    Oracle Applicationsを実行中のデータベースに接続する必要があります。

  4. 次の情報を入力します。

    1. 「接続の作成場所」で、「アプリケーション・リソース」を選択します。

    2. 「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。

    3. 「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。

    4. 「ユーザー名」フィールドで、データベースへのアクセスが認証されているユーザー名を指定します。

      この例では、scottと入力します。

    5. 「ロール」フィールドで、必要に応じてロールを入力します。

      これは、データベースに指定されているSYSDBAなどの特定のデータベース・ロールである必要があります。このフィールドはオプションです。この例では、「ロール」フィールドは空白にしておきます。

    6. 「パスワード」フィールドで、指定されたユーザー名に関連付けるパスワードを指定します。

      この例では、tigerと入力します。

    7. 「パスワードの保存」「パスワードのデプロイ」を順番に選択します。

    8. 「ドライバ」リストから「thin」を選択します。

    9. 「ホスト名」フィールドで、Oracleサーバーを実行するシステムを識別する値を入力します。

      TCP/IPで解決できるIPアドレスまたはホスト名(myserverなど)を使用します。デフォルト値はlocalhostです。

    10. 「JDBCポート」フィールドで、TCP/IPポートを識別する値を入力します。デフォルトは1521です。

    11. 「SID」フィールドで、Oracleデータベース・インスタンスの一意のシステム識別子(SID)の値を入力します。

      デフォルトはXEです。

    12. 「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。

      成功メッセージが表示されます。

    13. 「OK」をクリックします。

      作成した接続が「サービス接続」ページの「接続」フィールドに表示されます。

      また、データベース接続を作成した後、「JNDI名」フィールドに移入が行われます。

      アダプタが管理モードで確実に実行されるように、JNDI名で指定した値がOracle AQアダプタweblogic-ra.xmlファイルに存在する必要があります。デフォルトの接続インスタンスeis/AQ/aqSampleが用意されており、このフィールドのデフォルト値として使用できます。この接続インスタンスを使用するには、JNDI名jdbc/aqSampleを使用してデータソースを作成する必要もあります。

  5. 「次へ」をクリックします。

    アダプタ構成ウィザードの「アダプタ・インタフェース」ページが表示されます。

  6. 「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択します。

  7. 「次へ」をクリックします。

    「操作」ページが表示されます。

  8. 「エンキュー/デキュー」を選択します。

  9. 「次へ」をクリックします。「キュー名」ページが表示されます

    図7-19 「アダプタ構成ウィザード - キュー名」ページ

    図7-19の説明が続きます
    「図7-19 「アダプタ構成ウィザード - キュー名」ページ」の説明
  10. リクエスト・キューを参照するには、「参照」をクリックします。「キューの選択」ダイアログが表示されます

    図7-20 「キューの選択」ダイアログ

    図7-20の説明が続きます
    「図7-20 「キューの選択」ダイアログ」の説明
  11. 必要なキューを選択して「OK」をクリックします。

    この例では、「CORRELATION_REQUEST」を選択します。図7-21に示すように、「キュー名」フィールドにCORRELATION_REQUESTが移入された状態で「キュー名」ページが表示されます。

  12. ステップ1213を繰り返して、キュー情報をエンキューします。

    「キュー名」ページが表示されます。

    図7-21 「アダプタ構成ウィザード - キュー名」ページ

    図7-21の説明が続きます
    「図7-21 「アダプタ構成ウィザード - キュー名」ページ」の説明
  13. 「次へ」をクリックします。「キュー・パラメータ」ページが表示されます

    図7-22 「アダプタ構成ウィザード - キュー・パラメータ」ページ

    図7-22の説明が続きます
    「図7-22 「アダプタ構成ウィザード - キュー・パラメータ」ページ」の説明
  14. 「次へ」をクリックします。「オブジェクト・ペイロード」ページが表示されます

    図7-23 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ

    図7-23の説明が続きます
    「図7-23 「アダプタ構成ウィザード - オブジェクト・ペイロード」ページ」の説明
  15. 「ビジネス・ペイロード」オプション、「オブジェクトCORRELATIONREQUEST_TYPE全体」および「オブジェクトCORRELATIONREPLY_TYPE全体」を選択します。

  16. 「次へ」をクリックします。

    「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。

  17. 「終了」をクリックします。

    同期エンキュー/デキュー操作に対して、AQアダプタ・サービスの作成を完了しました。

7.4.1.4.3 サービスとアクティビティのワイヤリング

BPELプロセスおよびアウトバウンド・アダプタ参照をアセンブルまたは接続する必要があります。コンポーネントを接続するステップは、次のとおりです。

  1. 「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のRequestReply内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

    JDeveloperのcomposite.xmlが図7-24のように表示されます。

    図7-24 JDeveloper - composite.xml

    図7-24の説明が続きます
    「図7-24 JDeveloper - composite.xml」の説明
  2. 「ファイル」「すべて保存」を順番にクリックします。

invokeアクティビティの追加

  1. 「BPELProcess1」をダブルクリックします。「BPELProcess1.bpel」ページが表示されます。

  2. 「コンポーネント」ウィンドウから設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。

  3. invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。

  4. 「名前」フィールドにinvokeアクティビティの名前を入力します。

  5. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。図7-25に示すように、「パートナ・リンク・チューザ」ダイアログが表示されます。

    図7-25 「パートナ・リンク・チューザ」ダイアログ

    図7-25の説明が続きます
    「図7-25 「パートナ・リンク・チューザ」ダイアログ」の説明
  6. 「RequestReply」を選択して「OK」をクリックします。

  7. 図7-26に示すように、「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。

    図7-26 「Invoke」ダイアログ

    図7-26の説明が続きます
    「図7-26 「起動」ダイアログ」の説明
  8. デフォルトの変数名を選択し、「OK」をクリックします。デフォルトの変数名が「変数」フィールドに移入されます。

  9. 「OK」をクリックします。図7-27に示すように、JDeveloper「BPELProcess1.bpel」ページが表示されます。

    図7-27 JDeveloper - 「BPELProcess1.bpel」ページ

    図7-27の説明が続きます
    「図7-27 JDeveloper - 「BPELProcess1.bpel」ページ」の説明

assignアクティビティの追加

  1. 「コンポーネント」ウィンドウから設計領域にassignアクティビティをドラッグ・アンド・ドロップします。

  2. assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。

  3. 「名前」フィールドにassignアクティビティの名前を入力します。

  4. 「コピー操作」タブをクリックします。

  5. 「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。

  6. 図7-28に示すように、inputVariableからoutputVariableへのコピー操作を作成します。

    図7-28 「コピー操作の作成」ダイアログ

    図7-28の説明が続きます
    「図7-28 「コピー操作の作成」ダイアログ」の説明
  7. 「コピー操作の作成」ダイアログで「OK」をクリックします。

  8. 図7-29に示すように、inputVariableからInvoke_1_Enqueue_InputVariableへの別のコピー操作を作成します。

    図7-29 「コピー操作の作成」ダイアログ

    図7-29の説明が続きます
    「図7-29 「コピー操作の作成」ダイアログ」の説明
  9. 「コピー操作の作成」ダイアログで「OK」をクリックします。

  10. 図7-30に示すように、「OK」をクリックしてJDeveloperの「BPELProcess1.bpel」ページに戻ります。

    図7-30 JDeveloper - BPELProcess1.bpel

    図7-30の説明が続きます
    「図7-30 JDeveloper - BPELProcess1.bpel」の説明
  11. 「ファイル」「すべて保存」を順番にクリックします。

receiveアクティビティの追加

  1. 「コンポーネント」ウィンドウから設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
  2. receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
  3. 「名前」フィールドにreceiveアクティビティの名前を入力します。
  4. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
  5. 「RequestReply」を選択して「OK」をクリックします。
  6. 「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
  7. デフォルトの変数名を選択し、「OK」をクリックします。デフォルトの変数名が「変数」フィールドに移入されます。
  8. 「インスタンスの作成」を選択して、「OK」をクリックします。図7-31に示すように、JDeveloperの「BPELProcess1.bpel」ページが表示されます。

    図7-31 JDeveloper - BPELProcess1.bpel

    図7-31の説明が続きます
    「図7-31 JDeveloper - BPELProcess1.bpel」の説明
7.4.1.4.4 JDeveloperを使用したデプロイ

前述のステップで作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次のステップを実行する必要があります。

  1. アプリケーション・サーバー接続を作成します。詳細は、「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
  2. アプリケーションをデプロイします。詳細は、「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
7.4.1.4.5 Oracle Fusion Middleware Controlコンソールを使用した監視

Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次のステップを実行します。

  1. http://servername:portnumber/emにナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
  2. インスタンスをクリックします。「フローのトレース」ページが表示されます。
  3. 「BPEL」コンポーネント・インスタンスをクリックします。「監査」ページが表示されます。
  4. 「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。
7.4.1.4.6 生成されたWSDLおよびJCAファイル

エンキュー/デキュー操作用に生成されたWSDLファイルを次に示します。

<?xml version = '1.0' encoding = 'UTF-8'?>
<?binding.jca Inbound_aq.jca?>
<definitions name="Inbound" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT" xmlns:imp1="http://www.oracle.com/ipdemo">
    <types>
        <schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/" xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT">
            <import namespace="http://xmlns.oracle.com/xdb/SCOTT" schemaLocation="xsd/SCOTT_MAGAZINE_TYPE.xsd"/>
            <import namespace="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/" schemaLocation="xsd/aqAdapterInboundHeader.xsd"/>
            <complexType name="HeaderCType">
                <sequence>
                    <element name="QueueHeader" type="hdr:HeaderType"/>
                    <element name="PayloadHeader" type="obj1:MAGAZINE_TYPE"/>
                </sequence>
            </complexType>
            <element name="Header" type="tns:HeaderCType"/>
        </schema>
        <schema xmlns="http://www.w3.org/2001/XMLSchema">
            <import namespace="http://www.oracle.com/ipdemo"   	schemaLocation="xsd/simpleMagazine.xsd"/>
        </schema>
<?xml version = '1.0' encoding = 'UTF-8'?>
   <?binding.jca Inbound_aq.jca?>
    <definitions name="Inbound"
    targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/
     xmlns="http://schemas.xmlsoap.org/wsdl/"
      xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/"
      xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
      xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT"
     xmlns:imp1="http://www.oracle.com/ipdemo">
     <types>
 <schema attributeFormDefault="qualified" elementFormDefault="qualified"
    targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/"
    xmlns="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/Inbound/"
xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/"

xmlns:obj1="http://xmlns.oracle.com/xdb/SCOTT">
<import namespace="http://xmlns.oracle.com/xdb/SCOTT"
schemaLocation="xsd/SCOTT_MAGAZINE_TYPE.xsd"/>
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/aq/inbound/"

     schemaLocation="xsd/aqAdapterInboundHeader.xsd"/>
<complexType name="HeaderCType">
 <sequence>
<element name="QueueHeader" type="hdr:HeaderType"/>
<element name="PayloadHeader" type="obj1:MAGAZINE_TYPE"/>
 </sequence>
</complexType>

   <element name="Header" type="tns:HeaderCType"/>
</schema>

        <schema xmlns="http://www.w3.org/2001/XMLSchema">
       <import namespace="http://www.oracle.com/ipdemo"
        schemaLocation="xsd/simpleMagazine.xsd"/>
</schema>
</types>
<message name="simpleMagazine_msg">

   <part name="simpleMagazine" element="imp1:simpleMagazine"/>
</message>
     <message name="Header_msg">
     <part name="Header" element="tns:Header"/>
</message>
<portType name="Dequeue_ptt">
    <operation name="Dequeue">
       <input message="tns:simpleMagazine_msg"/>
    </operation>
</portType>
    <plt:partnerLinkType name="Dequeue_plt">
        <plt:role name="Dequeue_role">
            <plt:portType name="tns:Dequeue_ptt"/>
        </plt:role>
   </plt:partnerLinkType>
</definitions>
             

エンキュー/デキュー操作用に生成されたJCAファイルを次に示します。

<adapter-config name="RequestReply" adapter="AQ Adapter" wsdlLocation="RequestReply.wsdl" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
  
  <connection-factory location="eis/AQ/aqSample" UIConnectionName="aqSample" adapterRef=""/>
  <endpoint-activation portType="Dequeue_ptt" operation="Dequeue" UITransmissionPrimitive="Request-response">
    <activation-spec className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
      <property name="QueueName" value="CORRELATION_REPLY"/>
    </activation-spec>
  </endpoint-activation>
 
  <endpoint-interaction portType="Enqueue_ptt" operation="Enqueue" UITransmissionPrimitive="Request-response">
    <interaction-spec className="oracle.tip.adapter.aq.outbound.AQEnqueueInteractionSpec">
      <property name="QueueName" value="CORRELATION_REQUEST"/>
    </interaction-spec>
  </endpoint-interaction>
 
</adapter-config>
7.4.1.5 デキュー中のメッセージのフィルタ処理に対する相関IDの使用

特定の相関IDのメッセージのみをデキューするアダプタを設定するには、次のステップを実行します:

アダプタにより、それと同様の相関IDでエンキューされたメッセージのみがデキューされます。

7.4.1.6 マルチ・サブスクライバ・キューからのエンキューおよびデキュー

マルチ・サブスクライバ・キューには、複数のユーザーがアクセスできます。また、それらのユーザーがキュー内の特定のタイプのメッセージのみを対象とする場合もあります。たとえば、$100,000を超えるローンには監督者の承認が必要であるのに対して、$100,000未満のローンは通常のローン承認スタッフが承認できるローン・アプリケーションがあり、そのアプリケーションにマルチ・ユーザー・キューがあるとします。この場合、BPELプロセスでは、1つのアダプタが監督者用の巨額ローンのローン・アプリケーションのエンキューに使用され、もう1つのアダプタが同じマルチ・サブスクライバ・キューにある一般スタッフ用の小額ローンのローン・アプリケーションのエンキューに使用されます。

マルチ・サブスクライバ・キューにエンキューするアダプタを指定し、「受信者」フィールドでキュー・パラメータを指定します。

「Oracle AQアダプタ・サービスの定義」のステップ11で、「受信者」フィールドにBobを指定します。

次に、受信者リストBobを使用してエンキューするOracle AQアダプタを定義して生成されたJCAファイルのコードを示します。

<adapter-config name="Inbound" adapter="AQ Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
    <connection-factory location="eis/AQ/aqSample" UIConnectionName="aqSample" adapterRef=""/>
  <endpoint-interaction portType="Enqueue_ptt" operation="Enqueue">
    <interaction-spec className="oracle.tip.adapter.aq.outbound.AQEnqueueInteractionSpec">
      <property name="QueueName" value="PURCHASEORDER_APPROVAL"/>
      <property name="RecipientList" value="Bob"/>
    </interaction-spec>
  </endpoint-interaction>
</adapter-config>

マルチ・サブスクライバ・キューからデキューすると、「キュー・パラメータ」ウィンドウが表示されます。

「コンシューマ」フィールドは、コンシューマ名またはキュー・サブスクライバ名を指定するフィールドです。デキューするメッセージのエンキュー・プロセスの「受信者」エントリと一致する必要があります。マルチ・コンシューマ・キューへのサブスクライブには、このフィールドが必要です。

次に、コンシューマ名を使用するOracle AQアダプタを定義して生成されるJCAファイルのコードを示します。

<adapter-config name="Dequer_Bob" adapter="AQ Adapter" xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
    <connection-factory location="eis/AQ/manas" UIConnectionName="aqSample" adapterRef=""/>
  <endpoint-activation portType="Dequeue_ptt" operation="Dequeue">
    <activation-spec className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
      <property name="QueueName" value="PURCHASEORDER_APPROVAL"/>
      <property name="Consumer" value="Bob"/>
      <property name="SchemaValidation" value="false"/>
    </activation-spec>
  </endpoint-activation>
</adapter-config>
7.4.1.7 デキュー中のメッセージのフィルタ処理に対するメッセージ・セレクタ・ルールの使用

次に、マルチ・コンシューマ・キューへのルール・ベースのサブスクリプションの作成例を示します。この例では、同じキュー内のメッセージをサブスクライブするために2つのサブスクライバが作成されます。このシナリオでは、メッセージはサブスクライバのサブスクリプション・ルールによってフィルタ処理されます。

  1. SQLコマンドを使用して、サービス・タイプ、マルチ・コンシューマ・キュー表およびキューを作成し、キューを開始します。この例では、デプロイするSOAコンポジットで使用されるスキーマと同じスキーマを使用して、Oracleデータベースに接続します:
    create type SERVICE_TYPE as OBJECT (
            MSG_ID             VARCHAR2(128),
            INREPLYTO_MSG_ID   VARCHAR2(128),
            FROM_PARTY         VARCHAR2(512),
            TO_PARTY           VARCHAR2(512),
            ACTION_NAME        VARCHAR2(512),
            DOCTYPE_NAME       VARCHAR2(512),
            DOCTYPE_REVISION   VARCHAR2(512),
            MSG_TYPE           INT,
            PAYLOAD            CLOB
    )
    /
    
    BEGIN
       DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table => 'service_in_table', queue_payload_type => 'service_type', multiple_consumers => TRUE);
    END;
    /
    begin
       dbms_aqadm.create_queue('service_in_queue', 'service_in_table');  
       dbms_aqadm.start_queue('service_in_queue');
    end;
    /
  2. JDeveloper AQアダプタ・ウィザードを使用して、ルールを含むAQアダプタconsumer_1を作成します。生成されたAQアダプタJCAファイルは、作成後に次のようになります:
    <adapter-config name="aqService" adapter="aq"
          wsdlLocation="../WSDLs/aqService.wsdl"
          xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
      
      <connection-factory UIConnectionName="Oracle" location="eis/AQ/aqSample"/>
      <endpoint-activation portType="Dequeue_ptt" operation="Dequeue">
        <activation-spec className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
          <property name="MessageSelectorRule" value="tab.user_data.MSG_ID='reply123'"/>
          <property name="Consumer" value="consumer_1"/>
          <property name="QueueName" value="SERVICE_IN_QUEUE"/>
          <property name="SchemaValidation" value="false"/>
        </activation-spec>
      </endpoint-activation>
    
    </adapter-config>
  3. JDeveloper AQアダプタ・ウィザードを使用して、ルールを含むAQアダプタconsumer_2を作成します。生成されたAQアダプタJCAファイルは、作成後に次のようになります:
    <adapter-config name="aqService" adapter="aq"
          wsdlLocation="../WSDLs/aqService.wsdl"
          xmlns="http://platform.integration.oracle/blocks/adapter/fw/metadata">
      
      <connection-factory UIConnectionName="Oracle" location="eis/AQ/aqSample"/>
      <endpoint-activation portType="Dequeue_ptt" operation="Dequeue">
        <activation-spec className="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec">
          <property name="MessageSelectorRule" value="tab.user_data.MSG_ID='reply124'"/>
          <property name="Consumer" value="consumer_2"/>
          <property name="QueueName" value="SERVICE_IN_QUEUE"/>
          <property name="SchemaValidation" value="false"/>
        </activation-spec>
      </endpoint-activation>
    
    </adapter-config>

    新しいサブスクライバを作成するたびに、異なるコンシューマ名にする必要があることに注意してください。consumer_1の場合、MSG_ID='reply123'のメッセージのみを受信します。consumer_2の場合、MSG_ID='reply124'のメッセージのみを受信します。ルール内のメッセージ本文のMSG_IDフィールドにアクセスしているため、MSG_IDフィールドの前にtab.user_data.接頭辞を付ける必要があります。

  4. サブスクライバは、SOAコンポジットのデプロイメント時に登録されます。SQLコマンドを使用してSOAコンポジットをデプロイした後、サブスクライバを検索できます:
    select * from AQ$service_in_table_r;

    コマンドの一般的な形式は次のとおりです:

    select * from user_schema_name.AQ$queue_table_name_r;

    ここで、user_schema_nameおよびqueue_table_nameは、適切なスキーマ名および表名です。スキーマ名を省略すると、データベースへの接続に使用される現在のスキーマ名が使用されます。

    このコマンドは、次のような結果を返します:

    SERVICE_IN_QUEUE CONSUMER_1 0 tab.user_data.MSG_ID='reply123'
    SERVICE_IN_QUEUE$21
    SERVICE_IN_QUEUE CONSUMER_2 0 tab.user_data.MSG_ID='reply124'
    SERVICE_IN_QUEUE$22
  5. メッセージをエンキューします。

    consumer_1のメッセージ:

    DECLARE
      enqueue_options     dbms_aq.enqueue_options_t;
      message_properties  dbms_aq.message_properties_t;
      msgid               RAW(16);
      qname               VARCHAR2(100);
      service             service_type;
    
    BEGIN
      qname := 'service_in_queue';
      service := service_type('reply123', 'request124', 'seller', 'buyer',
    'ack','b2bDoc', '1.1', 1, '<?xml version="1.0" encoding="UTF-8"?><SERVICE
    xmlns="http://www.oracle.com/service/contract"><DESCRIPTION>ADT with CLOB
    payload testcase</DESCRIPTION><RATE>100.00</RATE></SERVICE>');
    
          dbms_aq.enqueue(queue_name         => qname,          
                          enqueue_options    => enqueue_options,      
                          message_properties => message_properties,    
                          payload            => service,              
                          msgid              => msgid);
      commit;
    END;
    /

    consumer_2のメッセージ:

    DECLARE
      enqueue_options     dbms_aq.enqueue_options_t;
      message_properties  dbms_aq.message_properties_t;
      msgid               RAW(16);
      qname               VARCHAR2(100);
      service             service_type;
    
    BEGIN
      qname := 'service_in_queue';
      service := service_type('reply124', 'request124', 'seller', 'buyer',
    'ack','b2bDoc', '1.1', 1, '<?xml version="1.0" encoding="UTF-8"?><SERVICE
    xmlns="http://www.oracle.com/service/contract"><DESCRIPTION>ADT with CLOB
    payload testcase</DESCRIPTION><RATE>100.00</RATE></SERVICE>');
    
          dbms_aq.enqueue(queue_name         => qname,          
                          enqueue_options    => enqueue_options,      
                          message_properties => message_properties,    
                          payload            => service,              
                          msgid              => msgid);
      commit;
    END;
    /
  6. 作成したすべてを削除する場合は、次のステップを実行します。
    1. キューおよびキュー表を停止および削除するには:
      BEGIN
        DBMS_AQADM.stop_queue('service_in_queue');
        DBMS_AQADM.drop_queue('service_in_queue');
        dbms_aqadm.drop_queue_table('service_in_table');
      
      END;
      /
    2. 作成したタイプを削除するには:
      drop type SERVICE_TYPE;
    3. サブスクライバを削除するには:
      DECLARE
         subscriber       sys.aq$_agent;
      BEGIN
         subscriber := sys.aq$_agent ('consumer_1', null, null);
         DBMS_AQADM.REMOVE_SUBSCRIBER(
            queue_name => 'service_in_queue',
            subscriber => subscriber);
      END;
      /
Oracle AQの管理方法の詳細は、『Transactional Event QueuesおよびAdvanced Queuingユーザーズ・ガイド』の次の章を参照してください:

7.4.2 Oracle AQアダプタのADTキュー

このサンプルでは、ビジネス・プロセスはAQアダプタからメッセージを受信し、ペイロードをアウトバウンド・メッセージにコピーし、アウトバウンド・メッセージを使用してAQアダプタを起動します。関係するキューはADTキューです。このシナリオでは、ユーザーがADT全体をペイロードとして使用するように選択しており、AQアダプタ・ウィザードではキュー構造に従ってSCOTT_CUSTOMER_TYPE.xsdにスキーマが生成されています。実行時には、アダプタによりスキーマに一致するXMLファイルがメッセージごとに作成されます。

この項には次のトピックが含まれます:

7.4.2.1 前提条件

SCOTTスキーマを持つデータベースへのアクセス権限が必要です。

この使用例を実行するには、まず次のファイルを作成し、次の順序で実行する必要があります:

  • setup_user.sql

  • create_type_customer.sql

  • create_queues.sql

  • enqueue_customer.sql

  • dequeue_customer.sql

setup_user.sqlの内容

grant connect to scott;
grant aq_administrator_role to scott;

create_type_customer.sqlの内容

create or replace type suite_arr as varray (5) of number;
/
create or replace type street_info as object (    street_name varchar2(100),    street_num  number,    suites      suite_arr );
/
create or replace type address_type as object (  street    street_info,  city      varchar2(100),  zip       number,  state     varchar2(2),  country   varchar2(100) );
/
create or replace type phone as object (  country_code  number,  area_code     number,  dial          number,  last_dialed   date );
/
create or replace type phone_arr as varray (10) of phone;
/
create or replace type contact_info as object (  phones  phone_arr,  email  varchar2(100),  web_address  varchar2(256) );
/
create or replace type customer_type as object (      name   varchar2(100),      location  address_type,  sex char, age float,height DOUBLE PRECISION ,mark decimal  ,  contacts  contact_info,      contract  CLOB,tstamp TIMESTAMP );
/

create_queues.sqlの内容

begin 
dbms_aqadm.create_queue_table('customer_in_table', 'customer_type');      dbms_aqadm.create_queue('customer_in_queue', 'customer_in_table');  
dbms_aqadm.start_queue('customer_in_queue'); 
dbms_aqadm.create_queue_table('customer_out_table', 'customer_type');      dbms_aqadm.create_queue('customer_out_queue', 'customer_out_table'); 
dbms_aqadm.start_queue('customer_out_queue'); 
end;
/

enqueue_customer.sqlの内容

DECLARE
  qname               VARCHAR2(100);
  enqueue_options     dbms_aq.enqueue_options_t;
  message_properties  dbms_aq.message_properties_t;
  msgid               RAW(16);
  contract_msg        VARCHAR2(1000);
  suites suite_arr;
  str street_info;
  addr address_type;
  ph1 phone;
  ph2 phone;
  phs phone_arr;
  ci contact_info;
  cus customer_type;
BEGIN
  qname := 'customer_in_queue';
  suites := suite_arr(800, 900);
  str := street_info('Oracle Parkway', 500, suites);
  addr := address_type(str, 'Redwood Shores',94065, 'CA', 'USA');
  ph1 := phone(1, 503, 5253190,to_date ('2004/04/02', 'yyyy/mm/dd'));
  ph2 := phone(1, 503, 3297507,to_date ('040905', 'MMDDYY'));
  phs := phone_arr(ph1,ph2);
  ci  := contact_info(phs, 'shashi@oracle.com', 'http://oracle.com');
  cus := customer_type('Shashi', addr,'M',27.5,5.90,86.2, ci, 'my contract 12345678','20-JUL-05 04.11.58.000000 PM');  
  dbms_aq.enqueue(queue_name         => qname,           
    enqueue_options    => enqueue_options,       
    message_properties => message_properties,     
    payload            => cus,               
    msgid              => msgid);
commit;
END;
/

dequeue_customer.sqlの内容

set serveroutput on;
DECLARE
   enqueue_options     dbms_aq.enqueue_options_t;
   dequeue_options     dbms_aq.dequeue_options_t;
   message_properties  dbms_aq.message_properties_t;
   message_handle      RAW(16);
   msg_varchar         varchar2(4000);
   customer1           customer_type;
   tempstr             varchar2(200);
BEGIN
   dequeue_options.wait:=180;
   DBMS_AQ.DEQUEUE(
      queue_name          =>     'CUSTOMER_OUT_QUEUE',
      dequeue_options      =>    dequeue_options,
      message_properties  =>     message_properties,
      payload             =>     customer1,
      msgid               =>     message_handle);
   tempstr:=to_char(customer1.tstamp,'YYYY/MM/DD HH:MI:SS');
   dbms_output.put_line('customer.name = "' || customer1.NAME || '"');
   dbms_output.put_line('customer.location.street.street_name = "' || customer1.LOCATION.STREET.STREET_NAME || '"');
   dbms_output.put_line('customer.location.street.street_num = "' || customer1.LOCATION.STREET.STREET_NUM|| '"');
   dbms_output.put_line('customer1.LOCATION.CITY = "' || customer1.LOCATION.CITY|| '"');
   dbms_output.put_line('customer1.LOCATION.ZIP = "' || customer1.LOCATION.ZIP|| '"');
   dbms_output.put_line('customer1.LOCATION.STATE = "' || customer1.LOCATION.STATE|| '"');
   dbms_output.put_line('customer1.LOCATION.COUNTRY = "' || customer1.LOCATION.COUNTRY|| '"');
   dbms_output.put_line('customer.location.country = "' || customer1.location.country  || '"');
   dbms_output.put_line('customer.contract = "' || customer1.CONTRACT|| '"');
   dbms_output.put_line('customer.name = "' || customer1.NAME || '"');
   dbms_output.put_line('customer.location.street.street_name = "' || customer1.LOCATION.STREET.STREET_NAME || '"');
   dbms_output.put_line('customer.location.street.street_num = "' || customer1.LOCATION.STREET.STREET_NUM|| '"');
   dbms_output.put_line('customer.location.country = "' || customer1.location.country  || '"');
   dbms_output.put_line('customer.contract = "' || customer1.CONTRACT|| '"');
   dbms_output.put_line('customer1.SEX = "' || customer1.SEX|| '"');
   dbms_output.put_line('customer1.AGE = "' || customer1.AGE|| '"');
   dbms_output.put_line('customer1.HEIGHT = "' || customer1.HEIGHT|| '"');
   dbms_output.put_line('customer1.MARK = "' || customer1.MARK|| '"');
   dbms_output.put_line('customer1.contract = "' || customer1.CONTRACT|| '"');
   dbms_output.put_line('customer1.CONTACTS.EMAIL = "' || customer1.CONTACTS.EMAIL|| '"');
   dbms_output.put_line('customer1.CONTACTS.WEB_ADDRESS = "' || customer1.CONTACTS.WEB_ADDRESS|| '"');
   dbms_output.put_line('customer1.LOCATION.STREET.SUITES[1]  = "' || customer1.LOCATION.STREET.SUITES(1) || '"');
   dbms_output.put_line('customer1.LOCATION.STREET.SUITES[2]  = "' || customer1.LOCATION.STREET.SUITES(2) || '"');
   dbms_output.put_line('customer1.CONTACTS.PHONES(1).country_codE = "' || customer1.CONTACTS.PHONES(1).country_code|| '"');
   dbms_output.put_line('customer1.CONTACTS.PHONES(1).area_code = "' || customer1.CONTACTS.PHONES(1).area_code || '"');
   dbms_output.put_line('customer1.CONTACTS.PHONES(1).dial = "' || customer1.CONTACTS.PHONES(1).dial || '"');
   dbms_output.put_line('customer1.CONTACTS.PHONES(1).last_dialed = "' || customer1.CONTACTS.PHONES(1).last_dialed || '"');
   COMMIT;
END;
/
7.4.2.2 アプリケーションおよびSOAプロジェクトの作成

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。アプリケーションとSOAプロジェクトを作成するステップは、次のとおりです:

  1. JDeveloper「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。

    「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。

  2. 「アプリケーション名」フィールドにADTと入力して「次へ」をクリックします。

    「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。

  3. 「プロジェクト名」フィールドにADTと入力します。
  4. 「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
  5. 「次へ」をクリックします。

    「汎用アプリケーションの作成 - SOA設定の構成」ページが表示されます。

  6. 「コンポジット・テンプレート」リストから「メディエータを使用するコンポジット」を選択して「終了」をクリックします。

    新しいアプリケーションとSOAプロジェクトが作成されました。

    図7-32に示すように、「メディエータの作成」ページが表示されます。

    図7-32 「メディエータの作成」ページ

    図7-32の説明が続きます
    「図7-32 「メディエータの作成」ページ」の説明
  7. 「名前」フィールドにメディエータ・コンポーネントの名前を入力します。この例では、デフォルト名のMediator1を保持します。
  8. 「テンプレート」リストで「インタフェースを後で定義」を選択し、「OK」をクリックします。

    メディエータ・コンポーネントが作成されました。

7.4.2.3 インバウンドOracle AQアダプタの作成

次のステップに従ってインバウンドOracle AQアダプタ・サービスを作成します。

  1. 「コンポーネント」ウィンドウから「公開されたサービス」スイムレーンに「AQアダプタ」をドラッグ・アンド・ドロップします。アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「サービス名」に入力し、「次へ」をクリックします。「サービス接続」ページが表示されます。

  3. Oracle AQアダプタを構成するにはデータベース接続が必要です。新規接続を作成するか、既存のデータベース接続を選択できます。

  4. 「新規データベース接続を作成します。」アイコンをクリックしてデータベース接続を作成します。「データベース接続の作成」ページが表示されます。

  5. 「Oracle AQアダプタ・サービスの定義」のステップ4の説明に従って、データベース接続を作成します。

  6. 「OK」をクリックして新規データベース接続の作成プロセスを完了します。「サービス接続」ページが表示され、データベース接続のサマリーが示されます。

  7. 「次へ」をクリックします。「アダプタ・インタフェース」ページが表示されます。

  8. 「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択します。

  9. 「次へ」をクリックします。「操作」ページが表示されます。

  10. 「デキュー」を選択します。

  11. デフォルトの操作名を受け入れて「次へ」をクリックします。

    「キュー名」ページが表示されます。

  12. リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例では、「参照」をクリックします。

    「キューの選択」ダイアログが表示されます。

  13. 「キューの選択」ダイアログで、次のステップを実行します。

    1. 「キュー・タイプ」で「すべてのタイプ」を選択します。

    2. 「データベース・スキーマ」で「Scott」を選択します。

    3. 他の設定はデフォルト値のままにします。

    4. 「キュー」で「CUSTOMER_IN_QUEUE」を選択します。

    図7-33に、「キューの選択」ダイアログを示します。

    図7-33 インバウンド操作用のキューの選択

    図7-33の説明が続きます
    「図7-33 インバウンド操作用のキューの選択」の説明
  14. 「OK」をクリックします。

    すべてのフィールドに移入済の「キュー名」ダイアログが表示されます。

    図7-34 「キュー名」ページ

    図7-34の説明が続きます
    「図7-34 「キュー名」ページ」の説明
  15. 「次へ」をクリックします。「キュー・パラメータ」ページが表示されます。

  16. 「キュー・パラメータ」ページで、各フィールドを空白にしたままで「次へ」をクリックします。「オブジェクト・ペイロード」ページが表示されます。

  17. 「ビジネス・ペイロード」で、オブジェクト全体またはオブジェクト内の1つのフィールドのみのいずれかを選択します。

    この例では「オブジェクトCUSTOMER_TYPE全体」を選択します。

  18. 「次へ」をクリックします。「JCAエンドポイント・プロパティ」ページが表示されます。

    「参照構成」オプションを選択した場合、「JCAエンドポイント・プロパティ」画面が表示されます。詳細は、「アダプタ構成ウィザードのJCAエンドポイント・プロパティ」を参照してください。

  19. 「次へ」をクリックします。「終了」ページが表示され、ウィザードによって作成されるアダプタ・ファイルのパスと名前が示されます。

  20. 「終了」をクリックします。

    インバウンドOracle AQアダプタの定義が完了しました

7.4.2.4 アウトバウンドOracle AQアダプタの作成

次のステップに従ってアウトバウンドOracle AQアダプタ・サービスを作成します。

  1. 「コンポーネント」ウィンドウの「サービス・アダプタ」リストから、「AQアダプタ」をcomposite.xmlページ内の「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。「アダプタ構成ウィザード」が表示されます。

  2. 「サービス名」フィールドにenqueueと入力し、「次へ」をクリックします。

    「サービス接続」ページが表示されます。

  3. 「接続」で、「MyConnection」を選択して「次へ」をクリックします。

    「アダプタ・インタフェース」ページが表示されます。

  4. 「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択し、「次へ」をクリックします。

    「操作」ページが表示されます。

  5. 「操作」ページで、「エンキュー」を選択してデフォルトの操作名を受け入れます。

  6. 「次へ」をクリックします。

    「キュー名」ページが表示されます。

  7. 「キュー名」ページで、リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例では、「参照」をクリックします。

    「キューの選択」ダイアログが表示されます。

  8. 「キューの選択」ダイアログで、次のステップを実行します。

    1. 「キュー・タイプ」で「すべてのタイプ」を選択します。

    2. 「データベース・スキーマ」で「Scott」を選択します。

    3. 他の設定はデフォルト値のままにします。

    4. 「キュー」で「CUSTOMER_OUT_QUEUE」を選択します。

    図7-35 アウトバウンド操作用のキューの選択

    図7-35の説明が続きます
    「図7-35 アウトバウンド操作用のキューの選択」の説明
  9. 「OK」をクリックします。

    すべてのフィールドに移入済の「キュー名」ページが表示されます。

    図7-36 「キュー名」ページ

    図7-36の説明が続きます
    「図7-36 「キュー名」ページ」の説明
  10. 「次へ」をクリックします。

    「キュー・パラメータ」ページが表示されます。

  11. 「キュー・パラメータ」ページで、各フィールドを空白にしたままで「次へ」をクリックします。

    「オブジェクト・ペイロード」ページが表示されます。

  12. 「ビジネス・ペイロード」で、オブジェクト全体またはオブジェクト内の1つのフィールドのみのいずれかを選択します。この例では「オブジェクトCUSTOMER_TYPE全体」を選択します。

  13. 「次へ」をクリックします。

    「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。

  14. 「終了」ウィンドウで「終了」をクリックします。

    アウトバウンドOracle AQアダプタの定義が完了しました。

7.4.2.5 サービスとアクティビティのワイヤリング

作成した3つのコンポーネント(インバウンド・アダプタ・サービス、メディエータ・コンポーネントおよびアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続するステップは、次のとおりです。

  1. 「公開されたサービス」領域にあるインバウンド・アダプタ内の小さい三角形を、「コンポーネント」領域のメディエータ・コンポーネント内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
  2. 「コンポーネント」領域にあるメディエータ・コンポーネント内の小さい三角形を、「外部参照」領域のアウトバウンド・アダプタ内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

    JDeveloperのcomposite.xmlが図7-37のように表示されます。

    図7-37 JDeveloper - composite.xml

    図7-37の説明が続きます
    「図7-37 JDeveloper: composite.xml」の説明
  3. 「ファイル」「すべて保存」を順番にクリックします。
7.4.2.6 ルーティング・サービスの構成

次のステップに従ってルーティング・サービスを構成します。

  1. 「Mediator1」をダブルクリックします。

    「Mediator1.mplan」ウィンドウが表示されます。

  2. 「次を使用して変換」フィールドの端に表示される「既存のマッパー・ファイルを選択するか、新規マッパー・ファイルを作成します。」アイコンをクリックします。

    図7-38に示すように、「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。

    図7-38 「リクエスト・トランスフォーメーション・マップ」ダイアログ

    図7-38の説明が続きます
    「図7-38 「リクエスト・トランスフォーメーション・マップ」ダイアログ」の説明
  3. 「新規マッパー・ファイルの作成」を選択して「OK」をクリックします。

    図7-39に示すように、「トランスフォーメーション」ウィンドウが表示されます。

    図7-39 「トランスフォーメーション」ウィンドウ

    図7-39の説明が続きます
    「図7-39 「トランスフォーメーション」ウィンドウ」の説明
  4. マッパーの左側でソース・ルート要素を選択し、右側の宛先ルート要素へドラッグしてマップ・プリファレンスを設定します。

    図7-40に示すように、「自動マップ・プリファレンス」ダイアログが表示されます。

    図7-40 「自動マップ・プリファレンス」ダイアログ

    図7-40の説明が続きます
    「図7-40 「自動マップ・プリファレンス」ダイアログ」の説明
  5. 「OK」をクリックします。

    「アプリケーション」ウィンドウの中央ペインは、図7-41のようになります。

    図7-41 マップ・プリファレンス設定後の「アプリケーション」ウィンドウ

    図7-41の説明が続きます
    「図7-41 マップ・プリファレンス設定後の「アプリケーション」ウィンドウ」の説明
  6. マッパーの設定を保存してタブを閉じます。
  7. ルーティング・サービスの設定を保存してタブを閉じます。
7.4.2.7 Oracle WebLogic Server管理コンソールでのデータソースの構成
  1. http://servername:portnumber/consoleにナビゲートします。
  2. 必要な資格証明を使用して、Oracle WebLogic Server管理コンソールのホーム・ページを開きます。

    図7-42に示すように、Oracle WebLogic Server管理コンソールのホーム・ページが表示されます。

    図7-42 Oracle WebLogic Server管理コンソールのホーム・ページ

    図7-42の説明が続きます
    「図7-42 Oracle WebLogic Server管理コンソールのホーム・ページ」の説明
  3. 「ドメイン構造」で、「サービス」「JDBC」を選択し、「データ・ソース」をクリックします。

    図7-43に示すように、「JDBCデータ・ソースの概要」ページが表示されます。

    図7-43 「JDBCデータ・ソースの概要」ページ

    図7-43の説明が続きます
    「図7-43 「JDBCデータ・ソースの概要」ページ」の説明
  4. 「新規」をクリックします。「新しいJDBCデータ・ソースの作成」ページが表示されます。
  5. 図7-44に示すように、新しいJDBCデータソースの識別に使用するプロパティの値を入力します。

    図7-44 「新しいJDBCデータ・ソースの作成」ページ

    図7-44の説明が続きます
    「図7-44 「新しいJDBCデータ・ソースの作成」ページ」の説明
  6. 「次へ」をクリックします。図7-45に示すように、「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページが表示されます。

    図7-45 「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページ

    図7-45の説明が続きます
    「図7-45 「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページ」の説明
  7. 「次へ」をクリックします。図7-46に示すように、「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページが表示されます。

    図7-46 「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページ

    図7-46の説明が続きます
    「図7-46 「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページ」の説明
  8. 「接続プロパティ」ページで接続プロパティを入力します。
  9. 「次へ」をクリックします。図7-47に示すように、「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページが表示されます。

    図7-47 「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページ

    図7-47の説明が続きます
    「図7-47 「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページ」の説明
  10. 「構成のテスト」をクリックし、データベースの可用性および指定した接続プロパティをテストします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページの上部に接続テストに成功したことを示すメッセージが表示されます。
  11. 「次へ」をクリックします。図7-48に示すように、「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページが表示されます。

    図7-48 「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページ

    図7-48の説明が続きます
    「図7-48 「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページ」の説明
  12. ターゲットを選択して「終了」をクリックします。

    図7-49に示すように、「JDBCデータ・ソースの概要」ページが表示されます。このページでは、このドメイン内に作成されたJDBCデータ・ソース・オブジェクトの概要を示します。このリストには、作成したデータソースが表示されます。

    図7-49 「JDBCデータ・ソースの概要」ページ

    図7-49の説明が続きます
    「図7-49 「JDBCデータ・ソースの概要」ページ」の説明
  13. Oracle WebLogic Server管理コンソールを閉じます。
7.4.2.8 JDeveloperを使用したデプロイ

前述のステップで作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次のステップを実行する必要があります。

  1. アプリケーション・サーバー接続を作成します。詳細は、「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
  2. アプリケーションをデプロイします。詳細は、「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
7.4.2.9 Oracle Fusion Middleware Controlコンソールを使用した監視

Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次のステップを実行します。

  1. http://servername:portnumber/emにナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
  2. 最後の5つのインスタンス・ペインに、新規インスタンスのエントリがあります。この新規インスタンスは、メッセージをエンキューするときにトリガーされたインスタンスです。
  3. インスタンスをクリックします。「フローのトレース」ページが表示されます。
  4. 「Mediator1」コンポーネント・インスタンスをクリックします。「監査」ページが表示されます。
  5. 「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。

7.4.3 Oracle AQアダプタのRAWキュー

この使用例では、Oracle AQアダプタを使用してAQ RAWキューとの間のデキューとエンキューを実行する方法について説明します。

この項には次のトピックが含まれます:

7.4.3.1 前提条件

SCOTTスキーマを持つデータベースへのアクセス権限が必要です。

この使用例を実行するには、まず次のファイルを作成し、次の順序で.sqlファイルを実行する必要があります:

  • setup_user.sql

  • create_queues.sql

  • enqueue_raw.sql

  • dequeue_raw.sql

  • emp.xsd

setup_user.sqlの内容

grant connect, resource to scott;
grant aq_administrator_role to scott;

create_queues.sqlの内容

begin  
   DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'RAW_IN_QUEUE_TABLE', queue_payload_type => 'RAW');  
   DBMS_AQADM.CREATE_QUEUE ( queue_name => 'RAW_IN_QUEUE', queue_table => 'RAW_IN_QUEUE_TABLE');
   DBMS_AQADM.START_QUEUE ( queue_name => 'RAW_IN_QUEUE');
   DBMS_AQADM.CREATE_QUEUE_TABLE ( queue_table => 'RAW_OUT_QUEUE_TABLE', queue_payload_type => 'RAW');
   DBMS_AQADM.CREATE_QUEUE ( queue_name  => 'RAW_OUT_QUEUE', queue_table => 'RAW_OUT_QUEUE_TABLE');  
   DBMS_AQADM.START_QUEUE ( queue_name => 'RAW_OUT_QUEUE');
end;
/

enqueue_raw.sqlの内容

DECLARE
   enqueue_options     dbms_aq.enqueue_options_t;
   message_properties  dbms_aq.message_properties_t;
   message_handle      RAW(16);
   msg_in              raw(2000);
   msg_varchar         varchar2(4000);
BEGIN
   msg_varchar := '<AqRaw_End2End xmlns="http://www.oracle.com/aqSample/Raw">
<EMPS>
  <ID>34</ID>
  <EMP>
    <YEARS>21</YEARS>
    <NAME>john doe</NAME>
  </EMP>
</EMPS></AqRaw_End2End>';
   msg_in := utl_raw.cast_to_raw(msg_varchar);
   dbms_aq.enqueue(queue_name => 'raw_in_queue', enqueue_options      => enqueue_options,    message_properties   => message_properties,      payload              => msg_in,    msgid                => message_handle);
commit;
END;
/

dequeue_raw.sqlの内容

DECLARE
   enqueue_options     dbms_aq.enqueue_options_t;
   dequeue_options     dbms_aq.dequeue_options_t;
   message_properties  dbms_aq.message_properties_t;
   message_handle      RAW(16);
   msg_in              raw(2000);
   msg_out             raw(2000);
   msg_varchar         varchar2(4000);
BEGIN
   dequeue_options.wait:=180;
   DBMS_AQ.DEQUEUE(
      queue_name          =>     'RAW_OUT_QUEUE',
      dequeue_options      =>    dequeue_options,
      message_properties  =>     message_properties,
      payload             =>     msg_out,
      msgid               =>     message_handle);
   msg_varchar := utl_raw.cast_to_varchar2(msg_out);
   dbms_output.put_line('Payload = "' || msg_varchar || '"');
   insert into temp_raw values(msg_varchar);
   COMMIT;
END;
/

emp.xsdの内容

<?xml version= '1.0' encoding= 'UTF-8' ?>
<schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.oracle.com/aqSample/Raw"
     xmlns="http://www.w3.org/2001/XMLSchema" xmlns:AQAPP="http://www.oracle.com/aqSample/Raw">
    <complexType name="EMPS">
        <sequence>
            <element minOccurs="0" name="ID" type="double"/>
            <element minOccurs="0" name="EMP" type="AQAPP:EMP_TYPE"/>
        </sequence>
    </complexType>
    <complexType name="EMP_TYPE">
        <sequence>
            <element minOccurs="0" name="YEARS" type="double"/>
            <element minOccurs="0" name="NAME" type="string"/>
        </sequence>
    </complexType>
    <element name="AqRaw_End2End">
        <complexType>
            <sequence>
                <element name="EMPS" type="AQAPP:EMPS"/>
            </sequence>
        </complexType>
    </element>
</schema>
7.4.3.2 アプリケーションおよびSOAプロジェクトの作成

SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。アプリケーションとSOAプロジェクトを作成するステップは、次のとおりです:

  1. JDeveloperを開きます。
  2. 「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。

    「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。

  3. 「アプリケーション名」フィールドにRawqueueと入力します。
  4. 「アプリケーション・テンプレート」リストで、「汎用アプリケーション」を選択します。
  5. 「次へ」をクリックします。

    「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。

  6. 「プロジェクト名」フィールドにわかりやすい名前を入力します。たとえば、Raw
  7. 「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
  8. 「次へ」をクリックします。

    「汎用アプリケーションの作成 - SOA設定の構成」ページが表示されます。

  9. 「コンポジット・テンプレート」リストから「BPELを使用するコンポジット」を選択して、「終了」をクリックします。

    新しいアプリケーションとSOAプロジェクトが作成されました。これにより、SOAコンポジットが自動的に作成されます。

    「BPELプロセスの作成」ページが表示されます。

  10. 「名前」フィールドにBPELプロセスの名前を入力します。たとえば、BPELRawqueueと入力します。
  11. 「テンプレート」リストで「サービスを後で定義」を選択し、「OK」をクリックします。

    RawqueueアプリケーションとRawプロジェクトが設計領域に表示されます。

  12. 作成したemp.xsdファイル(「前提条件」を参照)をプロジェクトのxsdディレクトリにコピーします。
7.4.3.3 インバウンド・アダプタ・サービスの作成

次のステップを実行し、メッセージをキューからデキューするアダプタ・サービスを作成します。

  1. 「AQアダプタ」を、「コンポーネント」ウィンドウから「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
    アダプタ構成ウィザードの「ようこそ」ページが表示されます。
  2. 「次へ」をクリックします。

    「サービス名」ページが表示されます。

  3. 「サービス名」フィールドに「Raw-Dequeuer」と入力し、「次」をクリックします。

    「サービス接続」ページが表示されます。

  4. 「Oracle AQアダプタ・サービスの定義」のステップ4の説明に従って、データベース接続を作成します。
  5. 「次へ」をクリックします。

    「アダプタ・インタフェース」ページが表示されます。

  6. 「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択し、「次へ」をクリックします。

    「操作」ページが表示されます。

  7. 「操作」ページで、「Dequeue」を選択します。

    図7-50 「アダプタ構成ウィザード - 操作」ページ

    図7-50の説明が続きます
    「図7-50 「アダプタ構成ウィザード - 操作」ページ」の説明
  8. デフォルトの操作名を受け入れて「次へ」をクリックします。

    「キュー名」ページが表示されます。

  9. 「キュー名」ページで、「データベース・スキーマ」としてSCOTTを選択し、「キュー名」としてRAW_IN_QUEUEを選択します。

    図7-51 「アダプタ構成ウィザード - キュー名」ページ

    図7-51の説明が続きます
    「図7-51 「アダプタ構成ウィザード - キュー名」ページ」の説明
  10. 「次へ」をクリックします。

    「キュー・パラメータ」ページが表示されます。

  11. 相関IDデキュー条件を入力し、「次」をクリックします。

    「メッセージ」ページが表示されます。

  12. 「URL」フィールドの端にある「参照」をクリックします。

    「タイプ・チューザ」ダイアログが表示されます。

  13. 「プロジェクト・スキーマ・ファイル」「emp.xsd」「AQRaw_End2End」の順に選択します。

    図7-52 「タイプ・チューザ」ダイアログ

    図7-52の説明が続きます
    「図7-52 「タイプ・チューザ」ダイアログ」の説明
  14. 「OK」をクリックします。

    「メッセージ」ダイアログの「URL」フィールドにemp.xsdスキーマ・ファイルが表示されます。

    図7-53 「アダプタ構成ウィザード - メッセージ」ページ

    図7-53の説明が続きます
    「図7-53 「アダプタ構成ウィザード - メッセージ」ページ」の説明
  15. 「次」をクリックします。
    「参照構成」オプションを選択した場合、インバウンドの「JCAエンドポイント・プロパティ」画面が表示されます。詳細は、「アダプタ構成ウィザードのJCAエンドポイント・プロパティ」を参照してください。
  16. 「終了」をクリックします。Oracle AQアダプタ・サービスの構成が完了し、composite.xmlページが表示されます。

    図7-54 JDeveloperウィンドウ: 「composite.xml」ページ

    図7-54の説明が続きます
    「図7-54 JDeveloperウィンドウ: 「composite.xml」ページ」の説明
7.4.3.4 アウトバウンド・アダプタ・サービスの作成

リクエスト・メッセージをエンキューし、対応するレスポンス・メッセージ(レポート)をキューからデキューするアダプタ・サービスを作成するステップは、次のとおりです。

  1. 「コンポーネント」ウィンドウの「サービス・アダプタ」リストから、「AQアダプタ」をcomposite.xmlページ内の「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。

    アダプタ構成ウィザードの「ようこそ」ページが表示されます。

  2. 「サービス名」フィールドにRaw-Enqueuerと入力して「OK」をクリックします。

    「サービス接続」ページが表示されます。

  3. 「XAデータ・ソース」を選択して「次へ」をクリックします。

    「操作」ページが表示されます。

  4. 「エンキュー」を選択します。
  5. デフォルトの操作名を受け入れて「次へ」をクリックします。

    「キュー名」ページが表示されます。

  6. データベース・スキーマとしてSCOTTを選択し、キュー名としてRAW_OUT_QUEUEを選択します。

    図7-55 「アダプタ構成ウィザード - キュー名」ページ

    図7-55の説明が続きます
    「図7-55 「アダプタ構成ウィザード - キュー名」ページ」の説明
  7. 「次へ」をクリックします。

    「キュー・パラメータ」ページが表示されます。

  8. 相関IDを入力して「次へ」をクリックします。

    「メッセージ」ページが表示されます。

  9. 「URL」フィールドの端にある「スキーマ・ファイルを参照」をクリックします。

    「タイプ・チューザ」ダイアログが表示されます。

  10. 図7-52に示すように、「プロジェクトのスキーマ・ファイル」「emp.xsd」および「AQRaw_End2End」を順番に選択します。
  11. 「次へ」をクリックします。

    図7-53に示すように、「メッセージ」ダイアログの「URL」フィールドにemp.xsdスキーマ・ファイルが表示されます。

  12. 「次へ」をクリックします。

    「終了」ページが表示されます。

  13. 「終了」をクリックします。

    Oracle AQアダプタ・サービスの構成が完了し、composite.xmlページが表示されます。

    図7-56 JDeveloperウィンドウ: 「composite.xml」ページ

    図7-56の説明が続きます
    「図7-56 JDeveloperウィンドウ: 「composite.xml」ページ」の説明
7.4.3.5 サービスとアクティビティのワイヤリング

作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセスおよびアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続するステップは、次のとおりです。

  1. 「公開されたサービス」領域にあるRaw-Dequeuer内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
  2. 「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のRaw-Enqueuer内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。

    同様に、「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のOutboundService内のドロップ・ゾーンにドラッグします。

    JDevelopercomposite.xmlファイルが図7-57のように表示されます。

    図7-57 JDeveloper- composite.xml

    図7-57の説明が続きます
    「図7-57 JDeveloper- composite.xml」の説明
  3. 「ファイル」「すべて保存」を順番にクリックします。
  4. 「BPELRawqueue」をダブルクリックします。

    「BPELRawqueue.bpel」ページが表示されます。

  5. 「コンポーネント」ウィンドウから、receiveassignおよびinvokeアクティビティを「コンポーネント」領域にこの順序でドラッグ・アンド・ドロップします。

    図7-58に示すように、JDeveloperの「BPELRawqueue.bpel」ページが表示されます。

    図7-58 「BPELRawqueue.bpel」ページ

    図7-58の説明が続きます
    「図7-58 「BPELRawqueue.bpel」ページ」の説明
  6. receiveアクティビティをダブルクリックします。

    「Receive」ダイアログが表示されます。

  7. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。

    「パートナ・リンク・チューザ」ダイアログが表示されます。

  8. 「Raw-Dequeuer」を選択して「OK」をクリックします。

    「パートナ・リンク」フィールドに値Raw-Dequeuerが移入された状態で「Receive」ダイアログが表示されます。

  9. 「変数」フィールドの端に表示される「変数の自動作成」アイコンをクリックします。

    「変数の作成」ダイアログが表示されます。

  10. デフォルト値を受け入れて「OK」をクリックします。
  11. 図7-59 に示すように、「インスタンスの作成」ボックスを選択して「OK」をクリックします。

    図7-59 「Receive」ダイアログ

    図7-59の説明が続きます
    「図7-59 「Receive」ダイアログ」の説明
  12. invokeアクティビティをダブルクリックします。

    「Invoke」ダイアログが表示されます。

  13. 「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。

    「パートナ・リンク・チューザ」ダイアログが表示されます。

  14. 「Raw-Enqueuer」を選択して「OK」をクリックします。

    「パートナ・リンク」フィールドに値Raw-Enqueuerが移入された状態で「Invoke」ダイアログが表示されます。

  15. 「入力変数」フィールドの端に表示される「入力変数の自動作成」アイコンをクリックします。
  16. デフォルト値を受け入れて「OK」をクリックします。

    図7-60に示すように、「Invoke」ダイアログが表示されます。

    図7-60 「Invoke」ダイアログ

    図7-60の説明が続きます
    「図7-60 「起動」ダイアログ」の説明
  17. 「OK」をクリックします。
  18. assignアクティビティをダブルクリックします。

    「Assign」ダイアログが表示されます。

  19. 「+」アイコンをクリックして「コピー操作」を選択します。

    「コピー操作の作成」ダイアログが表示されます。

  20. 図7-61に示すように、変数を選択して「OK」をクリックします。

    図7-61 「コピー操作の作成」ダイアログ

    図7-61の説明が続きます
    「図7-61 「コピー操作の作成」ダイアログ」の説明
  21. 「Assign」ダイアログで「OK」をクリックします。

    図7-62に示すように、JDeveloperの「BPELRawqueue.bpel」ページが表示されます。

    図7-62 「BPELRawqueue.bpel」ページ

    図7-62の説明が続きます
    「図7-62 「BPELRawqueue.bpel」ページ」の説明
  22. 「ファイル」「すべて保存」を順番にクリックします。
7.4.3.6 Oracle WebLogic Server管理コンソールでのデータソースの構成
  1. http://servername:portnumber/consoleにナビゲートします。
  2. 必要な資格証明を使用して、Oracle WebLogic Server管理コンソールのホーム・ページを開きます。
  3. ホーム・ページの「ドメイン構造」で、「サービス」「JDBC」を選択し、「データ・ソース」をクリックします。

    「JDBCデータ・ソースの概要」ページが表示されます。

  4. 「新規」をクリックします。「新しいJDBCデータ・ソースの作成」ページが表示されます。
  5. 新しいJDBCデータ・ソースを識別するのに使用するプロパティ値を入力します。
  6. 「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページが表示されます。
  7. 「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページが表示されます。
  8. 「接続プロパティ」ページで接続プロパティを入力します。
  9. 「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページが表示されます。
  10. 「構成のテスト」をクリックし、データベースの可用性および指定した接続プロパティをテストします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページの上部に接続テストに成功したことを示すメッセージが表示されます。
  11. 「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページが表示されます。
  12. ターゲットを選択して「終了」をクリックします。

    「JDBCデータ・ソースの概要」ページが表示されます。このページでは、このドメイン内に作成されたJDBCデータ・ソース・オブジェクトの概要を示します。このリストには、作成したデータソースが表示されます。

  13. Oracle WebLogic Server管理コンソールを閉じます。
7.4.3.7 JDeveloperを使用したデプロイ

前述のステップで作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。JDeveloperを使用してアプリケーション・プロファイルをデプロイするには、次のステップを実行する必要があります。

  1. アプリケーション・サーバー接続を作成します。詳細は、「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」を参照してください。
  2. アプリケーションをデプロイします。詳細は、「JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」を参照してください。
7.4.3.8 Oracle Fusion Middleware Controlコンソールを使用した監視

Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次のステップを実行します。

  1. http://servername:portnumber/emにナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
  2. 最後の5つのインスタンス・ペインに、新規インスタンスのエントリがあります。

    これは、メッセージをエンキューするときにトリガーされたインスタンスです。

  3. インスタンスをクリックします。

    「フローのトレース」ページが表示されます。

  4. 「BPELRawqueue」コンポーネント・インスタンスをクリックします。

    「監査」ページが表示されます。

  5. 「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。