この節では、次の項目について説明します。
HTTPパブリッシュ・サブスクライブ・サーバー(pub-subサーバー)は、ブラウザ・ベースのクライアントなどのWebクライアントが、すべてHTTP上での非同期メッセージを使用して、チャネルにサブスクライブし、利用可能なメッセージを受信し、これらのチャネルにメッセージをパブリッシュするためのメカニズムです。チャネルはJMSトピックと同じです。
Oracle CEPの各インスタンスには、アプリケーションにHTTPパブリッシュ/サブスクライブ機能を実装するためにプログラマが使用できるpub-subサーバーが含まれています。pub-subサーバーは、JettyやJDBCデータ・ソースなどの他のサーバー・サービスと共にconfig.xml
ファイルで構成されます。pub-subサーバーはcometdプロジェクト(http://cometd.com/
を参照)で提案されているBayeuxプロトコルに基づいています(http://svn.xantus.org/shortbus/trunk/bayeux/bayeux.html
を参照)。Bayeuxプロトコルには、クライアントとサーバーがHTTPを介して非同期メッセージで通信するための規約が定義されています。
Oracle CEPでは、プログラマは次の組込みHTTPパブリッシュ・サブスクライブ・アダプタを使用してHTTPパブリッシュ/サブスクライブ機能にアクセスします(pub-subアダプタ)。
チャネルへのパブリッシュ: 7.1.1項「パブリッシュ用組込みPub-Subアダプタの概要」を参照してください。
チャネルへのローカル・パブリッシュ: 7.1.1.1項「ローカル・パブリッシュ」を参照してください。
チャネルへのリモート・パブリッシュ: 7.1.1.2項「リモート・パブリッシュ」を参照してください。
チャネルへのサブスクライブ: 7.1.2項「サブスクライブ用組込みPub-Subアダプタの概要」を参照してください。
CEPでは、組込みのpub-subアダプタの機能が不十分な場合にチャネルへのパブリッシュおよびサブスクライブのための独自のカスタムpub-subアダプタを作成するプログラマ向けのpub-sub APIも提供されます。たとえば、サブスクライブしたチャネルからの着信メッセージをフィルタ処理する場合や、ローカル・チャネルを動的に作成または破棄する場合などがあります。組込みのpub-subアダプタではこれらの機能が提供されないため、このような場合にプログラマは独自のカスタムpub-subアダプタを実装する必要があります。詳細は、第13章「カスタム・アダプタ、イベントBean、およびSpring Beanの構成」を参照してください。
デフォルトでは、Oracle CEPではOracle CEPイベントの範囲で自動的に変換が実行されます。かわりに、カスタム・コンバータも作成できます。7.2.1項「HTTP Pub-Subメッセージとイベント・タイプの間でのカスタム・コンバータの作成」を参照してください。
Oracle CEPでは、JSONメッセージとOracle CEPイベント・タイプ間の自動変換も可能です。7.1.3項「JSONメッセージとイベント・タイプの間の変換」を参照してください。
組込みpub-subアダプタは他のどのアダプタとも同様に動作します。つまり、イベント処理ネットワークのステージであり、EPNアセンブリ・ファイルで定義され、標準のコンポーネント構成ファイルで構成されます。通常の構成オプションには、チャネルの指定、ローカルまたはリモートのpub-subサーバーの指定、およびユーザー認証などがあります。
pub-subサーバーはBayeuxプロトコルを理解するすべてのクライアントと通信することができます。プログラマは、次のフレームワークのいずれかを使用してWebクライアントを開発します。
BayeuxプロトコルをサポートするDojo JavaScriptライブラリ(http://dojotoolkit.org/
を参照)。Oracle CEPではこのライブラリは提供されません。
Bayeuxプロトコルを使用してpub-subサーバーと通信するFlexクライアントの開発を可能にするWebLogic Workshop Flexプラグイン。
HTTP pub-subサーバー・チャネルの確保の詳細は、『Oracle CEP管理者ガイド』のHTTPパブリッシュ・サブスクライブ・サーバー・チャネル・セキュリティに関する項を参照してください。
組込みのpub-subアダプタを使用してチャネルにイベントをパブリッシュできます。組込みのpub-subアダプタでは、次のパブリッシュ・モードがサポートされています。
詳細は、7.1項「HTTPパブリッシュ・サブスクライブ・サーバー・アダプタ構成の概要」を参照してください。
図7-1に、ローカル・パブリッシュ用の組込みpub-subアダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。任意のアダプタおよびプロセッサは必須ではなく、これらは単にpub-subアダプタの他にアプリケーションで使用可能なコンポーネントの例として示されています。
図7-1では、次の点に注意してください。
あるソースからのイベントが、Oracle CEPで実行中のアプリケーションのアダプタに到着します。このアダプタは必須ではなく、単に例として示されています。
アダプタからのイベントが任意のプロセッサに到着します。ここでも、このプロセッサは必須ではありません。
プロセッサからローカル・パブリッシュ用の組込みpub-subアダプタにイベントが送信されます。アダプタによって、アプリケーションがデプロイされているOracle CEPインスタンスに構成されているローカルのHTTP pub-subサーバーにイベントが送信されます。pub-subアダプタでは構成されているチャネルにメッセージが送信されます。
Oracle CEPに構成されているローカルHTTP pub-subサーバーによって、ローカル・チャネルのすべてのサブスクライバにイベントがメッセージとして送信されます。
図7-2に、リモート・パブリッシュ用の組込みpub-subアダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。
図7-2では、次の点に注意してください。
あるソースからのイベントが、Oracle CEPで実行中のアプリケーションのアダプタに到着します。任意のアダプタは必須ではなく、単に例として示されています。
アダプタからのイベントが任意のプロセッサに到着します。ここでも、このプロセッサは必須ではありません。
プロセッサからリモート・パブリッシュ用の組込みpub-subアダプタにイベントが送信されます。アダプタによって、アダプタが構成されているリモートHTTP pub-subサーバーにイベントがメッセージとして送信されます。このHTTP pub-subサーバーは別のOracle CEPインスタンス、WebLogic Serverインスタンス、または任意の他のサード・パーティ実装です。pub-subアダプタでは構成されているチャネルにメッセージが送信されます。
リモートHTTP pub-subサーバーによって、チャネルのすべてのサブスクライバにメッセージが送信されます。
図7-3に、サブスクライブ用の組込みpub-subアダプタが単純なイベント処理ネットワーク内に配置されるしくみを示します。任意のプロセッサおよびビジネスPOJOは必須ではなく、これらは単にpub-subアダプタの他にアプリケーションで使用可能なコンポーネントの例として示されています。
図7-3では、次の点に注意してください。
メッセージがリモートHTTP pub-subサーバーにパブリッシュされます。これは、Oracle CEPの別のインスタンス、WebLogic Server、またはサード・パーティ実装です。メッセージは通常、図に示されるようなWebベースのクライアント、HTTP pub-subサーバー自身、または別のサーバー・アプリケーションによってパブリッシュされます。
Oracle CEPアプリケーションで実行中の組込みpub-subアダプタはHTTP pub-subサーバーをサブスクライブし、指定されたチャネルからのメッセージを受信します。アダプタでは、アダプタに構成されているイベント・タイプにメッセージが変換されます。
pub-subアダプタからプロセッサにイベントが送信されます。このプロセッサは必須ではなく、単に一般的なOracle CEPアプリケーションの例として示されています。
プロセッサはビジネスPOJOにイベントを送信します。ここでも、このビジネスPOJOは必須ではありません。
詳細は、7.1項「HTTPパブリッシュ/サブスクライブ・サーバー・アダプタ構成の概要」を参照してください。
Oracle CEPでは受信JSON (JavaScript Object Notation)メッセージからイベント・タイプへの変換、およびアウトバウンドの場合はその逆の変換を自動的に実行できます。ただし、JSONメッセージ(サブスクライブでのHTTP pub-subアダプタ経由のインバウンド、またはパブリッシュでのHTTP pub-subアダプタ経由のアウトバウンド)からイベント・タイプへの変換方法、または逆方向の変換方法をカスタマイズする場合は、独自のコンバータBeanを作成する必要があります。詳細は、7.2.1項「HTTP Pub-Subメッセージとイベント・タイプの間のカスタム・コンバータの作成」を参照してください。
独自のコンバータ・クラスを指定せずに、メッセージとイベント・タイプの間の変換処理がOracle CEPによって実行されるようにする場合は、次のことが当てはまります。
Oracle CEPが変換に使用するイベント・タイプを指定する必要があります。詳細は、7.2.2項「HTTP Pub-Subアダプタの構成」を参照してください。
サブスクライブ用のHTTPアダプタで使用されるデフォルトのコンバータでは、各着信メッセージについて指定されたタイプの新しいイベントが作成されます。指定されたイベント・タイプの各プロパティについて、メッセージを構成するJSONオブジェクトの対応するプロパティ名が参照され、見つかった場合は対応する値が設定されます。
パブリッシュ用のHTTPアダプタで使用されるデフォルトのコンバータでは、各イベントについてJSONメッセージが作成されます。指定されたイベント・タイプの各プロパティについて、出力JSONメッセージの対応する要素が作成されます。
詳細は、http://www.json.org/
を参照してください。
次は、Oracle CEPアプリケーションでbuilt-inpub-subアダプタを使用するときの手順です。カスタムpub-subアダプタの作成に関する詳細は、第13章「カスタム・アダプタ、イベントBean、およびSpring Beanの構成」を参照してください。
注意: この項では、Oracle CEPアプリケーションがEPNアセンブリ・ファイルとコンポーネント構成ファイルを使用してすでに作成済であり、組込みのpub-subアダプタを使用するようにアプリケーションを更新する必要があると想定しています。まだOracle CEPアプリケーションを作成していない場合は、Oracle CEPアプリケーションの作成の概要について、第1章「Oracle CEPアプリケーションの作成の概要」を参照してください。 |
アプリケーションで組込みのHTTP pub-subアダプタを使用するには、次のことが必要です。
着信または発信メッセージがイベント・タイプに変換される方法をカスタマイズする必要がある場合は、必要に応じてコンバータJavaクラスを作成します。メッセージと特定のイベント・タイプの間のマップ・プロパティ名に基づいてOracle CEPで変換が行われるよう指定できるため、この手順は省略できます。
7.2.1項「HTTP Pub-Subメッセージとイベント・タイプの間のカスタム・コンバータの作成」を参照してください。
Oracle CEPインスタンスに関連付けられたローカルのHTTP pub-subサーバーをローカル・パブリッシュ用に使用する場合は、Oracle CEP管理ツールのVisualizerを使用して、アプリケーションで必要なチャネル・パターンで新しいチャネルを作成します。
詳細は、『Oracle CEP Visualizerユーザーズ・ガイド』のHTTPパブリッシュ・サブスクライブ・チャネルのセキュリティ構成に関する項を参照してください。
コンポーネント構成ファイルを更新して、アプリケーションに追加される組込みのpub-subアダプタを構成します。
7.2.2項「HTTP Pub-Subアダプタの構成」を参照してください。
アプリケーションに追加される各組込みpub-subアダプタの宣言を追加して、EPNアセンブリ・ファイルを更新します。
7.2.3項「EPNアセンブリ・ファイルの更新」を参照してください。
Import-Package
ヘッダーにパッケージcom.bea.core.encryption
を追加して、アプリケーションのMANIFEST.MF
ファイルを更新します。例:
Import-Package:
com.bea.core.encryption
com.bea.wlevs.adapter.defaultprovider;version="11.1.1.1_0",
...
マニフェスト・ファイルの追加情報は、20.2.2.1項「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の完全な記述は、『Oracle CEP Java APIリファレンス』を参照してください。
次の例は、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; } }
JavaオブジェクトをJSON形式に変換するためにGSON Javaライブラリを使用できます。
詳細は、次を参照してください:
組込みpub-subアダプタの構成は、プロセッサやストリームなどのイベント処理ネットワークの他のコンポーネントを構成する場合と同様に、それぞれの構成ファイルで行います。これらの構成ファイルの概要は、1.1.5項「コンポーネント構成ファイル」を参照してください。
次の構成ファイルは、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スキーマは、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。
HTTP pub-subアダプタを構成するには:
任意のXMLエディタを使用して構成XMLファイルを開きます。
構成する必要のある各組込みpub-subアダプタについて、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>
(パブリッシュおよびサブスクライブ用の)各リモートpub-subアダプタについて、http-pub-sub-adapter
のserver-url
子要素を追加して、Oracle CEPアプリケーションでパブリッシュまたはサブスクライブされるremoteHTTP pub-subサーバーのURLをそれぞれ指定します。リモートpub-subサーバーには、Oracle CEPの別のインスタンス、WebLogic Serverインスタンス、または任意のサード・パーティHTTP pub-subサーバーを指定できます。例:
<http-pub-sub-adapter>
<name>remotePublisher</name>
<server-url>http://myhost.com:9102/pubsub</server-url>
...
</http-pub-sub-adapter>
この例ではremotePublisher
アダプタがイベントをパブリッシュする対象のリモートHTTPパブリッシュ/サブスクライブ・サーバーのURLはhttp://myhost.com:9102/pubsub
となります。
パブリッシュ用の各ローカル pub-subアダプタについて、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>
ローカルまたはリモート、パブリッシュまたはサブスクライブにかかわらず、すべてのpub-subアダプタについてchannel
子要素を追加して、pub-subアダプタがパブリッシュまたはサブスクライブするチャネルを指定します。例:
<http-pub-sub-adapter>
<name>localPublisher</name>
<server-context-path>/pubsub</server-context-path>
<channel>/channel2</channel>
</http-pub-sub-adapter>
この例ではlocalPublisher
パブリッシュ/サブスクライブ・アダプタはパターン/channel2
を用いてローカル・チャネルにパブリッシュします。
サブスクライブ用のすべてのpub-subアダプタについて、受信メッセージがマップされるJavaBeanを指定するevent-type
要素を追加します。この要素はすべてのサブスクライブ用アダプタで指定する必要があります。実行時、Oracle CEPでは受信メッセージのキーと値のペアを使用して、メッセージ・データが指定のイベント・タイプにマップされます。
event-type
要素で指定されたイベントにのみパブリッシュするイベントの種類を限定する場合はオプションでパブリッシュ用のパブリッシュ/サブスクライブ・アダプタにevent-type
要素を使用できます。それ以外の場合はパブリッシュ/サブスクライブ・アダプタに送信されるすべてのイベントがパブリッシュされます。例:
<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アセンブリ・ファイルに登録されていることを必ず確認してください。
最後に、Oracle CEPアプリケーションがパブリッシュするHTTP pub-subサーバーでユーザー認証が要求される場合は、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> <password>wlevs</password> </http-pub-sub-adapter>
イベント処理ネットワークの各pub-subアダプタについて、ネットワークを記述するEPNアセンブリ・ファイルでは対応するwlevs:adapter
タグを追加する必要があります。provider
属性を使用して、アダプタがパブリッシュまたはサブスクライブのどちらに使用されるかを指定します。次のガイドラインに従います。
パブリッシュ(ローカルまたはリモートのいずれか)用の組込みpub-subアダプタを使用する場合は、次に示すように provider
属性をhttppub
に設定します。
<wlevs:adapter id="remotePublisher" provider="httppub"/>
id
属性の値(この場合はremotePublisher
)は、構成ファイルでこの組込みpub-subアダプタに指定された名前と一致している必要があります。EPNアセンブリ・ファイル内のパブリッシュ用組込みアダプタの宣言ではアダプタがローカルまたはリモートのどちらであるかが指定されません。この指定はアダプタ構成ファイルで行います。
サブスクライブ用の組込みpub-subアダプタを使用する場合は、次に示すように、provider属性を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:channel id="feed2processor"> <wlevs:source ref="receiveFromFeed"/> <wlevs:listener ref="pubsubProcessor"/> </wlevs:channel> <wlevs:channel id="pubsubStream"> <wlevs:listener ref="remotePublisher"/> <wlevs:listener ref="localPublisher"/> <wlevs:source ref="pubsubProcessor"/> </wlevs:channel> </beans>
上記の例で注目すべき点は以下のとおりです。
receiveFromFeed
アダプタはあるデータ・フィードからのデータを受信するカスタム・アダプタです。このアダプタの詳細はこのトピックには関係ありません。receiveFromFeed
アダプタは、feed2processor
ストリームを介してpubsubProcessor
にイベントを送信します。
pubsubProcessor
はreceiveFromFeed
アダプタからのイベントを処理し、pubsubStream
チャネルに送信します。イベントはここからremotePublisher
とlocalPublisher
の2つの組込みpub-subアダプタに送信されます。
これらの2つのpub-subアダプタの構成に基づいて(「7.2.2項「HTTP 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:channel id="pubsubStream" advertise="true"> <wlevs:listener> <bean id="mySink" class="com.mycompany.httppubsub.MySink"/> </wlevs:listener> <wlevs:source ref="myEventBean"/> </wlevs:channel> </beans>
上記の例で注目すべき点は以下のとおりです。
remoteSubscriber
アダプタはサブスクライブ用の組込みpub-subアダプタです。
アダプタの構成に基づいて(7.2.2項「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アダプタのトピックと関係がないため、この項では取り上げません。