Drools ルールに slf4j Logger オブジェクトをグローバルとして渡そうとしています。
呼び出し元の Java クラスで、ロガーを定義し、setGlobal kie server コマンドを介してルールに渡します。
private static final Logger LOGGER = LoggerFactory.getLogger(KieServerTester.class);
Command<?> setGlobalCommand = commandsFactory.newSetGlobal("logger", LOGGER);
commands.add(setGlobalCommand);
私のルールファイルでは、グローバルを次のように定義しています。
global org.slf4j.Logger logger;
ただし、コマンドを実行すると、次のエラーが発生します。
ERROR [org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl] (default task-1) コンテナー「mycontainer」の呼び出し中にエラーが発生しました: java.lang.RuntimeException: グローバルのクラスが不正です。[org.slf4j.Logger] を期待していましたが、[java.util.LinkedHashMap] を見つけました。
LinkedHashMap がどこから取得されているのかわかりません。呼び出しコードをステップ実行しましたが、マップが表示される場所がわかりません。
ルール ファイルのグローバルを LinkedHashMap に変更すると、エラーは発生しません。どういうわけか、Java クラスのロガー オブジェクトが LinkedHashMap に変換されているように見えます。
助けていただければ幸いです。