ヘッダーをスキップ
Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド
10g (10.1.3.1.0)
B31889-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

3 Oracle Application Server Adapter for Advanced Queuing

この章では、BPELプロセスまたはESBサービスによるキューの操作を可能にする、Oracle Application Server Adapter for Advanced Queuing(AQアダプタ)の使用方法を説明します。

この章には、次の項目が含まれます。

3.1 AQアダプタの概要

Oracle Streams Advanced Queuing(AQ)では、関連するアプリケーション間の双方向の非同期通信用に柔軟なメカニズムが提供されています。アドバンスト・キューはOracleデータベースの機能であるため、スケーラブルで信頼性があります。バックアップとリカバリ(Point-in-Timeリカバリも含む)、ロギング、トランザクション・サービス、およびシステム管理は、すべてデータベースから継承された機能で、アドバンスト・キューもその1つです。複数のキューで単一のアプリケーションに対応することも可能です。メッセージを様々な方法でパーティション化し、ロード・バランシングで別のレベルのスケーラビリティを実現します。詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイドおよびリファレンス』を参照してください。

この項には、次の項目が含まれます。

3.1.1 AQアダプタの機能

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

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

AQアダプタでは、エンキューおよびデキュー・オプションのヘッダーがサポートされています。ヘッダーはAQヘッダーおよびペイロード・ヘッダーで構成されています。AQヘッダーは、どのキューにも存在する標準のメッセージ・プロパティで構成されています。

AQアダプタにはアダプタ構成ウィザードからアクセスします。このウィザードはキューを参照する際や、基礎となるメタデータをJCA拡張のWSDLとして公開する際に使用します。

AQアダプタの例を参照するには、次の場所へ移動します。

Oracle_Home\bpel\samples\tutorials\124.AQAdapter

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

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

  • 相関識別子

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

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

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

  • メッセージの優先度

    エンキュー済のメッセージに優先度を指定すると、メッセージは優先度に従ってデキューされます。2つのメッセージの優先度が同じ場合、デキューの順番はエンキュー時間で決定されます。また、メッセージのソート順としてエンキュー時間の優先度を指定することで、優先度が格納順の取出し(FIFO)のキューを作成することもできます。この優先度は、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状態のメッセージは、デフォルトのデキュー・コールからマスクされます。有効期限のプロパティは有効期限の指定に使用され、メッセージが有効期限の前に消費されない場合、メッセージは自動的に例外キューに移動されます。遅延間隔、有効期限および例外キュー・プロパティは、AQアダプタのエンキュー・ヘッダーのプロパティです。

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

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

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

  • 通知オプション

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

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

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

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

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

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

  • 遅延の再試行

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

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

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

  • AQヘッダー

    表3-1に、エンキューおよびデキュー操作のAQヘッダー・プロパティをまとめます。

    表3-1 AQヘッダー・メッセージ・プロパティ

    メッセージ・プロパティ データ型 指定されていない場合のデフォルト 説明 エンキューのメッセージ・ヘッダーに含まれるかどうか デキューのメッセージ・ヘッダーに含まれるかどうか

    Priority

    Integer

    1

    メッセージの優先度。

    小さい数値ほど優先度が高くなります。

    Delay

    Integer

    0

    メッセージがデキュー可能になるまでの秒数。

    X

    Expiration

    Integer

    -1(有効期限なし)

    メッセージが失効するまでの秒数。このパラメータは遅延からのオフセットです。

    X

    Correlation

    String

    -

    ユーザーにより割り当てられた相関ID。

    RecipientList

    String

    -

    このメッセージの受信者リスト(カンマ区切り)。InteractionSpecRecipientListがオーバーライドされます。

    X

    ExceptionQueue

    String

    -

    例外キューの名前。

    X

    EnqueueTime

    String

    -

    メッセージがエンキューされた時間。

    X

    MessageID

    String

    -

    16進形式のメッセージID。

    X

    OrigMessageId

    String

    -

    16進形式の元のメッセージID。

    X

    Attempts

    Integer

    -

    メッセージのデキュー時における失敗の試行回数。

    X


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

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

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

  • BLOB

  • CHAR

  • CLOB

  • DATE

  • DECIMAL

  • DOUBLE PRECISON

  • FLOAT

  • INTEGER

  • NUMBER

  • REAL

  • SMALLINT

  • TIMESTAMP

  • VARCHAR2

また、プリミティブ型、オブジェクトまたはプリミティブのVARRAYもサポートされています。


注意:

現在、AQアダプタではADT列のTIMESTAMP WITH LOCAL TIMEZONEデータ型およびTIMESTAMP WITH TIMEZONEデータ型がサポートされていません。

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

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

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

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

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

JDeveloper BPEL Designerでは、ネイティブ・フォーマット・ビルダー・ウィザードを使用して、AQ RAWペイロード用のファイルを含む様々な形式のXSDファイルを定義できます。 詳細は、第7章「ネイティブ・フォーマット・ビルダー・ウィザード」を参照してください。ネイティブ・フォーマット・ビルダーの例を参照するには、次の場所へ移動します。

Oracle_Home\bpel\samples\tutorials\124.AQAdapter\
RawQueuePayloadUsingNativeFormat

ペイロード・スキーマ

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

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

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

表3-2 ペイロード・スキーマ

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

RAW

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

ADT全体

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

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

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

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

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

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

不透明(Opaque)スキーマ。


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

3.1.2 AQアダプタとOracle BPEL Process Managerの統合

J2CA 1.5リソース・アダプタとBPEL Process Managerを双方向で統合するために、アダプタ・フレームワークが使用されています。 アダプタ・フレームワークは規格に準拠しており、基盤となるJ2CA相互作用をWebサービスとして公開するためのWeb service Invocation Framework(WSIF)テクノロジが使用されています。

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

3.1.3 AQアダプタとOracle Enterprise Service Busの統合

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

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

ESBはBPELの後継であり、このマニュアルのほとんどの部分およびサンプルはBPELを使用することを想定しています。 ただし、アダプタの動作はBPELでもESBでも同じです。 ここでBPELに言及している箇所は、ESBで置き換えてかまいません。

3.2 AQアダプタの使用例

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

この項には、次の項目が含まれます。

3.2.1 「アダプタ構成ウィザード」の概要

次の使用例では、AQアダプタの構成に続いて、様々な状況で通常の手順を変更する方法の例を示します。それぞれの例では、生成されるWSDLファイルの関連部分を示しています。

