如何动态更改给定Drools 6.3会话的规则?
我在Drools 6.3.x中有一个会话,包含数百万个事实 我正在构建一个交互式应用程序,它允许用户根据自己的需要过滤事实。在我看来,这个过滤器基本上是一种模式。一旦事实被过滤,逻辑就被应用于产生期望的结果 由于应用程序的交互性,我不希望等待用户输入来构建如何动态更改给定Drools 6.3会话的规则?,drools,kie,Drools,Kie,我在Drools 6.3.x中有一个会话,包含数百万个事实 我正在构建一个交互式应用程序,它允许用户根据自己的需要过滤事实。在我看来,这个过滤器基本上是一种模式。一旦事实被过滤,逻辑就被应用于产生期望的结果 由于应用程序的交互性,我不希望等待用户输入来构建KieBase,派生KieSession,加载数百万个事实,并随时触发规则 理想情况下,我希望创建一次包含应用程序逻辑的KieBase,派生一次KieSession,加载一次所有事实,并根据用户输入动态地插入/删除规则。我如何在Drools 6
KieBase
,派生KieSession
,加载数百万个事实,并随时触发规则
理想情况下,我希望创建一次包含应用程序逻辑的KieBase
,派生一次KieSession
,加载一次所有事实,并根据用户输入动态地插入/删除规则。我如何在Drools 6.3中做到这一点?我肯定这是有可能的
一些代码来解释我的问题。此代码段显示如何设置Drools会话:
KieHelper helper = new KieHelper();
String location = "/drools/logic.drl";
InputStream stream = getClass().getResourceAsStream(location);
Resource resource = ResourceFactory.newInputStreamResource(stream);
helper.addResource(resource, ResourceType.DRL);
Results results = helper.verify();
if (results.hasMessages(Message.Level.ERROR)) {
System.out.println(results.getMessages());
System.exit(0);
}
KieBase base = helper.build();
KieSession session = base.newKieSession();
for (Source source : sources) {
for (Object fact : source.getFacts()) {
session.insert(fact);
}
}
session.fireAllRules();
就我所见,KieBase
没有提供任何添加新规则的方法(只提供删除规则的方法)。因此,如果不从头开始初始化KieSession
,我不知道如何从下面的代码片段开始
String rule = "package boot\n" +
"\n" +
"rule \"Stamp\"\n" +
"when\n" +
"\t$o: Object()\n" +
"then\n" +
"\tSystem.out.println($o);\n" +
"end\n";
InputStream ruleStream = new ByteArrayInputStream(rule.getBytes());
Resource ruleResource = ResourceFactory.newInputStreamResource(ruleStream);
helper.addResource(ruleResource, ResourceType.DRL);
有什么建议吗?嗨,斯蒂法诺,你有没有想出解决这个问题的办法?我想做一些类似的事情来过滤集合中的规则,将其分解为一个子集,但我正在努力解决如何在活动会话和规则管理方面对其进行管理,即,如果我将Drools workbench交给业务部门来创建规则,我如何管理这些规则上的元数据以标记哪些规则适用于哪些潜在筛选器。嗨@anyeone,我不抱歉。。。我不得不离开Java转而使用Python。。。但我确信这是可能的(至少在以前的版本中是这样,尽管实现起来有点棘手)。您可以尝试询问JBoss频道(如果仍然存在)。。。