この章では、Oracle BPEL Process Manager(Oracle BPEL PM)またはOracle Mediatorによるシングル・コンシューマまたはマルチ・コンシューマ・キューの操作を可能にする、Oracle JCA Adapter for AQ(Oracle AQアダプタ)の使用方法について説明します。
この章には、次の項が含まれます。
Oracle Streams Advanced Queuing(AQ)では、関連するアプリケーション間の双方向の非同期通信用に柔軟なメカニズムが提供されています。アドバンスト・キューはOracleデータベースの機能であるため、スケーラブルで信頼性があります。バックアップとリカバリ(Point-in-Timeリカバリも含む)、ロギング、トランザクション・サービスおよびシステム管理など、Oracleデータベースの他の機能もアドバンスト・キューによって継承されます。複数のキューで単一のアプリケーションに対応することも可能です。メッセージを様々な方法でパーティション化し、ロード・バランシングで別のレベルのスケーラビリティを実現します。
この項には、次の項目が含まれます。
Oracle AQの詳細は、『Oracle Streamsアドバンスト・キューイング・ユーザーズ・ガイド』のOracle Streams AQの概要に関する項を参照してください。
JCA 1.5リソース・アダプタとOracle BPEL Process Managerを双方向で統合するために、JCAバインディング・コンポーネントが使用されています。JCAバインディング・コンポーネントは規格に準拠しており、基盤となるJCA相互作用をWebサービスとして公開するためのWeb Service Invocation Framework(WSIF)テクノロジが使用されています。
Oracle AQアダプタのアーキテクチャ、アダプタとOracle BPEL Process Managerの統合およびアダプタのデプロイの詳細は、第3章「アダプタとOracle Application Serverコンポーネントの統合」を参照してください。
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に言及している箇所は、メディエータで置き換えてかまいません。 |
Oracle AQアダプタは、AQメッセージのプロデューサでもありコンシューマでもあります。エンキュー操作は、JCAアウトバウンド相互作用として公開されています。デキュー操作は、JCAインバウンド相互作用として公開されています。
Oracle AQアダプタでは、ペイロードとしてADT(Oracleオブジェクト・タイプ)、XMLType
およびRAW
キューをサポートしています。また、1つのADTメンバー列からのペイロードの抽出もサポートしています。
Oracle AQアダプタでは、エンキューおよびデキュー操作用として正規化されたプロパティがサポートされています。
Oracle AQアダプタでサポートされているプロパティの詳細は、付録Aの「Oracle AQアダプタのプロパティ」を参照してください。
Oracle AQアダプタのサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
この項には、次の項目が含まれます。
Oracle AQアダプタでは、Oracle Streams AQの次の機能をサポートしています。
アダプタ構成ウィザードでは、特定メッセージの取得に使用するエンキュー操作の定義時に相関識別子を指定できます。
Oracle Streams AQでは、複数のコンシューマで1つのメッセージの処理と消費を実行できます。この機能を使用するには、マルチ・コンシューマ・キューを作成し、そのキューにメッセージをエンキューする必要があります。この構成では、デフォルトのサブスクリプション・リストまたはオーバーライド受信者リストのいずれかを使用して、単一のメッセージが複数のAQコンシューマによって消費(デキュー操作)されます。このシナリオでは、指定したすべてのコンシューマ・エージェントによって消費されるまで、メッセージはキューに残ります。Oracle AQアダプタのエンキュー・ヘッダー・プロパティ(jca.aq.RecipientList
)を使用すると、キューからのメッセージ取得が可能なオーバーライド受信者リスト(カンマ区切りの文字列値)を指定できます。サブスクライバとしてマルチ・コンシューマ・キューに追加されたすべてのコンシューマでは、Recipient
パラメータに一意の値が必要です。2つのサブスクライバでNAME
、ADDRESS
および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
状態のメッセージは、デフォルトのデキュー・コールからマスクされます。有効期限のプロパティは有効期限の指定に使用され、メッセージが有効期限の前に消費されない場合、メッセージは自動的に例外キューに移動されます。
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アダプタのヘッダー・プロパティの詳細は、付録Aの「Oracle AQアダプタのプロパティ」を参照してください。
デキュー条件
デキュー条件は、Oracle AQアダプタで使用されるAdvanced Queuing製品の機能です。デキュー条件が指定され、指定された条件を満たすメッセージがない場合は、デキューが実行されません。
デキュー条件要素は、SQL問合せのWHERE
句に似た構文を使用するブール式です。このブール式には、メッセージ・プロパティ、ユーザー・オブジェクトのペイロード・データ・プロパティおよびPL/SQLまたはSQL関数に関する条件を含めることができます。メッセージ・プロパティには、priority
、corrid
およびキュー表の他の列などがあります。
マルチ・サブスクライバ・キューでデキューが実行される際には、メッセージを選別して特定の条件を満たすもののみを着信することが必要な場合があります。これらの条件は、優先度1のメッセージのみを選択する場合などはヘッダー情報に、$100,000を超えるローン・アプリケーションのみを選択する場合などはメッセージ・ペイロードの一部に関係します。
マルチ・サブスクライバ・キューを選択した場合は、ステップ15で「メッセージ・セレクタ・ルール」フィールドが表示されます。priority = 1
またはTAB.USER_DATA.amount > 1000
など、SQLのWHERE
句に似た構文を使用したブール式でサブスクリプション・ルールを入力します。アダプタにより、このブール式がtrueのメッセージのみがデキューされます。
ヘッダー情報にアクセスするには、「ペイロード以外のフィールドへのアクセスも必要」チェック・ボックスを選択する必要があります。
このチェック・ボックスを選択すると、生成される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の統合およびアダプタのデプロイの詳細は、第1章「Oracle JCAアダプタの概要」を参照してください。
Oracle AQアダプタでは、次のRAW
タイプをサポートしています。
BLOB
CHAR
CLOB
DATE
DECIMAL
DOUBLE PRECISION
FLOAT
INTEGER
NUMBER
REAL
SMALLINT
TIMESTAMP
VARCHAR2
前述のリストに示したRAW
タイプ以外にも、Oracle AQアダプタは、プリミティブ型およびオブジェクトのVARRAYもサポートしています。
注意: 現在、Oracle AQアダプタではADT列の |
ADT全体ではなくペイロード・フィールドを選択する場合は、ペイロード・フィールドとして次のデータ型の1つを選択します。
CLOB
(XSDまたは不透明(Opaque)スキーマのいずれか)
VARCHAR2
(XSDまたは不透明(Opaque)スキーマのいずれか)
BLOB
(不透明(Opaque)スキーマのみ)
XMLTYPE
(XSDまたは不透明(Opaque)スキーマのいずれか)
JDeveloper BPELデザイナでは、ネイティブ・フォーマット・ビルダー・ウィザードを使用して、AQ RAW
ペイロード用のファイルを含む様々なフォーマットのXSD
ファイルを定義できます。
ネイティブ・フォーマット・ビルダー・ウィザードの詳細は、第6章「ネイティブ・フォーマット・ビルダー・ウィザード」を参照してください。
ネイティブ・フォーマット・ビルダーの使用方法を示すサンプル・コードを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
ペイロード・スキーマはペイロード・タイプに依存します。ADT全体の場合、スキーマはアダプタ構成ウィザードによって完全に生成されます。ペイロードとしてBLOB
が選択されたADTの場合、次のように定義された不透明(Opaque)スキーマを使用する必要があります。
<element name="opaqueElement" type="base64Binary" />
その他すべての場合には、表7-1に示すように、スキーマを指定するか不透明(Opaque)スキーマを使用できます。
表7-1 ペイロード・スキーマ
ペイロード・タイプ | サポートされているスキーマ |
---|---|
|
ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。 |
|
アダプタ構成ウィザードによって生成された、キュー構造に基づくスキーマを使用する必要があります。 |
ペイロードとして |
ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。 |
ユーザー指定のスキーマまたは不透明(Opaque)スキーマのペイロードとして |
ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。 |
不透明(Opaque)スキーマのペイロードとして |
不透明(Opaque)スキーマ。 |
|
ユーザー指定のスキーマまたは不透明(Opaque)スキーマ。 |
XSDファイルはないがペイロード・データが(カンマ区切り値(CSV)形式などで)書式設定されている場合は、ネイティブ・フォーマット・ビルダー・ウィザードを使用して適切なXSDを生成できます。アダプタ構成ウィザードは、ネイティブ・フォーマット・ビルダー・ウィザードと統合されています。「アダプタ構成ウィザード - メッセージ」ウィンドウで、「ネイティブ・フォーマットのスキーマの定義」をクリックしてネイティブ・フォーマット・ビルダー・ウィザードにアクセスします。
ヘッダーの操作と伝播は、重要なビジネス統合メッセージング要件です。Oracle BPEL PM、メディエータ、Oracle JCAおよびB2Bは、顧客の統合ニーズを解決する上でヘッダー・サポートに大きく依存しています。たとえば、メッセージ・ヘッダーを介して伝播させることで、ファイル名をソース・ディレクトリからターゲット・ディレクトリに保存できます。Oracle BPEL PMとメディエータでは、様々なUIサポート・レベルでヘッダーにアクセスし、操作して設定できます。
注意: リリース10.1.3でサポートされているAQアダプタのインバウンド・ヘッダーとアウトバウンド・ヘッダーは、リリース11gでは正規化されたメッセージ・プロパティを介してサポートされています。 |
詳細は、第2.14項「アダプタ内での相関サポート」を参照してください。
正規化されたメッセージのヘッダーの伝播
正規化されたメッセージは、プロパティとペイロードという2つの部分のみを持つように簡素化されています。通常、プロパティはスカラー型の名前/値ペアです。既存の複雑なヘッダーがプロパティに収まるように、プロパティはスカラー型にフラット化されます。
設計時のヘッダーの操作
複雑なプロパティは事前に決定されているため、設計時にヘッダーを操作する際のユーザー操作は合理化されています。メディエータまたはBPELデザイナでは、なんらかの予約済キーワードを使用してヘッダーを操作できます。たとえば、現在、メディエータでは、次の式を使用してインバウンド・ファイル・アダプタのfileNameヘッダーにアクセスできます。
$nmproperty.InboundFileHeaderType.fileName
ただし、この方法はユーザー入力に基づいて動的に生成されるプロパティに対処していません。たとえば、AQアダプタ・ウィザードでは、AQオブジェクトからの一部のフィールドをヘッダーとして伝播できます。選択内容に基づいてヘッダー定義が定義されます。これらの定義は事前に決定されていないため、事前決定済のプロパティ定義のリストでは考慮できません。動的プロパティのヘッダー操作は、定義するまで設計できません。この制限に対処するには、必要なサービス(コンポジット・エントリ・ポイント)と参照をすべて生成しておく必要があります。この制限は、動的プロパティを生成する必要のあるサービスに適用されます。生成された動的プロパティは、コンポジットごとに格納される必要があります。その後にのみ、メディエータまたはBPELデザイナで動的プロパティを操作できます。
正規化されたメッセージのライフサイクル中に伝播する必要のあるプロパティの識別
プロパティには、メッセージのライフサイクル全体にわたって伝播される必要があるものもあれば、伝播されてはいけないものもあります。伝播される必要があるプロパティは伝播可能プロパティと呼ばれ、伝播されてはいけないプロパティは伝播不可プロパティと呼ばれます。
Oracle AQアダプタはDocument Object Model Level 2(DOM 2)に準拠しているため、AQアダプタではDOM2仕様に準拠する文書オブジェクトを生成できます。
Oracle AQアダプタはメッセージ・サイズ対応です。つまり、Oracle AQアダプタではメッセージ・サイズが計算され、サイズがJCAバインディング・コンポーネントにレポートされます。JCAバインディング・コンポーネントにより公開されるサイズ関連APIは、レポート処理に使用できます。
Oracle AQアダプタは、アクティブ化エンドポイント・プロパティadapter.aq.dequeue.threads
をサポートしています。アダプタとエンタープライズ情報システム(EIS)間のインバウンド・メッセージ・フロー用として複数のスレッドを生成するには、このプロパティを設定することをお薦めします。Oracle AQアダプタの以前のバージョンでは、複数のエンドポイントを開始するためにJCAバインディング・コンポーネントによって使用されていたactivationInstances
に依存していました。
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>
Oracle AQアダプタには、プロセスごとではなくJava仮想マシン(JVM)ごとにシステム全体単位でデキュー・タイムアウトおよび複数のインバウンド・ポーリング・スレッドを制御するためのシステム・プロパティが用意されています。
デキュー・タイムアウトを制御するためにOracle AQアダプタに用意されているシステム・プロパティは、oracle.adapter.aq.wait
です。インバウンド・ポーリング・スレッドを制御するプロパティは、adapter.aq.dequeue.threads
です。
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>
再試行可能な例外にjca.retry.count
サービスのバインディング・プロパティを使用して6回以上再試行するように、Oracle AQアダプタのインバウンドの再試行を構成する場合は、キューの作成に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;
エラー処理については、第2.21項「エラー処理」を参照してください。
Oracle AQアダプタは、インストールの一部としてアプリケーション・サーバーにデプロイされます。これには、データソースjdbc/aqSample
を指す単一アダプタ・インスタンス・エントリeis/AQ/aqSample
が含まれています。データソースはインストールの一部として作成されないため、手動で作成する必要があります。データベースへの接続情報は、データソース定義内にあります。
インストールの時点で存在するOracle AQアダプタ・インスタンスeis/AQ/aqSample
を使用するSOAプロジェクトをデプロイする場合は、最初にデータソースjdbc/aqSample
を作成する必要があります。一方、新しいアダプタ・インスタンスを使用する場合は、新しいアダプタ・インスタンスを追加してアプリケーション・サーバーを再起動する必要があります。これは、既存のアダプタ・インスタンスjdbc/aqSample
で参照されるデータソースとは別のデータソースを指すようにする場合や、まだ存在しないアダプタ・インスタンスの名前を選択した場合などです。たとえば、JDeveloperでDBConnection1
という名前の接続を作成した場合、図7-6に示すように、AQアダプタ・サービスはデフォルトでeis/AQ/DBConnection1
を指します。
また、次のコード・スニペットに示すように.jca
ファイルを確認することによって、サービスがどのアダプタ・インスタンスを指しているかを確認できます。
<connection-factory location="eis/AQ/aqSample" … />
前述の例では、場所は実行時のアダプタ・インスタンスのJNDI名です。
新しいAQアダプタ・インスタンスを作成するには、第2.18項「アダプタ・コネクション・ファクトリの追加」の説明に従ってOracle WebLogic Server管理コンソールを使用するか、weblogic-ra.xml
ファイルを直接編集します。weblogic-ra.xml
を編集する手順は、次のとおりです。
fmwhome
/でAqAdapter.rar
を検索します。
ファイルを解凍します。
META-INF
/weblogic-ra.xml
(および、場合によってはra.xml
)を編集します。
このファイルから再びJARを作成します。
アプリケーション・サーバーを再起動します。
weblogic-ra.xml
に含まれるサンプル・アダプタ・インスタンスを次に示します。
<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-name
、XADataSourceName
またはDataSourceName
です。jndi-name
プロパティは、.jca
ファイル内の場所属性に一致している必要があり、アダプタ・インスタンスの名前を表しています。XADataSourceName
またはDataSourceName
プロパティは、基礎となるデータソース(接続情報が設定されている)の名前です。XADataSourceName
またはDataSourceName
のいずれかのプロパティを指定します。使用方法は、シナリオに関与していてアダプタもグローバル・トランザクションに加える必要があるかどうか、またはローカル・トランザクション・セマンティクスが十分かどうかに応じて異なります。前者の場合にはXADataSourceName
を指定する必要があり、後者の場合にはDataSourceName
を指定する必要があります。XADataSourceName
プロパティを指定する場合は、プロパティによって参照される物理データソースでXAが有効化されていることを確認します。ただし、DataSourceName
プロパティを指定する場合は、プロパティによって参照される物理データソースでXAが有効化されている場合もされていない場合もあります。
最も一般的なミス
デプロイメントに関する最も一般的なミスとして、次の2つがあります。
.jca
ファイル内の場所属性に一致するアダプタ・インスタンス・エントリが作成されていません(または、エントリが1つも作成されていません)。
.jca
ファイル内の場所属性にデータソース名を直接設定しています。
後者の場合は、アダプタ・インスタンス名(eis/AQ/...
)を指定し、このインスタンス名がデータソース・プール(jdbc/...
)を指すというように間接的に指定する必要があります。一般的なミスは、このように間接的に指定せず、名前jdbc/...
を場所属性に直接指定することです。
その他のアダプタ・インスタンス・プロパティ
AQアダプタ・インスタンスには、xADataSourceName
やdataSourceName
以外にもプロパティがあります。
Oracle AQアダプタ・インスタンス・プロパティの詳細は、付録A「Oracle AQアダプタのプロパティ」を参照してください。
この項には、次の項目が含まれます。
次の使用例には、アダプタ構成ウィザードの概要が含まれ、様々な状況において通常の手順を変更する方法の例も示します。それぞれの例では、生成されるWSDLファイルとJCAファイルの関連部分を示しています。
この項には、次の項目が含まれます。
この例では、service_type
オブジェクト内の1つのフィールドであるペイロードとユーザー定義スキーマを設定して、メッセージをservice_in_queue
キューにデキューするOracle AQアダプタ・サービスを作成します。
この項では、JDeveloperでアダプタ構成ウィザードを使用してOracle AQアダプタを構成する際の必須タスクについて説明します。
この項には、次の項目が含まれます。
この例は、基本的なBPELコンストラクト(アクティビティやパートナ・リンクなど)と、BPELコンポジットを作成およびデプロイするJDeveloper環境をよく理解していることを前提としています。
SCOTTスキーマを持つデータベースへのアクセス権限が必要です。
この使用例を実行するには、adapters-aq-103-adtclobpayload
サンプルに含まれているartifacts.zip
ファイルの次のファイルが必要です。
artifacts/sql/setup_user.sql
artifacts/sql/create_type_service.sql
artifacts/sql/create_queues.sql
artifacts/sql/dequeue_service.sql
artifacts/sql/enqueue_service.sql
adapters-aq-103-adtclobpayload
サンプルを入手するには、Oracle Sample SOA Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。次の手順に従ってアプリケーションとSOAプロジェクトを作成します。
JDeveloperを開きます。
「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。図7-1に示すように、「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにアプリケーションの名前を入力します。
「アプリケーション・テンプレート」リストで、「汎用アプリケーション」を選択します。
「次へ」をクリックします。
次に示すように、「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにわかりやすい名前を入力します。
たとえば、SOAComposite
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。
図7-3に示すように、「汎用アプリケーションの作成 - SOA設定の設定」ページが表示されます。
「コンポジット・テンプレート」リストから「BPELを使用するコンポジット」を選択して「終了」をクリックします。
新規アプリケーションおよびSOAプロジェクトが作成されました。これにより、SOAコンポジットが自動的に作成されます。
図7-4に示すように、「BPELプロセスの作成」ページが表示されます。
「名前」フィールドにBPELプロセスの名前を入力します。たとえば、CustomerDetails
と入力します。
「テンプレート」リストで「サービスを後で定義」を選択し、「OK」をクリックします。
CustomerDetails
BPELプロセスが作成されました。
次のステップは、Oracle AQアダプタ・サービスを定義することです。次の手順に従ってOracle AQアダプタ・サービスを作成します。
「コンポーネント・パレット」で、「SOA」を選択します。
「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
図7-5に示すように、アダプタ構成ウィザードの「サービス名」ページが表示されます。
サービス名を指定して「次へ」をクリックします。
図7-6に示すように、アダプタ構成ウィザードの「サービス接続」ページが表示されます。
プラス・アイコンをクリックしてデータベース接続を作成します。
「データベース接続の作成」ページが表示されます。
注意: Oracle Applicationsを実行中のデータベースに接続する必要があります。 |
次の情報を入力します。
「接続の作成場所」で、「アプリケーション・リソース」を選択します。
「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。
この例では、DBConnection1と入力します。
「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。
「ユーザー名」フィールドで、データベースへのアクセスが認証されているユーザー名を指定します。
この例では、scott
と入力します。
「ロール」フィールドで、必要に応じてロールを入力します。
これは、データベースに指定されているSYSDBA
などの特定のデータベース・ロールである必要があります。このフィールドはオプションです。この例では、「ロール」フィールドは空白にしておきます。
「パスワード」フィールドで、指定されたユーザー名に関連付けるパスワードを指定します。
この例では、tiger
と入力します。
「パスワードの保存」と「パスワードのデプロイ」を順番に選択します。
「ドライバ」リストから「thin」を選択します。
「ホスト名」フィールドで、Oracleサーバーを実行するシステムを識別する値を入力します。
TCP/IPで解決できるIPアドレスまたはホスト名(myserver
など)を使用します。デフォルト値はlocalhost
です。
「JDBCポート」フィールドで、TCP/IPポートを識別する値を入力します。デフォルトは1521
です。
「SID」フィールドで、Oracleデータベース・インスタンスの一意のシステム識別子(SID)の値を入力します。
デフォルトはXE
です。
「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。
成功メッセージが表示されます。
「OK」をクリックします。
作成した接続が「サービス名」ページの「接続」フィールドに表示されます。
データベース接続の作成を完了すると、「JNDI名」フィールドにJava Naming and Directory Interface(JNDI)名が移入されます。JNDI名は、サービスがBPELサーバーにデプロイされる際に使用される接続のプレースホルダとして機能します。JNDIをプレースホルダとして使用すると、開発とその後の本番に異なるデータベースを使用できます。
アダプタが管理モードで確実に実行されるように、JNDI名で指定した値がOracle AQアダプタのweblogic-ra.xml
ファイルに存在する必要があります。デフォルトの接続インスタンスeis/AQ/aqSample
が用意されており、このフィールドのデフォルト値として使用できます。この接続インスタンスを使用するには、JNDI名jdbc/aqSample
を使用してデータソースを作成する必要もあります。
「次へ」をクリックします。
図7-7に示すように、「アダプタ構成ウィザード - アダプタ・インタフェース」ページが表示されます。
「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択します。
「次へ」をクリックします。
「操作」ページが表示されます。
Oracle AQアダプタでは、3つの操作をサポートしています。
デキュー: キューから受信するメッセージをポーリングします。
エンキュー: 発信メッセージをキューに置きます。
エンキュー/デキュー: 発信メッセージをキューに置き、キュー上でレスポンス・メッセージを待機します。
この例では、図7-8に示すように「デキュー」を選択します。
操作には、選択した操作名に基づいて名前が自動的に付けられます。ただし、「操作名」フィールドは編集できます。
注意:
|
「次へ」をクリックします。
図7-9に示すように、アダプタ構成ウィザードの「キュー名」ページが表示されます。
「データベース・スキーマ」リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例では、「参照」をクリックします。
図7-10に示すように、「キューの選択」ダイアログが表示されます。
必要なキューを選択して「OK」をクリックします。
この例では、「SERVICE_IN_QUEUE」を選択します。図7-11に示すように、「キュー名」フィールドにSERVICE_IN_QUEUEが移入された状態で「キュー名」ページが再表示されます。
「次へ」をクリックします。
図7-12に示すように、アダプタ構成ウィザードの「キュー・パラメータ」ページが表示されます。
パラメータ値を入力して「次へ」をクリックします。
相関ID: 1文字から30文字までの長さでオプションの相関IDを入力します。これは、同じ相関IDを使用したデキュー・アクティビティによって後から取得されるメッセージの識別に使用されます。
入力する値は、非同期通信のためにエンキューの送信元とデキューの受信先で同意されています。相関IDはAQヘッダー・プロパティにマップされます。インバウンド方向の相関IDにより、デキューするメッセージの選択が可能になります。このフィールドはオプションです。値を入力しない場合は、キューにあるすべてのメッセージが処理されます。
アウトバウンド方向の相関IDの値を入力した場合、適切なIDを持つすべてのアウトバウンド・メッセージが入力した値に設定されます。この値はアウトバウンド・ヘッダーの相関フィールドで、メッセージごとにオーバーライドできます。
デキュー条件: 「操作」ページでデキューを選択した場合にのみ表示されます。
SQL
問合せのWHERE
句に似たブール式を入力します。このブール式には、メッセージ・プロパティ、ユーザー・データ・プロパティ(オブジェクト・ペイロード
のみ)およびPL/SQLまたはSQL関数に関する条件を含めることができます。複数のメッセージがデキュー条件を満たす場合、デキューの順序は未確定で、キューのソート順は考慮されません。
このフィールドは、インバウンド・シングル・コンシューマおよびマルチ・コンシューマ・キューに対して表示されます。
「次へ」をクリックします。
図7-13に示すように、アダプタ構成ウィザードの「オブジェクト・ペイロード」ページが表示されます。
「ビジネス・ペイロード」で、「オブジェクト内のフィールド」を選択します。
「ペイロード・フィールド・オプション」セクションで「参照」をクリックし、ビジネス・ペイロードが含まれるフィールドを選択します。
図7-14に示すように、「ペイロード・フィールドの選択」ダイアログが表示されます。
フィールドを選択して「OK」をクリックします。
この例では、「PAYLOAD (CLOB)」を選択します。
図7-15に示すように、すべてのペイロード詳細が入力された状態で「オブジェクト・ペイロード」フィールドが表示されます。
「ペイロード以外のフィールドへのアクセスも必要」を選択して「次へ」をクリックします。
「メッセージ」ページが表示されます。
「メッセージ」ページには、次のオプションが表示されます。
ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする): スキーマを指定しない場合は、このオプションを選択します。このオプションを選択すると、「メッセージ・スキーマ」の他のフィールドがすべて無効化されます。
ネイティブ・フォーマットのスキーマの定義: ネイティブ・フォーマットの定義プロセスを支援するネイティブ・フォーマット・ビルダー・ウィザードを起動するには、これをクリックします。
URL: スキーマ・ファイルURLのパスを入力するか、「参照」をクリックしてパスを参照できます。
スキーマ要素: スキーマ要素名。
この例では、「スキーマ・ファイルを参照」をクリックしてスキーマ・ファイルURLを参照します。
図7-16に示すように、「タイプ・チューザ」ダイアログが表示されます。
図7-16に示すように、リストから「SERVICE」を選択して「OK」をクリックします。
図7-17に示すように、「スキーマの場所」および「スキーマ要素」のフィールドに移入済の「メッセージ」ページが表示されます。
「次へ」をクリックします。
「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。
「終了」をクリックします。
デキュー操作を持つAQアダプタ・サービスの作成を完了しました。
「OK」をクリックします。
アダプタ・サービスにより、定義済のアダプタ・インタフェースとして機能する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="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>
要素名「QueueHeader」は、以前は必須でしたが、必須ではなくなりました。正規化プロパティjca.aq.xxxx
を使用してQueueHeaderプロパティを設定します。これらのプロパティは、「受信」アクティビティおよび「呼出し」アクティビティの「BPEL」ダイアログから設定できます。
デキューとエンキューについては、第7.4.2項「Oracle AQアダプタのADTキュー」を参照してください。
オブジェクト全体をペイロードとしてエンキューまたはデキューするには、次の手順を実行します。
ADTペイロードの使用例の実例を参照するには、次のサンプルのいずれかを参照してください。
adapters-aq-102-adt
adapters-aq-110-supportedadttypes
これらのサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
注意: ADTタイプのキューを作成し、キューとそのキュー用に作成されたデータ型の両方を削除してプロセスを再デプロイすると、SQL例外がスローされ、データベースの再起動が必要になります。かわりに、データ型は削除せずにキューのみを削除します。 |
概要では、オブジェクト・ペイロード内の単一のフィールドまたは列をデキューする例を示しました。
オブジェクト内の1つのフィールドをデキューするOracle AQアダプタを作成するには、アダプタ構成ウィザードの「オブジェクト・ペイロード」ページで次の手順を実行する必要があります。
「オブジェクト内のフィールド」を選択します。
「フィールド名」フィールドの端にある「参照」をクリックします。
「ペイロード・フィールドの選択」ダイアログが表示されます。
ビジネス・ペイロードを格納するフィールドを選択して「OK」をクリックします。
図7-18に示すように、「フィールド名」フィールドに選択したフィールドが移入された状態でアダプタ構成ウィザードの「オブジェクト・ペイロード」ページが表示されます。
「ペイロード以外のフィールドへのアクセスも必要」を選択して「次へ」をクリックします。
生成された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>
オブジェクト・ペイロード内の1つのフィールドまたは列がデキューされるADT CLOB
の使用例の実例を参照するには、次のサンプルを参照してください。
adapters-aq-103-adtclobpayload
adapters-aq-105-adtclobopaquepayload
これらのサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
この使用例では、Oracle AQアダプタが発信メッセージをキューに蓄積し、別のキュー上のレスポンス・メッセージを待機する、Oracle AQアダプタのエンキュー/デキュー操作タイプを構成する手順について説明します。
この項には、次の項目が含まれます。
この使用例を実行するには、SCOTTスキーマを持つデータベースへのアクセス権限が必要です。また、adapters-aq-104-requestreply
サンプルに含まれているartifacts.zip
ファイルの次のファイルも必要となります。
create_queues.sql
drop_queues.sql
enqueue.sql
SendReply.sql
setup_user.sql
adapters-aq-104-requestreplyサンプル・コードを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットを含んだJDeveloperアプリケーションを作成する必要があります。第7.4.1.1.2項「アプリケーションおよびSOAプロジェクトの作成」に記載された手順に従って、アプリケーションおよびSOAプロジェクトを作成します。
発信メッセージをキューに蓄積し、キューのレスポンス・メッセージを待機するOracle AQアダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」で、「SOA」を選択します。
「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
図7-5に示すように、アダプタ構成ウィザードの「サービス名」ページが表示されます。
サービス名を指定して「次へ」をクリックします。
アダプタ構成ウィザードの「サービス接続」ページが表示されます。
プラス・アイコンをクリックしてデータベース接続を作成します。
「データベース接続の作成」ページが表示されます。
注意: Oracle Applicationsを実行中のデータベースに接続する必要があります。 |
次の情報を入力します。
「接続の作成場所」で、「アプリケーション・リソース」を選択します。
「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。
「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。
「ユーザー名」フィールドで、データベースへのアクセスが認証されているユーザー名を指定します。
この例では、scott
と入力します。
「ロール」フィールドで、必要に応じてロールを入力します。
これは、データベースに指定されているSYSDBA
などの特定のデータベース・ロールである必要があります。このフィールドはオプションです。この例では、「ロール」フィールドは空白にしておきます。
「パスワード」フィールドで、指定されたユーザー名に関連付けるパスワードを指定します。
この例では、tiger
と入力します。
「パスワードの保存」と「パスワードのデプロイ」を順番に選択します。
「ドライバ」リストから「thin」を選択します。
「ホスト名」フィールドで、Oracleサーバーを実行するシステムを識別する値を入力します。
TCP/IPで解決できるIPアドレスまたはホスト名(myserver
など)を使用します。デフォルト値はlocalhost
です。
「JDBCポート」フィールドで、TCP/IPポートを識別する値を入力します。デフォルトは1521
です。
「SID」フィールドで、Oracleデータベース・インスタンスの一意のシステム識別子(SID)の値を入力します。
デフォルトはXE
です。
「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。
成功メッセージが表示されます。
「OK」をクリックします。
作成した接続が「サービス接続」ページの「接続」フィールドに表示されます。
また、データベース接続を作成した後、「JNDI名」フィールドに移入が行われます。
アダプタが管理モードで確実に実行されるように、JNDI名で指定した値がOracle AQアダプタのweblogic-ra.xml
ファイルに存在する必要があります。デフォルトの接続インスタンスeis/AQ/aqSample
が用意されており、このフィールドのデフォルト値として使用できます。この接続インスタンスを使用するには、JNDI名jdbc/aqSample
を使用してデータソースを作成する必要もあります。
「次へ」をクリックします。
アダプタ構成ウィザードの「アダプタ・インタフェース」ページが表示されます。
「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択します。
「次へ」をクリックします。
「操作」ページが表示されます。
図7-8に示すように「エンキュー/デキュー」を選択します。
「次へ」をクリックします。
図7-9に示すように、アダプタ構成ウィザードの「キュー名」ページが表示されます。
リクエスト・キューを参照するには、「参照」をクリックします。
図7-21に示すように、「キューの選択」ダイアログが表示されます。
必要なキューを選択して「OK」をクリックします。
この例では、「CORRELATION_REQUEST」を選択します。図7-22に示すように、「キュー名」フィールドにCORRELATION_REQUESTが移入された状態で「キュー名」ページが表示されます。
ステップ12と13を繰り返して、キュー情報をエンキューします。
図7-22に示すように、「キュー名」ページが表示されます。
「次へ」をクリックします。
図7-23に示すように、アダプタ構成ウィザードの「キュー・パラメータ」ページが表示されます。
「次へ」をクリックします。
図7-24に示すように、アダプタ構成ウィザードの「オブジェクト・ペイロード」ページが表示されます。
「ビジネス・ペイロード」オプション、「オブジェクトCORRELATIONREQUEST_TYPE全体」および「オブジェクトCORRELATIONREPLY_TYPE全体」を選択します。
「次へ」をクリックします。
「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。
「終了」をクリックします。
同期エンキュー/デキュー操作に対して、AQアダプタ・サービスの作成を完了しました。
「OK」をクリックします。
BPELプロセスおよびアウトバウンド・アダプタ参照をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のRequestReply内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図7-25のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
invokeアクティビティの追加
「BPELProcess1」をダブルクリックします。「BPELProcess1.bpel」ページが表示されます。
「コンポーネント・パレット」から設計領域にinvokeアクティビティをドラッグ・アンド・ドロップします。
invokeアクティビティをダブルクリックします。「Invoke」ダイアログが表示されます。
「名前」フィールドにinvokeアクティビティの名前を入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。図7-26に示すように、「パートナ・リンク・チューザ」ダイアログが表示されます。
「RequestReply」を選択して「OK」をクリックします。
図7-27に示すように、「Invoke」ダイアログで、「入力変数」フィールドの右にある「入力変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「OK」をクリックします。次に示すように、Jdeveloperの「BPELProcess1.bpel」ページが表示されます。
assignアクティビティの追加
「コンポーネント・パレット」から設計領域にassignアクティビティをドラッグ・アンド・ドロップします。
assignアクティビティをダブルクリックします。「Assign」ダイアログが表示されます。
「名前」フィールドにassignアクティビティの名前を入力します。
「コピー操作」タブをクリックします。
「コピー操作」を選択します。「コピー操作の作成」ダイアログが表示されます。
図7-29に示すように、inputVariableからoutputVariableへのコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
図7-30に示すように、inputVariableからInvoke_1_Enqueue_InputVariableへの別のコピー操作を作成します。
「コピー操作の作成」ダイアログで「OK」をクリックします。
図7-31に示すように、「OK」をクリックしてJDeveloperの「BPELProcess1.bpel」ページに戻ります。
「ファイル」、「すべて保存」を順番にクリックします。
receiveアクティビティの追加
「コンポーネント・パレット」から設計領域にreceiveアクティビティをドラッグ・アンド・ドロップします。
receiveアクティビティをダブルクリックします。「Receive」ダイアログが表示されます。
「名前」フィールドにreceiveアクティビティの名前を入力します。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。「パートナ・リンク・チューザ」ダイアログが表示されます。
「RequestReply」を選択して「OK」をクリックします。
「Receive」ダイアログで、「変数」フィールドの右にある「変数の自動作成」アイコンをクリックします。「変数の作成」ダイアログが表示されます。
デフォルトの変数名を選択して「OK」をクリックします。「変数」フィールドにデフォルトの変数名が移入されます。
「インスタンスの作成」を選択して「OK」をクリックします。次に示すように、Jdeveloperの「BPELProcess1.bpel」ページが表示されます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。
JDeveloperを使用してアプリケーション・プロファイルをデプロイする手順は、次のとおりです。
第2章の「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」で説明されている手順を使用して、アプリケーション・サーバー接続を作成します。
第2.7項「Oracle JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」で説明されている手順を使用して、アプリケーションをデプロイします。
Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
インスタンスをクリックします。「フローのトレース」ページが表示されます。
「BPEL」コンポーネント・インスタンスをクリックします。「監査」ページが表示されます。
「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。
エンキュー/デキュー操作用に生成された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="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>
要素名QueueHeaderは、必須ではなくなりました。すでにAmanが述べているように、QueueHeaderプロパティは現在は正規化プロパティjca.aq.xxxxを使用して設定されます。これらのプロパティは、「受信」アクティビティおよび「呼出し」アクティビティの「BPEL」ダイアログから設定できます。
エンキュー/デキュー操作用に生成された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>
特定の相関IDのメッセージのみをデキューするアダプタを設定するには、次の手順を実行します。
アダプタにより、それと同様の相関IDでエンキューされたメッセージのみがデキューされます。
この使用例(Oracle AQアダプタにより、それと同様の相関IDでエンキューされたメッセージがデキューされる例)の実例を参照するには、次のサンプルを参照してください。
adapters-aq-106-messagerejection
adapters-aq-109-nativecorrelation
adapters-aq-112-prioritymessageselector
adapters-aq-113-payloadbasedmessageselector
これらのサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
マルチ・サブスクライバ・キューには、複数のユーザーがアクセスできます。また、それらのユーザーがキュー内の特定のタイプのメッセージのみを対象とする場合もあります。たとえば、$100,000を超えるローンには監督者の承認が必要であるのに対して、$100,000未満のローンは通常のローン承認スタッフが承認できるローン・アプリケーションがあり、そのアプリケーションにマルチ・ユーザー・キューがあるとします。この場合、BPELプロセスでは、1つのアダプタが監督者用の巨額ローンのローン・アプリケーションのエンキューに使用され、もう1つのアダプタが同じマルチ・サブスクライバ・キューにある一般スタッフ用の小額ローンのローン・アプリケーションのエンキューに使用されます。
マルチ・サブスクライバ・キューにエンキューするアダプタを指定し、「受信者」フィールドでキュー・パラメータを指定します。
ステップ15で、「受信者」フィールドに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>
マルチ・サブスクライバ・キューからのエンキューとデキューを示す、この使用例の実例を参照するには、次のサンプルを参照してください。
adapters-aq-114-multiconsumeroutbound
これらのサンプルを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
このサンプルでは、ビジネス・プロセスはAQアダプタからメッセージを受信し、ペイロードをアウトバウンド・メッセージにコピーし、アウトバウンド・メッセージを使用してAQアダプタを起動します。関係するキューはADTキューです。このシナリオでは、ユーザーがADT全体をペイロードとして使用するように選択しており、AQアダプタ・ウィザードではキュー構造に従ってSCOTT_CUSTOMER_TYPE.xsd
にスキーマが生成されています。実行時には、アダプタによりスキーマに一致するXMLファイルがメッセージごとに作成されます。
この項には、次の項目が含まれます。
SCOTTスキーマを持つデータベースへのアクセス権限が必要です。
この使用例を実行するには、adapters-aq-102-adt
サンプルに含まれているartifacts.zip
ファイルの次のSQLファイルが必要です。これらのファイルは、artifacts.zip
ファイルのartifacts/sql
サブディレクトリにあります。次に示す順序でSQLファイルを実行します。
setup_user.sql
create_type_customer.sql
create_queues.sql
enqueue_customer.sql
dequeue_customer.sql
adapters-aq-102-adtサンプル・コードを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットが含まれるJDeveloperアプリケーションを作成する必要があります。次の手順に従ってアプリケーションとSOAプロジェクトを作成します。
JDeveloperの「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。
「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにADT
と入力して「次へ」をクリックします。
「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにADT
と入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。
「汎用アプリケーションの作成 - SOA設定の設定」ページが表示されます。
「コンポジット・テンプレート」リストから「メディエータを使用するコンポジット」を選択して「終了」をクリックします。
新規アプリケーションおよびSOAプロジェクトが作成されました。
図7-33に示すように、「メディエータの作成」ページが表示されます。
「名前」フィールドにメディエータ・コンポーネントの名前を入力します。この例では、デフォルト名のMediator1
を保持します。
「テンプレート」リストで「インタフェースを後で定義」を選択し、「OK」をクリックします。
メディエータ・コンポーネントが作成されました。
次の手順に従ってインバウンドOracle AQアダプタ・サービスを作成します。
「コンポーネント・パレット」で、「SOA」を選択します。
「コンポーネント・パレット」の「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
「アダプタ構成ウィザード」が表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」ページでサービスの名前を指定します。この例では、dequeue
と入力します。
「次へ」をクリックします。
「サービス接続」ページが表示されます。Oracle AQアダプタを構成するにはデータベース接続が必要です。新規接続を作成するか、既存のデータベース接続を選択できます。
「新規データベース接続を作成します。」アイコンをクリックしてデータベース接続を作成します。
「データベース接続の作成」ページが表示されます。
第7.4.1.1.3項「Oracle AQアダプタ・サービスの定義」のステップ6の説明に従ってデータベース接続を作成します。
「OK」をクリックして新規データベース接続の作成プロセスを完了します。
「サービス接続」ページが表示され、データベース接続のサマリーが示されます。
「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択します。
「次へ」をクリックします。
「操作」ページが表示されます。
「デキュー」を選択します。
デフォルトの操作名を受け入れて「次へ」をクリックします。
「キュー名」ページが表示されます。
リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例では、「参照」をクリックします。
「キューの選択」ダイアログが表示されます。
「キューの選択」ダイアログで、次の手順を実行します。
「キュー・タイプ」で「すべてのタイプ」を選択します。
「データベース・スキーマ」で「Scott」を選択します。
他のフィールドではデフォルト値を保持します。
「キュー」で「CUSTOMER_IN_QUEUE」を選択します。
図7-34に、「キューの選択」ダイアログを示します。
「OK」をクリックします。
図7-35に示すように、すべてのフィールドに移入済の「キュー名」ダイアログが表示されます。
「次へ」をクリックします。
「キュー・パラメータ」ページが表示されます。
「キュー・パラメータ」ページで、各フィールドを空白にしたままで「次へ」をクリックします。
「オブジェクト・ペイロード」ページが表示されます。
「ビジネス・ペイロード」で、オブジェクト全体またはオブジェクト内の1つのフィールドのみのいずれかを選択します。
この例では「オブジェクトCUSTOMER_TYPE全体」を選択します。
「次へ」をクリックします。
「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。
「終了」をクリックします。
インバウンドOracle AQアダプタの定義が完了しました。
次の手順に従ってアウトバウンドOracle AQアダプタ・サービスを作成します。
「コンポーネント・パレット」で、「SOA」を選択します。
「コンポーネント・パレット」の「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
「アダプタ構成ウィザード」が表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドにenqueue
と入力し、「次へ」をクリックします。
「サービス接続」ページが表示されます。
「接続」で、「MyConnection」を選択して「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択し、「次へ」をクリックします。
「操作」ページが表示されます。
「操作」ページで、「エンキュー」を選択してデフォルトの操作名を受け入れます。
「次へ」をクリックします。
「キュー名」ページが表示されます。
「キュー名」ページで、リストからデータベース・スキーマを選択するか、「参照」をクリックしてスキーマを参照します。この例では、「参照」をクリックします。
「キューの選択」ダイアログが表示されます。
「キューの選択」ダイアログで、次の手順を実行します。
「キュー・タイプ」で「すべてのタイプ」を選択します。
「データベース・スキーマ」で「Scott」を選択します。
他のフィールドではデフォルト値を保持します。
図7-36に示すように、「キュー」で「CUSTOMER_OUT_QUEUE」を選択します。
「OK」をクリックします。
図7-37に示すように、すべてのフィールドに移入済の「キュー名」ページが表示されます。
「次へ」をクリックします。
「キュー・パラメータ」ページが表示されます。
「キュー・パラメータ」ページで、各フィールドを空白にしたままで「次へ」をクリックします。
「オブジェクト・ペイロード」ページが表示されます。
「ビジネス・ペイロード」で、オブジェクト全体またはオブジェクト内の1つのフィールドのみのいずれかを選択します。この例では「オブジェクトCUSTOMER_TYPE全体」を選択します。
「次へ」をクリックします。
「終了」画面が表示されます。このページには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。
「終了」ウィンドウで「終了」をクリックします。
アウトバウンドOracle AQアダプタの定義が完了しました。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、メディエータ・コンポーネントおよびアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるインバウンド・アダプタ内の小さい三角形を、「コンポーネント」領域のメディエータ・コンポーネント内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるメディエータ・コンポーネント内の小さい三角形を、「外部参照」領域のアウトバウンド・アダプタ内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xmlが図7-38のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
次の手順に従ってルーティング・サービスを構成します。
「Mediator1」をダブルクリックします。
「Mediator1.mplan」ウィンドウが表示されます。
「次を使用して変換」フィールドの端に表示される「既存のマッパー・ファイルを選択するか、新規マッパー・ファイルを作成します。」アイコンをクリックします。
図7-39に示すように、「リクエスト・トランスフォーメーション・マップ」ダイアログが表示されます。
「新規マッパー・ファイルの作成」を選択して「OK」をクリックします。
図7-40に示すように、「トランスフォーメーション」ウィンドウが表示されます。
マッパーの左側でソース・ルート要素を選択し、右側の宛先ルート要素へドラッグしてマップ・プリファレンスを設定します。
図7-41に示すように、「自動マップ・プリファレンス」ダイアログが表示されます。
「OK」をクリックします。
「アプリケーション」ウィンドウの中央ペインは、図7-42のようになります。
マッパーの設定を保存してタブを閉じます。
ルーティング・サービスの設定を保存してタブを閉じます。
http://
servername
:
portnumber
/console
にナビゲートします。
必要な資格証明を使用して、Oracle WebLogic Server管理コンソールのホーム・ページを開きます。
図7-43に示すように、Oracle WebLogic Server管理コンソールのホーム・ページが表示されます。
「ドメイン構造」で、「サービス」、「JDBC」を選択し、「データ・ソース」をクリックします。
図7-44に示すように、「JDBCデータ・ソースの概要」ページが表示されます。
「新規作成」をクリックします。「新しいJDBCデータ・ソースの作成」ページが表示されます。
図7-45に示すように、新しいJDBCデータソースの識別に使用するプロパティの値を入力します。
「次へ」をクリックします。図7-46に示すように、「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページが表示されます。
「次へ」をクリックします。図7-47に示すように、「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページが表示されます。
「接続プロパティ」ページで接続プロパティを入力します。
「次へ」をクリックします。図7-48に示すように、「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページが表示されます。
「構成のテスト」をクリックし、データベースの可用性および指定した接続プロパティをテストします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページの上部に接続テストに成功したことを示すメッセージが表示されます。
「次へ」をクリックします。図7-49に示すように、「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページが表示されます。
ターゲットを選択して「終了」をクリックします。
図7-50に示すように、「JDBCデータ・ソースの概要」ページが表示されます。このページには、このドメインに作成されているJDBCデータソース・オブジェクトがまとめられています。このリストには、作成したデータソースが表示されます。
Oracle WebLogic Server管理コンソールを閉じます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。
JDeveloperを使用してアプリケーション・プロファイルをデプロイする手順は、次のとおりです。
第2章の「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」で説明されている手順を使用して、アプリケーション・サーバー接続を作成します。
第2.7項「Oracle JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」で説明されている手順を使用して、アプリケーションをデプロイします。
Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
「最後の5つのインスタンス」ペインに、新規インスタンスのエントリがあります。この新規インスタンスは、メッセージをエンキューするときにトリガーされたインスタンスです。
インスタンスをクリックします。「フローのトレース」ページが表示されます。
「Mediator1」コンポーネント・インスタンスをクリックします。「監査」ページが表示されます。
「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。
この使用例では、Oracle AQアダプタを使用してAQ RAWキューとの間のデキューとエンキューを実行する方法について説明します。
この項には、次の項目が含まれます。
SCOTT
スキーマを持つデータベースへのアクセス権限が必要です。
この使用例を実行するには、adapters-aq-101-raw
サンプルに含まれているartifacts.zip
ファイルの次のSQLファイルが必要です。これらのファイルは、artifacts.zip
ファイルのartifacts/sql
サブディレクトリにあります。次に示す順序でSQLファイルを実行します。
setup_user.sql
create_queues.sql
enqueue_raw.sql
dequeue_raw.sql
artifacts/schemas/emp.xsd
adapters-aq-101-raw
サンプル・コードに含まれているartifacts.zip
を入手するには、Oracle SOA Sample Codeサイトにアクセスします。
adapters-aq-101-raw
サンプル・コードを入手するには、Oracle SOA Sample Codeサイトにアクセスします。
SOAコンポジットが含まれるJDeveloperアプリケーションを作成する必要があります。アプリケーションとSOAプロジェクトを作成する手順は、次のとおりです。
JDeveloperを開きます。
「アプリケーション・ナビゲータ」で、「新規アプリケーション」をクリックします。
「汎用アプリケーションの作成 - アプリケーションの名前付け」ページが表示されます。
「アプリケーション名」フィールドにRawqueue
と入力します。
「アプリケーション・テンプレート」リストで、「汎用アプリケーション」を選択します。
「次へ」をクリックします。
「汎用アプリケーションの作成 - プロジェクトの名前付け」ページが表示されます。
「プロジェクト名」フィールドにわかりやすい名前(Raw
など)を入力します。
「プロジェクト・テクノロジ」タブの「選択可能」リストで「SOA」をダブルクリックし、「選択済」リストに移動します。
「次へ」をクリックします。
「汎用アプリケーションの作成 - SOA設定の設定」ページが表示されます。
「コンポジット・テンプレート」リストから「BPELを使用するコンポジット」を選択して「終了」をクリックします。
新規アプリケーションおよびSOAプロジェクトが作成されました。これにより、SOAコンポジットが自動的に作成されます。
「BPELプロセスの作成」ページが表示されます。
「名前」フィールドにBPELプロセスの名前を入力します。たとえば、BPELRawqueue
と入力します。
「テンプレート」リストで「サービスを後で定義」を選択し、「OK」をクリックします。
Rawqueue
アプリケーションとRaw
プロジェクトが設計領域に表示されます。
emp.xsd
ファイルをプロジェクトのXSD
フォルダにコピーします(このファイルの場所の詳細は、第7.4.3.1「前提条件」を参照)。
次の手順を実行し、メッセージをキューにデキューするインバウンドOracle AQアダプタ・サービスを作成します。
「コンポーネント・パレット」で、「SOA」を選択します。
「コンポーネント・パレット」の「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
「アダプタ構成ウィザード」が表示されます。
「次へ」をクリックします。
「サービス名」ページが表示されます。
「サービス名」フィールドにRaw-Dequeuer
と入力し、「次へ」をクリックします。
「サービス接続」ページが表示されます。
第7.4.1.1.3項「Oracle AQアダプタ・サービスの定義」のステップ6の説明に従ってデータベース接続を作成します。
「次へ」をクリックします。
「アダプタ・インタフェース」ページが表示されます。
「アダプタ・インタフェース」ページで、「操作およびスキーマから定義(後で指定)」を選択し、「次へ」をクリックします。
「操作」ページが表示されます。
図7-51に示すように、「操作」ページで「デキュー」を選択します。
デフォルトの操作名を受け入れて「次へ」をクリックします。
「キュー名」ページが表示されます。
図7-52に示すように、データベース・スキーマとしてSCOTTを選択し、キュー名としてRAW_IN_QUEUEを選択します。
「次へ」をクリックします。
「キュー・パラメータ」ページが表示されます。
相関IDとデキュー条件を入力し、「次へ」をクリックします。
「メッセージ」ページが表示されます。
「URL」フィールドの端にある「参照」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
図7-53に示すように、「プロジェクトのスキーマ・ファイル」、「emp.xsd」および「AQRaw_End2End」を順番に選択します。
「OK」をクリックします。
図7-54に示すように、「メッセージ」ダイアログの「URL」フィールドにemp.xsd
スキーマ・ファイルが表示されます。
「次へ」をクリックします。「終了」ページが表示されます。
「終了」をクリックします。Oracle AQアダプタ・サービスの構成が完了し、図7-55に示すように「composite.xml」
ページが表示されます。
リクエスト・メッセージをエンキューし、対応するレスポンス・メッセージ(レポート)をキューからデキューするアダプタ・サービスを作成する手順は、次のとおりです。
「コンポーネント・パレット」の「サービス・アダプタ」リストから「AQアダプタ」を「composite.xml」ページの「公開されたサービス」スイムレーンにドラッグ・アンド・ドロップします。
アダプタ構成ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。「サービス名」ページが表示されます。
「サービス名」
フィールドにRaw-Enqueuerと入力して「OK」をクリックします。
「サービス接続」ページが表示されます。
「XAデータ・ソース」を選択して「次へ」をクリックします。
「操作」ページが表示されます。
「エンキュー」を選択します。
デフォルトの操作名を受け入れて「次へ」をクリックします。
「キュー名」ページが表示されます。
図7-56に示すように、データベース・スキーマとしてSCOTTを選択し、キュー名としてRAW_OUT_QUEUEを選択します。
「次へ」をクリックします。
「キュー・パラメータ」ページが表示されます。
相関IDを入力して「次へ」をクリックします。
「メッセージ」ページが表示されます。
「URL」フィールドの端にある「スキーマ・ファイルを参照」をクリックします。
「タイプ・チューザ」ダイアログが表示されます。
図7-53に示すように、「プロジェクトのスキーマ・ファイル」、「emp.xsd」および「AQRaw_End2End」を順番に選択します。
「次へ」をクリックします。
図7-54に示すように、「メッセージ」ダイアログの「URL」フィールドにemp.xsdスキーマ・ファイルが表示されます。
「次へ」をクリックします。
「終了」ページが表示されます。
「終了」をクリックします。
Oracle AQアダプタ・サービスの構成が完了し、図7-57に示すように「composite.xml」ページが表示されます。
作成した3つのコンポーネント(インバウンド・アダプタ・サービス、BPELプロセスおよびアウトバウンド・アダプタ参照)をアセンブルまたは接続する必要があります。コンポーネントを接続する手順は、次のとおりです。
「公開されたサービス」領域にあるRaw-Dequeuer内の小さい三角形を、「コンポーネント」領域のBPELプロセス内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のRaw-Enqueuer内に緑の三角形として表示されるドロップ・ゾーンにドラッグします。
同様に、「コンポーネント」領域にあるBPELプロセス内の小さい三角形を、「外部参照」領域のOutboundService内のドロップ・ゾーンにドラッグします。
JDeveloperのcomposite.xml
ファイルが図7-58のように表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
「BPELRawqueue」をダブルクリックします。
「BPELRawqueue.bpel」ページが表示されます。
「コンポーネント・パレット」から、receive、assignおよびinvokeアクティビティを「コンポーネント」領域にこの順序でドラッグ・アンド・ドロップします。
図7-59に示すように、JDeveloperの「BPELRawqueue.bpel
」ページが表示されます。
receiveアクティビティをダブルクリックします。
「Receive」ダイアログが表示されます。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。
「パートナ・リンク・チューザ」ダイアログが表示されます。
「Raw-Dequeuer」を選択して「OK」をクリックします。
「パートナ・リンク」フィールドに値Raw-Dequeuerが移入された状態で「Receive」ダイアログが表示されます。
「変数」フィールドの端に表示される「変数の自動作成」アイコンをクリックします。
「変数の作成」ダイアログが表示されます。
デフォルト値を受け入れて「OK」をクリックします。
図7-60に示すように、「インスタンスの作成」ボックスを選択して「OK」をクリックします。
invokeアクティビティをダブルクリックします。
「Invoke」ダイアログが表示されます。
「パートナ・リンク」フィールドの端にある「パートナ・リンクの参照」をクリックします。
「パートナ・リンク・チューザ」ダイアログが表示されます。
「Raw-Enqueuer」を選択して「OK」をクリックします。
「パートナ・リンク」フィールドに値Raw-Enqueuerが移入された状態で「Invoke」ダイアログが表示されます。
「入力変数」フィールドの端に表示される「入力変数の自動作成」アイコンをクリックします。
デフォルト値を受け入れて「OK」をクリックします。
図7-61に示すように、「Invoke」ダイアログが表示されます。
「OK」をクリックします。
assignアクティビティをダブルクリックします。
「Assign」ダイアログが表示されます。
「+」アイコンをクリックして「コピー操作」を選択します。
「コピー操作の作成」ダイアログが表示されます。
図7-62に示すように、変数を選択して「OK」をクリックします。
「Assign」ダイアログで「OK」をクリックします。
図7-63に示すように、JDeveloperの「BPELRawqueue.bpel
」ページが表示されます。
「ファイル」、「すべて保存」を順番にクリックします。
http://
servername
:
portnumber
/console
にナビゲートします。
必要な資格証明を使用して、Oracle WebLogic Server管理コンソールのホーム・ページを開きます。
ホーム・ページの「ドメイン構造」で、「サービス」、「JDBC」を選択し、「データ・ソース」をクリックします。
「JDBCデータ・ソースの概要」ページが表示されます。
「新規作成」をクリックします。「新しいJDBCデータ・ソースの作成」ページが表示されます。
新しいJDBCデータソースの識別に使用するプロパティの値を入力します。
「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - トランザクション・オプション」ページが表示されます。
「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - 接続プロパティ」ページが表示されます。
「接続プロパティ」ページで接続プロパティを入力します。
「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページが表示されます。
「構成のテスト」をクリックし、データベースの可用性および指定した接続プロパティをテストします。「新しいJDBCデータ・ソースの作成 - データベース接続のテスト」ページの上部に接続テストに成功したことを示すメッセージが表示されます。
「次へ」をクリックします。「新しいJDBCデータ・ソースの作成 - ターゲットの選択」ページが表示されます。
ターゲットを選択して「終了」をクリックします。
「JDBCデータ・ソースの概要」ページが表示されます。このページには、このドメインに作成されているJDBCデータソース・オブジェクトがまとめられています。このリストには、作成したデータソースが表示されます。
Oracle WebLogic Server管理コンソールを閉じます。
前述の手順で作成したSOAプロジェクトおよびアプリケーションについて、アプリケーション・プロファイルをデプロイする必要があります。
JDeveloperを使用してアプリケーション・プロファイルをデプロイする手順は、次のとおりです。
第2章の「Oracle JCAアダプタ用のアプリケーション・サーバー接続の作成」で説明されている手順を使用して、アプリケーション・サーバー接続を作成します。
第2.7項「Oracle JDeveloperからのOracle JCAアダプタ・アプリケーションのデプロイ」で説明されている手順を使用して、アプリケーションをデプロイします。
Fusion Middleware Controlコンソールを使用して、デプロイ済のコンポジットを監視できます。次の手順を実行します。
http://
servername
:
portnumber
/em
にナビゲートします。
デプロイしたコンポジットがアプリケーション・ナビゲータに表示されます。
「最後の5つのインスタンス」ペインに、新規インスタンスのエントリがあります。
これは、メッセージをエンキューするときにトリガーされたインスタンスです。
インスタンスをクリックします。
「フローのトレース」ページが表示されます。
「BPELRawqueue」コンポーネント・インスタンスをクリックします。
「監査」ページが表示されます。
「フロー - デバッグ」タブをクリックしてインスタンスをデバッグします。