この節では、次の項目について説明します。
Oracle CEPでは、Javaコードを記述することなくJMSキューとの間でメッセージを送受信するためにイベント・アプリケーションで使用できる、2つのJava Message Service (JMS)アダプタが提供されます。
組込みJMSアダプタでは2つの操作モードをサポートします。
Oracle CEPは次のJMSプロバイダをサポートします。
Oracle WebLogic JMS
TIBCO EMS JMS
Oracle CEPにはWebLogic JMSクライアントが含まれています。Oracle WebLogicサーバーへの接続とき、Oracle CEPではデフォルトでT3クライアントが使用されます。Oracle WebLogic Serverの開始ときに-useIIOPコマンドライン引数を使用することで、IIOP WebLogicクライアントを使用できます。これはサーバー全体の設定であり、使用されるJMSコードが提供されたいずれかのアダプタであるか、またはカスタムJMSコードであるかどうかに左右されません。実行中のOracle CEPサーバーでT3とIIOPを混合して使用できません。
TIBCOなどのWebLogic JMS以外のJMSプロバイダを使用している場合は、アプリケーションjarに適切なクライアントjarをライブラリとして含める必要があります。
JMSに関する一般情報については、http://java.sun.com/products/jms/でSun Developer NetworkのJava Message Serviceを参照してください。
インバウンドJMSアダプタはJMSキューからメッセージを受信し、プロパティ名と指定されたイベント・タイプを照合することによって、受信したメッセージを自動的にイベントに変換します。通常、この変換は独自のJavaクラスを記述することでカスタマイズします。受信したJMSメッセージを1つ以上のイベント・タイプに変換する方法をJavaクラスで厳密に指定できます。
独自のコンバータ・クラスを指定せずに、メッセージとイベント・タイプの間の変換処理がOracle CEPによって実行されるようにする場合は、次のことが当てはまります。
Oracle CEPが変換に使用するイベント・タイプを指定する必要があります。詳細は、6.2.3項「JMSアダプタの構成」を参照してください。
デフォルトでは、インバウンドJMSアダプタのデフォルト・コンバータでは、MapMessageタイプの着信JMSメッセージを予期しています。各着信メッセージに対して、指定されたイベント・タイプのイベントが作成されます。着信メッセージ内のマップ要素ごとに、アダプタによりevent-typeのプロパティが検索され、見つかった場合は対応する値が設定されます。
詳細は、6.1項「JMSアダプタ構成の概要」を参照してください。
発信JMSアダプタは、プロパティ名をイベント・タイプと照合することでイベントを自動的にJMSマップ・メッセージに変換し、イベントをJMSキューに送信します。通常は、イベント・タイプが発信JMSメッセージに変換される方法を厳密に指定する独自のJavaクラスを作成することで、この変換をカスタマイズします。
独自のコンバータ・クラスを指定せずに、メッセージとイベント・タイプの間の変換処理がOracle CEPによって実行されるようにする場合は、次のことが当てはまります。
Oracle CEPが変換に使用するイベント・タイプを指定する必要があります。詳細は、6.2.3項「JMSアダプタの構成」を参照してください。
デフォルトでは、アウトバウンドJMSアダプタのデフォルト・コンバータでは、MapMessageタイプのJMSメッセージが作成されます。イベントのプロパティごとに、出力のMapMessageに対応する要素が作成されます。
詳細は、6.1項「JMSアダプタ構成の概要」を参照してください。
次の手順では、Oracle CEPで提供されるJMSプロバイダを使用する一般的な手順を示します。
|
注意: この項では、Oracle CEPアプリケーションがEPNアセンブリ・ファイルとコンポーネント構成ファイルを使用してすでに作成済であり、インバウンドまたはアウトバウンドJMSアダプタを使用するようにアプリケーションを更新することを想定しています。まだ作成していない場合、詳細は第1章「Oracle CEPアプリケーションの作成の概要」を参照してください。 |
JMSアダプタを使用するには:
JMSメッセージがイベント・タイプに変換される方法、または発信JMSアダプタでイベント・タイプがJMSメッセージに変換される方法をカスタマイズする必要がある場合は、必要に応じてコンバータJavaクラスを作成します。JMSメッセージと特定のイベント・タイプの間のマップ・プロパティ名に基づいてOracle CEPで変換が行われるよう指定できるため、この手順は省略できます。
6.2.1項「JMSメッセージとイベント・タイプ間のカスタム・コンバータの作成」を参照してください。
アプリケーションで使用するインバウンドおよびアウトバウンドJMSアダプタごとに<wlevs:adapter>タグを追加して、アプリケーションのEPNアセンブリ・ファイルを更新します。
6.2.2項「JMSアダプタによるEPNアセンブリ・ファイルの更新」を参照してください。
コンポーネント構成ファイルを更新して、JMSアダプタのJMSプロパティを構成します。
6.2.3項「JMSアダプタの構成」を参照してください。
Import-Packageヘッダーに次のパッケージを追加するには、アプリケーションのMANIFEST.MFファイルを更新します。
Import-Package: com.bea.core.encryption,com.bea.wlevs.adapters.jms.api, ...
JMSメッセージがイベント・タイプに変換される方法、またはイベント・タイプがJMSメッセージに変換される方法をカスタマイズする場合は、独自のコンバータBeanを作成する必要があります。
インバウンドJMSのカスタム・コンバータBeanでは、com.bea.wlevs.adapters.jms.api.InboundMessageConverterインタフェースを実装する必要があります。このインタフェースには次の1つのメソッドが含まれています。
public List convert(Message message) throws MessageConverterException, JMSException;
messageパラメータは着信JMSメッセージに対応します。戻り値は、イベント処理ネットワークの次のステージに渡されるイベントのListです。
アウトバウンド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 CEP Java APIリファレンス』を参照してください。
次の例は、InboundMessageConverterとOutboundMessageConvertの両方を実装するカスタム・コンバータBeanのJavaソースを示しています。このBeanは、インバウンドおよびアウトバウンドの両方の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;
}
}
イベント処理ネットワークのJMSアダプタごとに、対応する<wlevs:adapter>タグをアプリケーションのEPNアセンブリ・ファイルに追加する必要があります。provider属性を使用して、JMSアダプタがインバウンドまたはアウトバウンドのどちらであるかを指定します。次のガイドラインに従います。
インバウンドJMSアダプタを指定する場合は、次のようにprovider属性をjms-inboundに設定します。
<wlevs:adapter id="jmsInbound" provider="jms-inbound"/>
id属性の値(この場合はjmsInbound)は、構成ファイルのこのJMSアダプタに指定した名前と一致している必要があります。構成ファイルでは、このインバウンドJMSアダプタがメッセージを取得するJMSキューを構成します。
コンバータBeanが指定されていないため、Oracle CEPではプロパティ名のマップによって、着信メッセージがコンポーネント構成ファイルで指定されているイベント・タイプに自動的に変換されます。
アウトバウンドJMSアダプタを指定する場合は、次のようにprovider属性をjms-outboundに設定します。
<wlevs:adapter id="jmsOutbound" provider="jms-outbound"/>
id属性の値(この場合はjmsOutbound)は、構成ファイルのこのJMSアダプタに指定した名前と一致している必要があります。構成ファイルでは、このアウトバウンドJMSアダプタがメッセージを送信するJMSキューを構成します。
コンバータBeanが指定されていないため、Oracle CEPではプロパティ名のマップによって、着信イベント・タイプが発信JMSメッセージに自動的に変換されます。
インバウンドおよびアウトバウンド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でイベント・タイプが指定されることが想定されるためです。
EPNの他のステージと同様に、<wlevs:adapter>タグにリスナーを追加してJMSアダプタをイベント処理ネットワークに統合します。通常、インバウンドJMSアダプタは(メッセージを受信するため)EPNの最初のステージであり、アウトバウンドJMSアダプタは(メッセージを送信するため)より後方のステージです。ただし、JMSアダプタがネットワーク内に配置される場所は、独自のOracle CEPアプリケーションの要件に応じて定義されます。
次のEPNアセンブリ・ファイルの例は、アウトバウンドJMSアダプタの構成方法を示しています。ネットワークは単純です。カスタム・アダプタgetDataがフィードから受信したデータはイベント・タイプに変換されてmyProcessorに渡されます。イベントはstreamOneチャネルを通じてjmsOutboundJMSアダプタに送信されます。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>
次の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アダプタの構成は、プロセッサやストリームなどのイベント処理ネットワークの他のコンポーネントを構成する場合と同様に、それぞれの構成ファイルで行います。これらの構成ファイルの一般情報は、1.1.5項「コンポーネント構成ファイル」を参照してください。
JMSアダプタを構成する場合のルート要素はjms-adapterです。特定のアダプタのname子要素は、このアダプタが宣言されているEPNアセンブリ・ファイル内の対応するwlevs:adapter要素のid属性と一致している必要があります。
表6-1では、インバウンドおよびアウトバウンドJMSアダプタの両方で構成できるjms-adapterの追加の子要素について説明します。
表6-1 インバウンドおよびアウトバウンド・アダプタ用のjms-adapterの子要素
| 子要素 | 説明 |
|---|---|
|
|
プロパティがJMSメッセージのプロパティと一致するイベント・タイプ。 JMSメッセージとイベントの間の変換がOracle CEPで自動的に行われるようにする場合にのみ、この子要素を指定します。独自のカスタム・コンバータBeanを作成した場合は、この要素を指定しないでください。詳細は、6.2.1項「JMSメッセージとイベント・タイプの間のカスタム・コンバータの作成」を参照してください。 |
|
|
必須。JNDIプロバイダのURL。 |
|
|
オプション。JNDIファクトリ名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
|
オプション。JMS接続ファクトリのJNDI名。Oracle CEPサーバーJMSの場合、デフォルト値は |
|
|
必須。JMS送り先のJNDI名、または実際の名前。両方ではなく、どちらか片方を指定します。 |
|
|
必須。Oracle CEPがJNDI |
|
|
必須。 パスワードの暗号化の詳細は、6.2.4項「JMSアダプタ構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
オプション。Oracle CEPが、JMS宛先(JMSキューまたはトピック)への接続を作成するために アプリケーションで |
|
|
オプション。 パスワードの暗号化の詳細は、6.2.4項「JMSアダプタ構成ファイルでのパスワードの暗号化」を参照してください。 |
|
|
トランザクション・セッションを使用するかどうかを指定するブール値。 |
表6-2は、インバウンドJMSアダプタのみに構成できるjms-adapterのオプションの子要素の一覧を示します。
表6-2 インバウンドJMSアダプタのオプションの子要素
| 子要素 | 説明 |
|---|---|
|
|
サーバーの デフォルト値は、アプリケーション自身に構成されているワーク・マネージャです。 |
|
|
作成するコンシューマ数。デフォルト値は1です。 この値を1より大きい数字に設定した場合は、コンバータBeanがスレッド・セーフであることを確認してください。これは、コンバータBeanがコンシューマ間で共有されるためです。 |
|
|
メッセージのフィルタ処理に使用されるJMSメッセージ・セレクタ。 |
|
|
セッションの確認モード。 |
表6-3は、アウトバウンドJMSアダプタのみ構成できるjms-adapter>のオプションの子要素の一覧を示します。
JMSアダプタを構成するための完全なスキーマは、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。
次の構成ファイルは、着信および発信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>
次の例は、TIBCO EMS JMSに接続するインバウンドJMSアダプタを構成する方法を示します。
<jms-adapter> <name>myJmsAdapter</name> <jndi-provider-url>t3://localhost:7222</jndi-provider-url> <jndi-factory>com.tibco.tibjms.naming.TibjmsInitialContextFactory</jndi-factory> <connection-jndi-name>TibcoQueueConnectionFactory</connection-jndi-name> <destination-jndi-name>MyQueue</destination-jndi-name> </jms-adapter>
JMSアダプタ構成ファイル内のパスワードを暗号化できます。
|
注意: この手順では、現在構成ファイルの<password>要素でクリア・テキストのパスワード値を使用していて、パスワードを暗号化するために<encrypted-password>要素の使用を開始する必要があると想定しています。 |
JMSアダプタ構成ファイル内のパスワードを暗号化するには:
コマンド・ウィンドウを開き、『Oracle CEPスタート・ガイド』の開発環境の設定の説明に従って、環境を設定します。
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>