![]() ![]() ![]() ![]() |
Oracle Complex Event Processing (略称 Oracle CEP) メタデータ アノテーションは、コンポーネントのコンフィグレーションにアクセスするために使用します。
以下の 3 つのアノテーションを使用して、アダプタのライフサイクルのさまざまな段階で (具体的には、アダプタのコンフィグレーションが準備されたとき、コンフィグレーションがアクティブ化されたとき、および例外のためにアダプタが終了したときに) 処理を行う、アダプタの Java 実装のメソッドを指定します。
com.bea.wlevs.util.Service アノテーションでは、OSGi サービス参照が挿入されたコンポーネントのメソッドを指定します。
@Activate
アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。
Oracle CEP で @Activate
アノテーションを付けたメソッドが呼び出されるのは、@Prepare
アノテーションを付けたすべてのメソッドがサーバによって呼び出された後、正常に実行された場合に限ります。通常、@Activate
メソッドは、アダプタ実装の残りの部分で使用するために、アダプタのコンフィグレーション データを実際に取得する場合に使用します。
このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。
public voidmethodName
(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:
です。取得したこの値をアダプタ実装ファイルの主要部分で使用します。
@Prepare
アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。
コンポーネントの状態が特定のコンフィグレーション変更によって更新された場合、Oracle CEP は @Prepare
アノテーションが付いたメソッドを呼び出します。
このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。
public voidmethodName
(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 または空である場合、メソッドは例外を送出します。
@Rollback
アノテーションは、Java ファイル内で使用するアダプタ ライフサイクル アノテーションの 1 つであり、Oracle CEP でアダプタへのコンフィグレーション情報の送信に使用されるメソッドを明示的に指定するカスタム アダプタを実装します。
コンポーネントの @Prepare
メソッドが呼び出されて例外が送出された場合、Oracle CEP は @Rollback
アノテーションが付いたメソッドを呼び出します。サーバは、該当するコンポーネントごとに @Rollback
メソッドを呼び出します。
このアノテーションを付けるメソッドは、シグネチャを次のようにする必要があります。
public voidmethodName
(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
メソッドが例外を送出した場合に呼び出されるメソッドです。上記の例では、実際には何も起こりません。
アノテーションが付いたメソッド (一般的には JavaBean セッター メソッド) に OSGi サービス参照が必要であることを指定します。
次の例は、@Service
アノテーションの使用方法を示しています。
@Service(filter = "(Name=StockDs)")
public void setDataSourceService(DataSourceService dss) {
initStockTable(dss.getDataSource());
}
![]() ![]() ![]() |