![]() ![]() ![]() ![]() |
HTTP パブリッシュ/サブクライブ サーバ (簡略化のため、このマニュアルでは pub-sub サーバとも呼ばれます) は、ブラウザ ベースのクライアントなどの Web クライアントが、すべて HTTP 上での非同期メッセージを使用して、チャネルをサブスクライブし、利用可能なメッセージを受信し、これらのチャネルにメッセージをパブリッシュするためのメカニズムです。チャネルは JMS トピックと同じです。HTTP パブリッシュ/サブスクライブ サーバのその他の概要については、「パブリッシュ/サブスクライブ サーバの使用」を参照してください。
Oracle CEP の各インスタンスには、アプリケーションに HTTP パブリッシュ/サブスクライブ機能を実装するためにプログラマが使用できる pub-sub サーバが含まれています。pub-sub サーバは、Jetty や JDBC データ ソースなどの他のサーバ サービスと共に config.xml
ファイルでコンフィグレーションされます。pub-sub サーバは cometd プロジェクトで提案されている Bayeux プロトコルに基づいています。Bayeux プロトコルには、クライアントとサーバが HTTP を介して非同期メッセージで通信するための規約が定義されています。
Oracle CEP では、プログラマは 3 つの組み込み HTTP パブリッシュ/サブクライブ アダプタ (pub-sub アダプタ) を使用して HTTP パブリッシュ/サブクライブ機能にアクセスします。このうち 2 つはローカルおよびリモートのパブリッシュ用であり、1 つはチャネルへのサブスクライブ用です。Oracle CEP では、組み込みの pub-sub アダプタの機能が不十分な場合にチャネルへのパブリッシュおよびサブスクライブのための独自のカスタム pub-sub アダプタを作成するプログラマ向けの pub-sub API も提供されます。たとえば、サブスクライブしたチャネルからの着信メッセージをフィルタ処理する場合や、ローカル チャネルを動的に作成または破棄する場合があります。組み込みの pub-sub アダプタではこれらの機能が提供されないため、このような場合にプログラマは独自のカスタム pub-sub アダプタを実装する必要があります。
3 つの組み込み pub-sub アダプタは他の任意のアダプタと同じように動作します。これらは、イベント処理ネットワークのステージであり、EPN アセンブリ ファイルで定義され、標準のコンポーネント コンフィグレーション ファイルでコンフィグレーションされます。通常のコンフィグレーション オプションには、チャネルの指定、ローカルまたはリモートの pub-sub サーバの指定、およびユーザ認証などが含まれます。
以下の節では、これらの pub-sub アダプタのその他の概念情報について説明しています。
pub-sub サーバは Bayeux プロトコルを理解するすべてのクライアントと通信することができます。プログラマは、以下のフレームワークのいずれかを使用して Web クライアントを開発します。
Oracle CEP では着信 JSON メッセージからイベント タイプへの変換、および発信の場合はその逆の変換を自動的に実行できます。ただし、JSON メッセージ (サブスクライブでの HTTP pub-sub アダプタ経由の着信、またはパブリッシュでの HTTP pub-sub アダプタ経由の発信) からイベント タイプへの変換方法、または逆方向の変換方法をカスタマイズする場合は、独自のコンバータ Bean を作成する必要があります。詳細については、「HTTP Pub-Sub メッセージとイベント タイプの間のカスタム コンバータの作成」を参照してください。
独自のコンバータ クラスを指定せずに、メッセージとイベント タイプの間の変換処理が Oracle CEP によって実行されるようにする場合は、以下のことが当てはまります。
次の図に、ローカル パブリッシュ用の組み込み pub-sub アダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。任意のアダプタおよびプロセッサは必須ではなく、これらは単に pub-sub アダプタの他にアプリケーションで使用可能なコンポーネントの例として示されています。
次の図に、リモート パブリッシュ用の組み込み pub-sub アダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。
次の図に、サブスクライブ用の組み込み pub-sub アダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。任意のプロセッサおよびビジネス POJO は必須ではなく、これらは単に pub-sub アダプタの他にアプリケーションで使用可能なコンポーネントの例として示されています。
以下の手順では、Oracle CEP アプリケーションで組み込みの pub-sub アダプタを使用するための一般的な手順について説明します。
注意 : | この節では、Oracle CEP アプリケーションが EPN アセンブリ ファイルとコンポーネント コンフィグレーション ファイルを使用してすでに作成済みであり、組み込みの pub-sub アダプタを使用するようにアプリケーションを更新する必要があると想定しています。まだ作成していない場合は、Oracle CEP アプリケーションの作成の概要について、「Oracle Complex Event Processing アプリケーションの作成の概要」を参照してください。 |
「HTTP Pub-Sub メッセージとイベント タイプの間のカスタム コンバータの作成」を参照してください。
詳細については、Visualizer オンライン ヘルプの HTTP パブリッシュ/サブスクライブ サーバのコンフィグレーションを参照してください。
「HTTP Pub-Sub アダプタのコンフィグレーション」を参照してください。
「EPN アセンブリ ファイルの更新」を参照してください。
Import-Package
ヘッダにパッケージ com.bea.core.encryption
を追加して、アプリケーションの MANIFEST.MF
ファイルを更新します。例を示します。Import-Package:
com.bea.core.encryption
com.bea.wlevs.adapter.defaultprovider;version="2.0.0.0",
...
マニフェスト ファイルの追加情報については、「MANIFEST.MF ファイルの作成」を参照してください。
メッセージ (サブスクライブでの HTTP pub-sub アダプタ経由の着信、またはパブリッシュでの HTTP pub-sub アダプタ経由の発信) からイベント タイプへの変換方法、または逆方向の変換方法をカスタマイズする場合は、独自のコンバータ Bean を作成する必要があります。
着信 HTTP pub-sub メッセージ用のカスタム コンバータ Bean では、com.bea.wlevs.adapters.httppubsub.api.InboundMessageConverter
インタフェースを実装する必要があります。このインタフェースには 1 つのメソッドが含まれています。
public List convert(JSONObject message) throws Exception;
message
パラメータは着信 HTTP pub-sub メッセージに対応します。戻り値は、イベント処理ネットワークの次のステージに渡されるイベントの List
です。着信メッセージは JSON 形式であることが想定されます。
発信 HTTP pub-sub メッセージ用のカスタム コンバータ Bean では、com.bea.wlevs.adapters.httppubsub.api.OutboundMessageConverter
インタフェースを実装する必要があります。このインタフェースには 1 つのメソッドが含まれています。
public List<JSONObject> convert(Object event) throws Exception;
パラメータは EPN のソース ノードから送られ、発信 HTTP pub-sub アダプタで受信されたイベントに対応します。戻り値は、JSON メッセージの List
です。
これらの API の完全な説明については、Javadoc を参照してください。
次の例は、InboundMessageConverter
と OutboundMessageConvert
の両方を実装するカスタム コンバータ Bean の Java ソースを示します。この Bean は着信および発信の両方の HTTP pub-sub アダプタで使用できます。
package com.sample.httppubsub;
import com.bea.wlevs.adapters.httppubsub.api.InboundMessageConverter;
import com.bea.wlevs.adapters.httppubsub.api.OutboundMessageConverter;
import com.bea.httppubsub.json.JSONObject;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class TestConverter implements InboundMessageConverter, OutboundMessageConverter {
public List convert(JSONObject message) throws Exception {
List eventCollection = new ArrayList();
PubsubTestEvent event = new PubsubTestEvent();
event.setMessage("From TestConverter: " + message);
eventCollection.add(event);
return eventCollection;
}
public List<JSONObject> convert(Object event) throws Exception {
List<JSONObject> list = new ArrayList<JSONObject>(1);
Map map = new HashMap();
map.put("message", ((PubsubTestEvent) event).getMessage());
list.add(new JSONObject(map));
return list;
}
}
組み込み pub-sub アダプタのコンフィグレーションは、プロセッサやストリームなどのイベント処理ネットワークの他のコンポーネントをコンフィグレーションする場合と同じように、それぞれのコンフィグレーション ファイルで行います。これらのコンフィグレーション ファイルの概要については、「コンポーネント コンフィグレーション ファイル」を参照してください。
以下のコンフィグレーション ファイルは、3 つの組み込み pub-sub アダプタをそれぞれコンフィグレーションする場合の完全な例を示します。例の後に示す手順では、例を使用して独自のファイルを作成する方法を示します。
<?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">
<http-pub-sub-adapter>
<name>remotePublisher</name>
<server-url>http://myhost.com:9102/pubsub</server-url>
<channel>/channel1</channel>
<event-type>com.mycompany.httppubsub.PubsubEvent</event-type>
<user>wlevs</user>
<password>wlevs</password>
</http-pub-sub-adapter>
<http-pub-sub-adapter>
<name>localPublisher</name>
<server-context-path>/pubsub</server-context-path>
<channel>/channel2</channel>
</http-pub-sub-adapter>
<http-pub-sub-adapter>
<name>remoteSubscriber</name>
<server-url>http://myhost.com:9102/pubsub</server-url>
<channel>/channel3</channel>
<event-type>com.mycompany.httppubsub.PubsubEvent</event-type>
</http-pub-sub-adapter>
</n1:config>
以下の手順では、アプリケーションの組み込み pub-sub アダプタをコンフィグレーションするための主な手順を示します。簡略化のため、この手順ではアプリケーションのすべてのコンポーネントが 1 つのコンフィグレーション XML ファイルにコンフィグレーションされ、アプリケーションのこのファイルがすでに作成されていると想定します。
組み込み pub-sub アダプタのコンフィグレーションを記述する完全な XSD スキーマについては、コンポーネント コンフィグレーション ファイルの XSD スキーマ リファレンスを参照してください。
<config>
ルート要素の <http-pub-sub-adapter>
子要素を追加します。<name>
子要素を使用してユニークに識別します。この name 値は、後で、アプリケーションのイベント処理ネットワークを定義する EPN アセンブリ ファイルにある <wlevs:adapter>
タグの id
属性として使用します。このように指定することで、Oracle CEP では、このアダプタ コンフィグレーションが適用される EPN アセンブリ ファイル内の特定のアダプタを認識します。
たとえば、コンフィグレーション ファイルにはすでにプロセッサが含まれており (簡略化のため内容は省略します)、3 つの組み込み pub-sub アダプタの各インスタンスをコンフィグレーションする必要があると想定します。更新されたファイルは、以下のようになります。アダプタのコンフィグレーションの詳細については、後述します。
<?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">
<processor>
...
</processor>
<http-pub-sub-adapter>
<name>remotePublisher</name>
...
</http-pub-sub-adapter>
<http-pub-sub-adapter>
<name>remoteSubscriber</name>
...
</http-pub-sub-adapter>
<http-pub-sub-adapter>
<name>localPublisher</name>
...
</http-pub-sub-adapter>
</n1:config>
<http-pub-sub-adapter>
の <server-url>
子要素を追加して、Oracle CEP アプリケーションでパブリッシュまたはサブスクライブされるリモート HTTP pub-sub サーバの URL をそれぞれ指定します。リモート pub-sub サーバには、Oracle CEP の別のインスタンス、WebLogic Server インスタンス、または任意のサードパーティ pub-sub サーバを指定できます。例を示します。<http-pub-sub-adapter>
<name>remotePublisher</name><server-url>http://myhost.com:9102/pubsub</server-url>
...
</http-pub-sub-adapter>
この例では、remotePublisher
アダプタがイベントをパブリッシュするリモート HTTP pub-sub サーバの URL は http://myhost.com:8102/pubsub
です。
<server-context-path>
要素を追加して、現在の Oracle CEP アプリケーションをホストする Oracle CEP インスタンスに関連付けられたローカル HTTP pub-sub サーバのパスを指定します。
デフォルトでは、各 Oracle CEP サーバはパス /pubsub
の HTTP pub-sub サーバでコンフィグレーションされていますが、新しいローカル HTTP pub-sub サーバを作成した場合や、デフォルトのコンフィグレーションを変更した場合は、サーバの config.xml
ファイルの <http-pubsub>
要素の <path>
子要素の値を指定します。例を示します。
<http-pub-sub-adapter>
<name>localPublisher</name><server-context-path>/pubsub</server-context-path>
...
</http-pub-sub-adapter>
<channel>
子要素を追加して、pub-sub アダプタがパブリッシュまたはサブスクライブする適切なチャネルを指定します。例を示します。<http-pub-sub-adapter>
<name>localPublisher</name>
<server-context-path>/pubsub</server-context-path><channel>/channel2</channel>
</http-pub-sub-adapter>
この例では、pub-sub アダプタ localPublisher
はパターン /channel2
のローカル チャネルにパブリッシュします。
<event-type>
要素を追加します。この要素はすべてのサブスクライブ用アダプタで指定する必要があります。実行時、Oracle CEP では着信メッセージのキーと値のペアを使用して、メッセージ データが指定のイベント タイプにマップされます。
パブリッシュされるイベントのタイプを <event-type>
要素で指定されたタイプのみに制限する必要がある場合は、必要に応じてパブリッシュ用の pub-sub アダプタで <event-type>
要素を使用することもできます。それ以外の場合は、pub-sub アダプタに送信されたすべてのイベントがパブリッシュされます。例を示します。
<http-pub-sub-adapter>
<name>remoteSubscriber</name>
<server-url>http://myhost.com:9102/pubsub</server-url>
<channel>/channel3</channel><event-type>com.mycompany.httppubsub.PubsubEvent</event-type>
</http-pub-sub-adapter>
このイベント タイプが、<wlevs:event-type-repository>
要素の子要素として指定することによって EPN アセンブリ ファイルに登録されていることを必ず確認してください。
<user>
および <password>
(または <encrypted-password>
) 要素を追加してユーザ名とパスワードまたは暗号化されたパスワードを指定します。例を示します。<http-pub-sub-adapter>
<name>remotePublisher</name>
<server-url>http://myhost.com:9102/pubsub</server-url>
<channel>/channel1</channel>
<event-type>com.mycompany.httppubsub.PubsubEvent</event-type><user>wlevs</user>
</http-pub-sub-adapter>
<password>wlevs</password>
イベント処理ネットワークの各 pub-sub アダプタについて、ネットワークを記述する EPN アセンブリ ファイルでは対応する <wlevs:adapter>
タグを追加する必要があります。provider
属性を使用して、アダプタがパブリッシュまたはサブスクライブのどちらに使用されるかを指定します。以下のガイドラインに従います。
provider
属性を httppub
に設定します。<wlevs:adapter id="remotePublisher" provider="httppub"/>
id
属性の値 (この場合は remotePublisher
) は、コンフィグレーション ファイルでこの組み込み pub-sub アダプタに指定された名前と一致している必要があります。EPN アセンブリ ファイル内のパブリッシュ用組み込みアダプタの宣言ではアダプタがローカルまたはリモートのどちらであるかが指定されません。この指定はアダプタ コンフィグレーション ファイルで行います。
httpsub
に設定します。<wlevs:adapter id="remoteSubscriber" provider="httpsub"/>
id
属性の値 (この場合は remoteSubscriber
) は、コンフィグレーション ファイルでこの組み込み pub-sub アダプタに指定された名前と一致している必要があります。
EPN の他のステージと同様に、<wlevs:adapter>
タグにリスナを追加して pub-sub アダプタをイベント処理ネットワークに統合します。通常、サブスクライブ用 pub-sub アダプタは (メッセージを受信するため) EPN の最初のステージであり、パブリッシュ用 pub-sub アダプタは (メッセージを送信するため) より後方のステージです。ただし、pub-sub アダプタが配置されるネットワーク内の場所は、独自の Oracle CEP アプリケーションの要件に応じて定義されます。
また、pub-sub アダプタで使用されるイベント タイプが <wlevs:event-type-repository>
タグを使用してイベント タイプ リポジトリに登録されていることを必ず確認してください。
以下の EPN ファイルの例は、ローカルおよびリモートのパブリッシュ用の 2 つの組み込み pub-sub アダプタが含まれたイベント処理ネットワークを示します。例の後に説明があります。
<?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="com.mycompany.httppubsub.PubsubEvent">
<wlevs:class>com.mycompany.httppubsub.PubsubEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="receiveFromFeed"
class="com.mycompany.httppubsub.ReceiveFromFeed">
</wlevs:adapter>
<wlevs:processor id="pubsubProcessor" />
<wlevs:adapter id="remotePublisher" provider="httppub"/>
<wlevs:adapter id="localPublisher" provider="httppub"/>
<wlevs:stream id="feed2processor">
<wlevs:source ref="receiveFromFeed"/>
<wlevs:listener ref="pubsubProcessor"/>
</wlevs:stream>
<wlevs:stream id="pubsubStream">
<wlevs:listener ref="remotePublisher"/>
<wlevs:listener ref="localPublisher"/>
<wlevs:source ref="pubsubProcessor"/>
</wlevs:stream>
</beans>
receiveFromFeed
アダプタはあるデータ フィードからのデータを受信するカスタム アダプタです。このアダプタの詳細はこのトピックには関係ありません。receiveFromFeed
アダプタは、feed2processor
ストリームを介して pubsubProcessor
にイベントを送信します。 pubsubProcessor
は receiveFromFeed
アダプタからのイベントを処理し、pubsubStream
ストリームに送信します。イベントはここから remotePublisher
と localPublisher
の 2 つの組み込み pub-sub アダプタに送信されます。remotePublisher
ではタイプ com.mycompany.httppubsub.PubsubEvent のイベントのみが、http://myhost.com:9102/pubsub でホストされるリモート HTTP pub-sub サーバのチャネル /channel1
にパブリッシュされます。
localPublisher
pub-sub アダプタは受信したすべてのイベントをローカル HTTP pub-sub サーバにパブリッシュします。つまり、これはアプリケーションが実行中の Oracle CEP サーバに関連付けられているサーバです。ローカル pub-sub サーバのパスは /pubsub
であり、アダプタがパブリッシュするチャネルは /channel2
です。
以下の EPN ファイルの例は、サブスクライブ用の組み込み pub-sub アダプタが含まれたイベント処理ネットワークを示します。例の後に説明があります。
<?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="com.mycompany.httppubsub.PubsubEvent">
<wlevs:class>com.mycompany.httppubsub.PubsubEvent</wlevs:class>
</wlevs:event-type>
</wlevs:event-type-repository>
<wlevs:adapter id="remoteSubscriber" provider="httpsub">
<wlevs:listener ref="myEventBean"/>
</wlevs:adapter>
<bean id="myEventBean"
class="com.mycompany.httppubsub.MyEventBean">
</bean>
<wlevs:stream id="pubsubStream" manageable="true">
<wlevs:listener>
<bean id="mySink"
class="com.mycompany.httppubsub.MySink"/>
</wlevs:listener>
<wlevs:source ref="myEventBean"/>
</wlevs:stream>
</beans>
remoteSubscriber
アダプタはサブスクライブ用の組み込み pub-sub アダプタです。
このアダプタのコンフィグレーションに基づいて (「HTTP Pub-Sub アダプタのコンフィグレーション」の例を参照)、remoteSubscriber
は、http://myhost.com:9102/pubsub でホストされるリモート HTTP pub-sub サーバにコンフィグレーションされたチャネル /channel3 をサブスクライブします。Oracle CEP ではこのチャネルから受信された各メッセージが com.mycompany.httppubsub.PubsubEvent のインスタンスに変換され、myEventBean
という Spring Bean に送信されます。
myEventBean
は com.mycompany.httppubsub.MyEventBean
クラスの記述に従ってイベントを処理し、pubsubStream
ストリームを通じて mySink
イベント ソースにイベントを渡します。これらのコンポーネントの詳細は HTTP pub-sub アダプタのトピックと関係ないため、この節では取り上げません。
![]() ![]() ![]() |