アプリケーション開発ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

Java Message Service (JMS) アダプタの使用

この節では、以下の項目について説明します。

 


JMS アダプタの使用の概要

Oracle CEP では、Java コードを作成せずに、JMS キューとの間でメッセージを送受信するためにイベント アプリケーションで使用できる個別の 2 つの JMS アダプタが提供されます。特に、以下のものが含まれています。

独自のコンバータ クラスを指定せずに、メッセージとイベント タイプの間の変換処理が Oracle CEP によって実行されるようにする場合は、以下のことが当てはまります。

Oracle CEP では、Oracle WebLogic JMS および TIBCO EMS JMS という 2 つの 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 の概要については、Sun Developer Network の Java Message Service を参照してください。

 


JMS アダプタの使用 : 一般的な手順

以下の手順では、Oracle CEP で提供される JMS プロバイダを使用する一般的な手順を示します。

注意 : この節では、Oracle CEP アプリケーションが EPN アセンブリ ファイルとコンポーネント コンフィグレーション ファイルを使用してすでに作成済みであり、着信または発信 JMS アダプタを使用するようにアプリケーションを更新する必要があると想定しています。まだ作成していない場合は、詳細について「Oracle Complex Event Processing アプリケーションの作成の概要」を参照してください。
  1. JMS メッセージがイベント タイプに変換される方法、または発信 JMS アダプタでイベント タイプが JMS メッセージに変換される方法をカスタマイズする必要がある場合は、必要に応じてコンバータ Java クラスを作成します。JMS メッセージと特定のイベント タイプの間のマップ プロパティ名に基づいて Oracle CEP で変換が行われるよう指定できるため、この手順は省略できます。
  2. JMS メッセージとイベント タイプの間のカスタム コンバータの作成」を参照してください。

  3. アプリケーションで使用する着信および発信 JMS アダプタごとに <wlevs:adapter> タグを追加して、アプリケーションの EPN アセンブリ ファイルを更新します。
  4. JMS アダプタによる EPN アセンブリ ファイルの更新」を参照してください。

  5. コンポーネント コンフィグレーション ファイルを更新して、JMS アダプタの JMS プロパティをコンフィグレーションします。
  6. JMS アダプタのコンフィグレーション」を参照してください。

  7. Import-Package ヘッダにパッケージ com.bea.core.encryption を追加して、アプリケーションの MANIFEST.MF ファイルを更新します。例を示します。
  8. Import-Package:  
    com.bea.core.encryption
    com.bea.wlevs.adapter.defaultprovider;version="2.0.0.0",
    ...

    マニフェスト ファイルの追加情報については、「MANIFEST.MF ファイルの作成」を参照してください。

JMS メッセージとイベント タイプの間のカスタム コンバータの作成

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 の完全な説明については、Javadoc を参照してください。

次の例は、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 アダプタによる EPN アセンブリ ファイルの更新

イベント処理ネットワークの各 JMS アダプタについて、アプリケーションの EPN アセンブリ ファイルに対応する <wlevs:adapter> タグを追加する必要があります。provider 属性を使用して、JMS アダプタが着信または発信のどちらであるかを指定します。以下のガイドラインに従います。

EPN の他のステージと同様に、<wlevs:adapter> タグにリスナを追加して JMS アダプタをイベント処理ネットワークに統合します。通常、着信 JMS アダプタは (メッセージを受信するため) EPN の最初のステージであり、発信 JMS アダプタは (メッセージを送信するため) より後方のステージです。ただし、JMS アダプタが配置されるネットワーク内の場所は、独自の Oracle CEP アプリケーションの要件に応じて定義されます。

次の 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.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>
    <!-- データを取得し、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"/>
     <!-- myProcessor から発信 JMS アダプタに流れるイベントのストリーム -->
    <wlevs:stream id="streamOne">
<wlevs:listener ref="jmsOutbound"/>
<wlevs:source ref="myProcessor"/>
</wlevs:stream>
</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.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>
    <!-- イベント シンクであるイベント Bean -->
<wlevs:event-bean id="mySink"
class="com.customer.MySink"/>
    <!-- カスタム コンバータ クラスを持つ着信 JMS アダプタ ; アダプタはイベントを mySink イベント 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 アダプタのコンフィグレーション

JMS アダプタのコンフィグレーションは、プロセッサやストリームなどのイベント処理ネットワークの他のコンポーネントをコンフィグレーションする場合と同じように、それぞれのコンフィグレーション ファイルで行います。これらのコンフィグレーション ファイルの概要については、「コンポーネント コンフィグレーション ファイル」を参照してください。

