この章では、JMSアダプタを使用して、JMSメッセージを送受信するOracle Event Processingイベント処理ネットワークにJava Message Serviceを接続する方法について説明します。
この章の内容は次のとおりです。
Oracle Event Processing JMSアダプタは、Javaクライアントを提供するJava EE準拠のJMSサービス・プロバイダをサポートします。詳細は、11.1.1項「JMSサービス・プロバイダ」を参照してください。
Oracle Event Processingでは、Javaコードを記述することなくJMS宛先との間でメッセージを送受信するためにイベント・アプリケーションで使用できる、次のJava Message Service (JMS)アダプタが提供されます。
JMSに関する一般情報については、http://java.sun.com/products/jms/でSun Developer NetworkのJava Message Serviceを参照してください。
Oracle Event Processing JMSアダプタは、Javaクライアントを提供するJava EE準拠のJMSサービス・プロバイダをサポートします。
この章では、次のJMSサービス・プロバイダとともに使用するOracle Event Processing JMSインバウンドおよびアウトバウンド・アダプタの構成方法について説明します。
ご使用のJMSサービス・プロバイダがこのリストにない場合でも、JMSサービス・プロバイダで使用するOracle Event Processing JMSアダプタを構成できます。構成モデルとして11.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」の手順を確認し、JMSサービス・プロバイダのドキュメントを参照して、この手順をご使用のJMSサービス・プロバイダに適合するように変更してください。
詳細は、11.2項「JMSサービス・プロバイダのJMSアダプタの構成」を参照してください。
インバウンドJMSアダプタは、JMS宛先からメッセージを受信し、イベントに変換します。
EPNアセンブリ・ファイルで次のようにインバウンドJMSアダプタを指定します。
...
<wlevs:adapter id="myJmsInbound" provider="jms-inbound">
...
</wlevs:adapter>
...
インバウンドJMSアダプタをコンポーネント構成ファイルで次のように構成します。
...
<jms-adapter>
<name>myJmsInbound</name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Queue1</destination-jndi-name>
<user>weblogic</user>
<password>weblogic</password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
</jms-adapter>
...
この項では次について説明します:
詳細は、次を参照してください:
デフォルトでは、インバウンドJMSアダプタは、次の条件に当てはまる場合にプロパティ名を指定のイベント・タイプと一致させることで、JMSメッセージをイベントに自動的に変換します。
JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用して、イベント・タイプを指定する必要があります。
JMSアダプタは、着信JMSメッセージをこの要素が指定するOracle Event Processingイベント・タイプに変換します。
JMSメッセージは、MapMessageタイプである必要があります。
各着信メッセージについて、指定のイベント・タイプを持つイベントが作成されます。着信メッセージの各マップ要素については、アダプタによってイベント・タイプのプロパティが検索され、見つかった場合は対応する値が設定されます。
オプションで、着信JMSメッセージを1つ以上のイベント・タイプに変換する方法を厳密に指定する独自のJavaクラスを作成することで、JMSメッセージのイベント・タイプへの変換をカスタマイズできます。この場合、JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用して、イベント・タイプを指定しません。
詳細は、11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
デフォルトでは、インバウンドJMSアダプタはシングルスレッドです。つまり、インバウンドJMSアダプタは、シングルスレッドを使用してJMS宛先からメッセージを読み取ります。
インバウンドJMSアダプタがシングルスレッドであると、イベント順序が保証されます。
スケーラビリティを向上させるために、インバウンドJMSアダプタでマルチスレッドを使用してJMS宛先からメッセージを読み取るように構成できます。このように構成する場合、最も簡単な方法はワーク・マネージャを使用してアダプタを構成することです。アダプタだけが使用する専用のワーク・マネージャを指定するか、他のアダプタやJettyなどのいくつかのコンポーネントでワーク・マネージャを共有できます。
インバウンドJMSアダプタがマルチスレッドであると、イベント順序は保証されません。
詳細は、次を参照してください:
表11-1「jms-adapterインバウンド子要素」のwork-managerおよびconcurrent-consumers
JMSトピックへの恒久サブスクリプション内のクライアントになるように、インバウンドJMSアダプタを構成できます。恒久サブスクリプションでは、アダプタが非アクティブになった場合も、アダプタはパブリッシュされたメッセージを受信することが保証されます。インバウンド・アダプタがJMSサーバーに接続すると、恒久サブスクリプションが登録されます。それ以降にトピックに送信されるメッセージは、サブスクライバが切断されている間も保持され(期限切れではない場合)、再接続すると配信されます。
恒久サブスクリプションは、JMSメッセージをトピックにパブリッシュしているパブリッシャが永続配信モードを使用していることを前提とします。パブリッシャはOracle Event ProcessingのアウトバウンドJMSアダプタである(つまりdelivery-modeの値は、デフォルト値のpersistentである必要がある)ことに注意してください。
アダプタに恒久サブスクリプションを作成するには、次を実行します。
JMSメッセージ・パブリッシャが永続モードでメッセージを配信していることを確認します。
接続ファクトリのクライアントIDを指定します。Oracle WebLogic Serverで、管理上、コンソールを使用して接続ファクトリにクライアントIDを設定できます。これは、恒久サブスクライバを使用している各アダプタ・インスタンスに構成された専用の接続ファクトリがあることを意味していることに注意してください。
jms-adapterの次の3つのプロパティを設定します。
destination-typeはTOPICに設定する必要があります。
durable-subscriptionはtrueに設定する必要があります。
durable-subscription-nameは、サブスクリプション用に一意の識別子に設定します。
これらのプロパティの詳細は、11.6.1項「JMSインバウンド・アダプタのコンポーネント構成」を参照してください。
アウトバウンドJMSアダプタは、イベントをJMS宛先に送信します。プロパティ名とイベント・タイプを一致させることで、イベントはJMSマップ・メッセージに自動的に変換されます。
通常は、独自のJavaクラスを作成してイベント・タイプを送信JMSメッセージに変換する方法を正確に指定することで、この変換もカスタマイズします。
独自のコンバータ・クラスを指定せずに、メッセージとイベント・タイプの間の変換処理がOracle Event Processingによって実行されるようにする場合は、次のことが当てはまります。
JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用して、イベント・タイプを指定する必要があります。
JMSアダプタは、着信JMSメッセージをこの要素が指定するOracle Event Processingイベント・タイプに変換します。
デフォルトでは、アウトバウンドJMSアダプタのデフォルト・コンバータでは、MapMessageタイプのJMSメッセージが作成されます。イベントのプロパティごとに、出力のMapMessageに対応する要素が作成されます。
EPNアセンブリ・ファイルで次のようにアウトバウンドJMSアダプタを指定します。
...
<wlevs:adapter id="myJmsOutbound" provider="jms-outbound">
...
</wlevs:adapter>
...
アウトバウンドJMSアダプタをコンポーネント構成ファイルで次のように構成します。
...
<jms-adapter>
<name>myJmsOutbound</name>
<event-type>JMSEvent</event-type>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Topic1</destination-jndi-name>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
...
詳細は、次を参照してください:
この項では、Oracle Event Processing JMSインバウンドおよびアウトバウンド・アダプタの構成方法を次のような内容で説明します。
この項では、次のJMSサービス・プロバイダに固有の例を示します。
ご使用のJMSサービス・プロバイダがこのリストにないが、Javaクライアントを提供している場合は、そのプロバイダで使用するOracle Event Processing JMSアダプタを構成できます。構成モデルとして11.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」の手順を確認し、JMSサービス・プロバイダのドキュメントを参照して、この手順をご使用のJMSサービス・プロバイダに適合するように変更してください。
詳細は、11.1.1項「JMSサービス・プロバイダ」を参照してください。
JMSアダプタを作成および構成する最も簡単な方法は、Oracle Event Processing IDE for Eclipseアダプタ・ウィザードを使用することです。
詳細は、7.4.1.2項「アダプタ・ノードの作成方法」を参照してください。
このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、11.2.2項「JMSアダプタを手動で構成する方法」を確認して構成を完了します。
この項では、JMSアダプタを手動で作成および構成する方法について説明します。ご使用のアプリケーションに応じて必要とされる詳細な手順を説明します。
11.2.1項「Oracle Event Processing IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle Event Processing IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
JMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションのEPNアセンブリ・ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter要素を追加します。
例11-1は、JMSインバウンド・アダプタのwlevs:adapter要素を示しています。
例11-1 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションのコンポーネント構成ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter要素を追加します。
例11-2は、例11-1のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter要素について、name子要素を、対応するwlevs:adapter要素のid子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle Event Processingイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
例11-3のように、JMSプロバイダのjms-adapter要素を構成します。
例11-3 Tibco EMS JMSのjms-adapter要素の構成
<jms-adapter>
<name>inboundJmsAdapter1</name>
...
<jndi-provider-url> ... </jndi-provider-url>
<jndi-factory> ... </jndi-factory>
<connection-jndi-name> ... </connection-jndi-name>
<destination-jndi-name> ... </destination-jndi-name>
...
</jms-adapter>
Oracle Event Processing JMSアダプタがサポートするすべてのオプションについては、以下を参照してください。
特定のJMSプロバイダのサンプルについては、以下を参照してください。
詳細は、ご使用のJMSサービス・プロバイダのドキュメントを参照してください。
コンポーネント構成ファイルにJMSプロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
11.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
以下の項目を含む、JMSクライアント・アプリケーション・ライブラリを作成します。
ご使用のJMSサービス・プロバイダが指定するJMSクライアントJARファイル。
Java Objectメッセージを使用している場合は、メッセージングに使用するJavaクラスをライブラリ・バンドルにパッケージ化する必要があります。
これらのJavaクラスは、このJMSクライアントJARアプリケーション・ライブラリに入れる場合があります。
|
注意: このJMSクライアントJARアプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
詳細は、23.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
特定のJMSプロバイダのサンプルについては、11.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」を参照してください。
JMSクライアントJARアプリケーション・ライブラリを該当するOracle Event Processingサーバー・アプリケーション・ライブラリのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
23.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
23.1.3.1項「ライブラリ・ディレクトリ」を参照してください。
詳細は、23.3.4項「Oracle Event Processing IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MFファイルを更新して、次のパッケージをImport-Packageヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
5.7.5項「パッケージのインポート方法」を参照してください。
Oracle Event Processingには、WebLogic JMSクライアントが含まれます。
Oracle WebLogicサーバーへの接続とき、Oracle Event ProcessingではデフォルトでT3クライアントが使用されます。
Oracle WebLogic Serverを-useIIOPコマンドライン引数を使用して起動することで、IIOP WebLogicクライアントを使用できます。これはサーバー全体の設定であり、使用されるJMSコードが提供されたいずれかのアダプタであるか、またはカスタムJMSコードであるかどうかに左右されません。
実行中のOracle Event ProcessingサーバーでT3とIIOPを混合して使用できません。
詳細は、11.2項「JMSサービス・プロバイダのJMSアダプタの構成」を参照してください。
Oracle WebLogic Server JMSプロバイダを使用するように、組込みJMSインバウンドおよびアウトバウンド・アダプタを手動で構成できます。
11.2.1項「Oracle Event Processing IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle Event Processing IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
Oracle WebLogic Server JMSのJMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter要素を追加して、アプリケーションのEPNアセンブリ・ファイルを更新します。
例11-4は、JMSインバウンド・アダプタのwlevs:adapter要素を示しています。
例11-4 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter要素を追加することで、アプリケーションのコンポーネント構成ファイルを更新します。
例11-5は、例11-4のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter要素について、name子要素を、対応するwlevs:adapter要素のid子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle Event Processingイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
Oracle WebLogic Server JMSプロバイダのjms-adapter要素を構成します。
例11-6は、JMSインバウンドおよびアウトバウンド・アダプタのjms-adapter要素を示しています。
例11-6 Oracle WebLogic Server JMSプロバイダのjms-adapter要素
...
<jms-adapter>
<name>JmsInbound</name>
<event-type>SimpleMapEvent</event-type>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>QueueIn</destination-jndi-name>
<user>weblogic</user>
<password>welcome1</password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
<jms-adapter>
<name>JmsOutbound</name>
<event-type>SimpleMapEvent</event-type>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>QueueIn</destination-jndi-name>
<user>weblogic</user>
<password>welcome1</password>
<message-selector></message-selector>
<session-transacted>false</session-transacted>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
...
参照:
コンポーネント構成ファイルにJMSプロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
11.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
Java Objectメッセージを使用している場合は、ライブラリ・バンドルにパッケージ化する必要がある、メッセージングに使用するJavaクラスを含んだJMSクライアント・アプリケーション・ライブラリを作成する必要があります。
詳細は、23.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
|
注意: このJMSクライアントJARアプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
Java Objectメッセージを使用している場合は、メッセージ・アプリケーション・ライブラリのJavaクラスを、該当するOracle Event Processingサーバー・アプリケーションのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
23.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
23.1.3.1項「ライブラリ・ディレクトリ」を参照してください。
詳細は、23.3.4項「Oracle Event Processing IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MFファイルを更新して、次のパッケージをImport-Packageヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
5.7.5項「パッケージのインポート方法」を参照してください。
Oracle Event Processingでは、TIBCOエンタープライズ・メッセージ・サービス(EMS)バージョン4.2.0以上をサポートします。
Tibco EMS JMSプロバイダを使用するには、次のTibco EMSクライアントJARファイルをOracle Event Processingサーバー・ライブラリ・ディレクトリに追加する必要があります。
tibjms.jar
詳細は、次を参照してください:
Tibco EMS JMSプロバイダを使用するように、組込みJMSインバウンドおよびアウトバウンド・アダプタを手動で構成できます。
11.2.1項「Oracle Event Processing IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle Event Processing IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
Tibco EMS JMS用にJMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションのEPNアセンブリ・ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter要素を追加します。
例11-7は、JMSインバウンド・アダプタのwlevs:adapter要素を示しています。
例11-7 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションのコンポーネント構成ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter要素を追加します。
例11-8は、例11-7のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter要素について、name子要素を、対応するwlevs:adapter要素のid子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle Event Processingイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter要素のevent-type子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
例11-9のように、Tibco EMS JMSプロバイダのjms-adapter要素を構成します。
例11-9 Tibco EMS JMSのjms-adapter要素の構成
<jms-adapter>
<name>inboundJmsAdapter1</name>
...
<jndi-provider-url>tcp://TIBCOHOST:PORT</jndi-provider-url>
<jndi-factory>com.tibco.tibjms.naming.TibjmsInitialContextFactory</jndi-factory>
<connection-jndi-name>CONNECTION_NAME</connection-jndi-name>
<destination-jndi-name>DESTINATION_NAME</destination-jndi-name>
...
</jms-adapter>
説明:
TIBCOHOST: Tibco EMS JMSプロバイダ・ホストのホスト名。
PORT: Tibco EMS JMSプロバイダのポート。
DESTINATION_NAME: Tibco EMS JMS宛先の送り先JNDI名(TibcoRequestQueue1など)。
CONNECTION_NAME: Tibco EMS JMSサーバーで定義したTibco EMS JMS接続ファクトリの接続JNDI名(TibcoQueueConnectionFactoryなど)。
参照:
コンポーネント構成ファイルにJMSプロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
11.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
以下の項目を含む、JMSクライアント・アプリケーション・ライブラリを作成します。
tibjms.jar
Java Objectメッセージを使用している場合は、メッセージングに使用するJavaクラスをライブラリ・バンドルにパッケージ化する必要があります。
これらのJavaクラスは、このJMSクライアント・アプリケーション・ライブラリに入れる場合があります。
|
注意: JMSクライアント・アプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
詳細は、23.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
特定のJMSプロバイダのサンプルについては、11.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」を参照してください。
アプリケーション・ライブラリを該当するOracle Event Processingサーバー・アプリケーション・ライブラリのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
23.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
23.1.3.1項「ライブラリ・ディレクトリ」を参照してください。
詳細は、23.3.4項「Oracle Event Processing IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MFファイルを更新して、次のパッケージをImport-Packageヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
5.7.5項「パッケージのインポート方法」を参照してください。
JMSメッセージとイベント・タイプ間の変換をカスタマイズする場合は、独自のコンバータBeanを作成する必要があります。
この項では次について説明します:
インバウンドJMSのカスタム・コンバータBeanでは、com.bea.wlevs.adapters.jms.api.InboundMessageConverterインタフェースを実装する必要があります。このインタフェースには単一のメソッドが含まれています:
public List convert(Message message) throws MessageConverterException, JMSException;
messageパラメータは着信JMSメッセージに対応します。戻り値は、イベント処理ネットワークの次のステージに渡されるイベントのListです。
これらのAPIの詳細は、Oracle Fusion Middleware Oracle Event Processing Java APIリファレンスを参照してください。
インバウンドJMSアダプタ用のカスタム・コンバータを作成するには、次の手順を実行します。
Oracle Event Processing IDE for Eclipse (または希望するIDE)を使用して、Javaクラスをアプリケーション・プロジェクトに追加します。
com.bea.wlevs.adapters.jms.api.InboundMessageConverterインタフェースを実装します。
例11-10は、実装例を示しています。
例11-10 インバウンドJMSアダプタ用のカスタム・コンバータ
package com.customer; import com.bea.wlevs.adapters.jms.api.InboundMessageConverter; import com.bea.wlevs.adapters.jms.api.MessageConverterException; import com.bea.wlevs.adapters.jms.api.OutboundMessageConverter; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.jms.TextMessage; import java.util.ArrayList; import java.util.List; public class MessageConverter implements InboundMessageConverter, OutboundMessageConverter { public List convert(Message message) throws MessageConverterException, JMSException { TestEvent event = new TestEvent(); TextMessage textMessage = (TextMessage) message; event.setString_1(textMessage.getText()); List events = new ArrayList(1); events.add(event); return events; } public List<Message> convert(Session session, Object inputEvent) throws MessageConverterException, JMSException { TestEvent event = (TestEvent) inputEvent; TextMessage message = session.createTextMessage( "Text message: " + event.getString_1() ); List<Message> messages = new ArrayList<Message>(); messages.add(message); return messages; } }
例11-11に示すように、アプリケーションEPNアセンブリ・ファイルにコンバータを指定します。
bean要素を使用してコンバータ・クラスを登録します。
nameをconverterBeanに設定し、refをbeanのidに設定したwlevs:instance-propertyを追加することで、コンバータ・クラスとJMSアダプタを関連付けます。
Javaクラスをアプリケーションにパッケージ化します。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
アウトバウンドJMSのカスタム・コンバータBeanでは、com.bea.wlevs.adapters.jms.api.OutboundMessageConverterインタフェースを実装する必要があります。このインタフェースには単一のメソッドが含まれています:
public List<Message> convert(Session session, Object event)
throws MessageConverterException, JMSException;
パラメータはEPNのソース・ノードから送信され、発信JMSアダプタで受信されたイベントに対応します。戻り値は、JMSメッセージのListです。
これらのAPIの詳細は、Oracle Fusion Middleware Oracle Event Processing Java APIリファレンスを参照してください。
アウトバウンドJMSアダプタ用のカスタム・コンバータを作成するには、次の手順を実行します。
Oracle Event Processing IDE for Eclipse (または希望するIDE)を使用して、Javaクラスをアプリケーション・プロジェクトに追加します。
com.bea.wlevs.adapters.jms.api.OutboundMessageConverterインタフェースを実装します。
例11-10は、実装例を示しています。
例11-12 アウトバウンドJMSアダプタ用のカスタム・コンバータ
package com.customer;
import com.bea.wlevs.adapters.jms.api.InboundMessageConverter;
import com.bea.wlevs.adapters.jms.api.MessageConverterException;
import com.bea.wlevs.adapters.jms.api.OutboundMessageConverter;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
import java.util.ArrayList;
import java.util.List;
public class MessageConverter implements InboundMessageConverter,
OutboundMessageConverter {
public List convert(Message message) throws MessageConverterException, JMSException {
TestEvent event = new TestEvent();
TextMessage textMessage = (TextMessage) message;
event.setString_1(textMessage.getText());
List events = new ArrayList(1);
events.add(event);
return events;
}
public List<Message> convert(Session session, Object inputEvent)
throws MessageConverterException, JMSException {
TestEvent event = (TestEvent) inputEvent;
TextMessage message = session.createTextMessage(
"Text message: " + event.getString_1()
);
List<Message> messages = new ArrayList<Message>();
messages.add(message);
return messages;
}
}
例11-11に示すように、アプリケーションEPNアセンブリ・ファイルにコンバータを指定します。
bean要素を使用して変換クラスを登録します。
nameをconverterBeanに設定し、refをbeanのidに設定したwlevs:instance-propertyを追加することで、コンバータ・クラスとJMSアダプタを関連付けます。
Javaクラスをアプリケーションにパッケージ化します。
詳細は、第23章「Oracle Event Processingアプリケーションのアセンブルとデプロイ」を参照してください。
JMSアダプタ構成ファイル内のパスワードを暗号化できます。
|
注意: この手順では、現在構成ファイルのpassword要素でクリア・テキストのパスワード値を使用していて、パスワードを暗号化するためにencrypted-password要素の使用を開始する必要があると想定しています。 |
JMSアダプタ構成ファイル内のパスワードを暗号化できます。
JMSアダプタ・コンポーネント構成ファイル内のパスワードを暗号化するには、次の手順を実行します。
コマンド・ウィンドウを開き、3.2項「開発環境の設定」の説明に従って、環境を設定します。
JMSアダプタの構成ファイルがあるディレクトリに移動します。
構成ファイルの<password>要素の値を暗号化するには、次のencryptMSAConfigコマンドを実行します。
prompt> ORACLE_CEP_HOME/ocep_11.1/bin/encryptMSAConfig . config_file aesinternal.dat_file
ORACLE_CEP_HOMEは、d:\oracle_cepなどのOracle Event ProcessingをインストールしたメインBEAディレクトリです。2番目の引数は、JMSアダプタ構成ファイルが含まれているディレクトリです。この手順では実際にそのディレクトリに移動するため、例では"."と示されています。config_fileパラメータは、JMSアダプタ構成ファイルの名前です。最後に、aesinternal.dat_fileパラメータは、ドメインに関連付けられている.aesinternal.datファイルの場所です。デフォルトでは、このファイルはDOMAIN_DIR/servernameディレクトリにあります。DOMAIN_DIRは、/oracle_cep/user_projects/domains/mydomainなどのドメイン・ディレクトリであり、servernameはサーバー・インスタンスです。
encryptMSAConfigコマンドには、encryptMSAConfig.cmd (Windows)およびencryptMSAConfig.sh (UNIX)の2種類があります。
コマンドを実行した後、次の例の太字部分のように、<password>要素の値が暗号化されます。
<jms-adapter>
<name>jmsInbound</name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Queue1</destination-jndi-name>
<user>weblogic</user>
<password>{Salted-3DES}B7L6nehu7dgPtJJTnTJWRA==</password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
</jms-adapter>
任意のXMLエディタを使用して、JMSアダプタ構成ファイルを編集します。次の例の太字部分のように、(値が現在暗号化されている)<password>要素を<encrypted-password>に変更します。
<jms-adapter>
<name>jmsInbound</name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Queue1</destination-jndi-name>
<user>weblogic</user>
<encrypted-password>{Salted-3DES}B7L6nehu7dgPtJJTnTJWRA==</encrypted-password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
</jms-adapter>
イベント処理ネットワークのJMSアダプタごとに、対応するwlevs:adapter要素をアプリケーションのEPNアセンブリ・ファイルに追加する必要があります。provider属性を使用して、JMSアダプタがインバウンドまたはアウトバウンドのどちらであるかを指定します。
EPNの他のステージと同様に、wlevs:adapter要素にリスナーを追加してJMSアダプタをイベント処理ネットワークに統合します。通常、インバウンドJMSアダプタは(メッセージを受信するため)EPNの最初のステージであり、アウトバウンドJMSアダプタは(メッセージを送信するため)より後方のステージです。ただし、JMSアダプタがネットワーク内に配置される場所は、独自のOracle Event Processingアプリケーションの要件に応じて定義されます。
JMSのインバウンドおよびアウトバウンドの両方のアダプタで、JMSメッセージとイベント・タイプの間の変換をカスタマイズするカスタム・コンバータBeanを作成した場合は、まず標準のbean Spring要素を使用して、EPNアセンブリ・ファイル内でこれを宣言します。その後、次のように、wlevs:instance-property要素でidを指定することでBeanの参照をJMSアダプタに渡し、name属性にconverterBeanを設定します。
<bean id="myConverter"
class="com.customer.MessageConverter"/>
<wlevs:adapter id="jmsOutbound" provider="jms-outbound">
<wlevs:instance-property name="converterBean" ref="myConverter"/>
</wlevs:adapter>
この場合は、コンポーネント構成ファイルにイベント・タイプを指定しないでください。これは、カスタム・コンバータBeanでイベント・タイプが指定されることが想定されるためです。
この項では次について説明します:
詳細は、次を参照してください:
インバウンドJMSアダプタを指定する場合は、次のようにprovider属性をjms-inboundに設定します。
<wlevs:adapter id="jmsInbound" provider="jms-inbound"/>
id属性の値(この場合はjmsInbound)は、構成ファイルのこのJMSアダプタに指定した名前と一致している必要があります。構成ファイルでは、このインバウンドJMSアダプタがメッセージを取得するJMS宛先を構成します。
コンバータBeanが指定されていないため、Oracle Event Processingではプロパティ名のマップによって、着信メッセージがコンポーネント構成ファイルで指定されているイベント・タイプに自動的に変換されます。
次のEPNアセンブリ・ファイルの例は、インバウンドJMSアダプタの構成方法を示しています。ネットワークは単純です。インバウンドJMSアダプタjmsInboundはコンポーネント構成ファイルで構成されているJMS宛先からメッセージを受信します。Spring bean myConverterによって着信JMSメッセージがイベント・タイプに変換され、これらのイベントはmySinkイベントBeanに渡されます。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_6.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="JMSEvent">
<wlevs:class>com.customer.JMSEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<!-- Event bean that is an event sink -->
<wlevs:event-bean id="mySink"
class="com.customer.MySink"/>
<!-- Inbound JMS adapter with custom converter class; adapter sends events to mySink event bean-->
<bean id="myConverter" class="com.customer.MessageConverter"/>
<wlevs:adapter id="jmsInbound" provider="jms-inbound">
<wlevs:instance-property name="converterBean" ref="myConverter"/>
<wlevs:listener ref="mySink"/>
</wlevs:adapter>
</beans>
アウトバウンドJMSアダプタを指定する場合は、次のようにprovider属性をjms-outboundに設定します。
<wlevs:adapter id="jmsOutbound" provider="jms-outbound"/>
id属性の値(この場合はjmsOutbound)は、構成ファイルのこのJMSアダプタに指定した名前と一致している必要があります。構成ファイルでは、このアウトバウンドJMSアダプタがメッセージを送信するJMS宛先を構成します。
コンバータBeanが指定されていないため、Oracle Event Processingではプロパティ名のマップによって、着信イベント・タイプが発信JMSメッセージに自動的に変換されます。
次のEPNアセンブリ・ファイルの例は、アウトバウンドJMSアダプタの構成方法を示しています。ネットワークは単純です。カスタム・アダプタgetDataがフィードから受信したデータはイベント・タイプに変換されてmyProcessorに渡されます。イベントはstreamOneチャネルを通じてjmsOutboundJMSアダプタに送信されます。Oracle Event Processingではこれらのイベントが自動的にJMSメッセージに変換され、メッセージは、jmsOutboundアダプタに関連付けられているコンポーネント構成ファイルで構成されているJMS宛先に送信されます。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xmlns:wlevs="http://www.bea.com/ns/wlevs/spring"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.bea.com/ns/wlevs/spring
http://www.bea.com/ns/wlevs/spring/spring-wlevs-v11_1_1_6.xsd">
<wlevs:event-type-repository>
<wlevs:event-type type-name="JMSEvent">
<wlevs:class>com.customer.JMSEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<!-- Custom adapter that gets data from somewhere and sends it to myProcessor -->
<wlevs:adapter id="getData"
class="com.customer.GetData">
<wlevs:listener ref="myProcessor"/>
</wlevs:adapter>
<wlevs:processor id="myProcessor" />
<wlevs:adapter id="jmsOutbound" provider="jms-outbound"/>
<!-- Channel for events flowing from myProcessor to outbound JMS adapter -->
<wlevs:channel id="streamOne">
<wlevs:listener ref="jmsOutbound"/>
<wlevs:source ref="myProcessor"/>
</wlevs:channel>
</beans>
JMSアダプタの構成は、プロセッサやストリームなどのイベント処理ネットワークの他のコンポーネントを構成する場合と同様に、それぞれの構成ファイルで行います。
JMSアダプタを構成する場合のルート要素はjms-adapterです。特定のアダプタのname子要素は、このアダプタが宣言されているEPNアセンブリ・ファイル内の対応するwlevs:adapter要素のid属性と一致している必要があります。
この項では次について説明します:
詳細は、次を参照してください:
表11-1には、JMSインバウンド・アダプタに適用できる、jms-adapter要素の子要素がリストされます。
表11-1 jms-adapterインバウンド子要素
| 子要素 | 説明 |
|---|---|
|
|
バインドは水平的なスケールアウトを構成する場合に使用する高度な機能です。 詳細は、25.1.2.2項「ActiveActiveGroupBean」を参照してください。 |
|
|
作成するコンシューマ数。デフォルト値は1です。 この値に1より大きい数を設定した場合:
|
|
|
オプション。JMS接続ファクトリのJNDI名。デフォルト値は、Oracle Event ProcessingサーバーJMS用の |
|
|
オプション。 注意: パスワードの暗号化の詳細は、11.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
オプション。Oracle Event Processingが、JMS宛先(JMSキューまたはトピック)への接続を作成するために アプリケーションで |
|
|
必須。JMS宛先のJNDI名。 注意: |
|
|
必須。JMS宛先の実際の名前。 注意: |
|
|
JMSアダプタのJMS宛先タイプを定義します。有効な値は 注意: 恒久サブスクリプションをサポートするには、これをTOPICに設定し、 |
|
|
JMSアダプタのJMSトピック・サブスクリプションが恒久的であるかどうか、つまりサブスクライバが非アクティブになった場合も永続化できるかどうかを指定します。有効な値は、 注意: 恒久サブスクリプションをサポートするには、 |
|
|
JMSアダプタの恒久サブスクリプションを一意に識別するための名前。恒久サブスクリプションは、サブスクライバが非アクティブになった場合も永続化できます。 注意: 恒久サブスクリプションをサポートするには、 |
|
|
プロパティ名がインバウンドJMSマップ・メッセージ・プロパティ名と一致するイベント・タイプ。このプロパティは、Oracle Event ProcessingでJMSメッセージとイベント間の変換を自動的に実行する場合にのみ指定します。独自のコンバータBeanを作成した場合は、このプロパティを指定しないでください。 詳細は、11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。 |
|
|
オプション。JNDIファクトリ名。デフォルト値は、Oracle Event ProcessingサーバーJMS用の |
|
|
必須。JNDIプロバイダのURL。 |
|
|
メッセージのフィルタ処理に使用されるJMSメッセージ・セレクタ。セレクタと一致するメッセージだけがイベントを生成します。 デフォルト: セレクタなしです。すべてのメッセージがイベントを生成します。 |
|
|
必須。 注意: パスワードの暗号化の詳細は、11.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
メッセージの確認方法を決定します。メッセージが一度正常に確認されると、失敗の後でも再送信されません。
デフォルト: |
|
|
セッションがトランザクションであるかとうかを指定するブール値。 セッションがトランザクションである場合は、 デフォルト: |
|
|
必須。Oracle Event ProcessingがJNDI |
|
|
Oracle Event Processingサーバーの
デフォルト値は、アプリケーション自身に構成されているワーク・マネージャです。 詳細は、F.45項「work-manager」を参照してください。 |
次の構成ファイルは、インバウンドJMSアダプタを構成する場合の完全な例を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config
xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jms-adapter>
<name>jmsInbound</name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Queue1</destination-jndi-name>
<user>weblogic</user>
<password>weblogic</password>
<work-manager>MyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
</jms-adapter>
<jms-adapter>
<name>jmsOutbound</name>
<event-type>JMSEvent</event-type>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Topic1</destination-jndi-name>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
</n1:config>
表11-2には、JMSアウトバウンド・アダプタに適用できる、jms-adapter要素の子要素がリストされます。
表11-2 jms-adapterアウトバウンド・コンポーネント構成の子要素
| 子要素 | 説明 |
|---|---|
|
|
オプション。JMS接続ファクトリのJNDI名。デフォルト値は、Oracle Event ProcessingサーバーJMS用の |
|
|
オプション。 注意: パスワードの暗号化の詳細は、11.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
オプション。Oracle Event Processingが、JMS宛先(JMSキューまたはトピック)への接続を作成するために アプリケーションで |
|
|
配信モードを |
|
|
必須。JMS宛先のJNDI名。 注意: |
|
|
必須。JMS宛先の実際の名前。 注意: |
|
|
プロパティ名がインバウンドJMSマップ・メッセージ・プロパティ名と一致するイベント・タイプ。このプロパティは、Oracle Event ProcessingでJMSメッセージとイベント間の変換を自動的に実行する場合にのみ指定します。独自のコンバータBeanを作成した場合は、このプロパティを指定しないでください。 詳細は、11.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。 |
|
|
オプション。JNDIファクトリ名。デフォルト値は、Oracle Event ProcessingサーバーJMS用の |
|
|
必須。JNDIプロバイダのURL。 |
|
|
必須。 注意: パスワードの暗号化の詳細は、11.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
セッションがトランザクションであるかとうかを指定するブール値。 セッションがトランザクションである場合は、 デフォルト: |
|
|
必須。Oracle Event ProcessingがJNDI |
次の構成ファイルは、アウトバウンドJMSアダプタを構成する場合の完全な例を示しています。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config
xsi:schemaLocation="http://www.bea.com/ns/wlevs/config/application wlevs_application_config.xsd"
xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<jms-adapter>
<name>jmsInbound</name>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Queue1</destination-jndi-name>
<user>weblogic</user>
<password>weblogic</password>
<work-manager>JettyWorkManager</work-manager>
<concurrent-consumers>1</concurrent-consumers>
<session-transacted>false</session-transacted>
</jms-adapter>
<jms-adapter>
<name>jmsOutbound</name>
<event-type>JMSEvent</event-type>
<jndi-provider-url>t3://localhost:7001</jndi-provider-url>
<destination-jndi-name>Topic1</destination-jndi-name>
<delivery-mode>nonpersistent</delivery-mode>
</jms-adapter>
</n1:config>