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

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

カスタム アダプタとイベント Bean の作成

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

 


アダプタの概要

アダプタの主な役割の 1 つには、マーケット データ フィードなどのストリームからのデータを Oracle Complex Event Processing (略称 Oracle CEP) イベントに変換する作業があります。これらのイベントはその後、プロセッサなどのアプリケーションの他のコンポーネントに渡されます。通常アダプタは Oracle CEP アプリケーションへのエントリ ポイントです。アダプタは中間コンポーネントからのイベントを受信し、外部アプリケーションで読み取り可能な形式にデータを変換し、それらのデータを送信するため、アプリケーションの出口ポイントになる場合もあります。

FX サンプルの説明では、通貨データ フィードからデータを読み込み、ネットワークの次のコンポーネントであるプロセッサに特定のイベント タイプの形式でデータを渡す 3 つのアダプタが示されています。

着信データの形式およびアダプタ コードで変換に使用される技術に応じて、さまざまなタイプのアダプタを作成できます。最も一般的なタイプのアダプタは、以下のとおりです。

アダプタは、特定の Oracle CEP インタフェースを実装する Java クラスです。アプリケーション全体を記述する EPN アセンブリ ファイルでアダプタ クラスを登録します。

必要に応じてアダプタのデフォルトのコンフィグレーションを変更できます。または、コンフィグレーションを拡張して、コンフィグレーションの新しい要素および属性を追加することもできます。アダプタにコンフィグレーション データを渡すには 2 つの方法があります。デプロイメントの後にコンフィグレーションを動的に変更する必要があるかどうかに応じて、選択する方法が決まります。アダプタのデプロイ後にコンフィグレーション データを変更しないのであれば、EPN アセンブリ ファイルでアダプタをコンフィグレーションできます。ただし、コンフィグレーション要素を動的に変更できるようにする必要がある場合は、このコンフィグレーションをアダプタ固有のコンフィグレーション ファイルに配置します。これらの方法については後述します。

 


イベント Bean の概要

イベント Bean は、Oracle CEP 管理フレームワークによる管理が可能な点を除いて、標準の Spring Bean とほぼ同じです。標準の Spring Bean は Spring フレームワークで管理されます。標準の <bean> タグの代わりに Oracle CEP <wlevs:event-bean> タグを使用して、イベント Bean を EPN アセンブリ ファイルに登録します。

イベント Bean はある種のステージであり、Event Server モニタリング フレームワークによってモニタでき、コンフィグレーション メタデータのアノテーションを利用します。また、通過するイベントを記録および再生するよう設定できます。イベント Bean は、Event Server API インタフェースを実装するのではなく、XML 宣言にメソッドを指定することによって、Event Server Bean ライフサイクルに参加することもできます。

開発者は Spring-bean または event-bean のいずれを使用するかを選択できます。前者は Spring に対するレガシー統合のために使用されます。後者は Event Server コンテナの機能を積極的に利用するために使用されます。

 


イベント ソースとイベント シンクの概要

標準の Spring Bean およびイベント Bean は、イベント ソース、イベント シンク、またはその両方に使用できます。イベント ソースはイベントを生成し、イベント シンクはイベントを受信します。

イベント ソースとしての標準の Spring Bean

com.bea.wlevs.ede.api EventSource API を実装することによって、EPN の標準の Spring Bean コンポーネントがイベント ソースであることを指定します。Bean では必要に応じて、InitializingBeanDisposableBean などのさまざまなライフサイクル インタフェース、および RunnableBean などのアクティブ インタフェースを実装することもできます。Spring-bean が RunnableBean ではなく Runnable を実装した場合、Oracle CEP ではこれをスレッドで実行しません。これはイベント Bean の動作とは異なります。

Spring Bean イベント ソースでは、@Prepare@Rollback@Activate などのコンフィグレーション メタデータのアノテーションを利用できます。

<bean> を使用する通常の方法で Spring Bean を EPN アセンブリ ファイルに登録します。その後、この Bean を EPN の他のステージに対するイベント ソースとして指定できます。

イベント ソースとしてのイベント Bean

イベント ソースであるイベント Bean の実装クラスは、アプリケーションのプライベートとして指定するか、または他のアプリケーションによる再利用が可能な公開された OSGI サービスとして指定できます。

EPN コンポーネントとしての Bean をフレームワークで完全に管理できるようにするには、標準の Spring Bean ではなく、event-bean として指定する必要があります。管理タスクにはモニタおよび記録再生が含まれます。

<wlevs:event-bean> タグを使用して、イベント Bean を EPN アセンブリ ファイルに登録します。例を示します。

  <wlevs:event-bean id="recplayEventSink"
class="com.bea.wlevs.example.recplayRecplayEventSink">
<wlevs:listener ref="playbackHttpPublisher"/>
</wlevs:event-bean>

イベント シンク

Spring Bean およびイベント Bean のイベント シンクとしての機能はイベント ソースの機能とほぼ同じですが、以下の点が異なります。

イベント シンクはアクティブではないため、Runnable インタフェースを実装している場合、Oracle CEP ではこれらを個別のスレッドで実行しません。

<wlevs:listener> タグを使用して EPN アセンブリ ファイルでイベント シンクを参照します。

<wlevs:stream id="myStream" >
<wlevs:listener ref="myEventSink" />
</wlevs:stream>

 


アダプタおよびイベント Bean のファクトリの概要

アダプタまたはイベント Bean が単一の Oracle CEP アプリケーションによってのみ使用される場合は、ファクトリを作成する必要はありません。ただし、同一のアダプタまたはイベント Bean が複数のアプリケーションで使用される場合は、ファクトリもプログラミングする必要があります。この場合、それぞれのアプリケーションで固有のアダプタ インスタンスが取得されます。

アダプタまたはイベント Bean のファクトリは com.bea.wlevs.ede.api.Factory インタフェースを実装する必要があります。このインタフェースには、アダプタまたはイベント Bean のインスタンスを作成するために実装する 1 つのメソッド create() が含まれています。

<wlevs:factory> タグを使用して EPN アセンブリ ファイルにファクトリを登録します。

  <wlevs:factory provider-name="myprovider" class="my.Implementation"/>

サービスのプロパティを指定する必要がある場合は、<osgi:service> タグを使用してファクトリを登録する必要があります。

 


アダプタまたはイベント Bean の作成 : 一般的な手順

以下の手順は、アダプタを作成するための一般的な手順を示します。

  1. アダプタまたはイベント Bean の Java クラスをプログラミングします。
  2. アダプタまたはイベント Bean がイベント ソースである場合は、「イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン」を参照してください。イベント シンクである場合は、「イベント シンクのプログラミング : ガイドライン」を参照してください。

  3. 必要に応じて、ファクトリ クラスをプログラミングします。この手順は、アダプタまたはイベント Bean が複数のアプリケーションで使用される場合にのみ必要です。
  4. 省略可能なファクトリ クラスのプログラミング」を参照してください。

  5. アダプタ、イベント Bean、およびアダプタ ファクトリの登録情報を使用して、EPN アセンブリ ファイルを更新します。
  6. EPN アセンブリ ファイルの更新」を参照してください。

  7. 必要に応じて、アダプタのデフォルトのコンフィグレーションを変更します。
  8. アダプタまたはイベント Bean のコンフィグレーション」を参照してください。

  9. アダプタの基本コンフィグレーションが不十分な場合は、必要に応じてコンフィグレーションを拡張します。
  10. アダプタまたはイベント Bean のコンフィグレーションの拡張」を参照してください。

上記の手順では、プロセッサ、ストリーム、ビジネス ロジック POJO などのイベント ネットワークの他のコンポーネントが含まれている同一のアプリケーション JAR ファイルにアダプタまたはイベント Bean がバンドルされると想定します。複数のアプリケーションで共有できるようにアダプタまたはイベント Bean を固有の JAR ファイルにバンドルする必要がある場合は、「固有のバンドルでのアダプタまたはイベント Bean の作成」を参照してください。

 


イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン

この節では、着信データを受信し、EPN の次のコンポーネントに送信されるイベントを生成するイベント ソースとして動作する着信アダプタを作成する方法について説明します。イベント Bean は同様に機能するため、このガイドラインはイベント ソースとして動作するイベント Bean のプログラミングにも適用されます。

着信アダプタ クラスは、通常マーケット データ フィードなどからの着信データのストリームを読み込み、アプリケーションの残りの部分によって認識される Oracle CEP イベント タイプに変換し、ネットワークの次のコンポーネントにイベントを送信します。

次の例は、HelloWorld サンプルのアダプタ クラスを示します。Java コードの太字部分に対応するコーディングのガイドラインについては、例の後で説明しています。

