この節では、次の項目について説明します。
Oracle CEP JMSアダプタは、Javaクライアントを提供するJava EE準拠のJMSサービス・プロバイダをサポートします。詳細は、7.1.1項「JMSサービス・プロバイダ」を参照してください。
Oracle CEPでは、Javaコードを記述することなくJMS送り先との間でメッセージを送受信するためにイベント・アプリケーションで使用できる、次のJava Message Service (JMS)アダプタが提供されます。
JMSに関する一般情報については、http://java.sun.com/products/jms/
でSun Developer NetworkのJava Message Serviceを参照してください。
Oracle CEP JMSアダプタは、Javaクライアントを提供するJava EE準拠のJMSサービス・プロバイダをサポートします。
この章では、次のJMSサービス・プロバイダとともに使用するOracle CEP JMSインバウンドおよびアウトバウンド・アダプタの構成方法について説明します。
ご使用のJMSサービス・プロバイダがこのリストにない場合でも、JMSサービス・プロバイダで使用するOracle CEP JMSアダプタを構成できます。構成モデルとして7.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」の手順を確認し、JMSサービス・プロバイダのドキュメントを参照して、この手順をご使用のJMSサービス・プロバイダに適合するように変更してください。
詳細は、7.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 CEPイベント・タイプに変換します。
JMSメッセージは、MapMessage
タイプである必要があります。
各着信メッセージについて、指定のイベント・タイプを持つイベントが作成されます。着信メッセージの各マップ要素については、アダプタによってイベント・タイプのプロパティが検索され、見つかった場合は対応する値が設定されます。
オプションで、JMSメッセージのイベント・タイプへの変換方法をカスタマイズできます。独自のJavaクラスを作成して、着信JMSメッセージを1つ以上のイベント・タイプに変換するかを正確に指定します。この場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter
要素のevent-type
子要素を使用してイベント・タイプを指定しません。
詳細は、7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
デフォルトでは、インバウンドJMSアダプタはシングルスレッドです。つまり、インバウンドJMSアダプタは、シングルスレッドを使用してJMS送り先からメッセージを読み取ります。
インバウンドJMSアダプタがシングルスレッドであると、イベント順序が保証されます。
スケーラビリティを向上させるために、インバウンドJMSアダプタでマルチスレッドを使用してJMS送り先からメッセージを読み取るように構成できます。このように構成する場合、最も簡単な方法はワーク・マネージャを使用してアダプタを構成することです。アダプタだけが使用する専用のワーク・マネージャを指定するか、他のアダプタやJettyなどのいくつかのコンポーネントでワーク・マネージャを共有できます。
インバウンドJMSアダプタがマルチスレッドであると、イベント順序は保証されません。
詳細については、次を参照してください。
アウトバウンドJMSアダプタは、イベントをJMS送り先に送信します。プロパティ名とイベント・タイプを一致させることで、イベントはJMSマップ・メッセージに自動的に変換されます。
通常は、独自のJavaクラスを作成してイベント・タイプを送信JMSメッセージに変換する方法を正確に指定することで、この変換もカスタマイズします。
独自のコンバータ・クラスを指定せずに、メッセージとイベント・タイプの間の変換処理がOracle CEPによって実行されるようにする場合は、次のことが当てはまります。
JMSアダプタ・コンポーネント構成ファイルでjms-adapter
要素のevent-type
子要素を使用して、イベント・タイプを指定する必要があります。
JMSアダプタは、着信JMSメッセージをこの要素が指定するOracle CEPイベント・タイプに変換します。
デフォルトでは、アウトバウンド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 CEP JMSインバウンドおよびアウトバウンド・アダプタの構成方法を次のような内容で説明します。
この項では、次のJMSサービス・プロバイダに固有の例を示します。
ご使用のJMSサービス・プロバイダがこのリストにないが、Javaクライアントを提供している場合は、そのプロバイダで使用するOracle CEP JMSアダプタを構成できます。構成モデルとして7.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」の手順を確認し、JMSサービス・プロバイダのドキュメントを参照して、この手順をご使用のJMSサービス・プロバイダに適合するように変更してください。
詳細は、7.1.1項「JMSサービス・プロバイダ」を参照してください。
注意: 以降の項では、Oracle CEPアプリケーションがEPNアセンブリ・ファイルとコンポーネント構成ファイルを使用してすでに作成済であり、インバウンドまたはアウトバウンドJMSアダプタを使用するようにアプリケーションを更新することを想定しています。まだ作成していない場合、詳細は第1章「Oracle CEPアプリケーションの作成の概要」を参照してください。 |
JMSアダプタを作成および構成する最も簡単な方法は、Oracle CEP IDE for Eclipseアダプタ・ウィザードを使用することです。
詳細は、6.4.1.2項「アダプタ・ノードの作成方法」を参照してください。
このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、7.2.2項「JMSアダプタを手動で構成する方法」を確認して構成を完了します。
この項では、JMSアダプタを手動で作成および構成する方法について説明します。ご使用のアプリケーションに応じて必要とされる詳細な手順を説明します。
7.2.1項「Oracle CEP IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle CEP IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
JMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションのEPNアセンブリ・ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter
要素を追加します。
例7-1は、JMSインバウンド・アダプタのwlevs:adapter
要素を示しています。
例7-1 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションのコンポーネント構成ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter
要素を追加します。
例7-2は、例7-1のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter
要素について、name
子要素を、対応するwlevs:adapter
要素のid
子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle CEPイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter
要素のevent-type
子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
例7-3のように、JMSプロバイダのjms-adapter
要素を構成します。
例7-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 CEP JMSアダプタがサポートするすべてのオプションについては、以下を参照してください。
特定のJMSプロバイダのサンプルについては、以下を参照してください。
詳細は、ご使用のJMSサービス・プロバイダのドキュメントを参照してください。
コンポーネント構成ファイルにJMSプロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
7.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
以下の項目を含む、JMSクライアント・アプリケーション・ライブラリを作成します。
ご使用のJMSサービス・プロバイダが指定するJMSクライアントJARファイル。
Java Object
メッセージを使用している場合は、メッセージングに使用するJavaクラスをライブラリ・バンドルにパッケージ化する必要があります。
これらのJavaクラスは、このJMSクライアントJARアプリケーション・ライブラリに入れる場合があります。
注意: このJMSクライアントJARアプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
詳細は、24.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
特定のJMSプロバイダのサンプルについては、7.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」を参照してください。
JMSクライアントJARアプリケーション・ライブラリを該当するOracle CEPサーバー・アプリケーション・ライブラリのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
24.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
24.1.3.1「ライブラリ・ディレクトリ」を参照してください。
詳細は、24.3.4項「Oracle CEP IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MF
ファイルを更新して、次のパッケージをImport-Package
ヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
4.7.5項「パッケージのインポート方法」を参照してください。
Oracle CEPには、WebLogic JMSクライアントが含まれます。
Oracle WebLogicサーバーに接続する際、Oracle CEPはデフォルトでT3クライアントを使用します。
Oracle WebLogic Serverを-useIIOP
コマンドライン引数を使用して起動することで、IIOP WebLogicクライアントを使用できます。これは、使用されるJMSコードとは独立した(提供されるアダプタの1つであるか、カスタムJMSコードであるに関係なく)サーバー全体の設定です。
T3とIIOPを実行中のOracle CEPサーバー内で混在させて使用することはできません。
詳細は、7.2項「JMSサービス・プロバイダのJMSアダプタの構成」を参照してください。
Oracle WebLogic Server JMSプロバイダを使用するように、組込みJMSインバウンドおよびアウトバウンド・アダプタを手動で構成できます。
7.2.1項「Oracle CEP IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle CEP IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
Oracle WebLogic Server JMSのJMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter
要素を追加して、アプリケーションのEPNアセンブリ・ファイルを更新します。
例7-4は、JMSインバウンド・アダプタのwlevs:adapter
要素を示しています。
例7-4 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter
要素を追加することで、アプリケーションのコンポーネント構成ファイルを更新します。
例7-5は、例7-4のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter
要素について、name
子要素を、対応するwlevs:adapter
要素のid
子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle CEPイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter
要素のevent-type
子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
Oracle WebLogic Server JMSプロバイダのjms-adapter
要素を構成します。
例7-6は、JMSインバウンドおよびアウトバウンド・アダプタのjms-adapter
要素を示しています。
例7-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プロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
7.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
Java Object
メッセージを使用している場合は、ライブラリ・バンドルにパッケージ化する必要がある、メッセージングに使用するJavaクラスを含んだJMSクライアント・アプリケーション・ライブラリを作成する必要があります。
詳細は、24.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
注意: このJMSクライアントJARアプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
Java Objectメッセージを使用している場合は、メッセージ・アプリケーション・ライブラリのJavaクラスを、該当するOracle CEPサーバー・アプリケーションのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
24.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
24.1.3.1「ライブラリ・ディレクトリ」を参照してください。
詳細は、24.3.4項「Oracle CEP IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MF
ファイルを更新して、次のパッケージをImport-Package
ヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
4.7.5項「パッケージのインポート方法」を参照してください。
Oracle CEPでは、TIBCOエンタープライズ・メッセージ・サービス(EMS)バージョン4.2.0以上をサポートします。
Tibco EMS JMSプロバイダを使用するには、次のTibco EMSクライアントJARファイルをOracle CEPサーバー・ライブラリ・ディレクトリに追加する必要があります。
tibjms.jar
詳細については、次を参照してください。
Tibco EMS JMSプロバイダを使用するように、組込みJMSインバウンドおよびアウトバウンド・アダプタを手動で構成できます。
7.2.1項「Oracle CEP IDE for Eclipseを使用したJMSアダプタの構成方法」で説明しているとおり、JMSアダプタを作成および構成する最も簡単な方法はOracle CEP IDE for Eclipseアダプタ・ウィザードを使用することです。このアダプタ・ウィザードを使用して基本JMSアダプタ構成を作成および指定したら、この手順を確認して構成を完了します。
Tibco EMS JMS用にJMSアダプタを手動で構成するには、次の手順を実行します。
アプリケーションのEPNアセンブリ・ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにwlevs:adapter
要素を追加します。
例7-7は、JMSインバウンド・アダプタのwlevs:adapter
要素を示しています。
例7-7 インバウンド・アダプタのwlevs:adapter要素
<wlevs:adapter id="inboundJmsAdapter1" provider="jms-inbound"> ... </wlevs:adapter>
参照:
アプリケーションのコンポーネント構成ファイルで、アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとにjms-adapter
要素を追加します。
例7-8は、例7-7のJMSインバウンド・アダプタのjms-adapter要素を示しています。
各jms-adapter
要素について、name
子要素を、対応するwlevs:adapter
要素のid
子要素に設定する必要があります。
参照:
JMSメッセージおよびOracle CEPイベント・タイプの間の変換方法を決定します。
JMSアダプタで自動変換を行う場合は、JMSアダプタ・コンポーネント構成ファイルでjms-adapter
要素のevent-type
子要素を使用してイベント・タイプを指定します。
参照:
JMSアダプタでカスタム変換を行う場合は、カスタム・コンバータJavaクラスを作成してEPNアセンブリ・ファイルに登録します。
7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
例7-9のように、Tibco EMS JMSプロバイダのjms-adapter
要素を構成します。
例7-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プロバイダのクライアント・パスワードを指定する場合は、パスワードの暗号化を検討してください。
7.4項「JMSアダプタのコンポーネント構成ファイル内のパスワードの暗号化」を参照してください。
以下の項目を含む、JMSクライアント・アプリケーション・ライブラリを作成します。
tibjms.jar
Java Object
メッセージを使用している場合は、メッセージングに使用するJavaクラスをライブラリ・バンドルにパッケージ化する必要があります。
これらのJavaクラスは、このJMSクライアント・アプリケーション・ライブラリに入れる場合があります。
注意: JMSクライアント・アプリケーション・ライブラリは、次の条件を満たす必要があります。
アプリケーション・バンドルは、プロバイダ固有のパッケージをエクスポートする必要はありません。 アプリケーション・バンドルは、適用可能な場合、メッセージに使用するJavaクラスをインポートする必要があります。 |
詳細は、24.1.3.3項「アプリケーション・ライブラリの作成」を参照してください。
特定のJMSプロバイダのサンプルについては、7.2.4項「Tibco EMS JMS用にJMSアダプタを手動で構成する方法」を参照してください。
アプリケーション・ライブラリを該当するOracle CEPサーバー・アプリケーション・ライブラリのディレクトリにコピーします。
バンドルがドライバの場合は、ライブラリ拡張ディレクトリに置く必要があります。
24.1.3.2項「ライブラリ拡張ディレクトリ」を参照してください。
バンドルがドライバでない場合は、ライブラリ・ディレクトリに置くことができます。
24.1.3.1「ライブラリ・ディレクトリ」を参照してください。
詳細は、24.3.4項「Oracle CEP IDE for Eclipseを使用したアプリケーション・ライブラリの更新方法」を参照してください。
ステップ3でカスタム・コンバータ・クラスを作成した場合は、アプリケーションのMANIFEST.MF
ファイルを更新して、次のパッケージをImport-Package
ヘッダーに追加します。
Import-Package: javax.jms,javax.naming, ... ...
4.7.5項「パッケージのインポート方法」を参照してください。
JMSメッセージとイベント・タイプ間の変換をカスタマイズする場合は、独自のコンバータBeanを作成する必要があります。
この項では次について説明します:
インバウンドJMSのカスタム・コンバータBeanでは、com.bea.wlevs.adapters.jms.api.InboundMessageConverter
インタフェースを実装する必要があります。このインタフェースには次の1つのメソッドが含まれています。
public List convert(Message message) throws MessageConverterException, JMSException;
message
パラメータは着信JMSメッセージに対応します。戻り値は、イベント処理ネットワークの次のステージに渡されるイベントのList
です。
これらのAPIの詳細は、Oracle Fusion Middleware Oracle Complex Event Processing Java APIリファレンスを参照してください。
インバウンドJMSアダプタ用のカスタム・コンバータを作成するには、次の手順を実行します。
Oracle CEP IDE for Eclipse (または希望するIDE)を使用して、Javaクラスをアプリケーション・プロジェクトに追加します。
com.bea.wlevs.adapters.jms.api.InboundMessageConverter
インタフェースを実装します。
例7-10は、実装例を示しています。
例7-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; } }
例7-11に示すように、アプリケーションEPNアセンブリ・ファイルにコンバータを指定します。
bean
要素を使用して変換クラスを登録します。
name
をconverterBean
に設定し、ref
をbean
のid
に設定したwlevs:instance-property
を追加することで、コンバータ・クラスとJMSアダプタを関連付けます。
Javaクラスをアプリケーションにパッケージ化します。
詳細は、第24章「Oracle CEPアプリケーションのアセンブルとデプロイ」を参照してください。
アウトバウンドJMSのカスタム・コンバータBeanでは、com.bea.wlevs.adapters.jms.api.OutboundMessageConverter
インタフェースを実装する必要があります。このインタフェースには次の1つのメソッドが含まれています。
public List<Message> convert(Session session, Object event) throws MessageConverterException, JMSException;
パラメータはEPNのソース・ノードから送信され、発信JMSアダプタで受信されたイベントに対応します。戻り値は、JMSメッセージのList
です。
これらのAPIの詳細は、Oracle Fusion Middleware Oracle Complex Event Processing Java APIリファレンスを参照してください。
アウトバウンドJMSアダプタ用のカスタム・コンバータを作成するには、次の手順を実行します。
Oracle CEP IDE for Eclipse (または希望するIDE)を使用して、Javaクラスをアプリケーション・プロジェクトに追加します。
com.bea.wlevs.adapters.jms.api.OutboundMessageConverter
インタフェースを実装します。
例7-10は、実装例を示しています。
例7-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; } }
例7-11に示すように、アプリケーションEPNアセンブリ・ファイルにコンバータを指定します。
bean
要素を使用して変換クラスを登録します。
name
をconverterBean
に設定し、ref
をbean
のid
に設定したwlevs:instance-property
を追加することで、コンバータ・クラスとJMSアダプタを関連付けます。
Javaクラスをアプリケーションにパッケージ化します。
詳細は、第24章「Oracle CEPアプリケーションのアセンブルとデプロイ」を参照してください。
JMSアダプタ構成ファイル内のパスワードを暗号化できます。
注意: この手順では、現在コンフィグレーション・ファイルのpassword 要素でクリア・テキストのパスワード値を使用していて、パスワードを暗号化するためにencrypted-password 要素の使用を開始する必要があると想定しています。 |
JMSアダプタ構成ファイル内のパスワードを暗号化できます。
JMSアダプタ・コンポーネント構成ファイル内のパスワードを暗号化するには、次の手順を実行します。
コマンド・ウィンドウを開き、『Oracle Complex Event Processingスタート・ガイド』の開発環境の設定に関する項の説明に従って、環境を設定します。
JMSアダプタの構成ファイルがあるディレクトリに移動します。
構成ファイルの<password>
要素の値を暗号化するには、次のencryptMSAConfig
コマンドを実行します。
prompt> ORACLE_CEP_HOME/ocep_11.1/bin/encryptMSAConfig
. config_file msainternal.dat_file
ORACLE_CEP_HOME
は、d:\oracle_cep
などのOracle CEPをインストールしたメインBEAディレクトリです。2番目の引数は、JMSアダプタ構成ファイルが含まれているディレクトリです。この手順では実際にそのディレクトリに移動するため、例では"."
と示されています。config_file
パラメータは、JMSアダプタ構成ファイルの名前です。最後に、msainternal.dat_file
パラメータは、ドメインに関連付けられている.msainternal.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 CEPアプリケーションの要件に応じて定義されます。
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 CEPではプロパティ名のマップによって、着信メッセージがコンポーネント構成ファイルで指定されているイベント・タイプに自動的に変換されます。
次の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_3.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 CEPではプロパティ名のマップによって、着信イベント・タイプが発信JMSメッセージに自動的に変換されます。
次のEPNアセンブリ・ファイルの例は、アウトバウンドJMSアダプタの構成方法を示しています。ネットワークは単純です。カスタム・アダプタgetData
がフィードから受信したデータはイベント・タイプに変換されてmyProcessor
に渡されます。イベントはstreamOne
チャネルを通じてjmsOutbound
JMSアダプタに送信されます。Oracle CEPではこれらのイベントが自動的に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_3.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
属性と一致している必要があります。
この項では次について説明します:
詳細については、次を参照してください。
表7-1には、JMSインバウンド・アダプタに適用できる、jms-adapter
要素の子要素がリストされます。
表7-1 jms-adapterインバウンド子要素
子要素 | 説明 |
---|---|
|
バインドは水平的なスケールアウトを構成する場合に使用する高度な機能です。 詳細は、22.2.2項「ActiveActiveGroupBean」を参照してください。 |
|
作成するコンシューマ数。デフォルト値は1です。 この値に1より大きい数を設定した場合:
|
|
オプション。JMS接続ファクトリのJNDI名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
オプション。 注意: パスワードの暗号化の詳細は、7.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
オプション。Oracle CEPが、JMS宛先(JMSキューまたはトピック)への接続を作成するために アプリケーションで |
|
必須。JMS送り先のJNDI名。 注意: |
|
必須。JMS送り先の実際の名前。 注意: |
|
プロパティ名がインバウンドJMSマップ・メッセージ・プロパティ名と一致するイベント・タイプ。このプロパティは、Oracle CEPでJMSメッセージとイベント間の変換を自動的に実行する場合にのみ指定します。独自のコンバータBeanを作成した場合は、このプロパティを指定しないでください。 詳細は、7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。 |
|
オプション。JNDIファクトリ名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
必須。JNDIプロバイダのURL。 |
|
メッセージのフィルタ処理に使用されるJMSメッセージ・セレクタ。セレクタと一致するメッセージだけがイベントを生成します。 デフォルト: セレクタなしです。すべてのメッセージがイベントを生成します。 |
|
必須。 注意: パスワードの暗号化の詳細は、7.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
メッセージの確認方法を決定します。メッセージが一度正常に確認されると、失敗の後でも再送信されません。
デフォルト: |
|
セッションがトランザクションであるかとうかを指定するブール値。 セッションがトランザクションである場合は、 デフォルト: |
|
必須。Oracle CEPがJNDI |
|
Oracle CEPサーバーの
デフォルト値は、アプリケーション自身に構成されているワーク・マネージャです。 詳細は、 F.44項「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>
表7-2には、JMSアウトバウンド・アダプタに適用できる、jms-adapter
要素の子要素がリストされます。
表7-2 jms-adapterアウトバウンド・コンポーネント構成の子要素
子要素 | 説明 |
---|---|
|
オプション。JMS接続ファクトリのJNDI名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
オプション。 注意: パスワードの暗号化の詳細は、7.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
オプション。Oracle CEPが、JMS宛先(JMSキューまたはトピック)への接続を作成するために アプリケーションで |
|
配信モードを |
|
必須。JMS送り先のJNDI名。 注意: |
|
必須。JMS送り先の実際の名前。 注意: |
|
プロパティ名がインバウンドJMSマップ・メッセージ・プロパティ名と一致するイベント・タイプ。このプロパティは、Oracle CEPでJMSメッセージとイベント間の変換を自動的に実行する場合にのみ指定します。独自のコンバータBeanを作成した場合は、このプロパティを指定しないでください。 詳細は、7.3項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。 |
|
オプション。JNDIファクトリ名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
必須。JNDIプロバイダのURL。 |
|
必須。 注意: パスワードの暗号化の詳細は、7.4項「JMSアダプタ・コンポーネント構成ファイルでのパスワードの暗号化」を参照してください。 |
|
セッションがトランザクションであるかとうかを指定するブール値。 セッションがトランザクションである場合は、 デフォルト: |
|
必須。Oracle CEPが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>