ページの先頭行へ戻る
Interstage Big DataComplex Event Processing Server V1.1.0 ユーザーズガイド
FUJITSU Software

5.7.3 連携アプリケーションの実装

連携アプリケーションの実装について説明します。

5.7.3.1 イベント送信アプリケーションの実装

CEPエンジンにイベントを送信するアプリケーションを実装します。

利用する、入力アダプターの種類にあわせた実装を行います。

入力アダプターの種類ごとのサンプルプログラムについては「開発リファレンス」の「第3章 入力アダプター機能リファレンス」を参照してください。

5.7.3.2 ユーザー開発Webサービスの実装

SOAPリスナから呼び出すWebサービスのアプリケーションを実装します。

5.7.3.2.1 Webサービス実装手順

Webサービス実装手順について説明します。

  1. WSDLの作成

    SOAPリスナ定義で設計した、呼び出すWebサービスのインターフェース情報(WebサービスのURL、名前空間、プレフィクス、メソッド)と、複合イベント処理文(select文)で選択列としたパラメーターから、ユーザー開発アプリケーションのWSDL(インターフェース定義)を作成します。

    目的とするイベントを検出するための複合イベント処理文(select文)と、そのルールに関連付けたSOAPリスナ定義、および、SOAPリスナから生成されるSOAPメッセージの関係を以下に示します。

    図5.5 ルール定義およびリスナ定義と、送付されるSOAPメッセージの対応関係

    このSOAPメッセージを受け取るWebサービスのWSDLのサンプルを以下に示します。このWSDLはメッセージを受け取るだけ(One-way)のWebサービスを定義しています。アプリケーションに応答を返す(Request-response)Webサービスとして実装した場合、CEPエンジンはその応答を無視します。

    表5.8 WSDLのサンプル
    001
    002
    003

    004

    005

    006

    007

    008

    009

    010

    011

    012

    013

    014

    015

    016

    017

    018

    019

    020

    021

    022

    023

    024

    025

    026

    027

    028

    029

    030

    031

    032

    033

    034

    035

    036

    037

    038

    039

    040

    041

    042

    043

    044

    045

    046

    047

    048

    049

    050
    <?xml version='1.0' encoding='UTF-8'?>
    <definitions
    targetNamespace="http://example.com/exampleNamespace"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    xmlns:tns="http://example.com/exampleNamespace"
    xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <types>

    <xs:schema elementFormDefault="qualified"
    targetNamespace="http://example.com/exampleNamespace" >
    <xs:element name="rootElement">
    <xs:complexType>
    <xs:sequence>
    <xs:element name="property1" type="xs:string" />
    <xs:element name="property2" type="xs:string" />

    </xs:sequence>
    </xs:complexType>
    </xs:element>
    </xs:schema>
    </types>

    <message name="notifyMessage">

    <part name="body" element="tns:rootElement" />
    </message>

    <portType name="eventReceiverPortType">

    <operation name="notifyOperation">
    <input message="tns:notifyMessage" />
    </operation>
    </portType>

    <binding name="eventReceiverSOAPBinding" type="tns:eventReceiverPortType">

    <soapbind:binding transport="http://schemas.xmlsoap.org/soap/http"
    style="document" />
    <operation name="notifyOperation">
    <soapbind:operation soapAction="" />
    <input>
    <soapbind:body use="literal" />
    </input>
    </operation>
    </binding>

    <service name="eventReceiverService">
    <port name="eventReceiverSOAPPort" binding="tns:eventReceiverSOAPBinding">
    <soapbind:address location="http://example.com/serviceEndPoint" />
    </port>
    </service>
    </definitions>

    上記WSDLの下線部分を、ルール定義、SOAPリスナ定義に合わせて以下のように修正することによって、作成するWebサービスの雛形を生成するためのWSDLとして利用できます。

    • 003、005、011行目

      WSDLの対象名前空間(definitions要素のtargetNamespace属性)、対象名前空間の接頭辞の宣言(definitions要素のxmlns:tns属性)、WSDL中のXMLスキーマの対象名前空間(types要素中のxs:schema要素のtargetNamespace属性)をSOAPリスナ定義の名前空間の値にします。

    • 012、025行目

      WSDL中のXMLスキーマで定義するメッセージのルート要素の名前(types要素中のxs:schema要素中のxs:element要素のname属性)、WSDLのメッセージとして定義している要素(message要素のpart要素のelement属性)をSOAPリスナ定義のルート要素の値にします。

    • 015、016行目

      WSDL中のXMLスキーマで定義するルート要素の子要素の名前(types要素中のルート要素定義配下のxs:element要素のname属性)を、複合イベント処理文(select文)の出力プロパティ名にします。

      出力するプロパティの数だけ同様の行を作成します。この要素のタイプ(xs:element要素のtype属性)については、上記の例では文字列(xs:string)を指定しています。プロパティのタイプに合わせて適切に設定しておくことにより、ご利用のツールによってはタイプに応じたソースコードを生成してくれるため、プログラム中での型変換が不要となります。

    • 047行目

      最終的なサービス公開用のWSDLでは、service要素配下のsoapbind:address要素のlocation属性に、実際のサービスのURLが入り、これはリスナ定義の接続URLの値にもなります。しかし、開発時には、この接続URLは決まっていない場合も多いため、上記サンプルのままでも問題ありません。

  2. Webサービスのアプリケーションの実装

    作成したWSDLを元に、お使いの開発ツールからWebサービスのアプリケーションの雛型を出力し、そこにアプリケーションのロジックを追加します。