この例では、CUSTOMER_TYPEオブジェクト(顧客の電子メール・アドレス)内の1つのフィールドであるペイロードおよびユーザー定義のスキーマを設定して、メッセージをCUSTOMER_IN_QUEUEキューにエンキューするアダプタ・サービスを作成します。

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

この項には、次の項目が含まれます。

3.2.1.1 前提条件の確認

サンプル・サービスを作成する前に、次の前提条件を満たす必要があります。

  1. なんらかのデータベースのSCOTTスキーマにアクセスします。

  2. 次の場所にあるdata-sources.xmlを検索します。

    C:\product\10.1.3.1\OracleAS_1\bpel\system\appserver\oc4j\j2ee\home\config\data-sources.xml
    
    
  3. 次のコードをdata-sources.xmlに追加してjdbc/aqSampleのデータソースを定義します。 URLでは、使用するエンドポイント・データベースを参照する必要があることに注意してください。

    <connection-pool name="aqSample_CONNECTION_POOL">
     <connection-factory factory-class="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:scott/tiger@stadd14:1521:db5617"/>
     </connection-pool>
     <managed-data-source name="AQSamplesDataSource"
     connection-pool-name="aqSample_CONNECTION_POOL" jndi-name="eis/AQ/MyConnection" />
    
    

3.2.1.2 新規BPELプロジェクトの作成

最初の構成タスクは、新規BPELプロジェクトを作成することです。 次の手順に従って新規BPELプロジェクトを作成します。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択します。 「新規ギャラリ」ダイアログ・ボックスが表示されます。

  3. 「フィルタ方法」ボックスから「すべてのテクノロジ」を選択します。 使用可能なカテゴリのリストが表示されます。

  4. 「General」ノードを開いて「Projects」を選択します。

  5. 図3-1のように、「項目」グループから「BPELプロセス・プロジェクト」を選択します。

    図3-1 新規BPELプロセス・プロジェクトの作成

    図3-1の説明が続きます
    「図3-1 新規BPELプロセス・プロジェクトの作成」の説明

  6. 「OK」をクリックします。 「BPELプロセス・プロジェクト」ダイアログ・ボックスが表示されます。

  7. 「BPELプロセス名」フィールドにわかりやすい名前を入力します。 たとえば、CustomerDetailsと入力します。

  8. 「テンプレート」ボックスから「非同期BPELプロセス」を選択します。

    図に示す「入力/出力要素」ダイアログ・ボックスが表示されます。

    図3-2 「入力/出力要素」ダイアログ・ボックス

    図3-2の説明が続きます
    「図3-2 「入力/出力要素」ダイアログ・ボックス」の説明

  9. スキーマのデフォルト値を保持して「終了」をクリックします。

  10. 図3-3のように、必須のソース・ファイル(bpel.xmlCustomerDetails.bpelおよびCustomerDetails.wsdlなど)を含む新規のBPELプロセスが作成されます。

    図3-3 新規BPELプロセス・プロジェクト

    図3-3の説明が続きます
    「図3-3 新規BPELプロセス・プロジェクト」の説明

3.2.1.3 パートナ・リンクの追加

次のタスクは、BPELプロセスにパートナ・リンクを追加することです。 パートナ・リンクでは、リンク名、タイプ、およびパートナ・サービスと相互作用するBPELプロセスのロールを定義します。

