我正试图写一条延迟射击的规则,直到最后一次射击至少15分钟.然而,Drools Fusion中的时间运算符仅允许推理关于彼此的两个事件而不是与当前时间相关的一个事件.
我想要这样的东西:
rule "some rule"
when
not LastFiredEvent(this before[0m, 15m] NOW)
…
Run Code Online (Sandbox Code Playgroud)
我已经尝试编写一个每秒触发一次的规则并插入一个心跳事件(也缩回之前的心跳),我可以在其他规则中使用它作为当前时间.
我发现这相当不优雅; 我错过了什么或者Drools Fusion真的没有这个东西吗?
NB.我不是在寻找延迟发射规则或规则,只能在15分钟的倍数上发射; 如果在最后17分钟内没有发生任何事情,规则必须立即开始以响应新事件.
而不是检索所有事实,我需要从工作记忆中检索特定类型的事实.
我了解到我可以从工作记忆中检索所有事实,如下所示.
drools.getWorkingMemory().getWorkingMemoryEntryPoint("Stream").getObjects();
Run Code Online (Sandbox Code Playgroud)
请提供一些指针,以从工作内存中检索特定类型的对象.
在Web /企业应用程序上使用Drools Fusion的最佳实践是什么?你知道有用的文件吗?
我查看了JBoss上的示例(http://download.jboss.org/drools/release/5.1.1.34858.FINAL/drools-5.1.1-examples.zip),但它们是桌面应用程序.我不明白如何在服务器上保持Drools会话"运行".
我正在考虑使用Drools Fusion来实现以下示例性规则:
所有这些规则都可以使用Drools Fusion轻松表达.然而,在创建原型并查看文档后,似乎该产品更适合短期,瞬态事件(股票市场,实时决策).
问题是:是否需要将所有事件存储在内存中?(可能有数百万的旧购买).此外,Drools Fusion可以存储事件,以便它们在服务器重启后能够存活吗 (理想情况下在数据库中).
我知道Drools Fusion事件只是Drools Expert中的事实,所以也许这个问题可以扩展到:Drools Expert能否坚持并懒惰加载事实?
我在学区工作,我们计划使用 Drools 为学区组成学校的学生群体实施以下类型的规则:
所有这些规则都可以使用 Drools 专家来简单地表达。此外,学生的规则处理不需要同步。我有几个关于实现这一点的最佳方法的问题。
从一个角度来看,这可以看作是一个事件流的监控系统。这让我想到创建一个有状态的会话,每个新事件都将插入其中。然而,这些事件发生在 9 个月的过程中并且相对不频繁。此外,我们可以为每个学校或每个学生建立一个会话。
另一种选择是在为该学生处理事件后为该学生保留一个会话。当下一个事件到来时,我们将从存储中检索他们的会话并插入新的事实。这样我们就不需要为引擎的每次运行检索所有事实来获取学生的状态。会支持这样的配置吗?这样做有什么缺点吗?
第三种方法是通过检索规则需要运行的所有其他事实、创建新的 KnowledgeSession 并运行规则来响应学生的新事实。
任何关于什么可能是最好的方法的建议将不胜感激。
戴夫
有没有人尝试将Apache Camel与Drools Fusion或Drools集成.
以下是我的用例.
任何帮助或指示将不胜感激.
谢谢.