5.7.3.3 ユーザー開発Javaクラス(カスタムリスナ)の実装

CEPエンジンのカスタムリスナ経由で呼び出される、ユーザー開発Javaクラスを実装します。

5.7.3.3.1 CustomListenerインターフェース

ユーザー開発Javaクラスは、次のインターフェースを実装します。

com.fujitsu.cspf.cep.CustomListener

インターフェースの実体は、CEPサーバの/opt/FJSVcep/cep/lib/CepServerCustom.jarに含まれています。CepServerCustom.jarをお使いのJava開発環境にコピーし、クラスパスを設定して開発を行ってください。

5.7.3.3.2 カスタムログ

ユーザー開発Javaクラスからカスタムリスナ用のログファイル(カスタムログ)へのログ出力が可能です。カスタムログの出力先は次の通りです。

/var/opt/FJSVcep/cep/cep/logs/EngineLog/CEPエンジン名/custom.log

出力方法

実装には、Apache Log4jのクラス(org.apache.log4j.Logger)を使用します。

以下のメソッドでログ出力インスタンスを取得します。("custom"は固定です)

Logger myLogger = Logger.getLogger("custom");

参考

Apache Log4jのjarファイルは/opt/FJSVcep/log4j/lib/log4j-1.2.16.jarにあります。

Loggerクラスのfatal、error、warn、infoメソッドを使用してログ出力します。

myLogger.error("xxxxxx");

注意

org.apache.log4j.Loggerクラスのtraceおよび、debugメソッドは利用できません。

5.7.3.3.3 コンパイル

作成したソースコードはコンパイルして、クラスファイルまたはjarファイルを生成する必要があります。

JDK7以降のjavacを使用する場合は「-target 1.6」をオプションに指定してコンパイルしてください。

5.7.3.4 イベントログ分析アプリケーションの実装

イベントログを分析するアプリケーションを実装します。アプリケーションはHadoopのAPIを使用して実装します。詳細は、Interstage Big Data Parallel Processing Serverのマニュアルを参照してください。

5.7.3.5 Terracottaアプリケーションの実装

Terracottaアプリケーションを実装します。詳細については、Interstage Terracotta BigMemory Maxのマニュアルを参照してください。