パートナ・リンクを追加するには、次の手順を実行します。

  1. 「コンポーネント・パレット」で「BPELアクティビティ」を選択し、「PartnerLink」をプロセス・ダイアグラムの枠線領域へドラッグ・アンド・ドロップします。 「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。

  2. 「WSDL設定」で「アダプタ・サービスの定義」アイコン(3番目のアイコン)をクリックします。 「アダプタ構成ウィザード」が表示されます。

  3. 「次へ」をクリックします。 「アダプタ・タイプ」ダイアログ・ボックスが表示されます。

  4. 図3-4のように、「AQアダプタ」を選択して「次へ」をクリックします。

    図3-4 Oracle Applicationsに使用するOracleASアダプタの選択

    図3-4の説明が続きます
    「図3-4 Oracle Applicationsに使用するOracleASアダプタの選択」の説明

  5. 図3-5に示す「サービス名」ダイアログ・ボックスが表示されます。 次の情報を入力します。

    1. 「サービス名」フィールドにサービス名を入力します。

    2. 「説明」フィールドにサービスの説明を入力します。 これはオプションのフィールドです。「次へ」をクリックします。

    図3-5 サービス名の指定

    図3-5の説明が続きます
    「図3-5 サービス名の指定」の説明

  6. 「サービス接続」ダイアログ・ボックスが表示されます。 「データベース・サーバーのJNDI名」フィールドにJava Naming and Directory Interface(JNDI)名を入力します。 JNDI名は、サービスがBPELサーバーにデプロイされる際に使用される接続のプレースホルダとして機能します。 これにより、開発とその後の本番に異なるデータベースを使用できます。


    関連項目:

    JNDIの概念の詳細は、『Oracle Application Server Adapter概要』を参照してください。

    図3-6に、新規データベース接続の作成方法を示します。

    図3-6 新規データベース接続の作成

    図3-6の説明が続きます
    「図3-6 新規データベース接続の作成」の説明

  7. 「新規」をクリックしてデータベース接続を定義します。 「データベース接続の作成」ウィザードが表示されます。


    注意:

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

  8. 「タイプ」ダイアログ・ボックスに次の情報を入力します。

    1. 「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、DBConnection1と入力します。

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

      図3-7に「タイプ」ダイアログ・ボックスを示します。

      図3-7 接続名と接続タイプの指定

      図3-7の説明が続きます
      「図3-7 接続名と接続タイプの指定」の説明

  9. 「次へ」をクリックします。 「認証」ダイアログ・ボックスが表示されます。

  10. 次のフィールドに情報を入力します。

    1. 「ユーザー名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、scottと入力します。

    2. 「パスワード」フィールドで、データベース接続に使用するパスワードを指定します。 この例では、tigerと入力します。

    3. 「ロール」フィールドは空白にしておきます。

    4. 「パスワードを配布」を選択します。

  11. 「次へ」をクリックします。 「接続」ダイアログ・ボックスが表示されます。

  12. 次のフィールドに情報を入力します。

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

    2. 「ホスト名」フィールドでデフォルト値の「localhost」を保持します。

    3. 「JDBCポート」フィールドで、データベース接続に使用するポート番号を指定します。 この例では、1521と入力します。

    4. 「SID」フィールドで、データベース接続に使用する一意のSID値を指定します。 この例では、ORCLと入力します。

    図3-8に「接続」ダイアログ・ボックスを示します。

    図3-8 新規データベース接続情報の指定

    図3-8の説明が続きます
    「図3-8 新規データベース接続情報の指定」の説明

  13. 「次へ」をクリックします。 「テスト」ダイアログ・ボックスが表示されます。

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

  15. 「次へ」をクリックします。 「サービス接続」ダイアログ・ボックスが表示され、データベース接続のサマリーが示されます。

  16. 「終了」をクリックして新規データベース接続の作成プロセスを完了します。

  17. 「サービス接続」ダイアログ・ボックスで「次へ」をクリックします。

    「操作」ダイアログ・ボックスが表示されます。

  18. メッセージをキューに送信するには「エンキュー」を、メッセージをキューから受信するには「デキュー」を選択します。 この例では、図3-9のように「エンキュー」を選択して「次へ」をクリックします。

    図3-9 「操作」ダイアログ・ボックス

    図3-9の説明が続きます
    「図3-9 「操作」ダイアログ・ボックス」の説明

    図3-10に示す「キュー名」ダイアログ・ボックスが表示されます。

    図3-10 「キュー名」ダイアログ・ボックス

    図3-10の説明が続きます
    「図3-10 「キュー名」ダイアログ・ボックス」の説明

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

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

  20. 必要なキューを選択して「OK」をクリックします。 この例では「Customer_In_Queue」をクリックします。

  21. データベース・スキーマを選択してから「次へ」をクリックします。

    図3-11に示す「キュー・パラメータ」ダイアログ・ボックスが表示されます。

    図3-11 「キュー・パラメータ」ダイアログ・ボックス

    図3-11の説明が続きます
    「図3-11 「キュー・パラメータ」ダイアログ・ボックス」の説明

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

    • 受信者: アダプタによりエンキューされたメッセージの受信対象者のコンシューマ名をカンマ区切りで入力します。メッセージは、すべての受信者がメッセージをデキューするまでキューに保持されます。「受信者」フィールドが空の場合は、現在アクティブなすべてのコンシューマが受信者となります。このフィールドは、表3-1で説明されているアウトバウンド・ヘッダーのRecipientListフィールドを設定することで、メッセージごとにオーバーライドできます。

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

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

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

    図3-12に示す「オブジェクト・ペイロード」ダイアログ・ボックスが表示されます。

    図3-12 「オブジェクト・ペイロード」ダイアログ・ボックス

    図3-12の説明が続きます
    「図3-12 「オブジェクト・ペイロード」ダイアログ・ボックス」の説明

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

    • 「オブジェクトCUSTOMER_TYPE全体」を選択した場合は、「次へ」をクリックして手順26に進みます。メッセージ・スキーマは自動的に生成されます。

    • 「オブジェクト内のフィールド」を選択した場合、ビジネス・ペイロードはオブジェクトの単一のフィールドに含まれます。 名前を入力するか、「参照」ボタンを使用して参照し、適切なフィールド名を指定します。選択したペイロードが含まれるフィールドは、CLOB、BLOBまたはVARCHAR2である必要があります。

      オプションで、「ペイロード以外のフィールドへのアクセスも必要」チェック・ボックスを使用できます。オブジェクト・ペイロードとは別のヘッダー・フィールドに追加の情報を指定する必要がある場合に、このチェック・ボックスを選択します。選択することにより追加のヘッダー・スキーマが生成されますが、ヘッダー変数は自動的には作成されません。ヘッダー変数は、パートナ・リンクとのヘッダーの受渡しに使用されるオプションのフィールドです。このヘッダー変数は、対応するreceiveまたはinvokeアクティビティのアダプタ・タブに作成されます。 詳細は、「JDeveloper BPEL Designerのヘッダー変数」を参照してください。

      たとえば、ペイロードがJPG画像であるとします。ペイロード以外のフィールドに人名を指定する必要があるとします。このオプションを選択すると、追加のヘッダー・スキーマ・ファイルが生成されます(object_name.xsd。ここで、object_nameはキューで使用される構造化ペイロード・オブジェクトです)。 この情報の使用方法は、「マルチ・コンシューマ・キューのルールベースのサブスクリプション」でさらに詳細に説明されています。

  24. 「ペイロード・フィールド・オプション」で、ファイル名を入力するか「参照」をクリックします。 この例では、「参照」をクリックします。

    図3-13に示す「ペイロード・フィールドの選択」ダイアログ・ボックスが表示されます。

    図3-13 「ペイロード・フィールドの選択」ダイアログ・ボックス

    図3-13の説明が続きます
    「図3-13 「ペイロード・フィールドの選択」ダイアログ・ボックス」の説明

  25. ペイロード・フィールドのリストから「TO_PARTY」を選択して「OK」をクリックします。

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

    図3-14に示す「メッセージ」ダイアログ・ボックスが表示されます。

    図3-14 「メッセージ」ダイアログ・ボックス

    図3-14の説明が続きます
    「図3-14 「メッセージ」ダイアログ・ボックス」の説明

    「メッセージ」ダイアログ・ボックスには、次のオプションが表示されます。

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

    • ネイティブ・フォーマットのスキーマの定義: ネイティブ・フォーマットの定義プロセスを支援するネイティブ・フォーマット・ビルダー・ウィザードを起動するには、これをクリックします。

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

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

    図3-15に示す「タイプの選択」ダイアログ・ボックスが表示されます。

    図3-15 「タイプの選択」ダイアログ・ボックス

    図3-15の説明が続きます
    「図3-15 「タイプの選択」ダイアログ・ボックス」の説明

  28. リストから「BPELProcessProcessRequest」を選択して「OK」をクリックします。

    「スキーマの場所」および「スキーマ要素」フィールドが入力済の状態で「メッセージ」ウィンドウが再表示されます。

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

    図3-16に示す「終了」画面が表示されます。 このダイアログ・ボックスには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。

    図3-16 「終了」画面

    図3-16の説明が続きます
    「図3-16 「終了」画面」の説明

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

    各フィールドが入力済の状態で、図3-17に示す「パートナ・リンクの作成」ダイアログ・ボックスが表示されます。

    図3-17 「パートナ・リンクの作成」ダイアログ・ボックス

    図3-17の説明が続きます
    「図3-17 「パートナ・リンクの作成」ダイアログ・ボックス」の説明

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

