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

Drools-当我在KieSession中使用setGlobal访问我设置的全局时,无法触发规则

燕琛
2023-03-14

我有一个非常简单的测试应用程序,它在KieSession中插入一个全局。我有一个ProductFinder对象,它存储虚构的类别。我在会话中将此对象设置为全局对象。我使用KieSession这样设置它:实际上,当我创建一个具有相同代码但读取不同数据的KieSession时,就会触发规则。为什么指向相同文件的同一kieContainer在不同的时间运行,在一种情况下触发规则,而在另一种情况下不触发规则?基辅会议。setGlobal(“pf”,productFinder);

以下是ProductFinder和类别的基本类:

 class ProductFinder {
    Category produce
    Category cosmetics
 }

 class Category{
  Long  code
 }

然后,我继续编写一个简单的规则,尝试访问全局类别,如下所示:

 global ProductFinder pf;

 rule "find category Produce "

  when

   $produce : Category(  ) from  pf.produce

   then
      System.out.println("Found product category with info "+$produce ) ;
   end

不幸的是,规则没有被触发。我知道全局ProductFinder已设置在全局中,因为如果我注释掉我设置全局的行,Drools会抛出一个异常,抱怨它可以找到全局。

请帮忙。

共有1个答案

容俊豪
2023-03-14

糟糕的是,我没有在会话中调用fireAllRules()。

 类似资料:
  • 我有两个规则。这是Drools 6.1.0。最终 对这些规则的测试在Drools 5.1.1中没有问题,但我正在尝试重构到6.1.0。最终。在我的测试类中,我设置了一个KieSession 我在这个单元测试中进行了一些测试,这些测试验证了所有规则在事件发生时都会触发,并且除了定时重试事件之外,所有规则都会通过。我尝试测试句柄事件并重试,如下所示 在使用5.1.1测试时,我还可以从ArgumentC

  • 这两个在Drools中有什么区别??意味着我们可以根据 从加载的规则库和触发规则创建WorkingMemory,如下所示: vs公司 使用会话(有状态的。无状态)触发规则,如图所示

  • 问题内容: 我可以在Redis中设置全局TTL吗?每次设置密钥时,都无需设置TTL。 我用谷歌搜索,但找不到任何线索。看来似乎无法完成? 谢谢。 问题答案: 不,Redis没有全局/默认TTL的概念,是的,您必须为每个键分别设置它。但是,根据您的要求和要执行的操作,可能还有其他方法可以实现您的目标。换句话说,您为什么需要它? 例如,如果您想将Redis用作缓存,而不必担心必须删除“旧”项目,则只需

  • 问题内容: 到目前为止,我还没有找到在Drools 6.0.0中将规则添加到正在运行的KieSession的最佳方法(即以最小的开销),而仍然将我的事实保留在KieSession中。在Drools 5中,当更改KBase时更新了KSession,但对于Drools 6而言却并非如此,因为我的规则未在KieBase中创建。有没有一种方法可以替换整个KieFileSystem中的整个KieModule

  • 我有几个单独的规则。例如,现在我有3套不同的规则要执行。根据输入参数,在任何时候都要执行一组规则。假设第一组有5条规则,第二组有7条规则,第三组有5条规则。现在,所有这些集合可能都有公共规则,我想引用它们,而不是在每个集合中编写3次规则。如何在流口水时做到这一点?明天,如果我进行了更新,我应该只能对规则进行一次更改,并且此更改应反映在所有集合中。请就此提出建议。。。。。 谢谢

  • 我试图在一个Spring Boot Maven项目中用的持久性特性实现Drools。遵循此文档进行实现。我能够在普通的Java应用程序中做到这一点,但我在Spring Boot应用程序中尝试做到这一点时遇到了异常。 下面是实现。 项目结构 事实类 persistence.xml pom.xml文件中包含的依赖关系如下: