66.5. プロセスエンジンのイベントリスナー
					ProcessEventListener インターフェイスを実装するクラスを開発できます。このクラスは、プロセスの開始や完了、またはノードへの入出力などのプロセス関連のイベントをリッスンできます。
				
プロセスエンジンは、イベントオブジェクトをこのクラスに渡します。オブジェクトは、イベントにリンクしたプロセスインスタンスやノードインスタンスなど、関連情報へのアクセスを提供します。
					以下は、ProcessEventListener インターフェイスのさまざまな方法を示しています。
				
ProcessEventListener インターフェイスのメソッド
					通常、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 インターフェイスのメソッド
ただし、典型的な場合には、これらのメソッドは使用しないでください。
					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 セッションを引数として渡す必要があります。ファイルロガーでは、ログファイルの名前を作成する必要もあります。スレッド化されたファイルロガーには、イベントが保存される間隔 (ミリ秒単位) が必要です。
アプリケーションの末尾で常にロガーを閉じます。
以下の例は、ファイルロガーの使用例を示しています。
ファイルロガーの使用
ファイルベースのロガーによって作成されるログファイルには、プロセスのランタイム中に発生したすべてのイベントの XML ベースの概要が含まれます。