3.2.1.4 生成されたWSDLファイル

アダプタ・サービスにより、定義済のアダプタ・インタフェースとして機能するWSDLファイルが生成されます。 この項では、前述の例で作成されたWSDLファイルの各コード・セグメントについて説明します。

コード・セグメントのこの部分では、アダプタの名前、様々な必要なスキーマの場所およびその他の定義ファイルが定義されています。

<definitions     name="CustomerDetails1"
     targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/aq/CustomerDetails/"
     xmlns="http://schemas.xmlsoap.org/wsdl/"
     xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/aq/CustomerDetails/"
     xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
     xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
     xmlns:imp1="http://xmlns.oracle.com/BPELProcess"
     xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/aq/outbound/"
    >

次のコード・セグメントでは必要なネームスペースをインポートしています。

    <import namespace="http://xmlns.oracle.com/pcbpel/adapter/aq/outbound/" location="aqAdapterOutboundHeader.wsdl"/>
    <import namespace="http://xmlns.oracle.com/BPELProcess" location="bpelprocess.wsdl"/>

次のコード・セグメントでは、メッセージ名とパートナ・リンクのポート・タイプが定義されています。

    <message name="BPELProcessProcessRequest_msg">
        <part name="BPELProcessProcessRequest" element="imp1:BPELProcessProcessRequest"/>
    </message>
    <portType name="Enqueue_ptt">
        <operation name="Enqueue">
            <input message="tns:BPELProcessProcessRequest_msg"/>
        </operation>
    </portType>

次のコード・セグメントでは、エンキュー操作とターゲット・キューの必要なバインディングが定義され、メッセージ・ヘッダーが特定されています。

    <binding name="Enqueue_binding" type="tns:Enqueue_ptt">
    <jca:binding />
        <operation name="Enqueue">
      <jca:operation
          InteractionSpec="oracle.tip.adapter.aq.outbound.AQEnqueueInteractionSpec"
          QueueName="CUSTOMER_IN_QUEUE"
          ObjectFieldName="CONTACTS.EMAIL"
          OpaqueSchema="false" >
      </jca:operation>
      <input>
        <jca:header message="hdr:Header" part="Header"/>
      </input>
        </operation>
    </binding>
    <service name="AQ_Example">
        <port name="Enqueue_pt" binding="tns:Enqueue_binding">

次の部分では、データベース接続、コネクション・ファクトリ(oc4j-ra.xmlファイルで定義)、およびpartnerLinkTypeportTypeの名前とロールが定義されています。

<!--Your runtime connection is declared in
J2EE_HOME/application-deployments/default/AqAdapter/oc4j-ra.xml
These mcf properties here are from your design time connection and
save you from having to edit that file and restart the application server
if eis/AQ/DBConnection1 is missing.
These mcf properties are safe to remove.-->
      <jca:address location="eis/AQ/DBConnection1"
UIConnectionName="DBConnection1"
          ManagedConnectionFactory="oracle.tip.adapter.aq.AQManagedConnectionFactory"

mcf.ConnectionString="jdbc:oracle:thin:@144.25.143.7:1521:shashipc"
          mcf.UserName="apps"           mcf.Password="53CB0F044A0D3DD2C063679F18F89870" />         </port>    </service>  <plt:partnerLinkType name="Enqueue_plt" >    <plt:role name="Enqueue_role" >      <plt:portType name="tns:Enqueue_ptt" />    </plt:role>  </plt:partnerLinkType></definitions>

3.2.2 オブジェクトとADTペイロードのデキューおよびエンキュー

「アダプタ構成ウィザードの概要」では、オブジェクト内の1つのフィールドをエンキューする方法を示しました。オブジェクト全体をペイロードとしてエンキューまたはデキューするには、次の手順を実行します。

  • 手順18「エンキュー」または「デキュー」を選択します。

  • 手順23「オブジェクトCUSTOMER_TYPE全体」を選択し、手順29をスキップします。

「アダプタ構成ウィザードの概要」では、エンキュー操作の例を示しました。デキュー操作では、生成されるWSDLファイルに、エンキュー情報ではなくデキュー情報が含まれている点と、コードのjca:OperationセクションにObjectFieldNameがない点が異なります。次に示すデキュー操作のコード・サンプルを参照し、一般的な手順で生成されるWSDLファイルと比較して、これらの違いを確認してください。

    <portType name="Dequeue_ptt">
        <operation name="Dequeue">
            <input message="tns:CUSTOMER_TYPE_msg"/>
        </operation>
    </portType>
    <binding name="Dequeue_binding" type="tns:Dequeue_ptt">
    <pc:inbound_binding />
        <operation name="Dequeue">
      <jca:operation
          ActivationSpec="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec"
          QueueName="CUSTOMER_OUT_QUEUE
          OpaqueSchema="false" >
      </jca:operation>
      <input>
        <jca:header message="hdr:Header" part="Header"/>
      </input>
        </operation>

3.2.3 オブジェクト/ADTペイロードの1つの列のデキュー

概要では、オブジェクト・ペイロード内の単一のフィールドまたは列をエンキューする例を示しました。 オブジェクト内の1つのフィールドをデキューするアダプタを作成する手順は、手順18を除き同じです。ここでは、「デキュー」を選択します。

生成されたWSDLファイルの次のセグメントでは、1つのフィールド(この場合はCONTACTS.EMAIL)のデキューが指定されています。

      <jca:operation
          ActivationSpec="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec"
          QueueName="CUSTOMER_IN_QUEUE"
          ObjectFieldName="CONTACTS.EMAIL"
          OpaqueSchema="true" >
      </jca:operation>

3.2.4 大量のメッセージの処理

AQアダプタで大量のメッセージを処理する場合には、bpel.xmlファイルでcacheWSIFOperationプロパティがtrueに設定されていることを確認してください。

<BPELSuitcase>
 <BPELProcess id="HelloWorld" src="HelloWorld.bpel">
    <partnerLinkBindings>
       <partnerLinkBinding name="Dequeue">
          <property name="wsdlLocation">fileService.wsdl</property>
       </partnerLinkBinding>
       <partnerLinkBinding name="Enqueue">
          <property name="wsdlLocation">fileWriteService.wsdl</property>
          *<property name="cacheWSIFOperation">true</property>*
       </partnerLinkBinding>
    </partnerLinkBindings>

「パートナ・リンクの作成」の「プロパティ」タブ、またはパートナ・リンクの「パートナ・リンクの編集」ウィンドウを使用してこのプロパティを設定します。

3.2.5 デキュー中のメッセージのフィルタ処理に対する相関IDの使用

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

  • 手順18「デキュー」操作を選択します。

  • 手順22で相関IDを入力します。

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

生成されるWSDLファイルには、次の相関IDが含まれます。

<jca:operation
   ActivationSpec="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec"
   QueueName="CUSTOMER_OUT_QUEUE"
   Correlation="147"
   OpaqueSchema="false" >
</jca:operation>

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

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

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

手順22で、「受信者」フィールドにBobを指定します。

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

      <jca:operation
         InteractionSpec="oracle.tip.adapter.aq.outbound.AQEnqueueInteractionSpec"
          QueueName="IP_IN_QUEUE"
          DatabaseSchema="SCOTT"
          ObjectFieldName="PAYLOAD"
          PayloadHeaderRequired="true"
          RecipientList="Bob"
          OpaqueSchema="true" >
      </jca:operation>

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

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

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

      <jca:operation
          ActivationSpec="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec"
          QueueName="IP_IN_QUEUE"
          DatabaseSchema="SCOTT"
          ObjectFieldName="PAYLOAD"
          PayloadHeaderRequired="true"
          Consumer="Bob"
          OpaqueSchema="true" >
      </jca:operation>
      <input>
        <jca:header message="tns:Header_msg" part="Header"/>
      </input>
        </operation>

「メッセージ・セレクタ・ルール」フィールドを使用して、メッセージの着信ルールを入力できます。詳細は、次の項で説明されています。

手順22で説明されているように、相関IDは特定のデキュー元に対して確認するためにメッセージに割り当てられる番号です。これは、同じ相関IDを使用するサブスクライバがオンラインになった場合に備え、キューによってメッセージが相関ID付きで保存されるサブスクリプション・ルールとは異なります。

3.2.7 マルチ・コンシューマ・キューのルールベースのサブスクリプション

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

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

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

このフィールドを選択すると、生成されるWSDLのtypeセクションにコードが追加されます。

     <complexType name="HeaderCType" >
       <sequence>
         <!-- static header -->
         <element name="QueueHeader" type="hdr:HeaderType" />
         <!-- payload header -->
         <element name="PayloadHeader" type="obj1:SERVICE_TYPE" />
       </sequence>
     </complexType>
     <element name="Header" type="tns:HeaderCType" />
<element name="Header" type="tns:HeaderCType" />

生成されるWSDLのmessageセクションにもコードが追加されます。

   <message name="Header_msg">
       <part name="Header" element="tns:Header"/>
   </message>

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

ヘッダーおよびペイロード情報を使用したルールベースのサブスクリプションの実例を参照するには、次の場所へ移動します。

Oracle_Home\bpel\samples\tutorials\124.AQAdapter\
RuleBasedSubscription_Header

Oracle_Home\bpel\samples\tutorials\124.AQAdapter\
RuleBasedSubscription_Payload

3.2.8 AQアダプタを使用する際の一般的なヒント

この項では、AQアダプタの使用中に役立つヒントを示します。 この項には、次の項目が含まれます。

3.2.8.1 AQアダプタを使用する際のヒント

OC4Jでアダプタに返す前に接続が検証されるようにoracle.jdbc.pool.OracleDataSourceをコネクション・ファクトリとして使用する場合には、次の例に示すように管理データソース用の接続プールを定義するときにvalidate-connectionプロパティをtrueに設定します。

<connection-pool name="AQSAMPLE_POOL1" validate-connection='true'>
    <connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
      user="AQAMAN"
      password="AQAMAN"
      url="jdbc:oracle:thin:@bstern-sun.us.oracle.com:1521:iasdb" />
  </connection-pool>
  <managed-data-source name="AQSAMPLE_DS1"
            connection-pool-name="AQSAMPLE_POOL1"
        jndi-name="jdbc/aqSample1" tx-level="global"
        manage-local-transactions="false"
      login-timeout="0"/>

3.2.8.2 AQにJMSアダプタを使用する際のヒント

thinドライバを使用する場合は、OJMSリソース・プロバイダを定義するときに、次のプロパティをコンテナ・レベルでtrue -Doracle.jms.useNativeXA=trueに設定します。

3.3 Oracle BPEL Process ManagerでのAQアダプタの使用例

この項には、次の項目が含まれます。

3.3.1 BPELプロセスにおけるAQヘッダーの使用

AQヘッダーに含まれているエントリは、「デキューおよびエンキューの機能」で説明されています。これらのヘッダー・エントリは、サブスクリプション・ルールの構成に使用できます。

ヘッダー情報は、メッセージの送受信を行うBPELアクティビティを定義する際に、「アダプタ」タブを使用してBPEL変数に変換することも可能です。このタブでは、アダプタで使用するヘッダー変数を作成できます。

ヘッダー変数は、invokereceivereplyアクティビティ、およびpickアクティビティのOnMessageブランチに作成します。ヘッダー変数を介して渡す情報は、プロトコルによって異なります。

AQアダプタから着信するメッセージのヘッダー情報は、AQアダプタに発信される対応するメッセージのヘッダー情報とは異なることに注意してください。プロトコル固有のプロパティを取得または設定するには、ヘッダーを使用する必要があります。次の例で、ヘッダーを使用する必要がある場合について説明します。

  • AQアダプタを使用すると、メッセージのプロパティを取得および設定できます。たとえば、ビジネス・プロセスに2つの異なるフローが必要であるとします。1つは優先度の高いフローで、もう1つは優先度の低いフローです。ビジネス・プロセスに発信されるメッセージのインバウンドAQヘッダーを使用すれば、これを実現できます。同じような方法で、アウトバウンドAQヘッダーを介してアウトバウンド・メッセージの優先度を設定できます。

  • ファイルの伝播シナリオで、ファイル・アダプタを使用して、ファイルがあるファイルシステムから別のファイルシステムへ移動されています。この場合、2つのシステム全体でファイル名を保持する必要があります。どちらの方向でもファイル・ヘッダーを使用し、アウトバウンド・ファイル・ヘッダーにファイル名を設定して、インバウンド・ファイル・ヘッダーでファイル名を使用します。

3.3.2 JDeveloper BPEL Designerのヘッダー変数

