ユーザー開発Javaクラスは、次のインターフェースを実装します。
com.fujitsu.cspf.cep.CustomListener
このインターフェースでは次の2つのメソッドを実装する必要があります。
返り値の型 | メソッド名 | 引数 | 説明 |
---|---|---|---|
void | setArgs | String[] args | @CustomListenerアノテーションで指定したargsパラメーターが渡されます。 |
String statementName | @CustomListenerアノテーションが付与された複合イベント処理文の名前(@Nameで指定した名前)が渡されます。 | ||
void | update | Map[] newEvents | @CustomListenerアノテーションが付与された複合イベント処理文の処理結果(出力イベント)が、java.util.Mapオブジェクトの配列として渡されます。 1つの出力イベントはプロパティ名と値のペアを保持するjava.util.Mapオブジェクトとして渡されます。 定期的に出力するようなルールの場合、出力イベントがなくてもupdateメソッドが呼び出されることがあります。 |
複合イベント処理文から出力が行われるたびに、ユーザー開発Javaクラスに対して次の処理が行われます。
ユーザー開発Javaクラスのインスタンスを生成
setArgsメソッド呼出し
updateメソッド呼出し
また、CEPエンジンの起動時にも、ユーザー開発Javaクラスのインスタンスを生成します。
カスタムリスナの処理で例外が発生した場合、CEPエンジンが例外をキャッチし、例外をエンジンログおよびシステムログに出力します。他のイベントの処理は継続します。
注意
ユーザー開発JavaクラスはCEPエンジンと同じJava VM上で動作します。ここでは、ユーザー開発Javaクラスの設計において留意すべき事項について説明します。
処理時間がボトルネックにならないように設計する
ユーザー開発Javaクラスのインスタンス生成や、setArgsメソッドおよびupdateメソッドの呼び出しは短時間で終わるように設計してください。これらの処理に時間がかかると、CEPエンジン内部に処理待ちのイベントが蓄積され、CEPエンジン全体の処理性能を低下させる可能性があります。特に、大量のイベントを出力する場合はその影響が大きくなります。
スレッドセーフな設計を行う
ユーザー開発Javaクラスの処理は複数のスレッドから呼び出されるため、スレッドセーフな設計にしてください。例えば、クラス変数を使用する場合は、複数のスレッドから呼ばれることを考慮する必要があります。
ただし、ユーザー開発Javaクラスのインスタンスは出力イベントが発生するごとに生成され、1つのインスタンスは1つのスレッドだけで動作します。そのため、インスタンス変数を操作するだけであればマルチスレッドを考慮する必要はありません。
監視が必要なエラーは例外としてスローする
ユーザー開発Javaクラスで発生したエラーを監視する必要がある場合、エラーの内容を例外としてユーザー開発Javaクラス外にスローしてください。スローされた例外はCEPエンジンによってキャッチされ、エンジンログおよびシステムログに出力されます。
例
ユーザー開発Javaクラスのサンプルソースコードが次のディレクトリに格納されています。
/opt/FJSVcep/sample/CustomListener