|
Oracle CEP イベント リポジトリ機能を使用すると、イベント処理ネットワーク (EPN) コンポーネントを離れたイベントをデータベース テーブルなどのストアに永続化し、後からそれらを再生したり、イベント Bean などのコンポーネントからイベントに対するクエリを明示的に実行したりすることができます。
この機能の一般的な使用例には、現在実行中のアプリケーションの問題をデバッグする機能があります。問題発生時に EPN のノードでイベントを記録していた場合は、後から同じイベント リストを再生し、デバッグ目的のために問題のシナリオを再現できます。
次の図は、イベントの記録と再生のサンプルの EPN を示し、イベントがどの時点で記録され、どの場所で再生されるかを示しています。simpleEventSource アダプタではイベントの記録がコンフィグレーションされています。イベントがアダプタを離れた時点で記録が行われます。eventStream ストリームではイベントの再生がコンフィグレーションされています。イベントがストリームに到着した時点で再生が行われます。

Oracle CEP では RDBMS ベースのイベント ストアの実装が提供されます。この実装により、データはリレーショナル データベースに格納されます。Oracle CEP に付属のデータベース サーバ (Apache Derby)、または Oracle DBMS などの他のデータベース サーバを使用できます。
Oracle CEP に付属するデフォルトのデータベース サーバ Apache Derby を使用してイベントを記録できます。Apache Derby は完全に Java で実装されたオープン ソースのリレーショナル データベースです。デフォルトでは、DOMAIN_DIR/servername などの Oracle CEP を開始したディレクトリからデータベース ファイルおよびログ ファイル (derby.log) が作成されます。このデフォルトの場所は、システム プロパティ derby.system.home を異なるディレクトリに設定することで変更できます。
カスタム イベント ストア プロバイダを作成して RDBMS 以外の永続ストアにイベントを格納することもできます。詳細については、「カスタム イベント ストア プロバイダの作成」を参照してください。
プロセッサ、アダプタ、ストリーム、イベント Bean など、イベント処理ネットワーク (EPN) でイベントを生成する任意のコンポーネントの記録をコンフィグレーションできます。プロセッサおよびストリームでは常にイベントが生成されます。アダプタおよびイベント Bean では EventSource インタフェースを実装する必要があります。また、EPN の異なるコンポーネントからのイベントを異なる永続ストアに格納したり、すべてのイベントを同じストアに格納したりするようコンフィグレーションできます。コンポーネントによって出力されるイベントのみが記録されることに注意してください。
コンポーネントのイベントの記録を有効にするには、コンフィグレーション ファイルを更新し、<record-parameters> 要素を追加します。<record-parameters> の子要素を使用して、イベントの記録先となるイベント ストア、記録が行われる最初の期間、格納するイベント タイプのリストなどを指定します。
アプリケーションのデプロイが完了し、イベントがネットワーク内で循環を開始すると、特定の開始時間をコンフィグレーションした場合は記録が自動的に開始され、または管理ツールを使用して記録が動的に開始されます。記録がコンフィグレーションされた各コンポーネントについて、Oracle CEP ではコンポーネントを離れたイベントが、記録時のタイムスタンプと共に適切なストアに格納されます。
プロセッサ、アダプタ、ストリーム、イベント Bean など、イベント処理ネットワーク (EPN) の任意のコンポーネントの再生をコンフィグレーションできます。一般に、再生コンポーネントはネットワーク内でイベントを記録するノードよりも後のノードです。
コンポーネントのイベントの再生を有効にするには、コンフィグレーション ファイルを更新し、<playback-parameters> 要素を追加します。<playback-parameters> の子要素を使用して、イベントを再生するイベント ストア、再生する必要のあるイベント タイプのリスト (デフォルトはすべて再生)、記録されたイベントの再生時間などを指定します。デフォルトでは、Oracle CEP では正確な速度でイベントが再生されますが、イベントが記録元のコンポーネントを離れたときの元の速度よりも速いまたは遅い速度でイベントを再生するようコンフィグレーションすることもできます。
アプリケーションのデプロイが完了し、イベントがネットワーク内で循環を開始すると、管理ツール (Visualizer または wlevs.Admin) を使用して再生を開始する必要があります。Oracle CEP では適切な永続ストアからイベントが読み込まれ、EPN の適切な場所に挿入されます。
コンポーネントが再生イベントを取得した場合は、元のイベントとまったく同じように見えることに注意してください。また、ネットワークの後ろのコンポーネントでイベントの記録がコンフィグレーションされている場合、Oracle CEP では再生イベントが「実際の」イベントと共に記録されます。
イベント ストア API を使用して、記録時間の範囲とイベント記録元のコンポーネントを指定することで、ストア内の過去のイベントに対するクエリを実行できます。実際に使用するクエリはイベント リポジトリ プロバイダによって異なります。たとえば、Oracle CEP に付属の RDBMS プロバイダでは EPL を使用します。これらの API を使用してイベント ストアの古いイベントを削除することもできます。
このリリースでは、Oracle RDBMS ベースのプロバイダを使用する場合、イベント ストアに記録可能なイベント タイプには以下の制限が適用されます。
java.util.Map、ネストされたオブジェクトなどの複合型を使用できません。
この節のサンプル コードは、ORACLE_CEP_HOME\ocep_10.3\samples\source\applications\recplay ディレクトリにある recplay サンプルからの抜粋です。ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP メイン インストール ディレクトリです。
サンプルの実行およびビルドの詳細については、「イベントの記録と再生のサンプル」を参照してください。
以下の手順で説明しているとおり、イベント リポジトリを使用する方法に応じて異なるタスクを実行する必要があります。追加の詳細を示す節を参照してください。
| 注意 : | この節では、Oracle CEP アプリケーションがコンポーネント コンフィグレーション ファイルを使用してすでに作成済みであり、コンポーネントでイベントを記録または再生するようにアプリケーションを更新する必要があると想定しています。まだ作成していない場合は、詳細について「Oracle Complex Event Processing アプリケーションの作成の概要」を参照してください。 |
「Oracle CEP サーバのイベント ストアのコンフィグレーション」を参照してください。
「イベントを格納するコンポーネントのコンフィグレーション」を参照してください。
「イベントを再生するコンポーネントのコンフィグレーション」を参照してください。
wlevs.Admin を使用して記録を開始する必要があります。常にこれらの管理ツールを使用して、イベントの再生を開始または終了する必要があります。
「イベントの記録と再生の開始および終了」を参照してください。
Oracle CEP では記録されたイベントがデータベースに格納されるため、独自のアプリケーションで記録および再生機能を使用する前に、データベース サーバの場所と、記録されたイベントが含まれるデータベース サーバの名前を指定する必要があります。これを行うには、後述のように、Oracle CEP サーバ インスタンスの config.xml ファイルを更新します。
ただし、記録されたイベントを格納する実際のテーブルは作成しません。記録と再生の機能を使用するアプリケーションをデプロイすると、Oracle CEP によって自動的にテーブルが作成され、記録が行われます。Oracle CEP によるこれらのテーブルの作成については、「RDMBS プロバイダで作成されたデータベース テーブルの説明」を参照してください。
デフォルトの Apache Derby を含め、Oracle CEP でイベント ストアをコンフィグレーションするには、以下の手順を実行します。
config.xml ファイルを編集用に開きます。config.xml ファイルはサーバの DOMAIN_DIR/servername/config ディレクトリにあります。DOMAIN_DIR は /oracle_cep/user_projects/domains/myDomain などのドメイン ディレクトリを指し、servername は defaultserver などのサーバ名を指します。 config.xml ファイルに <data-source> 要素を追加して、リレーショナル データベースへのアクセスをコンフィグレーションします。詳細については、「リレーショナル データベースへのアクセスのコンフィグレーション」を参照してください。
デフォルトの Apache Derby データベースを使用する場合は、以下の <data-source> 要素を追加します。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/server"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<domain>
<name>myDomain</name>
</domain>
...
<data-source>
<name>derby1</name>
<connection-pool-params>
<initial-capacity>15</initial-capacity>
<max-capacity>50</max-capacity>
</connection-pool-params>
<driver-params>
<url>jdbc:derby:dbtest1;create=true</url>
<driver-name>org.apache.derby.jdbc.EmbeddedDriver</driver-name>
</driver-params>
</data-source></n1:config>
当然ながら、データ ソースには任意の名前を使用できます。また、異なる接続プール パラメータおよびデータベース名を指定できます (上記の例では、データベース dbtest1 に接続し、データベースが存在しない場合は作成するように指定しています)。<driver-name> は、上記の例と同一にする必要がある唯一の要素であり、値を org.apache.derby.jdbc.EmbeddedDriver にする必要があります。<transaction-manager> 要素を追加する必要がありますが、任意の名前を使用できます。
config.xml ファイルに <transaction-manager> 要素を追加します。<data-source>
...
</data-source>
<transaction-manager>
<name>myTransactionManager</name>
</transaction-manager>config.xml ファイルに、前にコンフィグレーションされたデータ ソースを参照する <rdbms-event-store-provider> 要素を追加します。たとえば、前の手順でコンフィグレーションされた Apache Derby データベースを使用するには、以下の XML コードを追加します。<data-source>
<name>derby1</name>
...
</data-source>
<rdbms-event-store-provider>
<name>my-rdbms-provider</name>
<data-source-name>derby1</data-source-name>
</rdbms-event-store-provider>
後から、イベントを記録および再生するコンポーネントをコンフィグレーションするときに、このイベント ストア名を指定します。
これで Oracle CEP にイベント ストアがコンフィグレーションされ、アプリケーションの特定のコンポーネントでイベントの記録と再生をコンフィグレーションできます。
アプリケーションの任意のプロセッサ、アダプタ、ストリーム、またはイベント Bean でイベントの記録をコンフィグレーションできます。すべての他のコンポーネントのコンフィグレーションと同様、コンフィグレーション ファイルを更新してコンポーネントでのイベントの記録を指定します。これらのコンフィグレーション ファイルの概要については、「コンポーネント コンフィグレーション ファイル」を参照してください。
この節では、イベントを記録するコンポーネントをコンフィグレーションするための主な手順について説明します。簡略化のため、この手順ではイベントを記録するアダプタをコンフィグレーションし、コンポーネント コンフィグレーション ファイルがすでに作成されていることを想定しています。
イベント記録のコンフィグレーション ファイルの要素を記述する完全な XSD スキーマについては、コンポーネント コンフィグレーション ファイルの XSD スキーマ リファレンスを参照してください。
任意の XML エディタを使用してコンポーネント コンフィグレーション XML ファイルを開き、イベントの記録をコンフィグレーションするコンポーネントに <record-parameters> 子要素を追加します。たとえば、アダプタ simpleEventSource をコンフィグレーションする場合は、以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<adapter>
<name>simpleEventSource</name><record-parameters></adapter>
...
</record-parameters>
...
...
</n1:config>
<record-parameters> に子要素を追加して、イベント ストア プロバイダの名前、格納されるイベント、記録の開始および終了時間などを指定します。例を示します。
<adapter>
<name>simpleEventSource</name><record-parameters></adapter>
<dataset-name>recplay_sample</dataset-name>
<event-type-list>
<event-type>SimpleEvent</event-type>
</event-type-list>
<provider-name>my-rdbms-provider</provider-name>
<batch-size>1</batch-size>
<batch-time-out>10</batch-time-out>
</record-parameters>
次の表は、<record-parameters> に指定できる子要素を示しています。必須要素は <dataset-name> のみですが、<provider-name> でイベント ストア プロバイダの名前についても明示的に指定することをお勧めします。
config.xml ファイルの <rdbms-event-store-provider> 要素の <name> 子要素の値に対応します。
|
|
<start> 子要素を使用して開始時間を指定し、<end> 子要素を使用して終了時間を指定します。開始および終了の時間形式は両方とも MM-dd-yyyy:HH:mm:ss であり、10-20-2007:11:22:07 のようになります。たとえば、2009 年 4 月 7 日午前 6 時に記録を開始し、2009 年 4 月 10 日午後 10 時に終了するように指定するには、以下のように入力します。
|
|
<start> 子要素を使用して開始時間を指定し、<duration> 子要素を使用して記録開始後に記録が停止するまでの時間を指定します。開始の時間形式は MM-dd-yyyy:HH:mm:ss であり、10-20-2007:11:22:07 のようになります。期間の形式は HH:mm:ss であり、01:00:00 のようになります。たとえば、2009 年 4 月 7 日午前 6 時に記録を開始し、3 時間続行するように指定するには、以下のように入力します。
|
|
アプリケーションの任意のプロセッサ、アダプタ、ストリーム、またはイベント Bean でイベントの再生をコンフィグレーションできます。ただし、実際にイベントを受信し、それらのイベントを再生できるように、再生コンポーネントは記録コンポーネントの下流ノードである必要があります。すべての他のコンポーネントのコンフィグレーションと同様、コンフィグレーション ファイルを更新してコンポーネントでのイベントの再生を指定します。これらのコンフィグレーション ファイルの概要については、「コンポーネント コンフィグレーション ファイル」を参照してください。
この節では、イベントを再生するコンポーネントをコンフィグレーションするための主な手順について説明します。簡略化のため、この手順ではイベントの記録元である EPN の上流ノードからのイベントを再生するストリームをコンフィグレーションし、ストリームのコンフィグレーション ファイルがすでに作成されていることを想定しています。
イベント再生のコンフィグレーション ファイルの要素を記述する完全な XSD スキーマについては、コンポーネント コンフィグレーション ファイルの XSD スキーマ リファレンスを参照してください。
任意の XML エディタを使用してコンポーネント コンフィグレーション XML ファイルを開き、イベントの再生をコンフィグレーションするコンポーネントに <playback-parameters> 子要素を追加します。たとえば、ストリーム eventStream をコンフィグレーションする場合は、以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<n1:config xmlns:n1="http://www.bea.com/ns/wlevs/config/application"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<stream>
<name>eventStream</name><playback-parameters></stream>
...
</playback-parameters>
...
</n1:config>
<playback-parameters> に子要素を追加して、イベント ストア プロバイダの名前、再生されるイベントなどを指定します。例を示します。
<stream>
<name>eventStream</name><playback-parameters></stream>
<dataset-name>recplay_sample</dataset-name>
<event-type-list>
<event-type>SimpleEvent</event-type>
</event-type-list>
<provider-name>test-rdbms-provider</provider-name>
</playback-parameters>
次の表は、<playback-parameters> に指定できる子要素を示しています。必須要素は <dataset-name> のみですが、<provider-name> でイベント ストア プロバイダの名前についても明示的に指定することをお勧めします。
config.xml ファイルの <rdbms-event-store-provider> 要素の <name> 子要素の値に対応します。
|
|
<start> 子要素を使用して開始時間を指定し、<end> 子要素を使用して終了時間を指定します。開始および終了の時間形式は両方とも MM-dd-yyyy:HH:mm:ss であり、10-20-2007:11:22:07 のようになります。たとえば、2009 年 4 月 7 日午前 6 時に記録を開始し、2009 年 4 月 10 日午後 10 時に記録を終了したイベントを再生するように指定するには、以下のように入力します。
|
|
<start> 子要素を使用して開始時間を指定し、<duration> 子要素を使用して記録開始後の時間を指定します。開始の時間形式は MM-dd-yyyy:HH:mm:ss であり、10-20-2007:11:22:07 のようになります。期間の形式は HH:mm:ss であり、01:00:00 のようになります。たとえば、2009 年 4 月 7 日午前 6 時に記録を開始し、3 時間続行したイベントを再生するように指定するには、以下のように入力します。
|
|
アプリケーションのコンポーネントで記録および再生機能のコンフィグレーションが完了し、Oracle CEP にアプリケーションをデプロイしたら、最初のコンフィグレーションで開始および終了時間を明示的に指定した場合にのみサーバでイベントの記録が開始されます。
たとえば、コンポーネント コンフィグレーションに以下の要素が含まれているとします。
<time-range-offset>
<start>04-07-2009:06:00:00</start>
<end>04-10-2009:22:00:00</end>
</time-range-offset>
この場合、2009 年 4 月 7 日に記録が自動的に開始されます。
ただし、イベントの再生を開始するには Visualizer または wlevs.Admin を使用するのが唯一の方法です。これらの管理ツールは、イベントの記録を動的に開始または終了する際にも使用します。詳細については、以下を参照してください。
Visualizer および wlevs.Admin では、管理対象 Bean (MBean) を使用して、イベントの記録と再生を動的に開始および終了し、イベント ストアのコンフィグレーションを管理します。管理対象 Bean は Java Management Extensions (JMX) インタフェースを提供する Java Bean です。JMX はネットワーク上のリソースをモニタおよび管理するための Java EE ソリューションです。com.bea.wlevs.management.configuration.StageMBean を使用することにより、独自の管理ツールを作成し、JMX を使用してイベント ストア機能を管理できます。
コンポーネントでイベントの記録を有効にすると、Oracle CEP では、まだ存在していない場合に、実際のデータが格納されるデータベース テーブルが自動的に作成されます。サーバはイベント ストア プロバイダにコンフィグレーションされたデータ ソースを使用してデータベースに接続します。
Oracle CEP によるこれらのテーブルの作成および管理を許可することをお勧めしますが、より詳細な制御が必要な場合は独自のテーブルを作成できます。
以下のガイドラインでは、Oracle CEP でデータベース テーブルが作成されるしくみについて説明し、独自のテーブルを作成する場合の要件を示します。データベース オブジェクトのデフォルト名 (schema、table、column) が予約語である場合、Oracle CEP では予約語以外の語を提供するためサフィックスが追加されます。
<dataset-name> 要素の値によって名前が指定されます。 recordTime があります。recordTime カラムに対するインデックスがあります。
次の表に、イベント タイプの各フィールドでサポートされている Java の型の一覧を示します。
Oracle CEP には、カスタム イベント ストア プロバイダの作成に使用できるイベント ストア API が用意されています。Oracle CEP ではリレーショナル データベースにイベントを格納するための RDBMS ベースの実装、または JDBC 接続をサポートする実装が提供されます。異なる種類のデータベースにイベントを格納する必要がある場合や、何らかの理由で Oracle RDBMS プロバイダがニーズに合致しない場合は、イベント ストア API を使用して独自のイベント ストア プロバイダを作成できます。
イベント ストア API は com.bea.wlevs.eventstore パッケージに含まれており、以下は最も重要なインタフェースの説明です。
EventStore—単一のイベント ストアを表現するオブジェクト。このインタフェースのメソッドを使用すると、イベントをストアに永続化し、プロバイダ固有のクエリを使用してストアのコンテンツへのクエリを実行できます。EventStoreManager—イベント ストアを管理します。特定の Oracle CEP サーバには EventStoreManager のインスタンスが 1 つのみ存在し、このインスタンスは自身を OSGI レジストリに登録するため、イベント ストア プロバイダは自身をイベント ストア マネージャに登録できるようになります。このインタフェースを使用して、既存のイベント ストアの検索、新しいイベント ストアの作成、特定のイベント ストアのプロバイダの取得、イベント プロバイダの登録を行います。イベント ストア マネージャは実際の作業をイベント ストア プロバイダに委任します。EventStoreProvider—イベント ストア サービスをクライアントに提供する基になるリポジトリ。
|