この付録では、アダプタ・ライフサイクルの段階を処理するメソッド、OSGiサービス参照が挿入されたメソッドを指定し、設計時にリソース・アクセスを構成するのに使用できるOracle Event ProcessingのJava注釈へのリファレンスを示します。
この付録の内容は次のとおりです。
Oracle Event Processingメタデータ注釈は、Oracle Event Processingコンポーネントの構成にアクセスするために使用します。Oracle Event Processingでは、次の注釈が用意されています。
詳細は、次を参照してください:
次の注釈を使用して、アダプタのライフサイクルの様々な段階で(具体的には、アダプタの構成が準備されたとき、構成がアクティブ化されたとき、および例外のためにアダプタが終了したときに)処理を行う、アダプタのJava実装のメソッドを指定します。
com.bea.wlevs.util.Service注釈では、OSGiサービス参照が挿入されたコンポーネントのメソッドを指定します。
次の注釈では、設計時にリソース・アクセス、およびその対応するデプロイメントXMLを構成し、デプロイ時にこの構成をオーバーライドします。
javax.annotation.Resource
詳細は、1.4.3項「Oracle Event Processingリソース・アクセスの構成」を参照してください。
対象:メソッド
@Activate注釈は、Javaファイル内で使用するアダプタ・ライフサイクル注釈の1つであり、Oracle Event Processingでアダプタへの構成情報の送信に使用されるメソッドを明示的に指定するカスタム・アダプタを実装します。
Oracle Event Processingで@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 Event Processingはこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の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 Event Processingは、アプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。たとえば、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 Event Processingでアダプタへの構成情報の送信に使用されるメソッドを明示的に指定するカスタム・アダプタを実装します。
コンポーネントの状態が特定の構成変さらによって更新された場合、Oracle Event Processingは@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 Event Processingはこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の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 Event Processingはアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。HelloWorldのサンプルでは、アダプタ構成が拡張されています。詳細は、付録I 「com.bea.wlevs.configuration.Activate」の例を参照してください。
上記のアダプタのJavaコードでは、checkConfigurationメソッドに@Prepare注釈が付いています。つまり、アダプタの構成になんらかの変更が行われた場合は、このメソッドが呼び出されます。さらに、上記の例は、アダプタの構成のmessageプロパティ(拡張されたアダプタ構成ファイルで設定)がnullまたは空のいずれでもないことを確認するチェックが、このメソッドによって実行されることを示しています。このプロパティがnullまたは空である場合、メソッドは例外をスローします。
対象:メソッド
@Rollback注釈は、Javaファイル内で使用するアダプタ・ライフサイクル注釈の1つであり、Oracle Event Processingでアダプタへの構成情報の送信に使用されるメソッドを明示的に指定するカスタム・アダプタを実装します。
コンポーネントの@Prepareメソッドが呼び出されて例外が送出された場合、Oracle Event Processingは@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 Event Processingはこのクラスのインスタンスを自動的に作成し、作成したインスタンスに実際の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 Event Processingはアプリケーションがデプロイされるときにこのクラスのインスタンスを自動的に作成します。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());
}
その他の例は、9.4項「イベント型リポジトリにアクセス」を参照してください。