当前位置: 首页 > 知识库问答 >
问题:

利用无状态知识会话在LHS中改变Drools状态

乜嘉悦
2023-03-14
    null
    null
  1. 如果进入房间的人是教师,则输入打印教师。
  2. 如果进入房间的人数超过30人,请通知我。
  3. 如果学生已上了超过20个小时的课,则更新状态为已完成。

现在我想要1和3组合在一起。
类似:4。如果有属性状态完成的学生进入教室,请通知老师。

现在,正如我前面所说的,这两个事件是分开的。所以在两个不同的规则中处理它更容易。但是当我想创建一个规则,它是规则4中1和3的组合,那么我必须验证一个进入房间的人是否是学生,以及他是否有属性“complete”。

我正计划通过LHS中的方法调用来做这件事,这并不简单。

有没有其他办法,我能搞定?

共有1个答案

贝钧
2023-03-14

在大多数情况下,用小规则来识别特定的情况比用复杂的规则来识别混合的情况要好。我不清楚的是你是否想用第4条代替第3条。我将离开规则3,创建规则4,如下所示:

when
    PersonEnteringRoom($p: person, $r: room, person.type == "Student", person.status == "Complete") // status was set by rule 3.
    Room(this == $r, $t: currentTeacher != null) //the relation could be stablished by rule 1
then
    Notifier.notify($t, "The student has completed the course", $p);
end

当然,这个规则对你是否有效取决于其他因素,比如你的执行周期。

希望能有所帮助,

 类似资料:
  • 需要一些帮助!!我对Drools中的有状态和无状态会话没有清晰的理解。我正在努力理解这一点,所以尝试了一个例子。 我在drools6.5版本上使用有状态和无状态会话测试了下面的drl,在这两种情况下都得到了相同的输出。根据我对无状态会话的理解,它应该只执行第一条规则,当应用程序对象在第一条规则中被修改时,第二条规则不应该被激活(“有效期”)。附加源代码。感谢您在这方面的帮助。

  • 我正在创建一个Drools有状态会话,如JBPM持久性文档中所述:http://docs.jboss.org/jbpm/v5.1/javadocs/org/drools/persistence/jpa/JPAKnowledgeService.html 但是,我遇到了以下异常 我的代码是: 在最后一行引发异常。在此之前,我已经绑定了上述文档中描述的JDBC JTA数据源。 我在MySQL JDBC驱

  • 如何为drools无状态会话设置全局变量。 假设两个线程访问同一个会话,但为每个线程设置一个全局变量customer arraylist和新的arraylist。对于全局变量customer,第二个线程的arraylist是否替换第一个线程的arraylist。 这似乎是Stateless知识库类留档的情况: 无状态KnowledgeSessions支持全局,其作用域有多种方式。我将首先介绍非命令

  • 我对口水还不熟悉。我试图理解Drools提供的无状态会话和有状态会话之间的区别。 根据我的初步理解, 在无状态会话的情况下,如果在任何规则的操作执行过程中修改了事实,则不会将其重新提交给推理引擎以找出与修改后的事实匹配的新规则。 在状态会话的情况下,如果在任何规则的操作执行过程中修改了事实,则它将被重新提交给推理引擎以找出与修改后的事实相匹配的新规则,然后执行相应的操作。 因此,当我试图通过编写一

  • Drools中无状态会话和有状态会话的区别是什么。我浏览了不同的文件,发现下面 无状态会话执行规则时事实的任何更改都不会被规则引擎察觉,因此如果任何规则被修改,则不会发生其他规则的重新激活。 我试图执行下面的规则,发现了相同的结果

  • 问题内容: 有状态会话Bean定义如下: 有状态会话Bean对象的状态由其实例变量的值组成。在有状态会话Bean中,实例变量代表唯一的客户端Bean会话的状态。因为客户端与其bean进行交互(“交谈”),所以这种状态通常称为对话状态。 无状态会话Bean定义如下: 无状态会话Bean无状态会话Bean不会与客户端保持对话状态。当客户端调用无状态Bean的方法时,该Bean的实例变量可能包含特定于该