この章の内容は次のとおりです。
HTTPパブリッシュ/サブスクライブ・サーバー(HTTP pub-subサーバー)は、Webクライアントがチャネルにサブスクライブし、HTTPを介して非同期メッセージでチャネルにメッセージをパブリッシュするメカニズムです。
標準のWebアプリケーションの単純なリクエスト/レスポンスでは、クライアントがすべての通信を開始する必要がありますが、この場合、サーバーは明示的なリクエストを受け取った場合に、更新されたデータをクライアントへプッシュすることしかできません。このメカニズムは、クライアントがリクエストした場合にのみサーバーからのデータが必要となる従来のアプリケーションには適していますが、クライアントが明示的にリクエストしていない場合でもサーバーがデータを送信する必要のある動的かつリアル・タイムなアプリケーションには不適切です。クライアントは従来のHTTPプル手法を使用して最新データを定期的にチェックおよび取得することができますが、この手法にはスケーラビリティがなく、チェックの重複によりネットワーク・トラフィックの増加につながります。HTTPパブリッシュ/サブスクライブ・サーバーは、クライアントによるチャネル(JMSでのトピックに相当)のサブスクライブとメッセージ(利用可能な場合)の受信を可能にすることにより、この問題を解決しています。
HTTP pub-subサーバーはcometdプロジェクトで提案されているBayeuxプロトコルに基づいています。Bayeuxプロトコルには、クライアントとサーバーがHTTPを介して非同期メッセージで通信するための規約が定義されています。これによって、クライアントは、イベントのソースまたは指定されている宛先であるチャネルに登録およびサブスクライブすることができます。次に、登録されたクライアントまたはHTTP pub-subサーバー自体がこれらのチャネルへメッセージをパブリッシュし、サブスクライブしているすべてのクライアントがそのメッセージを受信します。
HTTP pub-subサーバーはBayeuxプロトコルを理解するすべてのクライアントと通信できます。HTTP pub-subサーバーの役割には、クライアントの識別、信頼のネゴシエーション、Bayeuxメッセージの交換、そして最も重要なこととして、サブスクライブしたクライアントへのイベント・メッセージのパブリッシュがあります。
図14-1は、Oracle CEPに含まれているHTTP pub-subサーバーの基本的なアーキテクチャを示します。
サーブレットとHTTP pub-subサーバーは1対1の関係にあります。つまり、各サーブレットは、1つの固有のHTTP pub-subサーバーにアクセスします。各HTTP pub-subサーバーは独自のチャネル・リストを持ちます。サーブレットはコンテキスト・オブジェクトを使用して、関連付けられているHTTP pub-subサーバーへのハンドルを取得します。
Oracle CEPでは、HTTP pub-subサーバー・インスタンスは、サーバー・インスタンスのconfig.xml
ファイルで構成されます。システム管理者はconfig.xml
を使用して、HTTP pub-subサーバーの名前を構成し、トランスポートおよびその他のパラメータを指定します。次に、Oracle CEP Visualizerを使用して新しいチャネルを追加し、チャネルのセキュリティを構成します。
Oracle CEPアプリケーション開発者はオプションで、組込みHTTP pub-subアダプタを使用してアプリケーション内でチャネルにパブリッシュおよびサブスクライブできます。しかし、クライアントから受信したメッセージの監視、収集、解釈などの追加手順をHTTP pub-subサーバーで実行する必要がある場合、開発者はサーバー側のHTTP pub-subサーバーAPIを使用して、こうした機能をプログラミングする必要があります。
Web 2.0 Ajaxクライアント(Dojoなど)またはリッチ・インターネット・アプリケーション(Adobe Flexなど)がHTTP pub-subサーバーと通信できるには、Bayeuxプロトコルをサポートするライブラリがクライアント側で必要となります。Dojo JavaScriptライブラリでは4つの異なるトランスポート手段が提供されており、そのうちの2つはHTTP pub-subサーバーでサポートされているlong-pollingおよびcallback-pollingです。
すべてのOracle CEPサーバーには、デフォルトのHTTP pub-subサーバーが含まれています。このサーバーは、Oracle CEP Visualizerおよび記録と再生のサンプルによって内部的に使用されます。独自のWeb 2.0アプリケーションでデフォルトのHTTP pub-subサーバーを使用することも、新しいサーバーを作成することもできます。
デフォルトのHTTP pub-subサーバーには次のプロパティがあります。
HTTP pub-subサーバーURL: (http://
host
:
port
/pubsub
) host
はOracle CEPを実行しているコンピュータ、port
はOracle CEPがリスニングするポート番号です。
Oracle CEP Visualizerによって内部的に使用される次の3つのチャネルが含まれます。これらのチャネルは削除しないでください。
/evsmonitor
/evsalert/
/evsdomainchange
デフォルトのHTTP pub-subサーバーの構成、または新しいサーバーの作成の詳細は、次の項を参照してください。
また、Oracle CEPには、アプリケーションで簡単にHTTP pub-subサーバーの機能を活用できる2つの組込みアダプタが含まれています。これらのアダプタをアプリケーションに追加すると、ローカルまたはリモートのHTTP pub-subサーバーを使用して、サーバーへのメッセージのパブリッシュと、メッセージを受信するためのサーバーへのサブスクライブの両方が可能になります。
詳細は、『Oracle Complex Event Processing開発者ガイドfor Eclipse』のHTTPパブリッシュ/サブスクライブ・アダプタの使用と作成に関する項を参照してください。
次の手順では、新しいHTTP pub-subサーバーを作成する方法について説明します。構成されたHTTP pub-subサーバーのconfig.xml
の例全体は、14.4項「HTTPパブリッシュ/サブスクライブ・サーバーの構成の例」を参照してください。
新しいHTTPパブリッシュ/サブスクライブ・サーバーを作成するには:
Oracle CEP サーバーが実行中である場合は、停止します。
1.5.4項「Oracle CEPサーバーの起動と停止」を参照してください。
任意のXMLエディタを使用して、Oracle CEPサーバーのconfig.xml
ファイルを開きます。
このファイルはDOMAIN_DIR
/
servername
/config
ディレクトリにあります。DOMAIN_DIR
はドメイン・ディレクトリを指し、servername
はサーバーの名前(/oracle_cep/user_projects/myDomain/defaultserver/config
など)を指します。
太字で示されているように、config.xml
のルートconfig
要素のhttp-pubsub
子要素を追加し、name
、path
、およびpub-sub-bean
子要素を指定します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns2:config xmlns:ns2="http://www.bea.com/ns/wlevs/config/server"> <domain> <name>myDomain</name> </domain> .... <http-pubsub> <name>myPubSubServer</name> <path>/myPath</path> <pub-sub-bean> ... </pub-sub-bean> </http-pubsub> ... </ns2:config>
name
要素をHTTP pub-subサーバーの内部名に設定します。
path
要素はHTTP pub-subサーバーへの接続に使用されるURLに表示する文字列に設定します。
次の手順では、pub-sub-bean
要素について説明します。
pub-sub-bean
要素のserver-config
およびchannels
子要素を追加します。
<http-pubsub> <name>myPubSubServer</name> <path>/myPath</path> <pub-sub-bean> <server-config> ... </server-config> <channels> ... </channels> </pub-sub-bean> </http-pubsub>
必要に応じて、pub-sub-bean
要素のserver-config
子要素をHTTP pub-subサーバーの構成で更新します。
指定できる要素の詳細リストは、『Oracle Complex Event Processing開発者ガイドfor Eclipse』のサーバー構成XSDスキーマ: wlevs_server_config.xsdに関する項を参照してください。
次に、最も一般的な構成オプションを示します。
supported-transport
要素を追加して、トランスポートを指定します。
この要素の形式は次のとおりです。
<server-config> <supported-transport> <types> <element>long-polling</element> </types> </supported-transport> ... </server-config>
Oracle CEPでは、次のトランスポートをサポートします。
long-polling
: このトランスポートを使用して、クライアントはOracle CEPサーバーからの情報をリクエストします。情報がない場合は、Oracle CEPサーバーは応答しません。通常、Oracle CEPサーバーが応答すると、クライアントはすぐに別のリクエストを送信します。
callback-polling
: クロス・ドメイン構成を使用するHTTPパブリッシュ/サブスクライブ・アプリケーションではこのトランスポートを使用します。クロス・ドメイン構成では、ブラウザが1つのWebサーバー(Javascriptコードを含む)からページをダウンロードし、HTTPパブリッシュ/サブスクライブのクライアントとして別のサーバーに接続します。これは、Bayeauxプロトコルで必要です。Bayeauxプロトコルの詳細は、http://svn.xantus.org/shortbus/trunk/bayeux/bayeux.html
を参照してください。
publish-without-connect-allowed
要素を追加して、クライアントがHTTP pub-subサーバーに明示的に接続せずに、メッセージをパブリッシュできるかどうかを指定します。有効な値はtrue
またはfalse
です。
<server-config> ... <publish-without-connect-allowed>true</publish-without-connect-allowed> </server-config>
work-manager
要素を追加し、クライアントにメッセージを送信するワーク・マネージャ名を指定します。この要素の値は、割り当てるwork-manager
の<name>
子要素の値に対応します。
<server-config> ... <work-manager>myWorkManager</work-manager> </server-config>
詳細は、『Oracle Complex Event Processing開発者ガイドfor Eclipse』のwork-managerに関する項を参照してください。
client-timeout-secs
要素を追加して、クライアントから接続/再接続のメッセージが返されていない場合にHTTP pub-subサーバーが接続を切断するまでの秒数を指定します。
<server-config> ... <client-timeout-secs>600</client-timeout-secs> </server-config>
少なくとも1つのチャネル・パターンでchannels
子要素を更新します。
チャネル・パターンは、常にフォワード・スラッシュ(/
)で始まります。クライアントは、メッセージのパブリッシュ、またはメッセージの受信のためにこれらのチャネルにサブスクライブします。次に示すようにチャネル・パターンを追加します。
<channels> <element> <channel-pattern>/mychannel</channel-pattern> </element> </channels>
config.xml
ファイルを保存します。
Oracle CEPサーバーを起動します。
1.5.4項「Oracle CEPサーバーの起動と停止」を参照してください。
Oracle CEP Visualizerを使用して、チャネルを構成または追加します。次の項を参照してください。
『Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のHTTPパブリッシュ/サブスクライブ・サーバー・チャネルの構成に関する項
Oracle CEP Visualizerを使用して、チャネルのセキュリティを構成します。次の項を参照してください。
『Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のHTTPパブリッシュ/サブスクライブ・チャネルのセキュリティの構成に関する項
次の手順では、既存のHTTP pub-subサーバーを構成する方法について説明します。構成されたHTTP pub-subサーバーのconfig.xml
の例全体は、14.4項「HTTPパブリッシュ/サブスクライブ・サーバーの構成の例」を参照してください。
既存のHTTPパブリッシュ/サブスクライブ・サーバーを構成するには:
Oracle CEP サーバーが実行中である場合は、停止します。
1.5.4項「Oracle CEPサーバーの起動と停止」を参照してください。
任意のXMLエディタを使用して、Oracle CEPサーバーのconfig.xml
ファイルを開きます。
このファイルはDOMAIN_DIR
/
servername
/config
ディレクトリにあります。DOMAIN_DIR
はドメイン・ディレクトリを指し、servername
はサーバーの名前(/oracle_cep/user_projects/myDomain/defaultserver/config
など)を指します。
構成するHTTP pub-subサーバーに対応するhttp-pubsub
要素を検索します。たとえば、デフォルトのHTTP pub-subサーバーは次のとおりです。
<http-pubsub> <name>pubsub</name> <path>/pubsub</path> <pub-sub-bean> <server-config> ... </http-pubsub>
必要に応じて、pub-sub-bean
要素(http-pubsub
要素の子要素)のserver-config
子要素をHTTP pub-subサーバーの構成で更新します。
指定できる要素の詳細リストは、『Oracle Complex Event Processing開発者ガイドfor Eclipse』のサーバー構成XSDスキーマ: wlevs_server_config.xsdに関する項を参照してください。
次に、最も一般的な構成オプションを示します。
supported-transport
要素を追加して、トランスポートを指定します。
この要素の形式は次のとおりです。
<server-config> <supported-transport> <types> <element>long-polling</element> </types> </supported-transport> ... </server-config>
Oracle CEPでは、次のトランスポートをサポートします。
long-polling
: このトランスポートを使用して、クライアントはOracle CEPサーバーからの情報をリクエストします。情報がない場合は、Oracle CEPサーバーは応答しません。通常、Oracle CEPサーバーが応答すると、クライアントはすぐに別のリクエストを送信します。
callback-polling
: クロス・ドメイン構成を使用するHTTPパブリッシュ/サブスクライブ・アプリケーションではこのトランスポートを使用します。クロス・ドメイン構成では、ブラウザが1つのWebサーバー(Javascriptコードを含む)からページをダウンロードし、HTTPパブリッシュ/サブスクライブのクライアントとして別のサーバーに接続します。これは、Bayeauxプロトコルで必要です。Bayeauxプロトコルの詳細は、http://svn.xantus.org/shortbus/trunk/bayeux/bayeux.html
を参照してください。
publish-without-connect-allowed
要素を追加して、クライアントがHTTP pub-subサーバーに明示的に接続せずに、メッセージをパブリッシュできるかどうかを指定します。有効な値はtrue
またはfalse
です。
<server-config>
...
<publish-without-connect-allowed>true</publish-without-connect-allowed>
</server-config>
work-manager
要素を追加し、クライアントにメッセージを送信するワーク・マネージャ名を指定します。この要素の値は、割り当てるwork-manager
のname
子要素の値に対応します。
<server-config>
...
<work-manager>myWorkManager</work-manager>
</server-config>
詳細は、『Oracle Complex Event Processing開発者ガイドfor Eclipse』のwork-managerに関する項を参照してください。
client-timeout-secs
要素を追加して、クライアントから接続/再接続のメッセージが返されていない場合にHTTP pub-subサーバーが接続を切断するまでの秒数を指定します。
<server-config>
...
<client-timeout-secs>600</client-timeout-secs>
</server-config>
config.xml
ファイルを保存します。
Oracle CEPサーバーを起動します。
1.5.4項「Oracle CEPサーバーの起動と停止」を参照してください。
Oracle CEP Visualizerを使用して、チャネルを構成または追加します。次の項を参照してください。
『Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のHTTPパブリッシュ/サブスクライブ・サーバー・チャネルの構成に関する項
Oracle CEP Visualizerを使用して、チャネルのセキュリティを構成します。次の項を参照してください。
『Oracle Complex Event Processing Visualizerユーザーズ・ガイド』のHTTPパブリッシュ/サブスクライブ・チャネルのセキュリティの構成に関する項
config.xml
ファイルの次のスニペットは、すべてのOracle CEPサーバーに含まれるデフォルトのHTTP pub-subサーバーの構成を示しています。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ns2:config xmlns:ns2="http://www.bea.com/ns/wlevs/config/server"> <domain> <name>myDomain</name> </domain> .... <http-pubsub> <name>pubsub</name> <path>/pubsub</path> <pub-sub-bean> <server-config> <supported-transport> <types> <element>long-polling</element> </types> </supported-transport> <publish-without-connect-allowed>true</publish-without-connect-allowed> </server-config> <channels> <element> <channel-pattern>/evsmonitor</channel-pattern> </element> <element> <channel-pattern>/evsalert</channel-pattern> </element> <element> <channel-pattern>/evsdomainchange</channel-pattern> </element> </channels> </pub-sub-bean> </http-pubsub> ... </ns2:config>