この節では、次の項目について説明します。
Oracle CEPメタデータ注釈は、Oracle CEPコンポーネントの構成にアクセスするために使用されます。Oracle CEPでは、次の注釈が用意されています。
詳細は、次を参照してください:
次の注釈を使用して、アダプタのライフサイクルの様々な段階で(具体的には、アダプタの構成が準備されたとき、構成がアクティブ化されたとき、および例外のためにアダプタが終了したときに)処理を行う、アダプタのJava実装のメソッドを指定します。
com.bea.wlevs.util.Service注釈では、OSGiサービス参照が挿入されたコンポーネントのメソッドを指定します。
次の注釈では、設計時にリソース・アクセス、およびその対応するデプロイメントXMLを構成し、デプロイ時にこの構成をオーバーライドします。
javax.annotation.Resource
詳細は、1.4項「Oracle CEPリソース・アクセスの構成」を参照してください。
@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ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ・ライフサイクル注釈を付けたアダプタ・メソッドでクラスを使用して、アダプタの構成に関する情報を取得できます。
このメタデータ注釈に属性はありません。
例I-1では、HelloWorldの例のアダプタ・コンポーネントにおける@Activate
注釈の使用方法について説明します。関連するコードのみを示します。
例I-1 @Activate注釈
package com.bea.wlevs.adapter.example.helloworld; ... import com.bea.wlevs.configuration.Activate; import com.bea.wlevs.ede.api.RunnableBean; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; public class HelloWorldAdapter implements RunnableBean, StreamSource { ... @Activate public void activateAdapter(HelloWorldAdapterConfig adapterConfig) { this.message = adapterConfig.getMessage(); } ... }
com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig
クラスは、アダプタの構成XMLファイルのJava表現です。HelloWorldの例では、構成が拡張されています。つまり、カスタムXSDファイルでXMLファイルを記述しています。例I-2では、XSDファイルは、結果のJava構成オブジェクトの完全修飾名(太字の部分)も指定しています。
例I-2 HelloWorldAdapterConfig
<?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="channel" 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 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ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ・ライフサイクル注釈を付けたアダプタ・メソッドでクラスを使用して、アダプタの構成に関する情報を取得できます。
このメタデータ注釈に属性はありません。
例I-3 次の例はHelloWorldの例のアダプタ・コンポーネントで使用しているコードであり、@Prepare
注釈の使用方法を示しています。関連するコードのみを示します。
例I-3 @Prepare注釈
package com.bea.wlevs.adapter.example.helloworld; ... import com.bea.wlevs.configuration.Prepare; import com.bea.wlevs.ede.api.RunnableBean; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; public class HelloWorldAdapter implements RunnableBean, StreamSource { ... @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の例では、アダプタ構成が拡張されています。詳細は、付録I「com.bea.wlevs.configuration.Activate」の例を参照してください。
上記のアダプタのJavaコードでは、checkConfiguration
メソッドに@Prepare
注釈が付いています。つまり、アダプタの構成になんらかの変更が行われた場合は、このメソッドが呼び出されます。さらに、上記の例は、アダプタの構成のmessage
プロパティ(拡張されたアダプタ構成ファイルで設定)がnullまたは空のいずれでもないことを確認するチェックが、このメソッドによって実行されることを示しています。このプロパティがnullまたは空である場合、メソッドは例外をスローします。
@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ファイルからデータを設定して、インスタンスをアダプタに渡します。その後、アダプタ・ライフサイクル注釈を付けたアダプタ・メソッドでクラスを使用して、アダプタの構成に関する情報を取得できます。
このメタデータ注釈に属性はありません。
例I-4 次のサンプル・コードは、HelloWorldの例で使用しているアダプタ・コンポーネントのコードであり、@Rollback
注釈の使用方法を示しています。ここでは、関連するコードのみを示します。
例I-4 @Rollback注釈
package com.bea.wlevs.adapter.example.helloworld; ... import com.bea.wlevs.configuration.Rollback; import com.bea.wlevs.ede.api.RunnableBean; import com.bea.wlevs.ede.api.StreamSender; import com.bea.wlevs.ede.api.StreamSource; import com.bea.wlevs.event.example.helloworld.HelloWorldEvent; public class HelloWorldAdapter implements RunnableBean, StreamSource { ... @Rollback public void rejectConfigurationChange(HelloWorldAdapterConfig adapterConfig) { }
com.bea.wlevs.adapter.example.helloworld.HelloWorldAdapterConfig
クラスは、アダプタの構成XMLファイルのJava表現です。Oracle CEPはアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。HelloWorldの例では、アダプタ構成が拡張されています。詳細は、付録I「com.bea.wlevs.configuration.Activate」の例を参照してください。
このサンプルでは、rejectConfigurationChange
メソッドに@Rollback
注釈が付いています。つまり、これは@Prepare
メソッドが例外を送出した場合に呼び出されるメソッドです。上記の例では、実際には何も起こりません。
注釈が付いたメソッド(一般的にはJavaBeanセッター・メソッド)にOSGiサービス参照が必要であることを指定します。
表I-1では、com.bea.wlevs.util.Service
JWS注釈の属性について説明します。
表I-1 com.bea.wlevs.util.Service JWS注釈タグの属性
名前 | 説明 | データ型 | 必須? |
---|---|---|---|
|
挿入されたサービスをサポートするBeanの名前。nullにできます。 |
|
いいえ。 |
|
この属性の有効な値は次のとおりです:
デフォルト値は |
|
いいえ。 |
|
この属性の有効な値は次のとおりです:
デフォルト値は |
|
いいえ。 |
|
サービス解決のタイムアウト(ミリ秒単位)。 デフォルト値は30000です。 |
|
いいえ。 |
|
挿入するサービスのインタフェース(またはクラス)。 デフォルト値は |
|
いいえ。 |
|
一致するサービスを絞り込むフィルタを指定します。値は |
|
いいえ。 |
例I-5 では、@Service
注釈の使用方法について説明します。
例I-5 @Service注釈
@Service(filter = "(Name=StockDs)") public void setDataSourceService(DataSourceService dss) { initStockTable(dss.getDataSource()); }
その他の例は、2.7項「イベント型リポジトリにアクセス」を参照してください。