首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们可以在Drools中动态设置事实类型和事实字段吗

我们可以在Drools中动态设置事实类型和事实字段吗
EN

Stack Overflow用户
提问于 2016-02-03 17:04:21
回答 4查看 3.1K关注 0票数 2

我正在读取一个json文件,它有我要映射到pojo类的records.that记录,这个类是从json模式动态生成的,我使用了json2pojo maven plugin!.now,我想在那个类上触发一些规则。但是我不能将drl文件中的类作为字段的fact.same。下面是drl规则。

代码语言:javascript
运行
复制
rule "not null"

when 

  obj:Class(fieldName==null)
then
  //take action
end

这个类和fieldName是动态生成的。关于这个问题,请给我建议解决方案。谢谢。

EN

回答 4

Stack Overflow用户

发布于 2016-02-07 00:15:18

我已经成功地实现了类似的问题陈述。快速浏览一下。我应该在web应用程序中运行时由用户选择的sql表上动态生成规则。这里需要注意的一点是,pojo类也应该在运行时生成。Drools 6有一个内置的API (类似于JAVA反射API),您可以在其中动态生成类,因此也可以生成factTypes。首先是.drl文件:

代码语言:javascript
运行
复制
declare {insert tablename as chosen by the user}
{columnname} : {columntype}  
{columnname} : {columntype}  
end

这将生成一个pojo类,以及可在规则中直接访问的属性的getter和setter。现在,java文件:

生成的类可以在java应用中访问,如下所示:

//获取声明的FactType

代码语言:javascript
运行
复制
FactType  tableType = kbase.getFactType({packagename},{tablename});

//创建实例:

代码语言:javascript
运行
复制
Object obj = tableType.newInstance();

现在,通过hibernate实现了从sql插入与所选表相对应的事实。如果规则进行了任何修改,这也会使表保持更新。

请随时提出任何问题。乐意为您效劳..:)

票数 3
EN

Stack Overflow用户

发布于 2016-02-04 13:05:06

我根据我的requirement.It找到了一种不同的方法,我动态地删除了生成的POJO。我创建了一个POJO作为“参数”,它将被用作事实type.In,我在drl文件中有fieldName(Json字段路径),rulesToFire(规则)和json records.so列表的字段,我可以获取那些我可以读取的values.using com.jayway.jsonpath.JsonPath。

票数 1
EN

Stack Overflow用户

发布于 2016-02-03 21:34:12

JSON适合于通过线路发送数据,等等。但是,您应该将其转换为POJO,并根据Java对象编写验证规则。我看不出你为什么不能这么做。

然而..。如果你想花很多时间和精力...

您可以使用XML完成这些操作,XML是数据集(“记录”)的另一种(文本)表示形式。查看JSON结构定义,您可以看到您有“对象”和“数组”。这些将是您的事实类型。(JS-)对象可以由包含映射的POJO表示,(JS-)数组可以由具有java.util.List字段的POJO实现。

您可以编写选择JS对象并执行字段检查的规则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35172555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档