この章では次について説明します:
アダプタとイベントBeanにはデフォルトの構成データがあります。このデフォルト構成は通常、単純な基本的アプリケーションに適しています。
ただし、XMLスキーマ定義(XSD)スキーマの使用によって、Oracle CEPで提供される組込みのXMLタイプを拡張するアダプタ構成ファイルの新しいXML形式を指定して、この構成を拡張することもできます。XSDスキーマを拡張することで、任意の数の新しい要素をアダプタ構成に追加できます。新しい要素にname
属性を指定する必要がある他は制限もほとんどありません。
この機能は、XSDやJava Architecture for XML Binding (JAXB)などの標準の技術に基づいています。
コンポーネント構成は、次の方法で拡張できます。
javax.xml.bind.annotation
で指定する注釈を使用した、アダプタまたはイベントBean Javaクラスへの注釈付け
19.1.1項「注釈を使用したコンポーネント構成の拡張」を参照してください。
手動によるXSDの生成
19.1.2項「XSDを使用したコンポーネント構成の拡張」を参照してください。
アプリケーション・スキーマを拡張しないカスタム・スキーマの手動生成
これにより、他の要素を定義せずに、独自のネームスペースにカスタム構成を作成できます。このメカニズムは、スキーマ生成後の注釈付けの方法と同様に機能します。
詳細については、次を参照してください。
コンポーネント構成を拡張する最も簡単で効率的な方法は、javax.xml.bind.annotation
で指定する注釈を使用して、アダプタまたはイベントBean Javaクラスに注釈を付けることです。
Oracle CEPでは、EPN構成ファイルの複数のネームスペースの包括、およびクライアント・バンドルではなく提供されているバンドルからの構成情報のソーシングをサポートしています。Oracle CEPではアクセス可能なclass-spaceの複数のObjectFactories
がスキャンされ、このそれぞれがcreateConfig
によって初期化されます。
スキーマ検索には、アダプタ・バンドル内のwlevs:factory
要素のprovider-schema
子要素も含まれます。独自のバンドルでアダプタを定義している場合は、provider-bundle
プロパティを定義していれば、そのバンドルにスキーマを格納することができます。
Oracleでは、elementFormDefault="unqualified"
を使用して、ローカルで定義した要素にネームスペースを含まず、グローバル要素でtargetNamespace
を利用することをお薦めします。これによって、過剰にプレフィクスを付けなくても、スキーマ間の名前の重複を回避することができます。
詳細は、http://www.xfront.com/HideVersusExpose.html
を参照してください。
詳細については、次を参照してください。
次のいずれかの方法で、コンポーネント構成を拡張することができます。
詳細は、19.1項「コンポーネント構成の拡張の概要」を参照してください。
コンポーネント構成を拡張する最も簡単で効率的な方法は、アダプタまたはイベントBean Javaクラスに注釈を付けることです。
また、19.2.2項「XSDを使用したコンポーネント構成の拡張方法」の説明のとおり、独自のXSDを作成してコンポーネント構成を拡張できます。
詳細は、19.1.1項「注釈を使用したコンポーネント構成の拡張」を参照してください。
注釈を使用したコンポーネント構成を拡張する手順:
カスタム・アダプタまたはイベントBean Javaクラスを実装します。
詳細については、次を参照してください。
javax.xml.bind.annotation
で指定した注釈を使用して、カスタム・アダプタまたはイベントBeanの属性に注釈を付け、コンポーネント構成を指定します。
重要なjavax.xml.bind.annotation
注釈には、次のものが含まれます。
@XmlElement
: プロパティはコンポーネント構成のオプション部分です。
@XmlElement(required=true)
: プロパティはコンポーネント構成の必須部分です。
@XmlTransient
: プロパティはコンポーネント構成の一部ではありません。
@XmlJavaTypeAdapter
: これで注釈を付けられたプロパティ要素によってカスタム処理を指定し、大部分のJavaデータ型を適応させることができます。
注意: @XmlJavaTypeAdapter を幅広く活用する必要がある場合は、19.2.2項「XSDを使用したコンポーネント構成の拡張方法」の説明のとおり、独自のカスタム・スキーマの定義を考慮します。 |
注意: 注釈のないプロパティは、オプションの構成プロパティとみなされます(デフォルト:@XmlElement )。 |
例19-1では、次を指定するためjavax.xml.bind.annotation
注釈によって注釈を付けられたカスタム・アダプタ実装を示します。
count
: コンポーネント構成の一部ではありません。
doit
: コンポーネント構成の必須部分です。
size
: コンポーネント構成の必須部分です。インスタンス・プロパティhowBig
にマップされます。
例19-1 注釈を付けられたカスタム・アダプタ実装
@XmlType(name="SampleAdapterConfig", namespace="http://www.oracle.com/ns/cep/config/sample") public class SampleAdapterImpl implements Adapter { @XmlTransient private int count; @XmlElement(name="size") private int howBig; @XmlElement(required=true) private boolean doit; ... public void setDoit(boolean doit) { this.doit = doit; } public boolean getDoit() { return doit; } }
カスタム・アダプタまたはイベントBeanコード内で、19.3項「カスタム・アダプタまたはイベントBeanの構成へのプログラムからのアクセス」の説明のとおり、拡張された構成にアクセスします。
アプリケーションのカスタム・コンポーネントを記述するコンポーネント構成XMLファイルを変更します。
詳細は、14.5項「カスタム・アダプタ・コンポーネント構成ファイルの構成」を参照してください。
アプリケーションのコンポーネントを記述するコンポーネント構成XMLファイルを作成する場合は、必ず拡張されたXSDファイルを説明として使用します。また、デフォルトのスキーマではなく、必ずこのスキーマのネームスペースを識別するようにします。
例19-2は、例19-1のカスタム・アダプタのコンポーネント構成ファイルを示します。
例19-2 拡張コンポーネント構成: 注釈
<?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> <size>15</size> <!-- optional --> <doit>true</doit> <!-- required --> </config> </sample:adapter> </app:config>
アプリケーションをパッケージ化し、デプロイします。
詳細は、第24章「Oracle CEPアプリケーションのアセンブルとデプロイ」を参照してください。
カスタム・アダプタまたはイベントBeanのコンポーネント構成は、独自のXSDを使用して拡張できます。
また、19.2.1項「注釈を使用したコンポーネント構成の拡張方法」の説明のとおり、アダプタまたはイベントBean Javaクラスに注釈をつけて、コンポーネント構成を拡張できます。
詳細は、19.1.2項「XSDを使用したコンポーネント構成の拡張」を参照してください。
XSDを使用したコンポーネント構成を拡張する手順:
拡張されたアダプタまたはイベントBean構成を記述する新規XSDスキーマ・ファイルを作成します。
このXSDファイルには、コンポーネントを記述するのにOracle CEPで定義されている組込みのXSDタイプを通常使用する場合でも、アプリケーションの他のコンポーネント(プロセッサやストリーム)の説明も含まれている必要があります。
19.2.2.1項「XSDスキーマ・ファイルの作成」を参照してください。
アプリケーション・ビルド・プロセスの一部として、SunのGlassFishリファレンス実装のcom.sun.tools.xjc.XJCTask
AntタスクなどのJAXBバインディング・コンパイラを使用して、XSDスキーマ・タイプのJava表現を生成します。ユーザーの利便を図るために、このAntタスクはOracle CEP配布に含まれています。
次のサンプルbuild.xml
ファイルは、この方法を示しています。
<property name="base.dir" value="." /> <property name="output.dir" value="output" /> <property name="sharedlib.dir" value="${base.dir}/../../../../../modules" /> <property name="wlrtlib.dir" value="${base.dir}/../../../../modules"/> <path id="classpath"> <pathelement location="${output.dir}" /> <fileset dir="${sharedlib.dir}"> <include name="*.jar" /> </fileset> <fileset dir="${wlrtlib.dir}"> <include name="*.jar"/> </fileset> </path> <taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask"> <classpath refid="classpath" /> </taskdef> <target name="generate" depends="clean, init"> <copy file="../../../../xsd/wlevs_base_config.xsd" todir="src/main/resources/extension" /> <copy file="../../../../xsd/wlevs_application_config.xsd" todir="src/main/resources/extension" /> <xjc extension="true" destdir="${generated.dir}"> <schema dir="src/main/resources/extension" includes="helloworld.xsd"/> <produces dir="${generated.dir}" includes="**/*.java" /> </xjc> </target>
この例では、拡張されたXSDファイルはhelloworld.xsd
です。helloworld.xsd
はOracle CEP XSDファイルをインポートするため、ビルド・プロセスによってOracle CEP XSDファイル(wlevs_base_config.xsd
およびwlevs_application_config.xsd
)がhelloworld.xsd
ファイルと同じディレクトリにコピーされます。
詳細は、https://jaxb.dev.java.net/jaxb20-ea/docs/xjcTask.html
を参照してください。
生成されたこれらのJavaファイルをクラスにコンパイルします。
コンパイルされたJavaクラス・ファイルをアプリケーション・バンドルにパッケージ化します。
24.2項「Oracle CEPアプリケーションのアセンブル」を参照してください。
カスタム・アダプタまたはイベントBeanをプログラミングします。
詳細については、次を参照してください。
カスタム・アダプタまたはイベントBeanコード内で、19.3項「カスタム・アダプタまたはイベントBeanの構成へのプログラムからのアクセス」の説明のとおり、拡張された構成にアクセスします。
アプリケーションのコンポーネントを記述するコンポーネント構成XMLファイルを作成する場合は、必ず拡張されたXSDファイルを説明として使用します。また、デフォルトのスキーマではなく、必ずこのスキーマのネームスペースを識別するようにします。
例19-3は19.2.2.1項「XSDスキーマ・ファイルの作成」で作成したXSDのコンポーネント構成ファイルを示しています。
新しいXSDスキーマ・ファイルはwlevs_application_config.xsd
XSDスキーマを拡張し、アダプタの新規構成要素などの新しいカスタム情報を追加します。カスタム情報には標準のXSDスキーマ構文を使用します。
19.2.2.1.1項「拡張されたXSDスキーマ・ファイルの完全な例」のXSDスキーマを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお薦めします。新しい構成要素を追加するとともに、他の変更点としては、生成されたJavaコードのパッケージ名の変更やカスタム・アダプタの要素名の変更などがあります。カスタム・アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。
詳細は、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。
新しいXSDスキーマ・ファイルを作成するには:
任意のXMLエディタを使用して、特にJAXBを含む必須のネームスペースを使用して基本の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:schema>
wlevs_application_config.xsd
XSDスキーマをインポートします。
<xs:import namespace="http://www.bea.com/ns/wlevs/config/application" schemaLocation="wlevs_application_config.xsd"/>
また、wlevs_application_config.xsd
によりwlevs_base_config.xsd
XSDファイルがインポートされます。
complexType>
XSD要素を使用して、拡張されたアダプタ構成のXMLタイプを記述します。
新しいタイプは、wlevs_application_config.xsd
に定義されたAdapterConfig
タイプを拡張する必要があります。AdapterConfig
はConfigurationObject
を拡張します。次に、必要に応じて、基本のアダプタ構成に新しい要素または属性を追加できます。たとえば、次のタイプHelloWorldAdapterConfig
は、基本のアダプタ構成にmessage
要素を追加します。
<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>
トップレベル要素を定義し、config
という名前にする必要があります。
config
要素の定義では、アプリケーションのコンポーネントに対応する子要素のシーケンスを定義します。要素名には任意の名前を付けることができますが、通常は構成するコンポーネント(adapter
、processor
、channel
)を示している必要があります。
各要素は、明示的にbase
属性値base:ConfigurationObject
でxs:extension
要素を使用するか、またはそれ自身がConfigurationObject
を拡張するXMLタイプを指定するかによって、ConfigurationObject
XMLタイプを拡張する必要があります。ConfigurationObject
XMLタイプは、wlevs_base_config.xsd
で定義され、name
という単一の属性を定義します。
アダプタ要素のタイプは、この方法の上記の手順で作成されたカスタム・タイプである必要があります。
プロセッサまたはストリームに対応するconfig
の子要素には、wlevs_application_config.xsd
に記述されている次の組込みXMLタイプを使用できます。
DefaultProcessorConfig
—デフォルト・プロセッサ構成の説明については、次を参照してください。
DefaultStreamConfig
—デフォルトのチャネル構成の記述は、9.1項「チャネル構成の概要」を参照してください。
例:
<xs:element name="config"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="adapter" type="HelloWorldAdapterConfig"/> <xs:element name="processor" type="wlevs:DefaultProcessorConfig"/> </xs:choice> </xs:complexType> </xs:element>
必要に応じてjxb:schemaBindings
のjxb:package>
子要素を使用して、生成されたJavaコードのパッケージ名を指定します。
<xs:annotation> <xs:appinfo> <jxb:schemaBindings> <jxb:package name="com.bea.adapter.wlevs.example.helloworld"/> </jxb:schemaBindings> </xs:appinfo> </xs:annotation>
次の拡張された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>
この節は、アダプタとイベントBeanの両方に当てはまります。簡略化のため、アダプタについてのみ説明します。
アプリケーションをデプロイする場合、Oracle CEPでは(コンポーネント構成XMLファイルに指定された)各コンポーネントの構成がJava Architecture for XML Binding (JAXB)標準を使用してJavaオブジェクトにマップされます(詳細は、https://jaxb.dev.java.net/
を参照)。各コンポーネントの構成データは単一のXML要素に含まれるため、JAXBでもこの構成データを表現する単一のJavaクラスが生成されます。コンポーネントの初期化時、およびコンポーネントの構成が動的に変更されるたびに、Oracle CEPでは実行時にこのJavaクラスのインスタンスがコンポーネント(プロセッサ、チャネル、またはアダプタ)に渡されます。
このコンポーネント構成には、実行時に次のいずれかの方法でアクセスできます。
19.3.1項「リソース・インジェクションを使用したコンポーネント構成へのアクセス方法」の説明のとおり、リソース・インジェクションを使用します。
これは実行時の、最も簡単で効率的なコンポーネント構成へのアクセス方法です。
19.3.2項「ライフサイクル・コールバックを使用したコンポーネント構成へのアクセス方法」の説明のとおり、コールバックを使用します。
これは、実行時にコンポーネント構成にアクセスするための最も柔軟な方法です。リソース・インジェクションを使用しても目的の達成が困難な場合は、このオプションを検討してください。
注意: アダプタ・プロバイダからのスキーマ使用を必要とするクライアントは、プロバイダのバンドルから適切なパッケージをインポートし、プロバイダのObjectFactory がクライアント・バンドルに表示されるようにする必要があります。 |
デフォルトでは、Oracle CEPはそのJava Beanプロパティの直接インジェクション、およびその後の通常の構成コールバックにより、アダプタを構成します。
例19-4に示すとおり、注釈付きカスタム・アダプタ実装を検討します。
例19-4 カスタム・アダプタ実装
@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; } }
例19-5に示すように、このカスタム・アダプタのインスタンスについて、コンポーネント構成ファイルを検討します。
例19-5 拡張コンポーネントの構成
<?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 CEPはJava Beanプロパティdoit
の値(true
)を挿入します。
詳細については、次を参照してください。
アダプタ実装では、メタデータ注釈を使用して、実行時にOracle CEPで起動されたJavaメソッドを指定することができます。
Oracle CEPは、構成Javaクラスのインスタンスを、指定したメソッドのインスタンスに渡します。アダプタについてこれらのメソッドをプログラミングし、指定の実行時間の構成を得ることができます。
次の例では、アダプタ構成が最初に有効化されたときに起動されるメソッドを指定するよう、@Activate
注釈でactivateAdapter
メソッドに注釈を付ける方法を示します。
@Activate public void activateAdapter(HelloWorldAdapterConfig adapterConfig) { this.message = adapterConfig.getMessage(); }
デフォルトでは、アダプタ構成のJavaクラスのデータ型はcom.bea.wlevs.configuration.application.DefaultAdapterConfig
です。ただし、構成XMLファイルを記述する独自のXSDファイルを作成してアダプタの構成を拡張した場合は、XSDファイルで型を指定します。上記の例では、Java構成オブジェクトのデータ型はcom.bea.wlevs.example.helloworld.HelloWorldAdapterConfig
です。
この項では次について説明します:
次のメタデータ注釈を使用して、様々なライフサイクル・コールバック・メソッドを指定できます。
com.bea.wlevs.management.Activate
: 構成がアクティブ化されたときに呼び出されるメソッドを指定します。
アダプタ・コードでこの注釈を使用する場合の詳細は、I.2項「com.bea.wlevs.configuration.Activate」を参照してください。
com.bea.wlevs.management.Prepare
: 構成が準備されたときに呼び出されるメソッドを指定します。
アダプタ・コードでこの注釈を使用する場合の詳細は、I.3項「com.bea.wlevs.configuration.Prepare」を参照してください。
com.bea.wlevs.management.Rollback
: 例外が原因でアダプタが停止した場合に呼び出されるメソッドを指定します。
アダプタ・コードでこの注釈を使用する場合の詳細は、I.4項「com.bea.wlevs.configuration.Rollback」を参照してください。
詳細は、19.3.2.2項「ライフサイクル」を参照してください。
Oracle CEPでは、カスタム・アダプタおよびイベントBeanのインストール中に、次のライフサイクルに従います。
アダプタまたはイベントBeanインスタンスの作成。
静的プロパティのインジェクト。
afterPropertiesSet
の呼出し。
フェーズの準備:
1つ以上の構成引数のある@Prepare
がある場合は、これを呼び出します。
ない場合は、構成プロパティを直接インジェクトします。
引数のない@Prepare
がある場合は、これを呼び出します。
フェーズの有効化:
1つ以上の構成引数のある@Activate
がある場合は、これを呼び出します。
引数のない@Activate
がある場合は、これを呼び出します。
afterConfigurationActive
を呼び出します。
その他の構成で続行します。