我在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
有什么建议吗?