我试图将slf4j Logger对象作为全局变量传递给我的Drools规则。
在我的调用Java类中,我定义了记录器,并通过setGlobal kie服务器命令将其传递给规则:
private static final Logger LOGGER = LoggerFactory.getLogger(KieServerTester.class);
Command<?> setGlobalCommand = commandsFactory.newSetGlobal("logger", LOGGER);
commands.add(setGlobalCommand);
在我的规则文件中,全局定义为:
global org.slf4j.Logger logger;
但是,当我执行命令时,出现此错误:
错误[org.kie.server.services.drools.DroolsKieContainerCommandServiceImpl](默认任务1)调用容器“ mycontainer”时出错:java.lang.RuntimeException:全局非法类。应为[org.slf4j.Logger],找到[java.util.LinkedHashMap]。
我不知道从哪里获取LinkedHashMap。我已经完成了调用代码,但看不到地图的显示位置。
如果我将规则文件中的全局变量更改为LinkedHashMap,则不会收到错误消息。 因此,看起来我Java类中的logger对象正被转换为LinkedHashMap。
任何帮助表示感谢,谢谢。
答案 0 :(得分:0)
您不能只是将想要的任何对象传递给Kie-Server。我假设您正在使用REST与Kie-Server通信,在这种情况下,对象必须在您端进行序列化,并在Kie-Server端进行反序列化。
我猜想Kie-Server无法对您传递的对象进行反序列化,而只是将其保留为Map
。
希望有帮助,