JMS アダプタをコンフィグレーションする場合のルート要素は <jms-adapter> です。特定のアダプタの <name> 子要素は、このアダプタが宣言されている EPN アセンブリ ファイル内の対応する <wlevs:adapter> タグの id 属性に一致している必要があります。

次の表では、着信および発信 JMS アダプタの両方でコンフィグレーションできる <jms-adapter> の追加の子要素について説明します。

表 4-1 着信および発信アダプタの <jms-adapter> の子要素
子要素
説明
event-type
プロパティが JMS メッセージのプロパティと一致するイベント タイプ。
JMS メッセージとイベントの間の変換が Oracle CEP で自動的に行われるようにする場合にのみ、この子要素を指定します。独自のカスタム コンバータ Bean を作成した場合は、この要素を指定しないでください。
jndi-provider-url
必須。JNDI プロバイダの URL。
jndi-factory
省略可能。JNDI ファクトリ名。Oracle WebLogic Server JMS の場合のデフォルト値は weblogic.jndi.WLInitialContextFactory です。
connection-jndi-name
省略可能。JMS 接続ファクトリの JNDI 名。Oracle WebLogic Server JMS の場合のデフォルト値は weblogic.jms.ConnectionFactory です。
destination-jndi-name、
destination-name
必須。JMS 送り先の JNDI 名、または実際の名前。両方ではなく、どちらか片方を指定します。
user
省略可能。外部リソースのユーザ名。
password
省略可能。外部リソースのパスワード。
encrypted-password
省略可能。外部リソースの暗号化されたパスワード。
パスワードの暗号化の詳細については、「JMS アダプタ コンフィグレーション ファイルでのパスワードの暗号化」を参照してください。

次の表では、着信 JMS アダプタでのみコンフィグレーションできる <jms-adapter> の省略可能な子要素について説明します。

表 4-2 着信 JMS アダプタの省略可能な子要素
子要素
説明
work-manager
サーバの config.xml ファイルでコンフィグレーションされているワーク マネージャの名前。この名前は config.xml 内の <work-manager> 要素の <name> 子要素の値に対応します。
デフォルト値は、アプリケーション自身にコンフィグレーションされているワーク マネージャです。
concurrent-consumers
作成するコンシューマ数。デフォルト値は 1 です。
この値を 1 より大きい数字に設定した場合は、コンバータ Bean がスレッドセーフであることを確認してください。これは、コンバータ Bean がコンシューマ間で共有されるためです。
message-selector
メッセージのフィルタ処理に使用される JMS メッセージ セレクタ。
session-ack-mode-name
セッションの確認応答モード。
session-transacted
トランザクション セッションを使用するかどうかを指定するブール値。

次の表では、発信 JMS アダプタでのみコンフィグレーションできる <jms-adapter> の省略可能な子要素について説明します。

表 4-3 発信 JMS アダプタの省略可能な子要素
子要素
説明
delivery-mode
配信モードを指定します。persistent (デフォルト値) または nonpersistent

JMS アダプタのコンフィグレーションのための完全なスキーマについては、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 アダプタ コンフィグレーション ファイルでのパスワードの暗号化

JMS アダプタ コンフィグレーション ファイルでパスワードを暗号化する必要がある場合は、以下の手順を実行します。

注意 : この手順では、現在コンフィグレーション ファイルの <password> 要素でクリアテキストのパスワード値を使用していて、パスワードを暗号化するために <encrypted-password> 要素の使用を開始する必要があると想定しています。
  1. コマンド ウィンドウを開き、「開発環境の設定」の説明に従って、環境を設定します。
  2. JMS アダプタのコンフィグレーション ファイルがあるディレクトリに移動します。
  3. コンフィグレーション ファイルの <password> 要素の値を暗号化するために、次の encryptMSAConfig コマンドを実行します。
  4. prompt> ORACLE_CEP_HOME/ocep_10.3/bin/encryptMSAConfig . config_file msainternal.dat_file

    ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP のインストール先のメイン ディレクトリです。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>
  5. 任意の XML エディタを使用して、JMS アダプタ コンフィグレーション ファイルを編集します。次の例の太字部分のように、<password> 要素 (現在の値は暗号化されています) を <encrypted-password> に変更します。
  6. <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>

  ページの先頭       前  次