次の例では、ファイル・アダプタのアウトバウンド方向のreceiveアクティビティに、特別なヘッダー変数を作成する方法を説明します。この方向またはアダプタ・タイプ以外にも作成できます。ヘッダー(AQ、JMSおよびFTP)を含む別のアダプタ・タイプを使用して、どちらの方向(インバウンドまたはアウトバウンド)にもこの変数を作成できます。

  1. 懐中電灯アイコンをクリックして、「変数の選択」ウィンドウを表示します。

  2. 2番目の「変数」フォルダを選択して「作成」をクリックし、「変数の作成」ウィンドウを表示します。

  3. 「名前」フィールドに一意のわかりやすい名前を入力します(この例ではVariable_Header)。

  4. 「メッセージ・タイプ」を選択して懐中電灯アイコンをクリックし、「タイプの選択」ウィンドウを表示します。

  5. 「メッセージ・タイプ」「プロジェクトのWSDLファイル」service_name.wsdl「メッセージ・タイプ」を開きます。ここで、service_nameはアダプタ構成ウィザードを起動した際にサービス名に指定した名前です。

    OutboundHeader_msgという名前(または名前の一部にHeader_msgが含まれる類似の名前)のヘッダー・メッセージが表示されます。

  6. ここでこの名前が表示された場合は、それを選択して手順8に進みます。

  7. この名前が表示されない場合は、次に示す追加の手順を実行します。

    1. 「インポートしたWSDL」fileAdapterOutboundHeader.wsdl(または使用している方向およびアダプタ・タイプと類似の名前)→「メッセージ・タイプ」を開きます。

    2. OutboundHeader_msgを選択して手順8に進みます。


      注意:

      AQアダプタの場合、ここで表示される名前がHeaderのみの場合があります。その名前を選択してください。これは、AQアダプタの構成時に「ペイロード以外のフィールドへのアクセスも必要」チェック・ボックスを選択する必要がなかったため、ヘッダーが静的であることを示します。

  8. 「OK」をクリックして、「タイプの選択」ウィンドウ、「変数の作成」ウィンドウおよび「変数の選択」ウィンドウを閉じます。

  9. receiveアクティビティの設定を完了します。

  10. BPELプロセス・ファイルのソース・ビューを開き、作成したヘッダー変数を表示します。

    bpelx:headerVariable="Variable_Header"/>
    

3.3.3 データ・エラーのメッセージ拒否ハンドラの構成

拒否されたメッセージ(データ・エラーのあるメッセージ)は、拒否されたメッセージのキューへ移動されます。将来の参照用にシステムのディレクトリに記録することもできます。

拒否ハンドラの例は、次の場所で参照できます。

Oracle_Home\bpel\samples\tutorials\124.AQAdapter\
AQMessageRejectionHandler

このディレクトリのreadme.txtファイルでは、メッセージ拒否ハンドラのテスト手順を説明しています。

このディレクトリのDequeue.wsdlファイルには、次のコードが含まれています。

    <pc:inbound_binding />
        <operation name="Dequeue">
      <jca:operation
          ActivationSpec="oracle.tip.adapter.aq.inbound.AQDequeueActivationSpec"
          QueueName="REJECTION_TEST_IN"
          DatabaseSchema="SCOTT"
          OpaqueSchema="false" >
      </jca:operation>
      <input>
        <jca:header message="hdr:Header" part="Header"/>
      </input>
        </operation>
    </binding>

コードのこの部分により、エラーのあったメッセージがREJECTION_TEST_INキューに移動されます。

3.3.4 RACのconnectionStringの例

RAC環境に2つのデータベース(一方がinfra1で他方がinfra2など)があり、BPELでAQアダプタとDBアダプタの両方を使用しているシナリオを考えてみます。 このシナリオで、oc4j-ra.xmlファイルではinfra2ではなくinfra1データベースを含むjdbc接続文字列を使用しています。 そのため、infra1が停止すると、infra2が使用可能であってもBPELはデータベースに接続しなくなります。

この環境でBPELのAQアダプタとDBアダプタを正しく構成するには、data-sources.xmlファイルを次のように変更する必要があります。

jdbc:oracle:thin:@(DESCRIPTION=
       (ADDRESS_LIST=(LOAD_BALANCE=on)
          (ADDRESS=(PROTOCOL=tcp)(HOST=hostname1)(PORT=1521))
          (ADDRESS=(PROTOCOL=tcp)(HOST=hostname2)(PORT=1521))
       )
       (CONNECT_DATA=(SERVICE_NAME=orcl))
    )

3.4 Oracle Enterprise Service BusでのAQアダプタの使用例

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

この項には、次の項目が含まれます。

3.4.1 前提条件の確認

サンプル・サービスを作成する前に、次の前提条件を満たす必要があります。

  1. なんらかのデータベースのSCOTTスキーマにアクセスします。

  2. 次の場所にあるdata-sources.xmlを検索します。

    C:\product\10.1.3.1\OracleAS_1\bpel\system\appserver\oc4j\j2ee\home\config\data-sources.xml
    
    
  3. 次のコードをdata-sources.xmlに追加してjdbc/aqSampleのデータソースを定義します。 URLでは、使用するエンドポイント・データベースを参照する必要があることに注意してください。

    <connection-pool name="aqSample_CONNECTION_POOL">
     <connection-factory factory-class="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:scott/tiger@stadd14:1521:db5617"/>
     </connection-pool>
     <managed-data-source name="AQSamplesDataSource"
     connection-pool-name="aqSample_CONNECTION_POOL"  jndi-name="eis/AQ/MyConnection" />
    
    

3.4.2 新規ESBプロジェクトの作成

