ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Complex Event Processing開発者ガイド
11gリリース1 (11.1.1.6.2) for Eclipse
B61654-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

19 コンポーネント構成の拡張

この章では、構成XMLを生成するためのJava注釈の使用に関する情報など、Oracle Complex Event Processing (Oracle CEP)で使用されるアダプタおよびイベントBeanのデフォルト構成を拡張するXMLスキーマの使用方法について説明します。

19.1 コンポーネント構成の拡張の概要

アダプタとイベントBeanにはデフォルトの構成データがあります。このデフォルト構成は通常、単純な基本的アプリケーションに適しています。

ただし、XMLスキーマ定義(XSD)スキーマの使用によってこの構成を拡張して、Oracle CEPで提供される組込みのXMLタイプを拡張するアダプタ構成ファイルの新しいXML形式を指定することもできます。XSDスキーマを拡張することで、任意の数の新しい要素をアダプタ構成に追加できます。新しい要素にname属性を指定する必要がある他は制限もほとんどありません。

この機能は、XSDやJava Architecture for XML Binding (JAXB)などの標準の技術に基づいています。

コンポーネント構成は、次の方法で拡張できます。

詳細は、次を参照してください:

19.1.1 注釈を使用したコンポーネント構成の拡張

コンポーネント構成を拡張する最も簡単で効率的な方法は、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.2 XSDを使用したコンポーネント構成の拡張

カスタム・コンポーネント構成をより詳細に制御するため、独自のXSDを作成して、コンポーネント構成を拡張することができます。

詳細は、次を参照してください:

19.2 コンポーネント構成の拡張

次のいずれかの方法で、コンポーネント構成を拡張することができます。

詳細は、19.1項「コンポーネント構成の拡張の概要」を参照してください。

19.2.1 注釈を使用したコンポーネント構成の拡張方法

コンポーネント構成を拡張する最も簡単で効率的な方法は、アダプタまたはイベントBean Javaクラスに注釈を付けることです。

また、19.2.2項「XSDを使用したコンポーネント構成の拡張方法」の説明のとおり、独自のXSDを作成してコンポーネント構成を拡張できます。

詳細は、19.1.1項「注釈を使用したコンポーネント構成の拡張」を参照してください。

注釈を使用したコンポーネント構成を拡張する手順:

  1. カスタム・アダプタまたはイベントBean Javaクラスを実装します。

    詳細は、次を参照してください:

  2. 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;
        }
    }
    
  3. カスタム・アダプタまたはイベントBeanコード内で、19.3項「カスタム・アダプタまたはイベントBeanの構成へのプログラムからのアクセス」の説明のとおり、拡張された構成にアクセスします。

  4. アプリケーションのカスタム・コンポーネントを記述するコンポーネント構成XMLファイルを変更します。

    詳細は、14.5項「カスタム・アダプタ・コンポーネント構成ファイルの構成」を参照してください。

  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>
    

    注意:

    拡張コンポーネント構成スキーマでは、例19-5に示すとおり、ネストされているconfig要素が必要です。


  6. アプリケーションをパッケージ化し、デプロイします。

    詳細は、第24章「Oracle CEPアプリケーションのアセンブルとデプロイ」を参照してください。

19.2.2 XSDを使用したコンポーネント構成の拡張方法

カスタム・アダプタまたはイベントBeanのコンポーネント構成は、独自のXSDを使用して拡張できます。

また、19.2.1項「注釈を使用したコンポーネント構成の拡張方法」の説明のとおり、アダプタまたはイベントBean Javaクラスに注釈をつけて、コンポーネント構成を拡張できます。

詳細は、19.1.2項「XSDを使用したコンポーネント構成の拡張」を参照してください。

XSDを使用したコンポーネント構成を拡張する手順:

  1. 拡張されたアダプタまたはイベントBean構成を記述する新規XSDスキーマ・ファイルを作成します。

    このXSDファイルには、コンポーネントを記述するのにOracle CEPで定義されている組込みのXSDタイプを通常使用する場合でも、アプリケーションの他のコンポーネント(プロセッサやストリーム)の説明も含まれている必要があります。

    19.2.2.1項「XSDスキーマ・ファイルの作成」を参照してください。

  2. アプリケーション・ビルド・プロセスの一部として、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ファイルと同じディレクトリにコピーされます。

    詳細は、http://jaxb.java.net/nonav/2.0.2/docs/xjcTask.htmlを参照してください。

  3. 生成されたこれらのJavaファイルをクラスにコンパイルします。

  4. コンパイルされたJavaクラス・ファイルをアプリケーション・バンドルにパッケージ化します。

    24.2項「Oracle CEPアプリケーションのアセンブル」を参照してください。

  5. カスタム・アダプタまたはイベントBeanをプログラミングします。

    詳細は、次を参照してください:

  6. カスタム・アダプタまたはイベントBeanコード内で、19.3項「カスタム・アダプタまたはイベントBeanの構成へのプログラムからのアクセス」の説明のとおり、拡張された構成にアクセスします。

  7. アプリケーションのコンポーネントを記述するコンポーネント構成XMLファイルを作成する場合は、必ず拡張されたXSDファイルを説明として使用します。また、デフォルトのスキーマではなく、必ずこのスキーマのネームスペースを識別するようにします。

    例19-319.2.2.1項「XSDスキーマ・ファイルの作成」で作成したXSDのコンポーネント構成ファイルを示しています。

    例19-3 拡張コンポーネント構成ファイル: XSD

    <?xml version="1.0" encoding="UTF-8"?>
    <helloworld:config
      xmlns:helloworld="http://www.bea.com/xml/ns/wlevs/example/helloworld">
      <adapter>
        <name>helloworldAdapter</name>
        <message>HelloWorld - the current time is:</message>
      </adapter>
    </helloworld:config>
    

