リファレンス ガイド

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

メタデータ アノテーション

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

 


Oracle Complex Event Processing メタデータ アノテーションの概要

Oracle Complex Event Processing (略称 Oracle CEP) メタデータ アノテーションは、コンポーネントのコンフィグレーションにアクセスするために使用します。

以下の 3 つのアノテーションを使用して、アダプタのライフサイクルのさまざまな段階で (具体的には、アダプタのコンフィグレーションが準備されたとき、コンフィグレーションがアクティブ化されたとき、および例外のためにアダプタが終了したときに) 処理を行う、アダプタの Java 実装のメソッドを指定します。

com.bea.wlevs.util.Service アノテーションでは、OSGi サービス参照が挿入されたコンポーネントのメソッドを指定します。

 


com.bea.wlevs.management.Activate

ターゲット : メソッド

@Activate アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。

Oracle CEP で @Activate アノテーションを付けたメソッドが呼び出されるのは、@Prepare アノテーションを付けたすべてのメソッドがサーバによって呼び出された後、正常に実行された場合に限ります。通常、@Activate メソッドは、アダプタ実装の残りの部分で使用するために、アダプタのコンフィグレーション データを実際に取得する場合に使用します。

このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。

  public void methodName(AdapterConfigObject adapterConfig)

methodName はユーザがメソッドに付ける名前であり、AdapterConfigObject はアダプタのコンフィグレーション XML ファイル (アプリケーションと共にデプロイされる) の Java 表現です。このクラスのタイプは、デフォルトでは com.bea.wlevs.configuration.application.DefaultAdapterConfig ですが、アダプタのコンフィグレーションを拡張した場合には、拡張した XML ファイルを記述している XSD で指定したタイプになります。たとえば、HelloWorld のサンプルでは、タイプは com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig です。

実行時、Oracle CEP はこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の XML ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ ライフサイクル アノテーションを付けたアダプタ メソッドでクラスを使用して、アダプタのコンフィグレーションに関する情報を取得できます。

このメタデータ アノテーションに属性はありません。

以下のサンプル コードは、HelloWorld のサンプルで使用しているアダプタ コンポーネントのコードであり、@Prepare アノテーションの使用方法を示しています。ここでは、関連するコードのみを示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Activate;
import com.bea.wlevs.configuration.Prepare;
import com.bea.wlevs.configuration.Rollback;
import com.bea.wlevs.ede.api.Adapter;
import com.bea.wlevs.ede.api.EventSender;
import com.bea.wlevs.ede.api.EventSource;
import com.bea.wlevs.ede.api.SuspendableBean;
import com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig;
public class HelloWorldAdapter implements Runnable, Adapter, EventSource, SuspendableBean {
...
    @Activate
public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
this.message = adapterConfig.getMessage();
}
...
}

com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig クラスは、アダプタのコンフィグレーション XML ファイルの Java 表現です。HelloWorld のサンプルでは、コンフィグレーションが拡張されています。つまり、カスタム XSD ファイルで XML ファイルを記述しています。以下の XSD ファイルでは、結果の Java コンフィグレーション オブジェクトの完全修飾名 (太字の部分) も指定しています。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.bea.com/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/ns/wlevs/config/application"
targetNamespace="http://www.bea.com/ns/wlevs/example/helloworld"
elementFormDefault="unqualified" attributeFormDefault="unqualified"
jxb:extensionBindingPrefixes="xjc" jxb:version="1.0">
   <xs:annotation>
<xs:appinfo>
<jxb:schemaBindings>
<jxb:package name="com.bea.wlevs.adapter.example.helloworld"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
   <xs:import namespace="http://www.bea.com/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>

Oracle CEP はアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。たとえば、helloworldAdapter のコンフィグレーション ファイルのアダプタ セクションは次のようになります。

  <?xml version="1.0" encoding="UTF-8"?>
  <helloworld:config
  ...
    <adapter>
<name>helloworldAdapter</name>
<message>HelloWorld - the current time is:</message>
</adapter>
</helloworld:config>

上記のアダプタの Java コードでは、activateAdapter メソッドに @Activate アノテーションが付いています。このメソッドは、コンフィグレーション オブジェクトの getMessage メソッドを使用して、アダプタのコンフィグレーション XML ファイルに設定された message プロパティの値を取得します。この例の場合、値は HelloWorld - the current time is: です。取得したこの値をアダプタ実装ファイルの主要部分で使用します。

 


com.bea.wlevs.management.Prepare

ターゲット : メソッド

@Prepare アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。

コンポーネントの状態が特定のコンフィグレーション変更によって更新された場合、Oracle CEP は @Prepare アノテーションが付いたメソッドを呼び出します。

このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。

  public void methodName(AdapterConfigObject adapterConfig)

methodName はユーザがメソッドに付ける名前であり、AdapterConfigObject はアダプタのコンフィグレーション XML ファイル (アプリケーションと共にデプロイされる) の Java 表現です。このクラスのタイプは、デフォルトでは com.bea.wlevs.configuration.application.DefaultAdapterConfig ですが、アダプタのコンフィグレーションを拡張した場合には、拡張した XML ファイルを記述している XSD で指定したタイプになります。たとえば、HelloWorld のサンプルでは、タイプは com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig です。

実行時、Oracle CEP はこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の XML ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ ライフサイクル アノテーションを付けたアダプタ メソッドでクラスを使用して、アダプタのコンフィグレーションに関する情報を取得できます。

このメタデータ アノテーションに属性はありません。

以下のサンプル コードは、HelloWorld のサンプルで使用しているアダプタ コンポーネントのコードであり、@Prepare アノテーションの使用方法を示しています。ここでは、関連するコードのみを示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Activate;
import com.bea.wlevs.configuration.Prepare;
import com.bea.wlevs.configuration.Rollback;
import com.bea.wlevs.ede.api.Adapter;
import com.bea.wlevs.ede.api.EventSender;
import com.bea.wlevs.ede.api.EventSource;
import com.bea.wlevs.ede.api.SuspendableBean;
import com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig;
public class HelloWorldAdapter implements Runnable, Adapter, EventSource, SuspendableBean {
...
    @Prepare
public void checkConfiguration(HelloWorldAdapterConfig adapterConfig) {
if (adapterConfig.getMessage() == null
|| adapterConfig.getMessage().length() == 0) {
throw new RuntimeException("invalid message: " + message);
}
}
...
}

com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig クラスは、アダプタのコンフィグレーション XML ファイルの Java 表現です。Oracle CEP はアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。HelloWorld のサンプルでは、アダプタ コンフィグレーションが拡張されています。詳細については、com.bea.wlevs.management.Activate の例を参照してください。

上記のアダプタの Java コードでは、checkConfiguration メソッドに @Prepare アノテーションが付いています。つまり、アダプタのコンフィグレーションに何らかの変更が行われた場合は、このメソッドが呼び出されます。さらに、上記の例は、アダプタのコンフィグレーションの message プロパティ (拡張されたアダプタ コンフィグレーション ファイルで設定) が null または空のいずれでもないことを確認するチェックが、このメソッドによって実行されることを示しています。このプロパティが null または空である場合、メソッドは例外を送出します。

 


com.bea.wlevs.management.Rollback

ターゲット : メソッド

@Rollback アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。

コンポーネントの @Prepare メソッドが呼び出されて例外が送出された場合、Oracle CEP は @Rollback アノテーションが付いたメソッドを呼び出します。サーバは、該当するコンポーネントごとに @Rollback メソッドを呼び出します。

このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。

  public void methodName(AdapterConfigObject adapterConfig)

methodName はユーザがメソッドに付ける名前であり、AdapterConfigObject はアダプタのコンフィグレーション XML ファイル (アプリケーションと共にデプロイされる) の Java 表現です。このクラスのタイプは、デフォルトでは com.bea.wlevs.configuration.application.DefaultAdapterConfig ですが、アダプタのコンフィグレーションを拡張した場合には、拡張した XML ファイルを記述している XSD で指定したタイプになります。たとえば、HelloWorld のサンプルでは、タイプは com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig です。

実行時、Oracle CEP はこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の XML ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ ライフサイクル アノテーションを付けたアダプタ メソッドでクラスを使用して、アダプタのコンフィグレーションに関する情報を取得できます。

このメタデータ アノテーションに属性はありません。

以下のサンプル コードは、HelloWorld のサンプルで使用しているアダプタ コンポーネントのコードであり、@Rollback アノテーションの使用方法を示しています。ここでは、関連するコードのみを示します。

package com.bea.wlevs.adapter.example.helloworld;
...
import com.bea.wlevs.configuration.Activate;
import com.bea.wlevs.configuration.Prepare;
import com.bea.wlevs.configuration.Rollback;
import com.bea.wlevs.ede.api.Adapter;
import com.bea.wlevs.ede.api.EventSender;
import com.bea.wlevs.ede.api.EventSource;
import com.bea.wlevs.ede.api.SuspendableBean;
import com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig;
public class HelloWorldAdapter implements Runnable, Adapter, EventSource, Suspen
dableBean {
...
    @Rollback
public void rejectConfigurationChange(HelloWorldAdapterConfig adapterConfig) {
}

com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig クラスは、アダプタのコンフィグレーション XML ファイルの Java 表現です。Oracle CEP はアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。HelloWorld のサンプルでは、アダプタ コンフィグレーションが拡張されています。詳細については、com.bea.wlevs.management.Activate の例を参照してください。

この例では、rejectConfigurationChange メソッドに @Rollback アノテーションが付いています。つまり、これは @Prepare メソッドが例外を送出した場合に呼び出されるメソッドです。上記の例では、実際には何も起こりません。

 


com.bea.wlevs.util.Service

ターゲット : メソッド

アノテーションが付いたメソッド (一般的には JavaBean セッター メソッド) に OSGi サービス参照が必要であることを指定します。

属性

表 0-1 com.bea.wlevs.util.Service JWS アノテーション タグの属性
名前
説明
データ型
必須/省略可能
serviceBeanName
挿入されたサービスをサポートする Bean の名前。null にできます。
String
省略可能
カーディナリティ
この属性の有効な値は次のとおりです。
  • ServiceCardinality.C0__1
  • ServiceCardinality.C0__N
  • ServiceCardinality.C1__1
  • ServiceCardinality.C1__N
デフォルト値は ServiceCardinality.C1__1 です。
enum
省略可能
contextClassloader
この属性の有効な値は次のとおりです。
  • ServiceClassloader.CLIENT
  • ServiceClassloader.SERVICE_PROVIDER
  • ServiceClassloader.UNMANAGED
デフォルト値は ServiceClassloader.CLIENT です。
enum
省略可能
timeout
サービス解決のタイムアウト (ミリ秒単位)。
デフォルト値は 30000 です。
int
省略可能
serviceType
挿入するサービスのインタフェース (またはクラス)。
デフォルト値は Service.class です。
Class
省略可能
filter
一致するサービスを絞り込むフィルタを指定します。値は null でもかまいません。
String
省略可能

次の例は、@Service アノテーションの使用方法を示しています。

    @Service(filter = "(Name=StockDs)")
public void setDataSourceService(DataSourceService dss) {
initStockTable(dss.getDataSource());
}

  ページの先頭       前  次