XMLスキーマ定義(XSD)またはJava Architecture for XML Binding (JAXB)注釈を使用して、アダプタおよびイベントBeanのデフォルトの構成を拡張できます。
この章の内容は次のとおりです。
コンポーネントの構成を拡張する最も簡単で効率的な方法は、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/を参照してください。
注釈によるコンポーネント構成の拡張
XMLスキーマ定義(XSD)ファイルで、アダプタまたはイベントBean構成を拡張できます。新しい各要素にname
属性が必要であること以外はほぼ制限なしで、必要な数のカスタム要素をXSDファイルに追加します。
名前空間を設定する場合にelementFormDefault="unqualified"
を使用することで、ローカルで定義した要素に名前空間を含めず、グローバル要素でtargetNamespace
を利用することをお薦めします。これによって、接頭辞を過剰に付けなくても、スキーマ間の名前の競合を回避できます。詳細は、http://www.xfront.com/HideVersusExpose.htmlを参照してください。
アプリケーション・スキーマを拡張しないカスタム・スキーマを手動で生成することもできます。これによって、他のすべての要素を定義しなくても独自の名前空間でカスタム構成を作成できます。このメカニズムは、スキーマ生成後の注釈付けの方法と同様に機能します。
新しいXSDファイルはwlevs_application_config.xsd
XSDを拡張し、アダプタの新しい構成要素などの新しいカスタム情報を追加します。カスタム情報には標準のXSD構文を使用します。
「XSDスキーマ・ファイルの完全な例」のXSDを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお薦めします。新しい構成要素を追加するとともに、他の変更点としては、生成されたJavaコードのパッケージ名の変更やカスタム・アダプタの要素名の変更などがあります。カスタム・アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。
新しい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>
アプリケーションをデプロイする場合、Oracle Stream Analyticsでは、コンポーネント構成ファイルに指定された各コンポーネントの構成が、JAXB標準に準拠したJavaオブジェクトにマップされます。各コンポーネントの構成データは単一のXML要素に含まれるため、JAXBでもこの構成データを表現する単一のJavaクラスが生成されます。コンポーネントの初期化時およびコンポーネントの構成が動的に変更されるたびに、Oracle Stream Analyticsでは実行時にこのJavaクラスのインスタンスがコンポーネント(プロセッサ、チャネルまたはアダプタ)に渡されます。
このコンポーネント構成には、実行時に次の方法でアクセスできます。
「リソース・インジェクション」で説明するとおり、リソース・インジェクションを使用します。
これは実行時の、最も簡単で効率的なコンポーネント構成へのアクセス方法です。
「ライフサイクル・コールバック」で説明するとおり、コールバックを使用します。
これは、実行時にコンポーネント構成にアクセスするための最も柔軟な方法です。リソース・インジェクションがニーズに合わない場合は、このオプションを検討してください。
注意:
プロバイダからのスキーマを使用する必要があるクライアントは、プロバイダのバンドルから適切なパッケージをインポートし、プロバイダのObjectFactory
がクライアント・バンドルに表示されるようにする必要があります。
デフォルトでは、Oracle Stream Analyticsはその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 Stream Analyticsは、アダプタ・インスタンスのsetDoIt
メソッドをコールし、引数の値として値true
を渡します。
注意:
拡張コンポーネント構成スキーマでは、ネストされているconfig
要素が必要です。
アダプタまたはイベントBean実装では、メタデータ注釈を使用して、実行時にOracle Stream Analyticsで起動されるJavaメソッドを指定できます。Oracle Stream Analyticsは、構成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
です。
次のメタデータ注釈を使用して、ライフサイクル・コールバック・メソッドを指定できます。
com.bea.wlevs.management.Activate
: 構成がアクティブ化されたときに起動されるメソッドを指定します。
com.bea.wlevs.management.Prepare
: 構成が準備されたときに起動されるメソッドを指定します。アダプタ・コードでこの注釈を使用する方法の詳細は、Oracle Stream Analyticsイベント処理スタート・ガイドを参照してください。
com.bea.wlevs.management.Rollback
: 例外が原因でアダプタが停止した場合に起動されるメソッドを指定します。
Oracle Stream Analyticsでは次のライフ・サイクルを使用してアダプタおよびイベントBeanを作成します。
アダプタまたはイベントBeanインスタンスを作成します。
静的プロパティをインジェクトします。
afterPropertiesSet
メソッドをコールします。
フェーズを準備します。
1つ以上の構成引数のある@Prepare
がある場合は、これを呼び出します。ない場合は、構成プロパティを直接インジェクトします。
引数のない@Prepare
がある場合は、これを呼び出します。
フェーズをアクティブ化します。
1つ以上の構成引数のある@Activate
がある場合は、これを呼び出します。
引数のない@Activate
がある場合は、これを呼び出します。
afterConfigurationActive
を呼び出します。
その他の構成で続行します。