如何动态更改给定Drools 6.3会话的规则?

时间:2016-04-08 14:32:25

标签: drools kie

我在Drools 6.3.x中有一个包含几百万个事实的会话。

我正在构建一个交互式应用程序,除其他外,允许用户根据需要过滤事实。在我看来,这个过滤器基本上是一种模式。一旦过滤了事实,就会应用逻辑来产生所需的结果。

由于应用程序的交互性,我宁愿不等待用户输入构建var dateNowAtLoad = Date.now(); ontouchmove = (e) => { if (e.timeStamp > dateNowAtLoad) { // epoch timestamp -> old path } else { // high-res timestamp -> new path } } ,派生KieBase,加载几百万个事实并解雇所有规则时代。

理想情况下,我想创建一个包含应用程序逻辑的KieSession,一次导出KieBase,一次加载所有事实,并根据需要执行注入/删除规则在用户输入上。我怎么能在Drools 6.3中做到这一点?我确信Drools 5是可能的。

一些代码将我的问题置于语境中。此代码段显示了如何设置Drools会话:

KieSession

据我所知, 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

有什么建议吗?

0 个答案:

没有答案