66.5. プロセスエンジンのイベントリスナー


ProcessEventListener インターフェイスを実装するクラスを開発できます。このクラスは、プロセスの開始や完了、またはノードへの入出力などのプロセス関連のイベントをリッスンできます。

プロセスエンジンは、イベントオブジェクトをこのクラスに渡します。オブジェクトは、イベントにリンクしたプロセスインスタンスやノードインスタンスなど、関連情報へのアクセスを提供します。

以下は、ProcessEventListener インターフェイスのさまざまな方法を示しています。

ProcessEventListener インターフェイスのメソッド

public interface ProcessEventListener {

  void beforeProcessStarted( ProcessStartedEvent event );
  void afterProcessStarted( ProcessStartedEvent event );
  void beforeProcessCompleted( ProcessCompletedEvent event );
  void afterProcessCompleted( ProcessCompletedEvent event );
  void beforeNodeTriggered( ProcessNodeTriggeredEvent event );
  void afterNodeTriggered( ProcessNodeTriggeredEvent event );
  void beforeNodeLeft( ProcessNodeLeftEvent event );
  void afterNodeLeft( ProcessNodeLeftEvent event );
  void beforeVariableChanged(ProcessVariableChangedEvent event);
  void afterVariableChanged(ProcessVariableChangedEvent event);

}
Copy to Clipboard Toggle word wrap

通常、before イベントおよび after イベントの呼び出しは、スタックのように動作します。イベント A が直接イベント B を発生する場合は、以下の呼び出しシーケンスが実行されます。

  • Before A
  • Before B
  • After B
  • After A

たとえば、ノード X を残すと、ノード Y のトリガーに関連するすべてのイベント呼び出しが、ノード X の beforeNodeLeft 呼び出しと afterNodeLeft 呼び出しの間で実行されます。

同様に、プロセスを開始すると一部のノードが直接開始する場合に、すべての nodeTriggered イベントおよび nodeLeft イベント呼び出しは、beforeProcessStarted 呼び出しと afterProcessStarted 呼び出しの間に発生します。

このアプローチは、イベント間の原因と効果の関係を反映しています。ただし、イベントコール のタイミングと順序は常に直感的には限りません。たとえば、afterProcessStarted 呼び出しは、プロセス内の一部のノードを afterNodeLeft 呼び出しの後に発生する可能性があります。

通常、特定のイベントの発生時に通知するには、before 呼び出しをイベントに使用します。たとえば、特定のプロセスインスタンスの開始に関連するすべての手順が完了したときに、このイベントに関連するすべての処理が終了する場合のみ、after の呼び出しを使用してください。

ノードのタイプによって、一部のノードは nodeLeft 呼び出しのみを生成する可能性があり、nodeTriggered 呼び出しのみを生成する可能性があります。たとえば、catch 中間イベントノードは、別のプロセスノードによってトリガーされないため、nodeTriggered 呼び出しを生成しません。同様に、throw の中間イベントノードが nodeLeft 呼び出しを生成しないため、これらのノードには別のノードへの外向き接続がないためです。

KieSession クラスは、以下のリストのようにイベントリスナーの登録、削除、および一覧表示を行うメソッドを提供する RuleRuntimeEventManager インターフェイスを実装します。

RuleRuntimeEventManager インターフェイスのメソッド

    void addEventListener(AgendaEventListener listener);
    void addEventListener(RuleRuntimeEventListener listener);
    void removeEventListener(AgendaEventListener listener);
    void removeEventListener(RuleRuntimeEventListener listener);
    Collection<AgendaEventListener>	getAgendaEventListeners();
    Collection<RuleRuntimeEventListener> getRuleRintimeEventListeners();
Copy to Clipboard Toggle word wrap

ただし、典型的な場合には、これらのメソッドは使用しないでください。

RuntimeManager インターフェイスを使用している場合は、RuntimeEnvironment クラスを使用してイベントリスナーを登録します。

サービス API を使用している場合は、プロジェクトの META-INF/services/org.jbpm.services.task.deadlines.NotificationListener ファイルに、イベントリスナーの完全修飾クラス名を追加できます。また、Services API は、イベントの電子メール通知を送信できる org.jbpm.services.task.deadlines.notifications.impl.email.EmailNotificationListener などのデフォルトのリスナーも登録します。

デフォルトのリスナーを除外するには、リスナーの完全修飾名を JVM システムプロパティー org.kie.jbpm.notification_listeners.exclude に追加します。

66.5.1. KieRuntimeLogger イベントリスナー

KieServices パッケージには、KIE セッションに追加できる KieRuntimeLogger イベントリスナーが含まれます。このリスナーを使用して監査ログを作成できます。このログには、起動時に発生した異なるイベントがすべて含まれます。

注記

これらのロガーはデバッグの目的で使用されます。ビジネスレベルのプロセス分析では詳細すぎる可能性があります。

リスナーは以下のロガータイプを実装します。

  • コンソールロガー: このロガーはすべてのイベントをコンソールに書き込みます。このロガーの完全修飾クラス名は org.drools.core.audit.WorkingMemoryConsoleLogger です。
  • ファイルロガー: このロガーは XML 表現を使用してすべてのイベントをファイルに書き込みます。IDE でログファイルを使用して、実行時に発生したイベントのツリーベースの視覚化を生成できます。このロガーの完全修飾クラス名は org.drools.core.audit.WorkingMemoryFileLogger です。

    ファイルロガーは、ロガーを閉じるときや、ロガーのイベント数が事前定義レベルに達した場合にのみ、イベントをディスクに書き込みます。したがって、ランタイム時のプロセスのデバッグには適していません。

  • スレッドファイルロガー: このロガーは、指定した時間間隔の後にイベントをファイルに書き込みます。このロガーを使用して、プロセスのデバッグ中に進捗をリアルタイムで視覚化することができます。このロガーの完全修飾クラス名は org.drools.core.audit.ThreadedWorkingMemoryFileLogger です。

ロガーの作成時に、KIE セッションを引数として渡す必要があります。ファイルロガーでは、ログファイルの名前を作成する必要もあります。スレッド化されたファイルロガーには、イベントが保存される間隔 (ミリ秒単位) が必要です。

アプリケーションの末尾で常にロガーを閉じます。

以下の例は、ファイルロガーの使用例を示しています。

ファイルロガーの使用

  import org.kie.api.KieServices;
  import org.kie.api.logger.KieRuntimeLogger;
  ...
  KieRuntimeLogger logger = KieServices.Factory.get().getLoggers().newFileLogger(ksession, "test");
  // add invocations to the process engine here,
  // e.g. ksession.startProcess(processId);
  ...
  logger.close();
Copy to Clipboard Toggle word wrap

ファイルベースのロガーによって作成されるログファイルには、プロセスのランタイム中に発生したすべてのイベントの XML ベースの概要が含まれます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat