DRL中的Drools全球记录器-全球非法课程

时间:2019-10-07 09:22:33

标签: drools kie drools-kie-server kie-server

我试图将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。

任何帮助表示感谢,谢谢。

1 个答案:

答案 0 :(得分:0)

您不能只是将想要的任何对象传递给Kie-Server。我假设您正在使用REST与Kie-Server通信,在这种情况下,对象必须在您端进行序列化,并在Kie-Server端进行反序列化。 我猜想Kie-Server无法对您传递的对象进行反序列化,而只是将其保留为Map

希望有帮助,