package com.bea.wlevs.adapter.example.helloworld;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.bea.wlevs.ede.api.EventSender;
import com.bea.wlevs.ede.api.EventSource;
import com.bea.wlevs.ede.api.RunnableBean;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;
public class HelloWorldAdapter implements RunnableBean, EventSource {
    private static final int SLEEP_MILLIS = 300;
    private DateFormat dateFormat;
    private String message;
private EventSender eventSender;
private boolean stopped;
    public HelloWorldAdapter() {
super();
dateFormat = DateFormat.getTimeInstance();
}
    public void run() {
stopped = false;
while (!isStopped()) { // メッセージを永久に生成します...
generateHelloMessage();
try {
synchronized (this) {
wait(SLEEP_MILLIS);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
    public void setMessage(String message) {
this.message = message;
}
    @SuppressWarnings({ "unchecked" })
private void generateHelloMessage() {
List eventCollection = new ArrayList();
String message = this.message + dateFormat.format(new Date());
HelloWorldEvent event = new HelloWorldEvent();
event.setMessage(message);
eventCollection.add(event);
eventSender.sendEvent(eventCollection, null);
}
    public void setEventSender(EventSender sender) {
eventSender = sender;
}
    public synchronized void suspend() {
stopped = true;
}
    private synchronized boolean isStopped() {
return stopped;
}
}

アダプタ Java クラスのプログラミングでは、以下のガイドラインに従います。上記の例でガイドラインのコード例は太字で示されています。

 


イベント シンクのプログラミング : ガイドライン

次のコード例は、HelloWorld アプリケーションでイベント シンクとして動作する Spring Bean です。太字部分のコードについては、例の後で説明しています。

package com.bea.wlevs.example.helloworld;
import java.util.List;
import com.bea.wlevs.ede.api.EventRejectedException;
import com.bea.wlevs.ede.api.EventSink;
import com.bea.wlevs.event.example.helloworld.HelloWorldEvent;
public class HelloWorldBean implements EventSink {
    @SuppressWarnings({ "unchecked" })
public void onEvent(List newEvents)
throws EventRejectedException {
for (Object event : newEvents) {
if (event instanceof HelloWorldEvent) {
HelloWorldEvent helloWorldEvent = (HelloWorldEvent) event;
System.out.println("Message: " + helloWorldEvent.getMessage());
}
}
}
}

上記の例に示したプログラミングのガイドラインは、以下のとおりです。

この節に記載されている Oracle CEP API に関する完全な API リファレンス情報については、Javadoc を参照してください。

 


省略可能なファクトリ クラスのプログラミング

アダプタ ファクトリ クラスは com.bea.wlevs.ede.api.AdapterFactory インタフェースを実装する必要があり、これには 1 つのメソッド create() が含まれていますが、ここに特定のアダプタ クラスを作成するコードを作成します。イベント Bean は Factory を実装します。

次の例は、HelloWorld のサンプルで使用可能なアダプタ ファクトリ クラスです。

package com.bea.adapter.wlevs.example.helloworld;
import com.bea.wlevs.ede.api.Adapter;
import com.bea.wlevs.ede.api.AdapterFactory;
public class HelloWorldAdapterFactory implements Factory {
    public HelloWorldAdapterFactory() {
}
    public synchronized Adapter create() throws IllegalArgumentException {
return new HelloWorldAdapter();
}
}

これらの API の完全な詳細については、Javadoc を参照してください。

 


リレーショナル データベースへのアクセス

アダプタ、イベント Bean、および標準の Spring Bean では Java Database Connectivity (JDBC) API を使用して、リレーショナル データベースに含まれているデータにアクセスできます。Oracle CEP では JDBC 3.0 がサポートされています。

コンポーネントで JDBC を使用するには、以下の手順を実行します。

  1. Oracle CEP で JDBC をコンフィグレーションします。
  2. 詳細については、「リレーショナル データベースへのアクセスのコンフィグレーション」を参照してください。

  3. Bean の Java コードで、DataSource を使用するか、または DriverManager をインスタンス化して、通常どおり JDBC API の使用を開始できます。例を示します。
  4.    OracleDataSource ods = new OracleDataSource();
    ods.setURL("jdbc:oracle:thin:user/passwd@localhost:1521/XE");
    Connection conn =
    ods.getConnection();

    追加のプログラミング情報については、「Getting Started with the JDBC API」を参照してください。

 


EPN アセンブリ ファイルの更新

以下の節で説明しているとおり、アダプタ、イベント Bean、およびアダプタ ファクトリを EPN アセンブリ ファイルに登録する必要があります。

アプリケーションへの他のコンポーネントの登録を含む、コンフィグレーション ファイルの完全な説明については、「EPN アセンブリ ファイルの作成」を参照してください。

アダプタまたはイベント Bean のファクトリの登録

<wlevs:factory> タグを使用して EPN アセンブリ ファイルにファクトリを登録します。

  <wlevs:factory provider-name="myprovider" class="my.Implementation"/>

サービスのプロパティを指定する必要がある場合は、<osgi:service> タグを使用して、EPN アセンブリ ファイルに OSGI サービスとしてファクトリを登録する必要があります。OSGI サービス レジストリのスコープは Oracle CEP 全体です。このため、指定のサーバにデプロイされた複数のアプリケーションが同じアダプタ ファクトリを使用する場合は、アダプタ ファクトリを OSGI サービスとして登録するのが必ず 1 度きりになるようにします。

エントリを追加して、サービスを com.bea.wlevs.ede.api.AdapterFactory インタフェースの実装として登録します。key 属性の type、およびこのアダプタ プロパティを参照する名前を使用して、プロパティを指定します。最後に、ネストされた標準の Spring <bean> タグを追加して、Spring アプリケーション コンテキストで特定のアダプタ クラスを登録します。

たとえば、EPN アセンブリ ファイルの以下の部分では、HelloWorldAdapterFactory をタイプ hellomsgs のプロバイダとして登録します。

<osgi:service interface="com.bea.wlevs.ede.api.AdapterFactory">
<osgi:service-properties>
<prop key="type">hellomsgs</prop>
</osgi:service-properties>
<bean class="com.bea.adapter.wlevs.example.helloworld.HelloWorldAdapterFactory" />
</osgi:service>

アプリケーションのアダプタおよびイベント Bean コンポーネントの宣言

EPN アセンブリ ファイルでは、wlevs:adapter タグを使用してアダプタをイベント処理ネットワークのコンポーネントとして宣言します。同様に、イベント Bean の場合は <wlevs:event-bean> タグを使用します。例を示します。

  <wlevs:event-bean id="recplayEventSink"
class="com.bea.wlevs.example.recplayRecplayEventSink">
<wlevs:listener ref="playbackHttpPublisher"/>
</wlevs:event-bean>

省略可能なファクトリを OSGI サービスとして登録した場合は、provider 属性を使用して、osgi:service エントリで type として指定した名前を参照します。例を示します。

    <wlevs:adapter id="helloworldAdapter" provider="hellomsgs"/>

これにより、アダプタはタイプ hellomsgs で登録されたファクトリによってインスタンス化されます。

<wlevs:adapter><wlevs:instance-property> 子タグを使用して、アダプタ Bean の静的プロパティを設定することもできます。静的プロパティはアダプタのデプロイ後に動的に変更されないプロパティです。

たとえば、アダプタ クラスに setPort() メソッドが含まれている場合は、以下のようにポート番号を渡すことができます。

    <wlevs:adapter id="myAdapter" provider="myProvider">
<wlevs:instance-property name="port" value="9001" />
</wlevs:adapter>

 


アダプタまたはイベント Bean のコンフィグレーション

この節は、アダプタとイベント Bean の両方に当てはまります。簡略化のため、アダプタについてのみ説明します。イベント Bean のコンフィグレーションは <event-bean> 要素で囲みます。

アプリケーションの各アダプタにはデフォルトのコンフィグレーションがあります。特に、以下のものが含まれています。

デフォルトのアダプタ コンフィグレーションは通常ほとんどのアプリケーションで十分に機能します。ただし、このコンフィグレーションを変更する場合は、Oracle CEP アプリケーション バンドルの一部としてデプロイされる XML ファイルを作成する必要があります。後から wlevs.Admin ユーティリティを使用するか、または適切な JMX Mbean を直接操作して、実行時にこのコンフィグレーションを更新できます。

アプリケーションに複数のアダプタが含まれている場合は、各アダプタごとに個別の XML ファイルを作成するか、すべてのアダプタのコンフィグレーションが含まれた単一の XML ファイルを作成するか、またはアプリケーションのすべてのコンポーネント (アダプタ、プロセッサ、およびストリーム) が含まれたファイルを作成できます。開発環境に最も適した方法を選択します。

以下の手順では、アダプタのコンフィグレーション ファイルを作成する主な手順について示します。簡略化のため、この手順ではアプリケーションのすべてのコンポーネントを 1 つの XML ファイルにコンフィグレーションすることを想定しています。

アダプタ コンフィグレーション ファイルを記述する完全な XSD スキーマについては、コンポーネント コンフィグレーション ファイルの XSD スキーマ リファレンスを参照してください。

  1. 任意の XML エディタを使用して XML ファイルを作成します。この XML ファイルには、.xml 拡張子を使用するのであれば任意の名前を付けてかまいません。
  2. コンフィグレーション ファイルのルート要素は <config> であり、次の手順に示すネームスペース定義を使用します。

  3. アプリケーションの各アダプタについて、<config><adapter> 子要素を追加します。<name> 子要素を使用して各アダプタをユニークに識別します。この名前は、アプリケーションのイベント処理ネットワークを定義する EPN アセンブリ ファイルの <wlevs:adapter> タグの id 属性の値と一致している必要があります。このように指定することで、Oracle CEP では、このアダプタ コンフィグレーションが適用される EPN アセンブリ ファイル内の特定のアダプタ コンポーネントを認識します。詳細については、「EPN アセンブリ ファイルの作成」を参照してください。
  4. たとえば、アプリケーションに 2 つのアダプタがある場合、コンフィグレーション ファイルは最初に以下のようになります。

    <?xml version="1.0" encoding="UTF-8"?>
    <helloworld:config
    xmlns:helloworld="http://www.bea.com/xml/ns/wlevs/example/helloworld">
    <processor>
    ...
    </processor>
      <adapter>
    <name>firstAdapter</name>
    ...
    </adapter>
      <adapter>
    <name>secondAdapter</name>
    ...
    </adapter>
    </helloworld:config>

    この例では、コンフィグレーション ファイルに firstAdaptersecondAdapter という 2 つのアダプタが含まれています。このため、EPN アセンブリ ファイルには同じ識別子を持つアダプタが少なくとも 2 つ登録されている必要があります。

    <wlevs:adapter id="firstAdapter" ...>
    ...
    </wlevs:adapter>
    <wlevs:adapter id="secondAdapter" ...>
    ...
    </wlevs:adapter>
    警告 : XML ファイル内の識別子および名前は大文字と小文字が区別されるため、EPN アセンブリ ファイルでコンポーネントの識別子を参照する場合は、必ず同一の大文字と小文字を指定するようにします。
  5. 必要に応じて、<adapter> 要素の monitoring ブール属性を使用してアダプタのモニタを有効または無効にします。デフォルトでは、モニタは有効です。モニタが有効な場合、アダプタでは実行時統計が収集され、その情報が Mbean に転送されます。
  6. <adapter monitoring="true">
    <name>firstAdapter</name>
    </adapter>

    モニタを実際に有効にするには、コンポーネントの管理容易性も有効にしておく必要があります。そうしないと、monitoring 属性を true に設定しても効果はありません。管理容易性を有効にするには、次の例の太字部分のように、EPN アセンブリ ファイルに登録された対応するアダプタ コンポーネントの manageable 属性を true に設定します。

     <wlevs:adapter id="firstAdapter" provider="hellomsgs" manageable="true">

アダプタ コンフィグレーション ファイルの例

次の XML ファイルの例は、firstAdapter および secondAdapter という 2 つのアダプタをコンフィグレーションする方法を示します。

<?xml version="1.0" encoding="UTF-8"?>
<sample:config
xmlns:sample="http://www.bea.com/xml/ns/wlevs/example/sample">
  <adapter>
<name>firstAdapter</name>
</adapter>
  <adapter monitoring="true">
<name>secondAdapter</name>
</adapter>
</sample:config>

 


固有のバンドルでのアダプタまたはイベント Bean の作成

この節は、アダプタとイベント Bean の両方に当てはまります。簡略化のため、アダプタについてのみ説明します。

アダプタまたはイベント Bean の作成 : 一般的な手順」に示す手順では、プロセッサ、ストリーム、ビジネス ロジック POJO などのイベント ネットワークの他のコンポーネントが含まれている同一のアプリケーション JAR ファイルに、アダプタおよびアダプタ ファクトリがバンドルされることが想定されています。

ただし、アダプタを固有の JAR ファイルにバンドルし、他のアプリケーション バンドルでアダプタを参照する必要がある場合もあります。これは、たとえば、2 つの異なるアプリケーションが同じデータ フィード プロバイダからのデータを読み込み、両方のアプリケーションが同じイベント タイプを使用する場合に役立ちます。この場合、2 つの異なるアプリケーションで実装が重複するよりも、同一のアダプタおよびイベント タイプの実装を共有するほうが有意義です。

アダプタおよびアダプタを使用する異なるバンドル内のアプリケーションをコンフィグレーションする方法には、実際の違いはありません。以下のガイドラインに示すように、コンフィグレーションを配置する場所が異なります。

 


アダプタまたはイベント Bean のコンフィグレーションの拡張

この節は、アダプタとイベント Bean の両方に当てはまります。簡略化のため、アダプタについてのみ説明します。

アダプタまたはイベント Bean のコンフィグレーション」および「コンポーネント コンフィグレーション ファイルの XSD スキーマ リファレンス」で説明しているとおり、アダプタにはデフォルトのコンフィグレーション データがあります。このデフォルトのコンフィグレーションは通常、単純で基本的なアプリケーションでは十分に機能的です。

ただし、XSD スキーマの使用によって、Oracle CEP で提供される組み込みの XML タイプを拡張するアダプタ コンフィグレーション ファイルの新しい XML 形式を指定して、このコンフィグレーションを拡張することもできます。XSD スキーマを拡張することで、任意の数の新しい要素をアダプタ コンフィグレーションに追加できます。新しい要素に name 属性を指定する必要があるほかは制限もほとんどありません。この機能は、XSD スキーマや Java Architecture for XML Binding (JAXB) などの標準の技術に基づいています。

以下の手順は、アダプタのコンフィグレーションを拡張する方法を示します。

  1. 拡張されたアダプタ コンフィグレーションを記述する新しい XSD スキーマ ファイルを作成します。この XSD ファイルには、コンポーネントを記述するのに Oracle CEP で定義されている組み込みの XSD タイプを通常使用する場合でも、アプリケーションの他のコンポーネント (プロセッサやストリーム) の説明も含まれている必要があります。
  2. 詳細については、「XSD スキーマ ファイルの作成」を参照してください。

  3. アプリケーション ビルド プロセスの一部として、Sun の GlassFish リファレンス実装の com.sun.tools.xjc.XJCTask Ant タスクなどの JAXB バインディング コンパイラを使用して、XSD スキーマ タイプの Java 表現を生成します。ユーザの利便を図るために、この Ant タスクは Oracle CEP 配布に含まれています。
  4. 次のサンプル build.xml ファイルは、この方法を示しています。

    <property name="base.dir" value="."/>
    <property name="output.dir" value="output" />
    <property name="sharedlib.dir" value="${base.dir}/../../../../../modules" />
    <property name="wlrtlib.dir" value="${base.dir}/../../../../modules"/>
    <path id="classpath">
    <pathelement location="${output.dir}" />
    <fileset dir="${sharedlib.dir}">
    <include name="*.jar" />
    </fileset>
    <fileset dir="${wlrtlib.dir}">
    <include name="*.jar"/>
    </fileset>
    </path>
    <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
    <classpath refid="classpath" />
    </taskdef>
    <target name="generate" depends="clean, init">
       <copy file="../../../../xsd/wlevs_base_config.xsd"
    todir="src/main/resources/extension" />
    <copy file="../../../../xsd/wlevs_application_config.xsd"
    todir="src/main/resources/extension" />
    <xjc extension="true" destdir="${generated.dir}">
    <schema dir="src/main/resources/extension"
    includes="helloworld.xsd"/>
    <produces dir="${generated.dir}" includes="**/*.java" />
    </xjc>
    </target>

    この例では、拡張された XSD ファイルは helloworld.xsd です。helloworld.xsd は Oracle CEP XSD ファイルをインポートするため、ビルド プロセスによって Oracle CEP XSD ファイル (wlevs_base_config.xsd および wlevs_application_config.xsd) が helloworld.xsd ファイルと同じディレクトリにコピーされます。

  5. 生成されたこれらの Java ファイルをクラスにコンパイルします。
  6. コンパイルされた Java クラス ファイルをアプリケーション バンドルにパッケージ化します。
  7. 詳細については、「Oracle CEP アプリケーションのアセンブル : 主な手順」を参照してください。

  8. イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン」の説明に従って、アダプタをプログラムします。アダプタ コード内からは、「アダプタまたはイベント Bean のコンフィグレーションへのプログラムからのアクセス」の説明に従って、通常どおり拡張されたコンフィグレーションにアクセスします。
  9. アプリケーションのコンポーネントを記述するコンフィグレーション XML ファイルを作成する場合は、必ず拡張された XSD ファイルを説明として使用します。また、デフォルトのスキーマではなく、必ずこのスキーマのネームスペースを識別するようにします。例を示します。
  10. <?xml version="1.0" encoding="UTF-8"?>
    <helloworld:config
    xmlns:helloworld="http://www.bea.com/xml/ns/wlevs/example/helloworld">
      <adapter>
    <name>helloworldAdapter</name>
    <message>HelloWorld - the current time is:</message>
    </adapter>
    </helloworld:config>

XSD スキーマ ファイルの作成

新しい XSD スキーマ ファイルは wlevs_application_config.xsd XSD スキーマを拡張し、アダプタの新しいコンフィグレーション要素などの新しいカスタム情報を追加します。カスタム情報には標準の XSD スキーマ構文を使用します。

拡張された XSD スキーマ ファイルの完全な例」の XSD スキーマを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお勧めします。新しいコンフィグレーション要素を追加するほか、他の変更点としては、生成された Java コードのパッケージ名の変更やカスタム アダプタの要素名の変更などがあります。カスタム アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。

拡張されたアダプタ コンフィグレーションを記述する XSD スキーマ ファイルを作成するには、以下の手順に従います。例については、「拡張された XSD スキーマ ファイルの完全な例」を参照してください。

  1. 任意の XML エディタを使用して、特に JAXB を含む必須のネームスペースを使用して基本の XSD ファイルを作成します。例を示します。
  2. <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema targetNamespace="http://www.bea.com/xml/ns/wlevs/example/helloworld"
    xmlns="http://www.bea.com/xml/ns/wlevs/example/helloworld"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:wlevs="http://www.bea.com/xml/ns/wlevs/config/application"
    jxb:extensionBindingPrefixes="xjc" jxb:version="1.0"
    elementFormDefault="unqualified" attributeFormDefault="unqualified">
    ...
    </xs:schema>
  3. wlevs_application_config.xsd XSD スキーマをインポートします。
  4. <xs:import 
    namespace="http://www.bea.com/xml/ns/wlevs/config/application"
    schemaLocation="wlevs_application_config.xsd"/>

    wlevs_application_config.xsd により wlevs_base_config.xsd XSD ファイルがインポートされます。

  5. <complexType> XSD 要素を使用して、拡張されたアダプタ コンフィグレーションの XML タイプを記述します。
  6. 新しいタイプは、wlevs_application_config.xsd に定義された AdapterConfig タイプを拡張する必要があります。AdapterConfigConfigurationObject を拡張します。次に、必要に応じて、基本のアダプタ コンフィグレーションに新しい要素または属性を追加できます。たとえば、次のタイプ HelloWorldAdapterConfig は、基本のアダプタ コンフィグレーションに <message> 要素を追加します。

     <xs:complexType name="HelloWorldAdapterConfig">
    <xs:complexContent>
    <xs:extension base="wlevs:AdapterConfig">
    <xs:sequence>
    <xs:element name="message" type="xs:string"/>
    </xs:sequence>
    </xs:extension>
    </xs:complexContent>
    </xs:complexType>
  7. 最上位レベルの要素を定義し、<config> という名前にする必要があります。
  8. config 要素の定義では、アプリケーションのコンポーネントに対応する子要素のシーケンスを定義します。要素名には任意の名前を付けることができますが、通常はコンフィグレーションするコンポーネント (adapterprocessorstream) を示している必要があります。

    各要素は、明示的に <xs:extension base="base:ConfigurationObject"/> XSD タグを使用するか、またはそれ自身が ConfigurationObject を拡張する XML タイプを指定するかによって、ConfigurationObject XML タイプを拡張する必要があります。ConfigurationObject XML タイプは、wlevs_base_config.xsd で定義され、name という 1 つの属性を定義します。

    アダプタ要素のタイプは、この方法の上記の手順で作成されたカスタム タイプである必要があります。

    プロセッサまたはストリームに対応する <config> の子要素には、wlevs_application_config.xsd に記述されている以下の組み込み XML タイプを使用できます。

  9. 必要に応じて <jxb:schemaBindings><jxb:package> 子要素を使用して、生成された Java コードのパッケージ名を指定します。
  10. <xs:annotation>
    <xs:appinfo>
    <jxb:schemaBindings>
    <jxb:package name="com.bea.adapter.wlevs.example.helloworld"/>
    </jxb:schemaBindings>
    </xs:appinfo>
    </xs:annotation>

拡張された XSD スキーマ ファイルの完全な例

以下の拡張された XSD ファイルをテンプレートとして使用します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns="http://www.bea.com/xml/ns/wlevs/example/helloworld"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:wlevs="http://www.bea.com/xml/ns/wlevs/config/application"
jxb:extensionBindingPrefixes="xjc" jxb:version="1.0"
elementFormDefault="unqualified" attributeFormDefault="unqualified">
        <xs:annotation>
<xs:appinfo>
<jxb:schemaBindings>
<jxb:package name="com.bea.adapter.wlevs.example.helloworld"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
        <xs:import namespace="http://www.bea.com/xml/ns/wlevs/config/application"
schemaLocation="wlevs_application_config.xsd"/>
        <xs:element name="config">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="adapter" type="HelloWorldAdapterConfig"/>
<xs:element name="processor" type="wlevs:DefaultProcessorConfig"/>
<xs:element name="stream" type="wlevs:DefaultStreamConfig"/>
</xs:choice>
</xs:complexType>
</xs:element>
        <xs:complexType name="HelloWorldAdapterConfig">
<xs:complexContent>
<xs:extension base="wlevs:AdapterConfig">
<xs:sequence>
<xs:element name="message" type="xs:string"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

アダプタまたはイベント Bean のコンフィグレーションへのプログラムからのアクセス

この節は、アダプタとイベント Bean の両方に当てはまります。簡略化のため、アダプタについてのみ説明します。

アプリケーションをデプロイする場合、Oracle CEP では (コンポーネント コンフィグレーション XML ファイルに指定された) 各コンポーネントのコンフィグレーションが Java Architecture for XML Binding (JAXB) 標準を使用して Java オブジェクトにマップされます。各コンポーネントのコンフィグレーション データは単一の XML 要素に含まれるため、JAXB でもこのコンポーネント データを表現する単一の Java クラスが生成されます。コンポーネントの初期化時、およびコンポーネントのコンフィグレーションが動的に変更されるたびに、Oracle CEP では実行時にこの Java クラスのインスタンスがコンポーネント (プロセッサ、ストリーム、またはアダプタ) に渡されます。

アダプタの実装では、メタデータ アノテーションを使用して Oracle CEP で実行時に呼び出される Java メソッドを指定できます。Oracle CEP ではコンフィグレーションの Java クラスのインスタンスが指定されたメソッドに渡されるため、これらのメソッドをプログラミングして、アダプタに関する特定の実行時コンフィグレーション情報を取得できます。次の例では、activateAdapter() メソッドに @Activate アノテーションを使用して、アダプタのコンフィグレーションが最初にアクティブ化された場合に呼び出されるメソッドを指定する方法を示します。

@Activate
public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
this.message = adapterConfig.getMessage();
}

デフォルトでは、アダプタ コンフィグレーションの Java クラスのデータ型は com.bea.wlevs.configuration.application.DefaultAdapterConfig です。ただし、コンフィグレーション XML ファイルを記述する独自の XSD ファイルを作成してアダプタのコンフィグレーションを拡張した場合は、XSD ファイルで型を指定します。上記の例では、Java コンフィグレーション オブジェクトのデータ型は com.bea.wlevs.example.helloworld.HelloWorldAdapterConfig です。

提供されているメタデータ アノテーションは以下のとおりです。

 


アダプタからデータ フィード プロバイダへのログイン資格の受け渡し

外部データ フィードにアクセスする場合、アダプタはユーザ認証のためログイン資格 (ユーザ名とパスワード) をデータ フィードに渡す必要がある場合があります。

最も簡単で安全性の低い方法は、アダプタの Java コード内に暗号化されていないログイン資格をハードコード化することです。ただし、この方法ではパスワードを暗号化することができず、アダプタの Java コードを再コンパイルせずに後からログイン資格を変更することもできません。

以下の手順では、これらの問題が考慮された異なる方法について説明します。この手順では、データ フィードにアクセスするユーザ名に juliet、パスワードに superSecret を想定しています。

  1. ログイン資格を EPN アセンブリ ファイルで静的にコンフィグレーションするか、またはアダプタのコンフィグレーションを拡張して動的にコンフィグレーションするかを決定します。
  2. EPN アセンブリ ファイルで資格を静的にコンフィグレーションする方が簡単ですが、後から資格が変更された場合は、EPN アセンブリ ファイルに加えられた更新が反映されるようにアプリケーションを再起動する必要があります。アダプタのコンフィグレーションを拡張するとアプリケーションを再起動せずに資格を動的に変更できますが、コンフィグレーションの拡張には、XSD ファイルの作成や、JAXB オブジェクトへのコンパイルなどの追加の手順が含まれます。

  3. ログイン資格を静的にコンフィグレーションする場合は、以下の手順を実行します。
    1. コマンド ウィンドウを開き、「開発環境の設定」の説明に従って、環境を設定します。
    2. アプリケーションの EPN アセンブリ ファイルがあるディレクトリに移動します。
    3. 任意の XML エディタを使用して EPN アセンブリ ファイルを編集し、アダプタを宣言する <wlevs:adapter> タグを更新します。特に、ログイン資格のユーザ名とパスワードに対応する 2 つのインスタンス プロパティを追加します。ここでは、クリアテキストのパスワード値を指定します。これは後から暗号化されます。クリアテキストのパスワードを値とする一時的な <password> 要素を追加します。例を示します。
    4. <wlevs:adapter id="myAdapter" provider="myProvider">
      <wlevs:instance-property name="user" value="juliet"/>
      <wlevs:instance-property name="password" value="superSecret"/>
      <password>superSecret</password>
      </wlevs:adapter>
    5. EPN アセンブリ ファイルを保存します。
    6. EPN アセンブリ ファイルの <password> 要素の値を暗号化するために、次の encryptMSAConfig コマンドを実行します。
    7. prompt> ORACLE_CEP_HOME/ocep_10.3/bin/encryptMSAConfig . epn_assembly_file msainternal.dat_file

      ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP のインストール先のメイン ディレクトリです。2 番目の引数は EPN アセンブリ ファイルが含まれているディレクトリです。この手順では実際にそのディレクトリに移動しているため、例では「.」と示されています。epn_assembly_file パラメータは EPN アセンブリ ファイルの名前です。最後に、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 種類があります。

      コマンドを実行すると、EPN アセンブリ ファイルの <password> 要素の値が暗号化されます。

    8. EPN アセンブリ ファイルを編集します。<password> 要素の暗号化された値を password インスタンス プロパティの value 属性にコピーします。<password> 要素を XML ファイルから削除します。例を示します。
    9.     <wlevs:adapter id="myAdapter" provider="myProvider">
      <wlevs:instance-property name="user" value="juliet"/>
      <wlevs:instance-property name="password"
      value="{Salted-3DES}B7L6nehu7dgPtJJTnTJWRA=="/>
      </wlevs:adapter>
  4. ログイン資格を動的にコンフィグレーションする場合は、以下の手順を実行します。
    1. 文字列型の 2 つの新しい要素 <user> および <password> を追加してアダプタのコンフィグレーションを拡張します。
    2. たとえば、HelloWorld のサンプルのアダプタを拡張した場合、XSD ファイルは以下のようになります。

       <xs:complexType name="HelloWorldAdapterConfig">
      <xs:complexContent>
      <xs:extension base="wlevs:AdapterConfig">
      <xs:sequence>
      <xs:element name="message" type="xs:string"/>
      <xs:element name="user" type="xs:string"/>
      <xs:element name="password" type="xs:string"/>
      </xs:sequence>
      </xs:extension>
      </xs:complexContent>
      </xs:complexType>

      詳細な手順については、「アダプタまたはイベント Bean のコンフィグレーションの拡張」を参照してください。

    3. コマンド ウィンドウを開き、「開発環境の設定」の説明に従って、環境を設定します。
    4. アダプタのコンポーネント コンフィグレーション XML ファイルがあるディレクトリに移動します。
    5. 任意の XML エディタを使用してこのコンポーネント コンフィグレーション XML ファイルを編集し、<user> および <password> 要素を使用して必要なログイン資格を追加します。ここでは、クリアテキストのパスワード値を指定します。これは後から暗号化されます。例を示します。
    6. <?xml version="1.0" encoding="UTF-8"?>
      <myExample:config
      xmlns:myExample="http://www.bea.com/xml/ns/wlevs/example/myExample">
        <adapter>
      <name>myAdapter</name>
      <user>juliet</user>
      <password>superSecret</password>
      </adapter>
      </myExample:config>
    7. アダプタのコンフィグレーション ファイルを保存します。
    8. アダプタのコンフィグレーション ファイルの <password> 要素の値を暗号化するために、次の encryptMSAConfig コマンドを実行します。
    9. prompt> ORACLE_CEP_HOME/ocep_10.3/bin/encryptMSAConfig . adapter_config_file msainternal.dat_file

      ORACLE_CEP_HOME は、d:\oracle_cep などの Oracle CEP のインストール先のメイン ディレクトリです。2 番目の引数はアダプタのコンフィグレーション ファイルが含まれているディレクトリです。この手順では実際にそのディレクトリに移動しているため、例では「.」と示されています。adapter_config_file パラメータはアダプタ コンフィグレーション ファイルの名前です。最後に、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> 要素の値が暗号化されます。

  5. コンフィグレーションされたログイン資格のプロパティにアクセスしてパスワードを復号化するよう、アダプタの Java コードを更新します。
  6. ログイン資格プロパティにアクセスするためのアダプタ コードの更新」を参照してください。

  7. アプリケーションの MANIFEST.MF ファイルを編集し、Import-Package ヘッダに com.bea.core.encryption パッケージを追加します。「MANIFEST.MF ファイルの作成」を参照してください。
  8. アプリケーションを通常どおり再アセンブルおよびデプロイします。「Oracle Complex Event Processing アプリケーションのアセンブルとデプロイ」を参照してください。

ログイン資格プロパティにアクセスするためのアダプタ コードの更新

この節では、拡張されたアダプタのコンフィグレーションからユーザおよびパスワードの値を動的に取得し、com.bea.core.encryption.EncryptionService API を使用して暗号化されたパスワードを復号化するよう、アダプタの Java コードを更新する方法を説明します。以下のコード例は、「イベント ソースとしてのアダプタおよびイベント Bean クラスのプログラミング : ガイドライン」に示されている HelloWorld アダプタの Java コードに基づいています。


  ページの先頭       前  次