2 アダプタおよびイベントBeanの拡張
XMLスキーマ定義(XSD)またはJava Architecture for XML Binding (JAXB)注釈を使用して、アダプタおよびイベントBeanのデフォルトの構成を拡張できます。
この章の内容は次のとおりです。
2.1 注釈
コンポーネントの構成を拡張する最も簡単で効率的な方法は、JAXB javax.xml.bind.annotationパッケージで指定されている注釈を使用して、カスタム・アダプタまたはイベントBean JavaBeanクラスに注釈を付けることです。
詳細は、http://docs.oracle.com/javaee/7/api/javax/xml/bind/annotation/package-summary.htmlおよびhttps://jaxb.java.net/を参照してください。
注釈によるコンポーネント構成の拡張
2.2 XSDファイル
XMLスキーマ定義(XSD)ファイルで、アダプタまたはイベントBean構成を拡張できます。新しい各要素にname属性が必要であること以外はほぼ制限なしで、必要な数のカスタム要素をXSDファイルに追加します。
名前空間を設定する場合にelementFormDefault="unqualified"を使用することで、ローカルで定義した要素に名前空間を含めず、グローバル要素でtargetNamespaceを利用することをお薦めします。これによって、接頭辞を過剰に付けなくても、スキーマ間の名前の競合を回避できます。詳細は、http://www.xfront.com/HideVersusExpose.htmlを参照してください。
アプリケーション・スキーマを拡張しないカスタム・スキーマを手動で生成することもできます。これによって、他のすべての要素を定義しなくても独自の名前空間でカスタム構成を作成できます。このメカニズムは、スキーマ生成後の注釈付けの方法と同様に機能します。
2.2.2 XSDファイルの作成
新しいXSDファイルはwlevs_application_config.xsd XSDを拡張し、アダプタの新しい構成要素などの新しいカスタム情報を追加します。カスタム情報には標準のXSD構文を使用します。
「XSDスキーマ・ファイルの完全な例」のXSDを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお薦めします。新しい構成要素を追加するとともに、他の変更点としては、生成されたJavaコードのパッケージ名の変更やカスタム・アダプタの要素名の変更などがあります。カスタム・アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。
新しいXSDファイルの作成
2.2.3 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/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/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>2.3 コンポーネント構成へのアクセス
アプリケーションをデプロイする場合、Oracle Stream Analyticsでは、コンポーネント構成ファイルに指定された各コンポーネントの構成が、JAXB標準に準拠したJavaオブジェクトにマップされます。各コンポーネントの構成データは単一のXML要素に含まれるため、JAXBでもこの構成データを表現する単一のJavaクラスが生成されます。コンポーネントの初期化時およびコンポーネントの構成が動的に変更されるたびに、Oracle Stream Analyticsでは実行時にこのJavaクラスのインスタンスがコンポーネント(プロセッサ、チャネルまたはアダプタ)に渡されます。
このコンポーネント構成には、実行時に次の方法でアクセスできます。
-
「リソース・インジェクション」で説明するとおり、リソース・インジェクションを使用します。
これは実行時の、最も簡単で効率的なコンポーネント構成へのアクセス方法です。
-
「ライフサイクル・コールバック」で説明するとおり、コールバックを使用します。
これは、実行時にコンポーネント構成にアクセスするための最も柔軟な方法です。リソース・インジェクションがニーズに合わない場合は、このオプションを検討してください。
注意:
プロバイダからのスキーマを使用する必要があるクライアントは、プロバイダのバンドルから適切なパッケージをインポートし、プロバイダのObjectFactoryがクライアント・バンドルに表示されるようにする必要があります。
2.3.1 リソース・インジェクション
デフォルトでは、Oracle Event ProcessingはそのJavaBeanプロパティの直接インジェクション、およびその後の構成コールバックにより、アダプタおよびイベントBeanを構成します。
注釈を付けられたカスタム・アダプタ実装を検討します。
@XmlType(name="SampleAdapterConfig", namespace="http://www.oracle.com/ns/cep/config/sample")
public class SampleAdapterImpl implements Adapter {
private boolean doit;
public void setDoit(boolean doit) {
this.doit = doit;
}
public boolean getDoit() {
return doit;
}
}
このカスタム・アダプタのインスタンスの構成ファイルを検討します。
<?xml version="1.0" encoding="UTF-8"?> <app:config xmlns:app="http://www.bea.com/ns/wlevs/config/application" xmlns:sample="http://www.oracle.com/ns/cep/config/sample" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.bea.com/ns/wlevs/config/application http://www.bea.com/ns/wlevs/config/application/wlevs_application_config.xsd http://www.oracle.com/ns/cep/config/sample http://www.oracle.com/ns/cep/config/sample/ocep_sample_config.xsd"> <processor> <name>clusterProcessor</name> <rules> <query id="clusterRule"><![CDATA[ select * from clusterInstream [Now] ></query> </rules> </processor> <sample:adapter> <name>myadapter</name> <config> <doit>true</doit> </config> </sample:adapter> </app:config>
実行時に、Oracle Event Processingは、アダプタ・インスタンスのsetDoItメソッドをコールし、引数の値として値trueを渡します。
注意:
拡張コンポーネント構成スキーマでは、ネストされているconfig要素が必要です。
2.3.2 ライフサイクル・コールバック
アダプタまたはイベントBean実装では、メタデータ注釈を使用して、実行時にOracle Event Processingで起動されるJavaメソッドを指定できます。Oracle Event Processingは、構成Javaクラスのインスタンスを、指定したそれらのメソッドに渡します。これらのメソッドをプログラミングし、アダプタまたはイベントBeanについて特定の実行時の構成情報を取得できます。
次の例では、アダプタ構成が最初に有効化されたときに起動されるメソッドを指定するよう、@Activate注釈でactivateAdapterメソッドに注釈を付ける方法を示します。
@Activate
public void activateAdapter(HelloWorldAdapterConfig adapterConfig) {
this.message = adapterConfig.getMessage();
}
デフォルトでは、アダプタ構成のJavaクラスのデータ型はcom.bea.wlevs.configuration.application.DefaultAdapterConfigです。構成XMLファイルを記述する独自のXSDファイルを作成してアダプタ(またはイベントBean)の構成を拡張した場合は、XSDファイルで型を指定します。上記の例では、Java構成オブジェクトのデータ型はcom.bea.wlevs.example.helloworld.HelloWorldAdapterConfigです。
2.3.3 ライフサイクル・コールバック注釈
次のメタデータ注釈を使用して、ライフサイクル・コールバック・メソッドを指定できます。
-
com.bea.wlevs.management.Activate: 構成がアクティブ化されたときに起動されるメソッドを指定します。 -
com.bea.wlevs.management.Prepare: 構成が準備されたときに起動されるメソッドを指定します。 -
com.bea.wlevs.management.Rollback: 例外が原因でアダプタが停止した場合に起動されるメソッドを指定します。
2.3.4 アダプタおよびイベントBeanのライフサイクル
Oracle Event Processingでは、アダプタおよびイベントBean作成のために次のライフサイクルを使用します。
-
アダプタまたはイベントBeanインスタンスを作成します。
-
静的プロパティを注入します。
-
afterPropertiesSetメソッドをコールします。 -
フェーズを準備します。
-
1つ以上の構成引数のある
@Prepareがある場合は、これを呼び出します。ない場合は、構成プロパティを直接インジェクトします。 -
引数のない
@Prepareがある場合は、これを呼び出します。
-
-
フェーズをアクティブ化します。
-
1つ以上の構成引数のある
@Activateがある場合は、これを呼び出します。 -
引数のない
@Activateがある場合は、これを呼び出します。
-
-
afterConfigurationActiveをコールします。 -
その他の構成で続行します。