- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用Java创建(实例化)的LinkedList,它有几个节点(项目)。这个列表在 Drools 中也使用,准确地说是由 Drools 修改的。我需要在列表中插入一个新项目,但此插入必须只是临时的。我不知道何时会删除该项目,因此我不得不使用 insertLogical 语句(对吗?)。
这是我的代码,我在名为“lista”的列表中添加了三个“Nodo”项目。 Nodo 是下面的类,它具有构造函数和 set/get 方法:
package com.sample;
public class Nodo {
private int valore;
public Nodo(){}
public Nodo(int valore){
this.valore=valore;
}
public int getValore() {
return valore;
}
public void setValore(int valore) {
this.valore = valore;
}
}
这是 java Main 类,它调用 fireAllRules():
package com.sample;
/**
* This is a sample class to launch a rule.
*/
import java.util.LinkedList;
import java.util.List;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
public class DroolsTest {
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-rules");
List<Nodo> lista = new LinkedList();
Nodo n1 = new Nodo(11);
Nodo n2 = new Nodo(12);
Nodo n3 = new Nodo(13);
lista.add(n1);
lista.add(n2);
lista.add(n3);
kSession.insert(lista);
kSession.fireAllRules();
for(Nodo nodo : lista){
System.out.println( nodo.getValore());
}
System.out.println( "End");
} catch (Throwable t) {
t.printStackTrace();
}
}
}
主类的输出是
11 12 13 50
但我真正想要的只是
11 12 13
因为“50”值在 Drools 中逻辑插入,然后立即删除。不会打印“hello”消息,因为 50 项不再在列表中。 (正确,因为列表项已被删除)。
Drools 规则文件如下:
rule "Rule 1"
no-loop true
when
$l : LinkedList(get(0).getValore() == 11)
then
Nodo a = new Nodo(50);
$l.add(0,a);
insertLogical($l);
end
rule "Rule 2"
no-loop true
when
$l : LinkedList(get(0).getValore() == 50)
then
modify($l){remove(0)};
end
rule "Rule 3"
when
$p: Nodo(valore==50)
then
System.out.println("hello");
end
我尝试了这种方式,并且确定列表项已从 Drools 工作内存中正确撤回,但 Java 端列表中的项目仍然继续存在。我想知道为什么列表项仍然存在,如何删除它(不显式销毁)。
这是 LinkedList 的 Drools 问题还是我没有正确理解 insertLogical 的用法?
我还尝试使用不是在 java.util 包中定义的 LinkedList 项,而是在 drools 中定义的“org.drools.core.util.LinkedList”,但编译时出现一些错误。
正确的解决方案是什么?谢谢
最佳答案
Java:有各种类型的对象。它们有自己的方法,并且使用集合(如 LinkedList),您可以调用方法来更改它们的组成,添加或删除元素。
有 Drools:它有一个很大的事实池(工作内存,WM),每个事实都是一个 Java 对象。升级到事实是通过插入操作完成的,并且事实可以通过撤消自动或显式地降级为它的 POJO 存在。
向集合中添加任何内容对于添加的对象是否是事实没有任何影响。相反,插入工作内存或从工作内存中删除都不会改变对象的 Java 风格的存在。
而且,列表是一个对象,它的元素是其他对象。每个对象都小心翼翼地维护自己作为事实的状态,并且集合并不关心其任何元素被提升或降级的两个问题 - 并且您可以打赌,列表元素不会关心其容器是否在集合中。与否 WM。
稍后
规则 1 很奇怪:它的右侧破坏了左侧的真实性,因为在索引 0 处添加了 Nodo(50)
。 list 对象,因此逻辑插入的事实不会立即撤回。更奇怪的是:RHS 插入了 WM 中已有的列表对象。
规则 2 永远不会执行,因为规则 1 中的添加不会向引擎发出信号。
规则 3 永远不会执行,因为 Nodo(50)
永远不会作为事实插入。
关于java - Java LinkedList 上的 Drools insertLogical,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24264692/
Drools中物理包和包声明有什么用。 例如, 我有一个规则,物理包com.mycompany中的Myrule.drl 据我所知,drools 中的包声明不依赖于文件所在的实际物理包。 所以我可以将
我是 drools 的新手,并且熟悉使用 extends 关键字来继承规则。问题有没有办法继承多个规则?这类似于在 java 类上使用多个接口(interface)。这是我希望它如何工作的示例,但我在
我们使用 Drools 作为解决方案的一部分,在非常密集的处理应用程序中充当一种过滤器,可能在 500,000 多个工作内存对象上运行多达 100 条规则。 事实证明它非常慢。 其他人有在批处理类型处
我是 Drools 的新手,正在尝试让示例程序正常工作。drools 文档 http://docs.jboss.org/drools/release/5.5.0.Final/drools-expert
我正在使用 drools-camel-server 5.4 Final 来执行从 jboss AS7 上的 guvnor 获取的规则,如下所示: 如何重新加载或重建知识库
我想将我的 .drl 文件预编译为 .class 文件,这样它们就不必在运行时编译。文档使它听起来像 kie-maven-plugin 这样做,但它没有为我生成任何东西。它编译规则文件但不输出任何内容
我正在尝试使用 Drools 向后链接来找出需要哪些事实才能将对象插入到工作内存中。在下面的示例中,我期望得到事实“go2”。 rule "ins a" when String( this =
是否可以通过规则名称触发 drool 文件中的规则?我的要求是,我的规则文件将包含所有规则的列表 (S)。但我有一个单独的配置,其中包含要触发的规则名称列表 (A)。注意 (A) 是 (S) 的子集。
我的项目使用 drools 专家手段 (DRL) 文件。在规则文件中,如果用户想删除和更新规则,应该怎么办? 规则文件: package com.sample; import com.sample.T
我被要求开始探索用于某些客户端演示的 Activiti 工具。 该演示还将包含与 Activiti 集成的 JBoss Drools。 我对这两种工具和业务流程世界都不熟悉,所以如果问题很愚蠢,请原谅
Ciao,我已经测试了几种方法,但我仍然无法在Drools Fusion中测试和验证事件过期机制,所以我正在寻找一些指导,好吗? 我已经阅读了手册,我对这个功能很感兴趣: In other words
我试图在 Drools 6.5 中创建两个独立的规则组,但我无法弄清楚规则流组和议程组策略的用例是什么。他们两个看起来很相似。 最佳答案 阅读文档... 2.6.4. RuleFowGroup 和 A
我是 Drools 新手。我正在创建规则,但出现编译时错误 "field is not visible'. 我尝试检查 Jboss 示例,其中使用方言“mvel”。它编译了。我听不懂方言。那么 dia
我正在尝试设置 kie 执行服务 (kie-server-services-6.2.0) 以供 kie-drools-wb-webapp-6.2.0 提供,当我尝试通过以下 webapp url执行服
我想实现规则引擎,其中如果仅执行一个条件,则它不会检查其他指定的条件。 rule "Print out lower-case tokens" when Token ( coveredText
我拥有所有必需的 JAR。尽管面临以下问题: java.lang.ClassCastException: org.drools.io.impl.ClassPathResource cannot be
我正在尝试 Redhat Drools,并且能够在 WildFly 环境中部署 Drools Workbench。我试图找出如何将规则公开为服务,但找不到关于如何做到这一点的文章。这是对 Drools
在使用 Drools 5.5 final 比较字符串值字段时,我遇到了一些令人费解的问题。 本质上,我试图找出是否有一对同名的人。 Person 类如下所示: public class Person
我正在寻找一个好的规则引擎。 我已经看到它存在两个好的项目:JBPM和Drools。 我不太了解两者之间的区别,也不知道要使用什么理想工具。 请您向我提供更多信息以及您在其他方面的经验,以及您认为最适
我们可以在 Excel 表格中编写 Drool 规则吗?规则可以用于简单的人类可读内容吗?如果我们可以,那该怎么做呢?请解释。 最佳答案 是的,你可以。阅读用户指南中名为“电子表格中的决策表”的部分如
我是一名优秀的程序员,十分优秀!