如何在 drl 文件中动态设置事实类型和事实字段?我正在读取一个包含记录的 json 文件。该记录我映射到从我使用的 json 模式动态生成的 pojo 类 json2pojo maven plugin ! .现在我想对该类取消一些规则。但我无法在 drl 文件中获取该类作为字段的事实。 下面是drl规则。
rule "not null"
when
obj:Class(fieldName==null)
then
//take action
end
这个 Class 和 fieldName 是动态生成的。 请建议我解决这个问题。 谢谢。
最佳答案
我已经成功地实现了类似的问题陈述。快速浏览一下。 我应该在用户在 Web 应用程序运行时选择的 SQL 表上动态生成规则。这里需要注意的是,pojo 类也应该在运行时生成。 Drools 6 有一个内置 API(类似于 JAVA 反射 API),您可以在其中动态生成类,因此也可以动态生成factTypes。 首先是 .drl 文件:-
declare {insert tablename as chosen by the user}
{columnname} : {columntype}
{columnname} : {columntype}
end
这会生成一个 pojo 类以及可以在规则中直接访问的属性的 getter 和 setter。 现在,java 文件:-
生成的类可以在java应用程序中访问,如下所示:
//获取声明的FactType
FactType tableType = kbase.getFactType({packagename},{tablename});
//创建实例:
Object obj = tableType.newInstance();
现在,事实是从与所选表相对应的sql中插入的,是通过hibernate实现的。如果规则发生任何修改,这也会使表格保持更新。
如有任何问题,请随时提出。 很高兴提供帮助..:)
关于java - 我们可以在 Drools 中动态设置事实类型和事实字段吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35172555/