第86章 デシジョンエンジンのイベントリスナーおよびデバッグロギング

Red Hat Process Automation Manager では、ファクトの挿入やルールの実行など、デシジョンエンジンのイベントリスナーを追加または削除できます。デシジョンエンジンのイベントリスナーを使用すると、デシジョンエンジンのアクティビティーの通知を受けることができ、ロギングと監査をアプリケーションのコアから分けることができます。

デシジョンエンジンは、アジェンダおよびワーキングメモリーに対して、以下のデフォルトのイベントリスナーをサポートします。

  • AgendaEventListener
  • WorkingMemoryEventListener

各イベントリスナーについて、デシジョンエンジンは、監視するように指定できる以下の特定のイベントもサポートします。

  • MatchCreatedEvent
  • MatchCancelledEvent
  • BeforeMatchFiredEvent
  • AfterMatchFiredEvent
  • AgendaGroupPushedEvent
  • AgendaGroupPoppedEvent
  • ObjectInsertEvent
  • ObjectDeletedEvent
  • ObjectUpdatedEvent
  • ProcessCompletedEvent
  • ProcessNodeLeftEvent
  • ProcessNodeTriggeredEvent
  • ProcessStartEvent

たとえば、以下のコードは、KIE セッションにアタッチされた DefaultAgendaEventListener リスナーを使用して、AfterMatchFiredEvent イベントが監視されるように指定します。コードは、ルールの実行後にパターンの一致を出力します。

アジェンダの AfterMatchFiredEvent イベントを監視および出力するコード例

ksession.addEventListener( new DefaultAgendaEventListener() {
   public void afterMatchFired(AfterMatchFiredEvent event) {
       super.afterMatchFired( event );
       System.out.println( event );
   }
});

デシジョンエンジンは、デバッグロギングに対して以下のアジェンダおよびワーキングメモリーイベントリスナーもサポートします。

  • DebugAgendaEventListener
  • DebugRuleRuntimeEventListener

これらのイベントリスナーは、同様のサポートされているイベントリスナーメソッドを実装し、デフォルトでデバッグ出力ステートメントを含んでいます。特定のサポートされるイベントを追加して監視およびドキュメント化するか、すべてのアジェンダまたはワーキングメモリーアクティビティーを監視することができます。

たとえば、以下のコードは DebugRuleRuntimeEventListener イベントリスナーを使用して、すべてのワーキングメモリーイベントを監視および出力します。

すべてのワーキングメモリーイベントを監視および出力するコード例

ksession.addEventListener( new DebugRuleRuntimeEventListener() );

86.1. デシジョンエンジンでのロギングユーティリティーの設定

デシジョンエンジンは、システムロギングに Java ロギング API SLF4J を使用します。以下のロギングユーティリティーのいずれかをデシジョンエンジンで使用して、トラブルシューティングまたはデータ収集などのデシジョンエンジンのアクティビティーを調査できます。

  • Logback
  • Apache Commons Logging
  • Apache Log4j
  • java.util.logging パッケージ

手順

使用するロギングユーティリティーについては、Maven プロジェクトに関連する依存関係を追加するか、Red Hat Process Automation Manager ディストリビューションの org.drools パッケージに関連する XML 設定ファイルを保存します。

Logback の Maven 依存関係の例

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>${logback.version}</version>
</dependency>

org.drools パッケージにおける logback.xml 設定ファイルの例

<configuration>
  <logger name="org.drools" level="debug"/>
  ...
<configuration>

org.drools パッケージにおける log4j.xml 設定ファイルの例

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <category name="org.drools">
    <priority value="debug" />
  </category>
  ...
</log4j:configuration>

注記

超軽量環境向けに開発している場合は slf4j-nop または slf4j-simple ロガーを使用します。