次の手順に従って新規ESBプロジェクトを作成します。

  1. Oracle JDeveloperを開きます。

  2. 「ファイル」メニューから「新規」を選択します。

    「新規ギャラリ」ダイアログ・ボックスが表示されます。

  3. 「フィルタ方法」ボックスから「すべてのテクノロジ」を選択します。 使用可能なカテゴリのリストが表示されます。

  4. 「General」ノードを開いて「Projects」を選択します。

  5. 図3-18のように、「項目」グループから「ESBプロジェクト」を選択します。

    図3-18 新規ESBプロジェクトの作成

    図3-18の説明が続きます
    「図3-18 新規ESBプロジェクトの作成」の説明

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

    「ESBプロジェクトの作成」ダイアログ・ボックスが表示されます。

  7. 「プロジェクト名」フィールドにわかりやすい名前を入力します。 たとえば、AQADTForESBと入力します。

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

    新規ESBプロジェクトAQADTForESBが作成されました。

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

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

  1. 「コンポーネント・パレット」から「アダプタ・サービス」を選択し、「データベース・アダプタ」AQADTForESB.esbプロジェクトにドラッグ・アンド・ドロップします。

    図3-19に示す「AQアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。

    図3-19 インバウンドAQアダプタ・サービスの作成

    図3-19の説明が続きます
    「図3-19 インバウンドAQアダプタ・サービスの作成」の説明

  2. 「AQアダプタ・サービスの作成」ダイアログ・ボックスで次の情報を指定します。

    • 名前: サービスの名前を入力します。 この例では、Inboundと入力します。

    • システム/グループ: デフォルト値を保持します。

    図3-20に、「名前」および「システム/グループ」フィールドに情報を入力した後の「AQアダプタ・サービスの作成」ダイアログ・ボックスを示します。

    図3-20 AQアダプタ・サービスの定義

    図3-20の説明が続きます
    「図3-20 AQアダプタ・サービスの定義」の説明

  3. 「アダプタ・サービスのWSDL」で「アダプタ・サービスのWSDLの構成」アイコンをクリックします。

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

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

    「サービス名」フィールドが入力済の状態で「サービス名」ダイアログ・ボックスが表示されます。

  5. サービス名を保持して「次へ」をクリックします。

    図3-21に示す「サービス接続」ダイアログ・ボックスが表示されます。

    図3-21 「サービス接続」ダイアログ・ボックス

    図3-21の説明が続きます
    「図3-21 「サービス接続」ダイアログ・ボックス」の説明

  6. 「新規」をクリックしてデータベース接続を定義します。

    「データベース接続の作成」ウィザードの「ようこそ」ページが表示されます。

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

    「タイプ」ダイアログ・ボックスが表示されます。

  8. 「タイプ」ダイアログ・ボックスに次の情報を入力します。

    1. 「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、MyConnectionと入力します。

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

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

    「認証」ダイアログ・ボックスが表示されます。

  10. 次のフィールドに認証の資格証明を入力します。

    1. 「ユーザー名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、scottと入力します。

    2. 「パスワード」フィールドで、データベース接続に使用するパスワードを指定します。 この例では、tigerと入力します。

    3. 「ロール」フィールドは空白にしておきます。

    4. 「パスワードを配布」を選択します。

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

    「接続」ダイアログ・ボックスが表示されます。

  12. 次のフィールドに情報を入力します。

    1. 「ドライバ」リストで、デフォルト値の「thin」を保持します。

    2. 「ホスト名」フィールドでデフォルト値の「localhost」を保持します。

    3. 「JDBCポート」フィールドで、データベース接続に使用するポート番号を指定します。 この例では、1521と入力します。

    4. 「SID」フィールドで、データベース接続に使用する一意のSID値を指定します。 この例では、ORCLと入力します。

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

    「テスト」ダイアログ・ボックスが表示されます。

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

  15. 「終了」をクリックして新規データベース接続の作成プロセスを完了します。

    図3-22のように、「サービス接続」ダイアログ・ボックスが表示され、データベース接続のサマリーが示されます。

    図3-22 「サービス接続」ダイアログ・ボックス

    図3-22の説明が続きます
    「図3-22 「サービス接続」ダイアログ・ボックス」の説明

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

    「操作」ダイアログ・ボックスが表示されます。

  17. 図3-23のように、「デキュー」を選択して「次へ」をクリックします。

    「キュー名」ダイアログ・ボックスが表示されます。

    図3-23 「操作」ダイアログ・ボックス

    図3-23の説明が続きます
    「図3-23 「操作」ダイアログ・ボックス」の説明

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

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

  19. 「キューの選択」ダイアログ・ボックスで、次の手順を実行します。

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

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

    3. 他のフィールドではデフォルト値を保持します。

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

    図3-24に、すべてのフィールドに入力済の「キューの選択」ダイアログ・ボックスを示します。

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

    図3-24の説明が続きます
    「図3-24 インバウンド操作用のキューの選択」の説明

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

    図3-25のように、すべてのフィールドに移入済の「キュー名」ダイアログ・ボックスが表示されます。

    図3-25 「キューの選択」ダイアログ・ボックス

    図3-25の説明が続きます
    「図3-25 「キューの選択」ダイアログ・ボックス」の説明

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

    「キュー・パラメータ」ダイアログ・ボックスが表示されます。

  22. 「キュー・パラメータ」ダイアログ・ボックスで、各フィールドを空白にしたままで「次へ」をクリックします。

    図3-26に示す「オブジェクト・ペイロード」ダイアログ・ボックスが表示されます。

    図3-26 「オブジェクト・ペイロード」ダイアログ・ボックス

    図3-26の説明が続きます
    「図3-26 「オブジェクト・ペイロード」ダイアログ・ボックス」の説明

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

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

    図3-27に示す「終了」画面が表示されます。 このダイアログ・ボックスには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。

    図3-27 「終了」画面

    図3-27の説明が続きます
    「図3-27 「終了」画面」の説明

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

    各フィールドが入力済の状態で、図3-17に示す「AQアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。

    図3-28 「AQアダプタ・サービスの作成」ダイアログ・ボックス

    図3-28の説明が続きます
    「図3-28 「AQアダプタ・サービスの作成」ダイアログ・ボックス」の説明

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

    ウィンドウの中央ペインは図3-29のようになります。

    図3-29 インバウンドAQアダプタ・サービスの完成

    図3-29の説明が続きます
    「図3-29 インバウンドAQアダプタ・サービスの完成」の説明

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

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

  1. 「コンポーネント・パレット」から「アダプタ・サービス」を選択し、「データベース・アダプタ」AQADTForESB.esbプロジェクトにドラッグ・アンド・ドロップします。

    「AQアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。

  2. 「AQアダプタ・サービスの作成」ダイアログ・ボックスで次の情報を指定します。

    • 名前: サービスの名前を入力します。 この例では、Outboundと入力します。

    • システム/グループ: デフォルト値を保持します。

    図3-30に、「名前」および「システム/グループ」フィールドに情報を入力した後の「AQアダプタ・サービスの作成」ダイアログ・ボックスを示します。

    図3-30 アウトバウンドAQアダプタ・サービスの定義

    図3-30の説明が続きます
    「図3-30 アウトバウンドAQアダプタ・サービスの定義」の説明

  3. 「アダプタ・サービスのWSDL」で「アダプタ・サービスのWSDLの構成」アイコンをクリックします。

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

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

    「サービス名」フィールドが入力済の状態で「サービス名」ダイアログ・ボックスが表示されます。

  5. サービス名を保持して「次へ」をクリックします。

    「サービス接続」ダイアログ・ボックスが表示されます。

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

    「操作」ダイアログ・ボックスが表示されます。

  7. 図3-31のように、「操作」ダイアログ・ボックスで「エンキュー」を選択します。

    図3-31 「操作」ダイアログ・ボックス

    図3-31の説明が続きます
    「図3-31 「操作」ダイアログ・ボックス」の説明

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

    「キュー名」ダイアログ・ボックスが表示されます。

  9. 「キュー名」ダイアログ・ボックスで、ドロップダウン・リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。 この例では、「参照」をクリックします。

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

  10. 「キューの選択」ダイアログ・ボックスで、次の手順を実行します。

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

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

    3. 他のフィールドではデフォルト値を保持します。

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

    図3-32に、すべてのフィールドに入力済の「キューの選択」ダイアログ・ボックスを示します。

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

    図3-32の説明が続きます
    「図3-32 アウトバウンド操作用のキューの選択」の説明

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

    図3-33のように、すべてのフィールドに移入済の「キュー名」ダイアログ・ボックスが表示されます。

    図3-33 「キュー名」ダイアログ・ボックス

    図3-33の説明が続きます
    「図3-33 「キュー名」ダイアログ・ボックス」の説明

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

    「キュー・パラメータ」ダイアログ・ボックスが表示されます。

  13. 「キュー・パラメータ」ダイアログ・ボックスで、各フィールドを空白にしたままで「次へ」をクリックします。

    「オブジェクト・ペイロード」ダイアログ・ボックスが表示されます。

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

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

    図3-34に示す「終了」画面が表示されます。 このダイアログ・ボックスには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。

    図3-34 「終了」画面

    図3-34の説明が続きます
    「図3-34 「終了」画面」の説明

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

    各フィールドが入力済の状態で、図3-35に示す「AQアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。

    図3-35 「AQアダプタ・サービスの作成」ダイアログ・ボックス

    図3-35の説明が続きます
    「図3-35 「AQアダプタ・サービスの作成」ダイアログ・ボックス」の説明

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

    このウィンドウは図3-36のようになります。

    図3-36 アウトバウンドAQアダプタ・サービスの完成

    図3-36の説明が続きます
    「図3-36 アウトバウンドAQアダプタ・サービスの完成」の説明

3.4.5 ルーティング・サービスの構成

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

  1. DefaultSystem_Inbound_RS.esbsvcをダブルクリックします。

    図3-37のように、「アプリケーション」ウィンドウの中央ペインに「ルーティング・サービス」ウィンドウが表示されます。

    図3-37 ルーティング・スクリーン・ウィンドウ

    図3-37の説明が続きます
    「図3-37 ルーティング・スクリーン・ウィンドウ」の説明

  2. 「ルーティング・ルール」タブを選択し、「+」アイコンをクリックしてルールを追加します。

    「ターゲット・サービス操作の参照」ダイアログ・ボックスが表示されます。

  3. 図3-38のように、「エンキュー」サービスを選択して「OK」をクリックします。

    図3-38 「ターゲット・サービス操作の参照」ダイアログ・ボックス

    図3-38の説明が続きます
    「図3-38 「ターゲット・サービス操作の参照」ダイアログ・ボックス」の説明

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

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

    図3-39 トランスフォーメーション・マップの選択

    図3-39の説明が続きます
    「図3-39 トランスフォーメーション・マップの選択」の説明

  5. 「トランスフォーメーション」アイコンをダブルクリックし、「新規マッパー・ファイルの作成」アイコンをクリックします。

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

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

    図3-40の説明が続きます
    「図3-40 「リクエスト・トランスフォーメーション・マップ」ダイアログ・ボックス」の説明

  6. 「新規マッパー・ファイルの作成」オプションを選択します。

  7. デフォルト値を受け入れて「OK」をクリックします。

    図3-41に示す「トランスフォーメーション」ウィンドウが表示されます。

    図3-41 トランスフォーメーション定義

    図3-41の説明が続きます
    「図3-41 トランスフォーメーション定義」の説明

  8. マッパーの左側で要素を選択し、右側の要素へドラッグしてマップ・プリファレンスを設定します。

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

    図3-42 マップ・プリファレンスの設定

    図3-42の説明が続きます
    「図3-42 マップ・プリファレンスの設定」の説明

  9. マッパーの設定を保存してタブを閉じます。

  10. ルーティング・サービスの設定を保存してタブを閉じます。

    AQADTForESBプロジェクトは図3-43のようになります。

    図3-43 マップ・プリファレンス設定後のAQADTForESBプロジェクト

    図3-43の説明が続きます
    「図3-43 マップ・プリファレンス設定後のAQADTForESBプロジェクト」の説明

  11. oc4j-ra.xmlを編集してデータベース接続を反映させます。次に例を示します。

    eis/DB/MyConnection
    
    

    oc4j-ra.xmlは、OracleASのインストール場所にあります。次に例を示します。

    C:\product\10.1.3.1\OracleAS_1\j2ee\home\application-deployments\default\AQAdapter\oc4j-ra.xml
    
    
  12. プロジェクトを右クリックし、図3-44のように「ESBに登録」を選択して「LocalESBServer」をクリックします。

    図3-44 プロジェクトのデプロイ

    図3-44の説明が続きます
    「図3-44 プロジェクトのデプロイ」の説明

    図3-45に示す「成功」ページが表示されます。

    図3-45 「ESB登録サマリー」ページ

    図3-45の説明が続きます
    「図3-45 「ESB登録サマリー」ページ」の説明

3.4.6 ESB Consoleのチェック

ESB Controlをチェックするには、ESB Consoleを開きます。 例: http://localhost:8888/esb/esb/EsbConsole.html

図3-46のようなサービス・ウィンドウが表示されます。

3.4.7 ESB Controlでの実行チェック

次の手順に従ってESB Controlで実行をチェックします。

  1. ESB Consoleを開きます。

  2. 右上隅の「インスタンス」をクリックします。

  3. 「検索」の横にある緑の矢印をクリックします。

    図3-47のようなインスタンスが表示されます。

    図3-47 ESB Controlのインスタンス

    図3-47の説明が続きます
    「図3-47 ESB Controlのインスタンス」の説明