| Oracle Application Server Adapters for Files, FTP, DatabasesおよびEnterprise Messagingユーザーズ・ガイド 10g (10.1.3.1.0) B31889-01 |
|
![]() 戻る |
![]() 次へ |
この章では、BPELプロセスまたはESBサービスによるJMSとの通信を可能にする、Oracle Application Server Adapter for Java Message Service(JMSアダプタ)の使用方法を説明します。
この章には、次の項目が含まれます。
JMSアーキテクチャでは、多数のメッセージ・サーバーに対して1つのクライアント・インタフェースが使用されます。JMSモデルには、Point-to-Pointおよびパブリッシュ・サブスクライブという2つのメッセージ・ドメインがあります。Point-to-Pointドメインでは、メッセージはキューを介して交換され、各メッセージは1人の受信者にのみ配信されます。パブリッシュ・サブスクライブ・モデルでは、メッセージはトピックに送信され、複数のサブスクライブ・クライアントによって読み取られます。JMSアダプタのサンプル・ファイルを参照するには、次の場所に移動します。
Oracle_Home\bpel\samples\tutorials\123.JmsAdapter
この項には、次の項目が含まれます。
JMSアダプタには次の特徴があります。
JMSバージョン1.0.2bに基づいています。
汎用JMSアダプタで、任意のJMSプロバイダで機能します。 OEMS JMS、TIBCO JMSおよびIBM WebSphere MQSeriesで動作確認されています。 (JMSプロバイダOJMS 8.1.7、9.0.1.4および9.2と、IBM MQSeries JMS 5.2および5.3)。
JMSトピックおよびキューをサポートしています。
このリリースでのみ、バイトおよびテキスト・メッセージ・タイプをサポートしています。アダプタ構成ウィザードにより、実行時のネイティブ・データ・ペイロードの消費にネイティブ・フォーマット・ビルダー・ウィザードが提供されます。ネイティブ・フォーマット・ビルダー・ウィザードでは、基礎となるネイティブ・データのXSD定義が作成されます。
JMSヘッダーおよびプロパティをサポートしています。
JMSトピックおよびキューへのサブスクライブ中のフィルタ処理の実行用にJMSメッセージ・セレクタをサポートしています。このパラメータは、JMSヘッダーおよびプロパティのセクションに存在するフィールドに基づくメッセージをフィルタ処理するためのSQL 92言語に基づいています。
永続JMSサブスクライバの指定をサポートしています。
JMSパブリッシャの永続および非永続モードをサポートしています。
現在、MQプロバイダに対する接続再試行機能はサポートされていません。
SolarisでのAQJMSに対するアウトバウンド再試行機能はサポートされていません。
|
注意: JMSアダプタを使用してAQJMSプロバイダに接続する際に、AQ宛先をホストするデータベースがリリース10.1.0.4の場合は、データベース・サーバーが停止すると、アウトバウンド方向でのアダプタの再試行メカニズムはデータベース・サーバーに再接続できません。 これは、クライアントJDBCとojdbc14.jarとの問題によるものです。 この問題を解決するには、リリース10.1.0.4のJDBCドライバをダウンロードし、$MIDTIER_ORACLE_HOME/jdbc内のライブラリ(特にojdbc14.jar)を置き換えて中間層で使用します。 この問題を解決する方法の詳細は、Metalink Note 317385.1を参照してください。 |
JMS APIでは、JMSパブリッシャによって送信される3つの確認情報を指定します。
DUPS_OK_ACKNOWLEDGE: メッセージの重複に関連のないコンシューマ用
AUTO_ACKNOWLEDGE: セッションがメッセージの受信を自動的に確認
CLIENT_ACKNOWLEDGE: クライアントがメッセージの確認メソッドを呼び出してメッセージを確認
送信または受信されたメッセージを1つの単位として扱うことで、アプリケーションは、1つのトランザクションで発行および消費のメッセージのグループを調整できます。アプリケーションがトランザクションをコミットすると、JMSプロバイダにより、そのアプリケーションがそのトランザクション内で受信したすべてのメッセージが削除されます。そのトランザクション内で送信されたメッセージは、1つの単位としてすべてのJMSコンシューマに配信されます。アプリケーションがトランザクションをロールバックすると、そのアプリケーションがそのトランザクション内で受信したメッセージはメッセージ・システムに戻され、受信したメッセージは廃棄されます。JMSアダプタはJMSトランザクションをサポートします。JMSで処理されたセッションは、そのセッション内に配置されたトランザクションをサポートします。JMSで処理されたセッションのトランザクションは、そのセッション以外には影響しません。
J2CA 1.5リソース・アダプタとBPEL Process Managerを双方向で統合するために、アダプタ・フレームワークが使用されています。 アダプタ・フレームワークは規格に準拠しており、基盤となるJ2CA相互作用をWebサービスとして公開するためのWeb service Invocation Framework(WSIF)テクノロジが使用されています。
JMSアダプタのアーキテクチャ、Oracle BPEL Process Managerとのアダプタの統合、およびアダプタのデプロイの詳細は、『Oracle Application Server Adapter概要』を参照してください。
Oracle Enterprise Service BusはOracleアダプタをサポートしており、それぞれのインバウンドおよびアウトバウンドのアダプタ・サービスを定義できます。 インバウンド・アダプタ・サービスでは、外部データソースからデータが受信されてXMLメッセージに変換されます。 アウトバウンド・アダプタ・サービスでは、XMLメッセージが特定のアダプタのネイティブ・フォーマットに変換され、データがターゲット・アプリケーションに送信されます。
JMSアダプタ・サービスの場合、Oracle Enterprise Service Busを使用するとJMSキューまたはトピックからのメッセージを送受信できます。
ESBはBPELの後継であり、このマニュアルのほとんどの部分およびサンプルはBPELを使用することを想定しています。 ただし、アダプタの動作はBPELでもESBでも同じです。 ここでBPELに言及している箇所は、ESBで置き換えてかまいません。
この項は、次の2つの使用例で構成されています。
次の使用例では、JMSアダプタの構成手順を説明し、結果のWSDLファイルおよび関連するoc4j-ra.xmlファイルを検証します。
この項には、次の項目が含まれます。
メッセージ機能はプログラム間の通信を可能にするメカニズムです。メッセージは、あるアプリケーションが別のアプリケーションに送信する構造化データです。メッセージ指向ミドルウェア(MOM)は、スケーラブルなエンタープライズ・メッセージング機能をサポートするインフラストラクチャです。MOMにより、高速で信頼できる非同期の通信、保証付きメッセージ配信、受信通知およびトランザクション制御が実現されます。JMSは、エンタープライズ・メッセージング・システムのメッセージの発行、送信および受信を目的としてSun社により開発されたJavaインタフェースです。JMSはJMSベンダーが実装するAPIです。オラクル社では、OC4J JMSおよびOracleアドバンスト・キューに基づいたOracle JMSの2つの実装を提供しています。JMSプロデューサによりJMSメッセージが作成され、JMSコンシューマによってJMSメッセージが消費されます。
JMSでは、Point-to-Point(キュー)およびパブリッシュ・サブスクライブ(トピック)という2つのメッセージ・パラダイムをサポートしています。
この項には、次の項目が含まれます。
Point-to-Pointメッセージでは、メッセージは消費されるまでキューに格納されます。1つ以上のプロデューサがキューに書き込み、1つ以上のコンシューマがキューからメッセージを抽出します。JMSコンシューマにより、メッセージの消費後に確認情報が送信されるため、キューからメッセージがパージされます。
パブリッシュ・サブスクライブ・メッセージでは、プロデューサがメッセージをトピックに公開し、コンシューマが特定のトピックにサブスクライブします。複数のパブリッシャが同じトピックを公開でき、複数のコンシューマが同じトピックにサブスクライブできます。プロデューサによってトピックに公開されたすべてのメッセージは、そのトピックにサブスクライブしたすべてのコンシューマによって受信されます。デフォルトでは、サブスクライバがメッセージを受信できるのはアクティブなときのみです。ただし、JMS APIでは、コンシューマが稼働中ではなくても、公開されたメッセージを受信できる永続サブスクリプションをサポートしています。永続サブスクリプションでは、コンシューマがアクティブではないときに送信されたメッセージを受信するために、コンシューマを一意のIDで登録します。これらのメッセージはJMSプロバイダにより保存され、コンシューマが再度アクティブになった際に送信されるか、メッセージが失効した場合には記憶域からパージされます。JMSプロデューサは、永続モードまたは非永続モードに設定できます。非永続モードではメッセージは保存されず、非永続サブスクリプションにのみ使用できます。
|
注意: JMSアダプタでは、特定の永続サブスクリプションを使用しているBPELパートナ・リンクがそれを使用しなくなっても、永続サブスクリプションは削除されません。永続サブスクライバは手動で削除する必要があります。 |
JMS APIでは、メッセージ消費のための同期または非同期通信の両方をサポートしています。同期の場合、コンシューマはトピックまたはキューのreceive()メソッドを明示的に呼び出します。非同期の場合、JMSクライアントによりトピックまたはキューにメッセージ・リスナーが登録され、メッセージはそのリスナーのonMessage()メソッドを呼び出すことで配信されます。
宛先、接続、コネクション・ファクトリおよびセッション
宛先プロパティには、JMSキューまたはトピックのアドレス情報が含まれます。接続は、JMSプロバイダへの物理接続を表します。コネクション・ファクトリは、JMS接続の作成に使用されます。セッションは、キューまたはトピックの宛先、JMSプロデューサ、およびJMSコンシューマのオブジェクトの作成に使用されます。
|
注意: OC4J JMSには、単一のOC4J JMS接続リスナーに関する既知の制限があり、同じトピックに対してサブスクライバとパブリッシャを使用することはできません。 したがって、同じトピックにパブリッシュおよびサブスクライブするBPELプロセスに同じ接続は使用できません。つまり、同じJNDIを共有することはできません。 この問題を回避するには、次の2つの方法があります。
|
JMSメッセージの構造
JMSメッセージには、必須の標準ヘッダー要素、オプションのプロパティ要素およびオプションの標準ペイロード要素があります。ペイロードはテキスト・メッセージ、バイト・メッセージ、マップ・メッセージ、ストリーム・メッセージまたはオブジェクト・メッセージのいずれかになります。プロパティ要素はJMSプロバイダ固有で、JMSプロバイダごとに異なります。
表5-1に、JMSヘッダー・プロパティを説明します。
表5-1 JMSヘッダー・プロパティ
| プロパティ名 | 説明 |
|---|---|
|
|
メッセージの送信先で、JMSプロデューサによって設定されます。 |
|
|
JMSコンシューマによって永続または非永続モードに設定されます。 |
|
|
コンシューマによって期限切れが設定される前のメッセージの期間です。 |
|
|
コンシューマによって設定される |
|
|
コンシューマによって設定される一意のメッセージ識別子です。 |
|
|
転送するためにメッセージがJMSプロバイダに送信された際のタイムスタンプです。 |
|
|
レスポンス・メッセージとリクエスト・メッセージをリンクするために、プロデューサおよびコンシューマの両方によって設定されます。これはオプションの属性です。 |
|
|
メッセージの返信先を示すオプションの属性。プロデューサおよびコンシューマで設定できます。 |
|
|
JMSメッセージ・タイプ。 |
|
|
プロバイダがこのメッセージのコンシューマへの送信を以前に一度試行して失敗したことを示すために、JMSプロバイダによって設定されます。 |
この項では、パートナ・リンクへのアダプタ・サービスの作成方法を説明します。
図5-1に示すように、「パートナ・リンクの作成」ウィンドウの「アダプタ・サービスの定義」(3つ目のアイコン)をクリックします。
図5-2に示す「アダプタ構成ウィザード - ようこそ」ウィンドウが表示されます。
|
注意: アダプタ構成ウィザードを使用するたびにこのウィンドウを表示する必要がない場合には、「次回にこのページを表示しない」チェック・ボックスをクリックします。 |
「次へ」をクリックします。
図5-3に示す「アダプタ・タイプ」ダイアログ・ボックスが表示されます。
使用可能なアダプタ・タイプのリストから「JMSアダプタ」を選択して「次へ」をクリックします。
図5-4に示す「サービス名」ウィンドウが表示されます。
サービスの名前を入力します。オプションで説明を追加することもできます。「次へ」をクリックします。
図5-5に示す「JMSプロバイダ」ダイアログ・ボックスが表示されます。
操作を1つ選択します。 この操作で、「Oracle Enterprise Messaging Service (OEMS)」と「データベース」を順番に選択します。
Oracle Enterprise Messaging Service (OEMS): Oracleのメモリー、ファイルまたはデータベース・メッセージ・サービスと統合できます。
サード・パーティ: このオプションを選択すると、サード・パーティのプロバイダと統合できます。
「次へ」をクリックします。
図5-6に示す「サービス接続」ダイアログ・ボックスが表示されます。
「データベース・サーバーのJNDI名」フィールドにJava Naming and Directory Interface(JNDI)名を入力します。 JNDI名は、サービスがBPELサーバーにデプロイされる際に使用される接続のプレースホルダとして機能します。 これにより、開発とその後の本番に異なるデータベースを使用できます。
「新規」をクリックしてデータベース接続を定義します。
「データベース接続の作成」ウィザードが表示されます。
|
注意: Oracle Applicationsを実行中のデータベースに接続する必要があります。 |
「次へ」をクリックします。
「タイプ」ダイアログ・ボックスに次の情報を入力します。
「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、MyDBConnection1と入力します。
「接続タイプ」ボックスから、データベース接続に使用する接続のタイプを選択します。 この例では、デフォルトの接続タイプ「Oracle(JDBC)」を保持します。
図5-7に「タイプ」ダイアログ・ボックスを示します。
「次へ」をクリックします。 「認証」ダイアログ・ボックスが表示されます。
次のフィールドに情報を入力します。
「ユーザー名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、scottと入力します。
「パスワード」フィールドで、データベース接続に使用するパスワードを指定します。 この例では、tigerと入力します。
|
注意: なんらかのデータベースのSCOTTスキーマへのアクセス権限が必要です。 |
「次へ」をクリックします。 「接続」ダイアログ・ボックスが表示されます。
次のフィールドに情報を入力します。
「ドライバ」リストから「thin」を選択します。
「ホスト名」フィールドで、データベース接続に使用するホスト名を指定します。
「JDBCポート」フィールドで、データベース接続に使用するポート番号を指定します。 この例では、1521と入力します。
「SID」フィールドで、データベース接続に使用する一意のSID値を指定します。 この例では、ORCLと入力します。
「次へ」をクリックします。
「テスト」ダイアログ・ボックスが表示されます。
「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。
「終了」をクリックして新規データベース接続の作成プロセスを完了します。
図5-8のように、「サービス接続」ダイアログ・ボックスが表示され、データベース接続のサマリーが示されます。
「次へ」をクリックします。
「操作」ダイアログ・ボックスが表示されます。
「メッセージ消費」または「メッセージ発行」を選択します。 この例では「メッセージ消費」を選択します。
図5-9のように、操作名は自動的に入力されます。
「メッセージ消費」オプションを選択すると、JMS宛先からのインバウンド・メッセージをアダプタで消費(受信)できます。
「次へ」をクリックします。
図5-10に示す「消費操作のパラメータ」ダイアログ・ボックスが表示されます。
次のフィールドに値を入力します。
リソース・プロバイダ
OC4Jには、JMSプロバイダを透過的にプラグインするためのResourceProviderインタフェースが用意されています。 OC4JのResourceProviderインタフェースにより、EJB、サーブレットおよびOC4Jクライアントは多数の異なるJMSプロバイダにアクセスできます。 リソースは、java:comp/resource/で使用可能です。 Oracle JMSへのアクセスには、ResourceProviderインタフェースが使用されます。
そのため、ユーザーは「JMSアダプタ」ウィザードでOJMS(データベース・オプション)のリソース・プロバイダを入力する必要があります。
接続先名
メッセージの送信元であるJMSキューまたはトピックのJNDI名です。 このフィールドは編集できません。 「参照」をクリックしてキューまたはトピックを参照する必要があります。 使用しているJMSプロバイダのタイプに基づいて、キューまたはトピックを選択します。詳細は、次の項を参照してください。
メッセージ本文のタイプ
「TextMessage」または「BytesMessage」を選択します。
このリリースでは、StreamMessageおよびMapMessageメッセージ・タイプはサポートされていません。
永続サブスクライバID
このフィールドはオプションです。永続サブスクライバを設定する場合には、永続サブスクライバIDが必要です。接続が解除されるとサブスクライバは通常メッセージを失いますが、永続サブスクライバは再接続の際に保存されているメッセージをダウンロードします。
|
注意: JMSプロバイダがメモリー、ファイルまたはデータベース・メッセージ・サービスの場合、「永続サブスクライバID」オプションが表示されるのはトピックを選択した場合のみです。 ただし、JMSプロバイダがサード・パーティの場合は、常に「永続サブスクライバID」オプションが表示されます。 |
メッセージ・セレクタ
このフィールドもオプションです。ヘッダーおよびプロパティの情報に基づいてメッセージをフィルタ処理します。メッセージ・セレクタ・ルールはブール式です。 式がtrueの場合には、メッセージが消費されます。 式がfalseの場合には、メッセージが拒否されます。
たとえば、次のような式を入力できます。
JMSPriority > 3。これに基づき、優先度が3より高いメッセージが消費され、それ以外のメッセージはすべて拒否されます。
JMSType = 'car' AND color = 'blue' AND weight > 2500。
Country in ('UK', 'US', 'France')。
MessageListenerを使用
このフィールドはデフォルトで「true」に設定されており、サーバーはアダプタに対して非同期コールバックを行います。 「false」に設定されている場合、アダプタは同期ブロック受信を行います。
適切なパラメータを入力したら、「次へ」をクリックします。
図5-11に示す「メッセージ」ダイアログ・ボックスが表示されます。 このダイアログ・ボックスでの設定により、メッセージ・ペイロードの適切なスキーマが定義されます。
次のいずれかを実行できます。
「ネイティブ・フォーマット変換は不要(スキーマを不透明(Opaque)にする)」を選択します。これにより残りのフィールドが使用できなくなります。
ネイティブ・フォーマットの定義プロセスを支援するネイティブ・フォーマット・ビルダー・ウィザードを起動するには、「ネイティブ・フォーマットのスキーマの定義」をクリックします。
スキーマ・ファイルURLのパスを入力します(またはパスを参照します)。
次に、最後に示した、スキーマ・ファイルURLを参照するオプションの手順を示します。
「参照」ボタンをクリックします。
図5-12のように、「タイプ・エクスプローラ」ナビゲーション・ツリーを含む「タイプの選択」ウィンドウが表示されます。
ツリーを参照し、適切なスキーマ・タイプを選択して「OK」をクリックします。
今度は、図5-13のように、「スキーマ・ファイルのURL」フィールドおよび「スキーマ要素」フィールドが入力された状態で、「メッセージ」ウィンドウが再度表示されます。
「次へ」をクリックします。
「終了」ウィンドウが表示されます。このボックスには、ウィザードにより作成されるアダプタ・ファイルのパスと名前が表示されます。
「終了」をクリックします。
各フィールドが移入済の状態で、図5-14に示す「パートナ・リンクの作成」ウィンドウが表示されます。
「OK」をクリックします。
アダプタ構成ウィザードにより、次のWSDLファイルが生成されます。
<definitions
name="JMS_Example"
targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/jms/JMS_Example/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://xmlns.oracle.com/pcbpel/adapter/jms/JMS_Example/"
xmlns:plt="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:jca="http://xmlns.oracle.com/pcbpel/wsdl/jca/"
xmlns:opaque="http://xmlns.oracle.com/pcbpel/adapter/opaque/"
xmlns:pc="http://xmlns.oracle.com/pcbpel/"
xmlns:hdr="http://xmlns.oracle.com/pcbpel/adapter/jms/"
>
このコード・セグメントでは、アダプタの名前、様々な必要なスキーマの場所およびその他の定義ファイルが定義されています。
<import namespace="http://xmlns.oracle.com/pcbpel/adapter/jms/"
location="jmsAdapterInboundHeader.wsdl"/>
このコード・セグメントでは必要なネームスペースをインポートしています。
<types>
<schema targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/opaque/"
xmlns="http://www.w3.org/2001/XMLSchema" >
<element name="opaqueElement" type="base64Binary" />
</schema>
</types>
<message name="Consume_Message_msg">
<part name="opaque" element="opaque:opaqueElement"/>
</message>
<portType name="Consume_Message_ptt">
<operation name="Consume_Message">
<input message="tns:Consume_Message_msg"/>
</operation>
</portType>
このコード・セグメントでは、メッセージ・タイプ、メッセージ名およびパートナ・リンクのポート・タイプが定義されています。
<binding name="Consume_Message_binding" type="tns:Consume_Message_ptt">
<pc:inbound_binding />
<operation name="Consume_Message">
<jca:operation
ActivationSpec="oracle.tip.adapter.jms.inbound.JmsConsumeActivationSpec"
DestinationName="jms/DemoQue"
UseMessageListener="true"
PayloadType="TextMessage"
OpaqueSchema="true" >
</jca:operation>
<input>
<jca:header message="hdr:InboundHeader_msg" part="inboundHeader"/>
</input>
</operation>
</binding>
このコード・セグメントでは、メッセージ消費操作に必要なバインディングとターゲット・キューが定義され、メッセージ・ヘッダーが識別されています。
<service name="JMS_Example2">
<port name="Consume_Message_pt" binding="tns:Consume_Message_binding">
<jca:address location="eis/Jms/topics.xml" />
</port>
</service>
<plt:partnerLinkType name="Consume_Message_plt" >
<plt:role name="Consume_Message_role" >
<plt:portType name="tns:Consume_Message_ptt" />
</plt:role>
</plt:partnerLinkType>
</definitions>
最後の部分では、データベース接続、コネクション・ファクトリ(oc4j-ra.xmlファイルで定義)、およびpartnerLinkTypeとportTypeの名前とロールが定義されています。
oc4j-ra.xmlファイルでは、JMSコネクション・ファクトリのエンドポイントが定義されます。コネクション・ファクトリには、各エンドポイントの構成プロパティが含まれます。後続の項で示すように、エンドポイントは、タイプの異なる接続に対応するために追加されます。汎用的なoc4j-ra.xmlファイルの次の例を示します。
<?xml version="1.0"?>
<!DOCTYPE oc4j-connector-factories PUBLIC "-//Oracle//DTD Oracle Connector
9.04//EN" "http://xmlns.oracle.com/ias/dtds/oc4j-connector-factories-9_04.dtd">
<oc4j-connector-factories>
<connector-factory location="eis/MyJmsTopic1" connector-name="Jms Adapter">
<config-property name="connectionFactoryLocation"
value="jms/TopicConnectionFactory"/>
<config-property name="factoryProperties" value=""/>
<config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE"/>
<config-property name="isTopic" value="true"/>
<config-property name="isTransacted" value="true"/>
<config-property name="username" value="admin"/>
<config-property name="password" value="welcome"/>
</connector-factory>
<connector-factory location="eis/MyJmsTopic2" connector-name="Jms Adapter">
<config-property name="connectionFactoryLocation"
...
</oc4j-connector-factories>
メッセージ発行操作では、特に「「アダプタ構成ウィザード」を使用したJMSアダプタの構成」の手順19において、定義の手順が異なります。消費操作パラメータを指定するかわりに、次の発行操作パラメータを指定します。これにより、JMS宛先へのアウトバウンド・メッセージをアダプタで発行(送信)できます。 図5-15に、「発行操作のパラメータ」ウィンドウを示します。
接続先名:
メッセージの配信先であるJMSキューまたはトピックのJNDI名。入力する名前は、使用しているJMSプロバイダのタイプに基づきます。詳細は、次の項を参照してください。
メッセージ本文のタイプ:
サポートされている値は「TextMessage」または「BytesMessage」です。このリリースでは、StreamMessageおよびMapMessageメッセージ・タイプはサポートされていません。
配信モード:
値は「永続」または「非永続」です。永続配信モードでは、今後の使用に備えて、永続サブスクライバによりメッセージを保存するパブリッシャである永続JMSパブリッシャを指定します。 永続サブスクライバは、「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順21の対応するフィールドに永続サブスクライバIDのあるメッセージ消費です。非永続サブスクライバでは、アダプタがアクティブではないときに発行されたメッセージは失われます。永続サブスクライバでは、永続パブリッシャに保存されていたメッセージをダウンロードするため、すべてのメッセージを受信するために常にアクティブである必要はありません。
優先度:
優先度の値を選択します。9は最も高い優先度を、0は最も低い優先度を表します。デフォルトは4です。
TimeToLive:
メッセージが失効して消費できなくなるまでの期間です。
OJMSプロバイダは、グローバルapplication.xmlファイルのresource-provider要素内に構成します。URLプロパティのあるリソース・プロバイダを構成できます。次にURL構成を説明します。
<resource-provider class="oracle.jms.OjmsContext" name="ojmsdemo"> <description>OJMS/AQ</description> <property name="url" value="jdbc:oracle:thin:@localhost:1521:my" /> <property name="username" value="jmsuser" /> <property name="password" value="jmsuser" /> </resource-provider>
oc4j-ra.xmlファイルに次のコード・セグメントを追加します。
<connector-factory location="eis/aqjms/Topic" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="java:comp/resource/ojmsdemo/TopicConnectionFactories/myTCF" /> <config-property name="factoryProperties" value="" /> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="true" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="jmsuser" /> <config-property name="password" value="jmsuser" /> </connector-factory> <connector-factory location="eis/aqjms/Queue" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value=" java:comp/resource/ojmsdemo/QueueConnectionFactories/myQCF" /> <config-property name="factoryProperties" value="" /> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="false" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="jmsuser" /> <config-property name="password" value="jmsuser" /> </connector-factory>
この場合、「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順7の正しいJMS接続のJNDI名は、eis/aqjms/Topicまたはeis/aqjms/Queueです。
oc4j-ra.xmlファイルのisTransacted値をtrueに設定します。falseに設定すると例外エラーになります。
OJMSリソースへのアクセス
java:comp/resource + JMS_provider_name + TopicConnectionFactories + user_defined_name
java:comp/resource + JMS_provider_name + QueueConnectionFactories + user_defined_name
コネクション・ファクトリのOJMS構文は次のとおりです。
または
user_defined_nameは任意に指定でき、その他の構成とは一致しません。ConnectionFactoriesでは、定義されているファクトリ・タイプの詳細を示します。この例では、JMSプロバイダ名はojmsdemoのようにresource-provider要素に定義されます。キュー・コネクション・ファクトリでは、JMSプロバイダ名がojmsdemoでmyQCFという名前を使用することを決めた場合、コネクション・ファクトリ名はjava:comp/resource/ojmsdemo/QueueConnectionFactories/myQCFになります。トピック・コネクション・ファクトリでは、JMSプロバイダ名がojmsdemoでmyTCFという名前を使用することを決めた場合、コネクション・ファクトリ名はjava:comp/resource/ojmsdemo/TopicConnectionFactories/myTCFになります。myQCFおよびmyTCFというユーザー定義の名前は、構文のその他の部分には使用されません。そのため、任意の名前を選択できます。
宛先
任意の宛先のOJMS構文は次のとおりです。
java:comp/resource + JMS_provider_name + Topics + Destination_name
または
java:comp/resource + JMS_provider_name + Queues + Destination_name
トピックまたはキューでは、定義されている宛先のタイプの詳細を示します。宛先の名前は、データベースで定義されたキューまたはトピックの実際の名前です。この例では、JMSプロバイダ名は、ojmsdemoのようにresource-provider要素に定義されています。データベースでは、キュー名はaqQueueです。キューでは、JMSプロバイダ名がojmsdemoでキュー名がaqQueueの場合、キューのJNDI名はjava:comp/resource/ojmsdemo/Queues/aqQueueになります。トピックでは、JMSプロバイダ名がojmsdemoでトピック名がaqTopicの場合、トピックのJNDI名はjava:comp/resource/ojmsdemo/Topics/aqTopicになります。
OJMSおよびリモート・データベース
リモート・データベースを使用するようアダプタを構成するには、application.xmlファイルのエントリは次のようになっている必要があります。
<resource-provider class="oracle.jms.OjmsContext" name="ojmsdemo"> <description>OJMS/AQ</description> <property name="url" value="jdbc:oracle:thin:@remote-host:remote-port:remote-sid" /> <property name="username" value="jmsuser" /> @ <property name="password" value="jmsuser" /> </resource-provider>
OC4J JMSサーバーが別のリモート・ホストで稼働中の場合、次のコネクタ・エントリを使用してサーバーと通信するようJMSアダプタを構成できます。このコネクタ・エントリとの唯一の違いは、ファクトリ・プロパティです。ファクトリ・プロパティは、アダプタのJNDIコンテキストを確立できます。[hostname]をOC4J JMSサーバーが稼働しているサーバーのホスト名と置き換えます。リモートOC4JインスタンスのRMIポートがデフォルト値(23791)ではない場合、プロバイダURL(ormi://remotehost.domain.com:23795)にRMIポートを指定する必要があります。
<connector-factory location="eis/RemoteOC4JJMS/Queue" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="jms/QueueConnectionFactory" /> <config-property name="factoryProperties" value="java.naming.factory.initial=com.evermind.server.ApplicationClientInitialCon textFactory;java.naming.provider.url=ormi://[hostname]; java.naming.security.principal=admin;java.naming.security.credentials=welcome"/> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="false" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="admin" /> <config-property name="password" value="welcome" /> </connector-factory>
この場合、「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順7の正しいJMS接続のJNDI名は、eis/RemoteOC4JJMS/Queueです。
また、クラスパスにファイルMETA-INF/application-client.xmlがある必要があります。このファイルのコンテンツは次のようになります。
<application-client/>
このファイルをクラスパスに配置するには、Oracle_Home\bpel\system\classes\META-INF\application-client.xmlにあるファイルに指定されたコンテンツを配置し、Oracle BPEL Serverを再起動します。
アウトバウンド接続のoc4j-ra.xmlファイルのisTransactedをtrueに設定すると、エラーが発生します。アウトバウンド接続ではこの値をtrueに設定しないでください。
接続先名
OC4J JMSの接続先名は、JNDIロケーション(jms/demoQueueまたはjms/demoTopicなど)か、jms.xmlで構成された接続先の実際の名前(Demo QueueまたはDemo Topicなど)です。
Tibco EMSがC:\tibco\emsにインストールされている場合、BPEL OC4J application.xmlフィルには、次のjarファイルが含まれている必要があります。JMSおよびJNDI jarファイルは、すでにクラスパスに存在するため、含める必要はありません。
<library path="C:\tibco\ems\clients\java\tibjms.jar" />
oc4j-ra.xmlのJMSコネクション・ファクトリの適切なエンドポイントを作成します。この変更を行った後、Oracle BPEL Serverを再起動します。適切なコード・セグメントを示します。必要なパラメータを変更し、目的にあわせて使用できます。
<connector-factory location="eis/tibjms/Topic" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="TopicConnectionFactory" /> <config-property name="factoryProperties" value="java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFa ctory;java.naming.provider.url=tibjmsnaming://localhost:7222;java.naming.security. principal=admin;java.naming.security.credentials=password" /> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="true" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="admin" /> <config-property name="password" value="password" /> </connector-factory> <connector-factory location="eis/tibjms/Queue" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="QueueConnectionFactory" /> <config-property name="factoryProperties" value="java.naming.factory.initial=com.tibco.tibjms.naming.TibjmsInitialContextFa ctory;java.naming.provider.url=tibjmsnaming://localhost:7222;java.naming.security. principal=admin;java.naming.security.credentials=password" /> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="false" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="admin" /> <config-property name="password" value="password" /> </connector-factory>
この場合、「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順7の正しいJMS接続のJNDI名は、eis/tibjms/Topicまたはeis/tibjms/Queueです。
Tibco JMSを使用する場合は、Oracle_Home\bpel\system\appserver\oc4j\j2ee\home\application-deployments\default\FtpAdapter\oc4j-ra.xmlファイルのClientIDプロパティを常に次のように設定します。
<config-property name="factoryProperties"
value="ClientID=clientId{time}"/>
サブストリング{time}は、それをJava System.currentTimeMillis()の値に置き換えるよう実行時に指示します。置換えがサポートされているその他のサブストリングは次のとおりです。
{checksum}
oc4j-ra.xmlコネクション・ファクトリ・プロパティの値に基づくチェックサム(jca:addressから参照)
{sequence}
ゼロから始まり増加する整数の次のメンバー
これらの設定により、oc4j-ra.xmlに固定または変数のClientIDを指定できます。
C:\mqseriesディレクトリにMQSeriesがインストールされている場合、BPEL OC4J application.xmlフィルには、次のjarファイルが含まれている必要があります。
<library path="C:\mqseries\java\lib\com.ibm.mq.jar" />
<library path="C:\mqseries\java\lib\com.ibm.mqjms.jar" />
oc4j-ra.xmlのJMSコネクション・ファクトリの適切なエンドポイントを作成します。この変更を行った後、Oracle BPEL Serverを再起動する必要があります。適切なコード・セグメントを示します。必要なパラメータを変更し、目的に合せて使用できます。
<connector-factory location="eis/mqseries/Queue" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="com.ibm.mq.jms.MQQueueConnectionFactory" /> <config-property name="factoryProperties" value="QueueManager=my.queue.manager;TransportType=1;HostName=myhost.com;Port=141 4;Channel=MYCHANNEL" /> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE" /> <config-property name="isTopic" value="false" /> <config-property name="isTransacted" value="true" /> <config-property name="username" value="MUSR_MQADMIN" /> <config-property name="password" value="password" /> </connector-factory>
この場合、「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順7の正しいJMS接続のJNDI名は、eis/mqseries/Queueです。
|
注意: WebSphere MQでは、WebSphere MQアプリケーションとWebSphere MQ Administrationを保護するために、通常のWindowsのユーザー名およびグループの認可が使用されます。
ユーザー名およびグループの認可を操作するには、次のようにします。
WebSphere MQインストールでは、ローカル・グループ <config-property name="username" value="MUSR_MQADMIN"/> <config-property name="password" value="password"/> |
接続先名
接続先名は、MQ Series構成にリストされたトピックまたはキューの名前です。 たとえば、キュー名はqueue:///MYQUEUE?targetClient=0になります。
OracleAS Adapter for JMSは、Oracle BPEL Process Managerインストールに付属するJCA 1.5リソース・アダプタです。 JCA 1.5リソース・アダプタとBPEL Process Managerを双方向で統合するために、アダプタ・フレームワーク(AF)が使用されています。 アダプタ・フレームワークはオープン規格に準拠しており、基盤となるJCA相互作用をWebサービスとして公開するためのWeb service Invocation Framework(WSIF)テクノロジが使用されています。 この例を次に示します。
MQSeriesのキュー・コンシューマは、MQSeriesキューからメッセージをデキューしてBPELプロセスをトリガーします。 メッセージ・ペイロードはText型で、ネイティブ・フォーマット・ビルダーを使用してデリミタ付きスキーマにより定義されます。
MQSeriesのキュー・プロデューサは、invoke BPELメッセージに基づいてMQSeriesキューにメッセージをエンキューします。
この項では、パートナ・リンクへのアダプタ・サービスの作成方法を説明します。
「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順1から3に従います。
「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順4で、図5-16に示すようにサービス名としてInboundと入力します。
サード・パーティと統合するために操作タイプとして「サード・パーティ」を選択し、「次へ」をクリックします。
「JMS接続」ダイアログ・ボックスが表示されます。
「JMS接続」ダイアログ・ボックスで次の接続情報を指定します。
ファクトリ・プロパティ:
コネクション・ファクトリの場所(mcf.ConnectionFactoryLocation)により、JMSアダプタに対して、基礎となるJMSプロバイダ内でキューまたはトピック・コネクション・ファクトリをインスタンス化する場所または方法を指示します。 JMSアダプタは、最初にJNDIを介して指定の値を検索します。 失敗すると、値をインスタンス化対象のJavaクラス名であるとみなします。 この場合にのみ、mcf.FactoryProperties内のFactory Properties値で、コネクション・ファクトリに対するベンダー固有のBeanメソッドを提示する名前/値ペアも調べます。
これは必須フィールドであり、編集はできません。 「編集」をクリックし、JNDI接続のファクトリ・プロパティを入力して「OK」をクリックします。
図5-17に、ファクトリ・プロパティを入力済の「ファクトリ・プロパティ」ダイアログ・ボックスを示します。
JMSコネクション・ファクトリ:
JMSコネクション・ファクトリは、JMS接続の作成に使用されます。 この例では、MQQueueConnectionFactoryを使用してQueueConnectionsが作成されます。
この例では、「JMSコネクション・ファクトリ」フィールドに次の値を入力します。
com.ibm.mq.jms.MQQueueConnectionFactory
処理済:
これは、セッションが処理済であるか未処理であるかを決定するブールです。
この例では、デフォルト値のtrueを保持します。
接続先タイプ:
接続先がキューであるかトピックであるかを指定します。
この例では、デフォルト値のQueueを保持します。
ユーザー名:
ユーザー名を入力します。
パスワード:
パスワードを入力します。
図5-18に、すべてのフィールドに値が移入された後の「JMS接続」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「操作」ダイアログ・ボックスが表示されます。
「消費」を選択して「次へ」をクリックします。
図5-19のように、「消費操作のパラメータ」ダイアログ・ボックスに値を入力して「次へ」をクリックします。
「接続先名」フィールドでは、MQSeriesのキュー名を指します。 「接続先名」フィールドの値targetClient=0は、JMSヘッダーがメッセージの一部であることを示すために使用されます。 JMSヘッダーをメッセージから切り捨てる場合は、targetClientに値1を指定する必要があります。 JMSアダプタは、テキスト・メッセージとバイト・メッセージをサポートしています。 この例ではテキスト・メッセージ・フォーマットを使用しています。
「メッセージ」ダイアログ・ボックスで、「参照」をクリックしてスキーマ・ファイルのURLを選択します。 この例では、図5-20に示すようにexpense.xsdを選択します。
JMSアダプタの重要な機能の1つは、XMLとの間のネイティブ・フォーマット・トランスレーションをサポートすることです。 アダプタ・ペイロード(テキストまたはバイト)では、デリミタ付き、固定位置、COBOLコピーブックのデータを指すことができ、これらはネイティブ・フォーマット・トランスレータによりXMLとの間で変換されます。 この例では、着信テキスト・メッセージのデリミタ付きスキーマを指しています。
「アダプタ構成ウィザード - 終了」画面が表示されます。
「次へ」をクリックし、「終了」をクリックしてMQSeriesコンシューマ・サービスの構成を完了します。
図5-21に示す「終了」画面が表示されます。
「パートナ・リンクの作成」ダイアログ・ボックスで「OK」をクリックしてパートナ・リンクの作成を完了します。
MQSeriesコンシューマ・サービスの構成後、次のステップはMQSeriesのプロデューサ・サービスを構成することです。
次の手順に従ってMQSeriesのプロデューサ・サービスを構成します。
「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順1から3に従います。
「アダプタ構成ウィザードを使用したJMSアダプタの構成」の手順4で、サービス名としてOutboundと入力します。
サード・パーティと統合するために操作タイプとして「サード・パーティ」を選択し、「次へ」をクリックします。
「JMS接続」ダイアログ・ボックスが表示されます。
図5-22のように、「JMS接続」ダイアログ・ボックスで接続情報を指定します。
「操作」ダイアログ・ボックスで「発行」をクリックし、「次へ」をクリックします。
「発行」を選択して「次へ」をクリックします。
図5-23のように、「消費操作のパラメータ」ダイアログ・ボックスに値を入力して「次へ」をクリックします。
「メッセージ」ダイアログ・ボックスで、「参照」をクリックしてスキーマ・ファイルのURLを選択します。 この例では、図5-24に示すようにexpense.xsdを選択します。
「アダプタ構成ウィザード - 終了」画面が表示されます。
「次へ」をクリックし、「終了」をクリックしてMQSeriesプロデューサ・サービスの構成を完了します。
図5-25に示す「終了」画面が表示されます。
「パートナ・リンクの作成」ダイアログ・ボックスで「OK」をクリックしてパートナ・リンクの作成を完了します。
次の手順に従って、エンドツーエンドのBPELプロセスを構成します。
「Receive」をクリックして、MQSeriesコンシューマ・サービスを指すようにreceiveアクティビティを構成します。
図5-26にreceiveアクティビティを示します。
MQSeriesのコンシューマから着信メッセージを受信するために、図5-26のように「インスタンスの作成」オプションを選択してグローバル変数InputVariableを作成します。
「OK」をクリックします。
invokeアクティビティを、MQSeriesプロデューサのパートナ・リンクを指すようにドラッグ・アンド・ドロップします。
図5-27にinvokeアクティビティを示します。
assignアクティビティをドラッグ・アンド・ドロップして、MQSeriesプロデューサ用のMQSeriesヘッダーおよびペイロード・メッセージを設定し、「OK」をクリックします。
図5-28にassignアクティビティを示します。
「作成」ドロップダウン・リストをクリックし、図5-29のように「コピー操作」を選択します。
「コピー操作の作成」ダイアログ・ボックスが表示されます。
必要なコピー操作の実行後、「Assign」ダイアログ・ボックスは図5-32のようになります。
エンドツーエンドのBPELプロセスは、図5-33のようになります。
この項には、次のことを示す例が含まれています。
ESBサービスがJMSトピック(OEMSデータベース永続性)で新規従業員通知をリスニング
この種のメッセージの受信時に、ストアド・プロシージャを起動して新規従業員を会社データベースに挿入
前述のシナリオの目的は、次のとおりです。
AQに対するJMSアダプタ(インバウンド)の構成方法の説明
PL/SQLストアド・プロシージャを起動するようにデータベース・アダプタを構成する方法の説明
開発から本番へのプロジェクトのプロモート(および関連リソース・プロバイダに関する考慮事項)の説明
この項には、次の項目が含まれます。
このシナリオの作成を開始する前に、次の前提条件が満たされていることを確認してください。
ESBSamples.zipをC:\ESBSamplesまたは他の場所に解凍します。
ESBSamples\AQJMStoDBが存在することを確認します。
ESBSamplesが図5-34に示すツリー構造になっていることを確認します。
次の手順に従って、シナリオを作成するためのデータベース・アカウントを準備します。
DOSプロンプトを開き、次の例に示すように既存のディレクトリをチュートリアル・ディレクトリに変更します。
cd \ESBSamples\AQJMStoDB
ORACLE_HOMEを、次の例に示すようにコンピュータ上のデータベース・インストールに設定します。
ex: set ORACLE_HOME=D:\ORADB_10gR2
次のスクリプトを実行してアカウントを作成します。
sqlplus sys as sysdba @accounts_create.sql
次の手順に従ってストアド・プロシージャを作成します。
次の例に示すように、既存のディレクトリからsqlディレクトリに変更します。
cd \ESBSamples\AQJMStoDB\sql
次のスクリプトを実行してストアド・プロシージャを作成します。
sqlplus dbapp/dbapp @procedure_create.sql
次の手順に従ってAQで接続先を作成します。
次の例に示すように、既存のディレクトリからsqlディレクトリに変更します。
cd \ESBSamples\AQJMStoDB\sql
次のSQLスクリプトを使用して、JMSDEMO_TOPICというJMSトピックに必要なインフラストラクチャをデータベースに作成します。
sqlplus jmuser/jmuser @topic_create.sql
次の手順に従って新規ESBプロジェクトを作成します。
Oracle JDeveloperを開きます。
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログ・ボックスが表示されます。
「フィルタ方法」ボックスから「すべてのテクノロジ」を選択します。 使用可能なカテゴリのリストが表示されます。
「General」ノードを開いて「Projects」を選択します。
図5-35のように、「項目」グループから「ESBプロジェクト」を選択します。
「OK」をクリックします。
「ESBプロジェクトの作成」ダイアログ・ボックスが表示されます。
「プロジェクト名」フィールドにわかりやすい名前を入力します。 たとえば、図5-36のようにAQJMStoDBと入力します。
「OK」をクリックします。
新規ESBプロジェクトAQJMStoDBが作成されました。
次の手順に従ってインバウンドJMSアダプタを作成します。
「コンポーネント・パレット」から「アダプタ・サービス」を選択し、「JMSアダプタ」をAQJMStoDB.esbプロジェクトにドラッグ・アンド・ドロップします。
図5-37に示す「JMSアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。
「JMSアダプタ・サービスの作成」ダイアログ・ボックスで次の情報を指定します。
名前: サービスの名前を入力します。 この例では、ListenForNewEmployeesと入力します。
システム/グループ: デフォルト値を保持します。
図5-38に、「名前」および「システム/グループ」フィールドに情報を入力した後の「JMSアダプタ・サービスの作成」ダイアログ・ボックスを示します。
「アダプタ・サービスのWSDL」で「アダプタ・サービスのWSDLの構成」アイコンをクリックします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。
「次へ」をクリックします。
図5-39のように、「サービス名」フィールドが入力済の「サービス名」ダイアログ・ボックスが表示されます。
サービス名を保持して「次へ」をクリックします。
「JMSプロバイダ」ダイアログ・ボックスが表示されます。
JMSプロバイダとして「Oracle Enterprise Messaging Service (OEMS)」を選択し、ドロップダウン・リストから「データベース」をクリックします。
図5-40に「JMSプロバイダ」ダイアログ・ボックスを示します。
「次へ」をクリックします。
図5-41に示す「サービス接続」ダイアログ・ボックスが表示されます。
「新規」をクリックしてデータベース接続を定義します。
「データベース接続の作成」ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「タイプ」ダイアログ・ボックスが表示されます。
「タイプ」ダイアログ・ボックスに次の情報を入力します。
「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、OEMSと入力します。
「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。
図5-42に「タイプ」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「認証」ダイアログ・ボックスが表示されます。
次のフィールドに認証の資格証明を入力します。
「ユーザー名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、jmsuserと入力します。
「パスワード」フィールドで、データベース接続に使用するパスワードを指定します。 この例では、jmsuserと入力します。
「ロール」フィールドは空白にしておきます。
「パスワードを配布」を選択します。
図5-43に、資格証明が移入された後の「認証」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「接続」ダイアログ・ボックスが表示されます。
次のフィールドに情報を入力します。
「ドライバ」リストで、デフォルト値の「thin」を保持します。
「ホスト名」フィールドでデフォルト値の「localhost」を保持します。
「JDBCポート」フィールドで、データベース接続に使用するポート番号を指定します。
「SID」フィールドで、データベース接続に使用する一意のSID値を指定します。
図5-44に「接続」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「テスト」ダイアログ・ボックスが表示されます。
「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。
「終了」をクリックして新規データベース接続の作成プロセスを完了します。
「サービス接続」ダイアログ・ボックスが表示され、データベース接続のサマリーが示されます。
「次へ」をクリックします。
「操作」ダイアログ・ボックスが表示されます。
「メッセージ消費」を選択します。
「操作名」フィールドには自動的に入力されます。
図5-45に、「メッセージ消費」を選択した状態の「操作」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「消費操作のパラメータ」ダイアログ・ボックスが表示されます。
「リソース・プロバイダ」フィールドでOEMSを指定し、「接続先名」で「参照」をクリックします。
「接続先の選択」ダイアログ・ボックスが表示されます。
図5-46に示すように、「接続先」で「すべてのタイプ」をクリックしてJMSUSERと入力し、JMSDEMO_TOPIC (topic)を選択して「OK」をクリックします。
「消費操作のパラメータ」ダイアログ・ボックスが表示されます。
「永続サブスクライバID」フィールドにNewProvisioningESBと入力し、「次へ」をクリックします。
図5-47に、すべてのフィールドを入力済の「消費操作のパラメータ」ダイアログ・ボックスを示します。
図5-48に示す「メッセージ」ダイアログ・ボックスが表示されます。
「メッセージ・スキーマ」で、「スキーマの場所」の横にある「参照」をクリックします。
図5-49に示す「タイプの選択」ダイアログ・ボックスが表示されます。
「スキーマ・ファイルのインポート」アイコン(右上)をクリックします。
「スキーマ・ファイルのインポート」ダイアログ・ボックスが表示されます。
「ファイルシステムの参照」アイコンをクリックします。
「スキーマのインポート」ダイアログ・ボックスが表示されます。
このチュートリアルがあるディレクトリにナビゲートします。 図5-50のように、ADDEMPLOYEES.xsdスキーマを選択します。
「開く」をクリックします。
「スキーマのインポート」ダイアログ・ボックスが再表示されます。図5-51に示すように、今度は「URL」フィールドが入力済になっています。
「OK」をクリックします。 「プロジェクトに追加」チェック・ボックスが選択されていることを確認します。
「タイプの選択」ダイアログ・ボックスが再表示されます。
「タイプの選択」ダイアログ・ボックスで、図5-52のように「インポートしたスキーマ」を開いて「ADDEMPLOYEES.xsd」の下で「InputParameters」を選択します。
「OK」をクリックします。
図5-53のように、「スキーマの場所」および「スキーマ要素」フィールドが入力済の状態で「メッセージ」ボックスが表示されます。
「次へ」をクリックして「終了」をクリックします。
すべてのフィールドが入力済の状態で、図5-54に示す「JMSアダプタ・サービスの作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
インバウンドJMSアダプタ・サービスの作成を完了しました。
|
ヒント: transaction-manager.xml内のタイムアウト値は、jtaトランザクションを十分に完了できるレベルに設定する必要があります。 例外が発生した場合は、次の例に示すようにtransaction-manager.xml内のタイムアウト値を増やしてください。
Caused by: javax.transaction.RollbackException: Transaction has been marked for rollback: Timed out at com.evermind.server.ApplicationServerTransaction.checkMarkedForRollback(ApplicationServerTransaction.java:612) at com.evermind.server.ApplicationServerTransaction.enlistResource(ApplicationSer verTransaction.java:108) at com.evermind.server.ApplicationServerTransaction.enlistResource(ApplicationSer verTransaction.java:87) at com.evermind.server.jms.EvermindSession.checkForCMT(EvermindSession.java:1450) |
次の手順に従ってアウトバウンド・データベース・アダプタ・サービスを作成します。
「コンポーネント・パレット」から「アダプタ・サービス」を選択し、「データベース・アダプタ」をNewEmployee.esbプロジェクトにドラッグ・アンド・ドロップします。
「データベース・アダプタ・サービスの作成」ダイアログ・ボックスが表示されます。
「データベース・アダプタ・サービスの作成」ダイアログ・ボックスで次の情報を指定します。
名前: サービスの名前を入力します。 この例では、CreateEmployeeと入力します。
システム/グループ: デフォルト値を保持します。
「アダプタ・サービスのWSDL」で「アダプタ・サービスのWSDLの構成」アイコンをクリックします。
「アダプタ構成ウィザード」の「ようこそ」ページが表示されます。
「次へ」をクリックします。
図5-55のように、「サービス名」フィールドが入力済の「サービス名」ダイアログ・ボックスが表示されます。
サービス名を保持して「次へ」をクリックします。
「サービス接続」ダイアログ・ボックスが表示されます。
「新規」をクリックしてデータベース接続を定義します。
「データベース接続の作成」ウィザードの「ようこそ」ページが表示されます。
「次へ」をクリックします。
「タイプ」ダイアログ・ボックスが表示されます。
「タイプ」ダイアログ・ボックスに次の情報を入力します。
「接続名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、EmployeeDBと入力します。
「接続タイプ」ボックスから「Oracle (JDBC)」を選択します。
図5-56に「タイプ」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「認証」ダイアログ・ボックスが表示されます。
次のフィールドに認証の資格証明を入力します。
「ユーザー名」フィールドで、データベース接続に使用する一意の名前を指定します。 この例では、dbappと入力します。
「パスワード」フィールドで、データベース接続に使用するパスワードを指定します。 この例では、dbappと入力します。
「ロール」フィールドは空白にしておきます。
「パスワードを配布」を選択します。
図5-57に、資格証明が移入された後の「認証」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「接続」ダイアログ・ボックスが表示されます。
次のフィールドに情報を入力します。
「ドライバ」リストで、デフォルト値の「thin」を保持します。
「ホスト名」フィールドでデフォルト値の「localhost」を保持します。
「JDBCポート」フィールドで、データベース接続に使用するポート番号を指定します。
「SID」フィールドで、データベース接続に使用する一意のSID値を指定します。
図5-58に「接続」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「テスト」ダイアログ・ボックスが表示されます。
「接続のテスト」をクリックし、指定した情報によりデータベースとの接続が確立されるかどうかを確認します。
「終了」をクリックして新規データベース接続の作成プロセスを完了します。
図5-59のように、「サービス接続」ダイアログ・ボックスが表示され、データベース接続のサマリーが示されます。
「次へ」をクリックします。
「操作」ダイアログ・ボックスが表示されます。
操作タイプとして「ストアド・プロシージャまたはファンクションの呼出し」を選択します。
図5-60に、操作タイプ「ストアド・プロシージャまたはファンクションの呼出し」が選択されている「操作」ダイアログ・ボックスを示します。
「次へ」をクリックします。
「ストアド・プロシージャの指定」ダイアログ・ボックスが表示されます。
「スキーマ」で、ドロップダウン・リストから「DBAPP」を選択し、「参照」をクリックしてプロシージャを選択します。
「ストアド・プロシージャ」ダイアログ・ボックスが表示されます。
DBAPPスキーマから「ストアド・プロシージャ」の下のADDEMPLOYEESを選択し、「OK」をクリックします。
図5-61に、「ストアド・プロシージャ」ダイアログ・ボックスでストアド・プロシージャADDEMPLOYEESを選択する様子を示します。
「OK」をクリックします。
図5-62に示す「ストアド・プロシージャの指定」ダイアログ・ボックスが表示され、指定したスキーマおよびストアド・プロシージャのサマリーが示されます。
「次へ」をクリックして「終了」をクリックします。
すべてのフィールドが入力済の状態で、図5-63に示す「データベース・アダプタ・サービスの作成」ダイアログ・ボックスが表示されます。
「OK」をクリックします。
アウトバウンドRDBMSアダプタの作成が完了しました。
次の手順に従ってListenForNewEmployeesルーティング・サービスを構成します。
図5-64のように、ListenForNewEmployeesルーティング・サービスをダブルクリックします。
「ルーティング・ルール」タブを選択し、「+」アイコンをクリックしてルールを追加します。
「ターゲット・サービス操作の参照」ダイアログ・ボックスが表示されます。
図5-65のように、「CreateEmployee」サービスを選択します。
「OK」をクリックします。
「アプリケーション」ウィンドウの中央ペインは図5-66のようになります。
「トランスフォーメーション」アイコンをダブルクリックし、「新規マッパー・ファイルの作成」アイコンをクリックします。
図5-67に示す「リクエスト・トランスフォーメーション・マップ」ダイアログ・ボックスが表示されます。
「新規マッパー・ファイルの作成」を選択し、デフォルト名を受け入れて「OK」をクリックします。
「アプリケーション」ウィンドウの中央ペインは図5-68のようになります。
マッパーの左側にある「EMPS」を選択し、右側の「EMPS」へドラッグします。
図5-69に示す「自動マップ・プリファレンス」ダイアログ・ボックスが表示されます。
デフォルトのマップ・プリファレンスを受け入れて「OK」をクリックします。
「アプリケーション」ウィンドウの中央ペインは図5-70のようになります。
マッパーの設定を保存してタブを閉じます。
ルーティング・サービスの設定を保存してタブを閉じます。
サービスを開発から本番へとそのままデプロイすると、最後にアダプタはデプロイメント・リソース(EmployeeDBなど)を指すことになります。 このような非管理モードには、次の問題があります。
接続情報がWSDLファイルで指定されます。
デフォルト(ウィザードでは、これを実行時接続とみなして設計時の接続情報が取得されます)。
この状況を回避するには、管理者は次のいずれかの管理対象接続を使用してESBサーバー上に一致するデータソースを作成する必要があります。
管理モード(TopLink)
接続情報は、JNDIエントリを介してoc4j-ra.xmlで指定されます。
このJNDIエントリがWSDLで参照されます。
管理モード(OC4J)
これは推奨アプローチです。
接続情報はdata-sources.xmlで指定されます。
data-sourceはoc4j-ra.xml内のJNDIエントリで参照されます。
このJNDIエントリがWSDLで参照されます。
作成したプロジェクトからの次の値が必要です。
リソース・プロバイダ: 「インバウンドJMSアダプタの作成」の手順21でリソース・プロバイダに指定した値をapplication.xmlおよびoc4j-ra.xml内で使用します。
JNDI名: この例で指定したJNDI名eis/Jms/jmuserをoc4j-ra.xml内で使用します。
次の手順に従って、application.xml内でデータベース・リソース・プロバイダを構成します。
ESBサーバーのインストール場所(%ESB_HOME%\j2ee\home\config)にナビゲートします。次に例を示します。
cd D:\ORACLE\OracleESB_beta\j2ee\home\config
application.xmlを開き、次のエントリを追加します。
<resource-provider class="oracle.jms.OjmsContext" name="OEMS"> <description>Resource provider for the OEMS database</description> <property name="url" value="jdbc:oracle:thin:jmsuser/jmsuser@localhost:1521:XE" /> </resource-provider>
データベース接続名が、この使用例で指定したデータベース名(OEMS)と一致していることを確認します。
oc4j-ra.xmlでのJMS宛先の構成次の手順に従って、oc4j-ra.xml内でJMSアダプタの接続先を構成します。
ESBサーバーのインストール場所にあるJMSアダプタ・デプロイメント・フォルダにナビゲートします。次に例を示します。
D:\ORACLE\OracleESB_beta\j2ee\home\application-deployments\default\JmsAdapter
次の例に示すように、oc4j-ra.xml内でJNDI名とリソース・プロバイダ名を変更します。
<connector-factory location="eis/Jms/OEMS" connector-name="Jms Adapter"> <config-property name="connectionFactoryLocation" value="java:comp/resource/OEMS/TopicConnectionFactories/myTCF"/> <config-property name="factoryProperties" value=""/> <config-property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE"/> <config-property name="isTopic" value="true"/> <config-property name="isTransacted" value="true"/> <config-property name="username" value="jmsuser"/> <config-property name="password" value="jmsuser"/> <connection-pooling use="none"> </connection-pooling> <security-config use="none"> </security-config> </connector-factory>
「管理モードでのJMSアダプタの構成」で前述したように、JNDI名とリソース・プロバイダ名を変更する必要があることに注意してください。
oc4j-ra.xmlでのデータベース接続先の構成次の手順に従って、oc4j-ra.xml内でJMSアダプタの接続先を構成します。
ESBサーバーのインストール場所にあるデータベース・アダプタ・デプロイメント・フォルダにナビゲートします。次に例を示します。
D:\ORACLE\OracleESB_beta\j2ee\home\application-deployments\default\DBAdapter
次の例に示すようにoc4j-ra.xmlを変更します。
<connector-factory location="eis/DB/EmployeeDB" connector-name="Database Adapter">
<config-property name="xADataSourceName" value="jdbc/EmployeeDB-XA"/>
<config-property name="dataSourceName" value="jdbc/EmployeeDB"/>
<config-property name="platformClassName"
value="oracle.toplink.platform.database.Oracle9Platform"/>
<config-property name="usesNativeSequencing" value="true"/>
<config-property name="sequencePreallocationSize" value="50"/>
<config-property name="defaultNChar" value="false"/>
<config-property name="usesBatchWriting" value="true"/>
<connection-pooling use="none">
</connection-pooling>
<security-config use="none">
</security-config>
</connector-factory>
data-sources.xmlの構成次の手順に従って、oc4j-ra.xml内でJMSアダプタの接続先を構成します。
ESBサーバーのインストール場所にあるconfigフォルダにナビゲートします。次に例を示します。
D:\ORACLE\OracleESB_beta\j2ee\home\config
次の例に示すようにdata-sources.xmlを変更します。
<managed-data-source name="EmployeeDB-XA" connection-pool-name="EmployeePool"
jndi-name="jdbc/EmployeeDB-XA"/>
<managed-data-source name="EmployeeDB" connection-pool-name="EmployeePool"
jndi-name="jdbc/EmployeeDB"/>
<connection-pool name="EmployeePool">
<connection-factory factory-class="oracle.jdbc.pool.OracleDataSource"
user="dbapp" password="dbapp" url="jdbc:oracle:thin:@//localhost:1521/XE">
</connection-factory>
リソース・プロバイダの構成後に、次の手順に従ってESBサーバーを再起動します。
「スタート」→「ESB」→「Stop ESB」を選択します。
「スタート」→「ESB」→「Start ESB」を選択します。
これは、設計時の最終ステップです。 次の手順でESBに登録します。
すべてを保存します。
「AQJMStoDB」プロジェクトを右クリックして「ESBに登録」を選択し、「LocalIntegrationServer」をクリックします。
ESB Controlをチェックするには、ESB Consoleを開きます。 例: http://localhost:8888/esb/esb/EsbConsole.html
図5-71のようなサービス・ウィンドウが表示されます。
次の手順に従って、新規サービスをトリガーするためのJMSメッセージを送信します。
DOSプロンプトを開き、次の例に示すようにチュートリアルの下のtoolsディレクトリに移動します。
cd C:\ESBSamples\AQJMStoDB\tools
環境(classpath)が反映されるようにsetenv.batを編集し、サーバー設定(場所、ポートなど)が反映されるようにOEMSプロパティを編集します。 その後、次の例に示すようにメッセージを送信します。
C:\ESBSamples\AQJMStoDB\tools>setenv
C:\ESBSamples\AQJMStoDB\tools>java send JMSDEMO_TOPIC
-------------------------------------------------------------
OEMS.155 - simple JMS send / JMS 1.02 / Database AQ / no JNDI
-------------------------------------------------------------
Connection factory = oracle.jms.AQjmsTopicConnectionFactory@ab95e6
destination: JMSUSER.JMSDEMO_TOPIC
message :
<?xml version = '1.0' encoding = 'UTF-8'?>
<db:InputParameters
xmlns:db="http://xmlns.oracle.com/pcbpel/adapter/db/DBAPP/AD
DEMPLOYEES/">
<EMPS>
<EMPS_ITEM>
<FNAME>John</FNAME>
<MIDDLE>W</MIDDLE>
<LNAME>Doe</LNAME>
<ADDR>
<STREET>100 Oracle Parkway</STREET>
<CITY>Redwood Shores</CITY>
<STATE>CA</STATE>
<ZIP>94065</ZIP>
</ADDR>
</EMPS_ITEM>
</EMPS>
</db:InputParameters>
message was sent with ID=ID:F85494669F764BFAB51CC75367D07B35
次の手順に従ってESB Controlで実行をチェックします。
ESB Consoleを開きます。
右上隅の「インスタンス」をクリックします。
「検索」の横にある緑の矢印をクリックします。
図5-72のようなインスタンスが表示されます。