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のようなインスタンスが表示されます。