19.2.2.1 XSDスキーマ・ファイルの作成

新しいXSDスキーマ・ファイルはwlevs_application_config.xsd XSDスキーマを拡張し、アダプタの新規構成要素などの新しいカスタム情報を追加します。カスタム情報には標準のXSDスキーマ構文を使用します。

19.2.2.1.1項「拡張されたXSDスキーマ・ファイルの完全な例」のXSDスキーマを基本テンプレートとして使用し、ニーズに合わせてコンテンツを変更することをお薦めします。新しい構成要素を追加するとともに、他の変更点としては、生成されたJavaコードのパッケージ名の変更やカスタム・アダプタの要素名の変更などがあります。カスタム・アダプタのみ、またはプロセッサなどの他のコンポーネントをスキーマで使用するかどうかを制御できます。

詳細は、B.2項「コンポーネント構成スキーマwlevs_application_config.xsd」を参照してください。

新しいXSDスキーマ・ファイルを作成するには:

  1. 任意の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>
    
  2. 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ファイルがインポートされます。

  3. complexType> XSD要素を使用して、拡張されたアダプタ構成のXMLタイプを記述します。

    新しいタイプは、wlevs_application_config.xsdに定義されたAdapterConfigタイプを拡張する必要があります。AdapterConfigConfigurationObjectを拡張します。次に、必要に応じて、基本のアダプタ構成に新しい要素または属性を追加できます。たとえば、次のタイプ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>
    
  4. トップレベル要素を定義し、configという名前にする必要があります。

    config要素の定義では、アプリケーションのコンポーネントに対応する子要素のシーケンスを定義します。要素名には任意の名前を付けることができますが、通常は構成するコンポーネント(adapterprocessorchannel)を示している必要があります。

    各要素は、明示的にbase属性値base:ConfigurationObjectxs:extension要素を使用するか、またはそれ自身がConfigurationObjectを拡張するXMLタイプを指定するかによって、ConfigurationObject XMLタイプを拡張する必要があります。ConfigurationObject XMLタイプは、wlevs_base_config.xsdで定義され、nameという単一の属性を定義します。

    アダプタ要素のタイプは、この方法の上記の手順で作成されたカスタム・タイプである必要があります。

    プロセッサまたはストリームに対応するconfigの子要素には、wlevs_application_config.xsdに記述されている次の組込みXMLタイプを使用できます。

    例:

    <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>
    
  5. 必要に応じてjxb:schemaBindingsjxb:package>子要素を使用して、生成されたJavaコードのパッケージ名を指定します。

    <xs:annotation>
      <xs:appinfo>
         <jxb:schemaBindings>
             <jxb:package name="com.bea.adapter.wlevs.example.helloworld"/>
         </jxb:schemaBindings>
      </xs:appinfo>
    </xs:annotation> 
    
19.2.2.1.1 拡張された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>

19.3 カスタム・アダプタまたはイベントBeanの構成へのプログラムからのアクセス

この節は、アダプタとイベントBeanの両方に当てはまります。簡略化のため、アダプタについてのみ説明します。

アプリケーションをデプロイする場合、Oracle CEPでは(コンポーネント構成XMLファイルに指定された)各コンポーネントの構成がJava Architecture for XML Binding (JAXB)標準を使用してJavaオブジェクトにマップされます(詳細は、https://jaxb.dev.java.net/を参照)。各コンポーネントの構成データは単一のXML要素に含まれるため、JAXBでもこの構成データを表現する単一のJavaクラスが生成されます。コンポーネントの初期化時、およびコンポーネントの構成が動的に変更されるたびに、Oracle CEPでは実行時にこのJavaクラスのインスタンスがコンポーネント(プロセッサ、チャネル、またはアダプタ)に渡されます。

このコンポーネント構成には、実行時に次のいずれかの方法でアクセスできます。


注意:

アダプタ・プロバイダからのスキーマ使用を必要とするクライアントは、プロバイダのバンドルから適切なパッケージをインポートし、プロバイダのObjectFactoryがクライアント・バンドルに表示されるようにする必要があります。


19.3.1 リソース・インジェクションを使用したコンポーネント構成へのアクセス方法

デフォルトでは、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)を挿入します。


注意:

拡張コンポーネント構成スキーマでは、例19-5に示すとおり、ネストされているconfig要素が必要です。


詳細は、次を参照してください:

19.3.2 ライフサイクル・コールバックを使用したコンポーネント構成へのアクセス方法

アダプタ実装では、メタデータ注釈を使用して、実行時に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です。

この項では次について説明します:

19.3.2.1 ライフサイクル・コールバック注釈

次のメタデータ注釈を使用して、様々なライフサイクル・コールバック・メソッドを指定できます。

  • 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項「ライフサイクル」を参照してください。

19.3.2.2 ライフサイクル

Oracle CEPでは、カスタム・アダプタおよびイベントBeanのインストール中に、次のライフサイクルに従います。

  1. アダプタまたはイベントBeanインスタンスの作成。

  2. 静的プロパティのインジェクト。

  3. afterPropertiesSetの呼出し。

  4. フェーズの準備:

    1. 1つ以上の構成引数のある@Prepareがある場合は、これを呼び出します。

    2. ない場合は、構成プロパティを直接インジェクトします。

      19.3.1項「リソース・インジェクションを使用したコンポーネント構成へのアクセス方法」を参照してください。

    3. 引数のない@Prepareがある場合は、これを呼び出します。

  5. フェーズの有効化:

    1. 1つ以上の構成引数のある@Activateがある場合は、これを呼び出します。

    2. 引数のない@Activateがある場合は、これを呼び出します。

  6. afterConfigurationActiveを呼び出します。

  7. その他の構成で続行します。