Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JBossDrools从DRL插入事实_Java_Memory_Rules_Drools_Fact - Fatal编程技术网

Java JBossDrools从DRL插入事实

Java JBossDrools从DRL插入事实,java,memory,rules,drools,fact,Java,Memory,Rules,Drools,Fact,我需要我的工作记忆来了解DRL中创建的事实,如下所示: rule "Your First Rule" when $testRule : TestRule(count >= 100) then System.out.println("100 PACKETS"); end 有没有一种方法可以让WorkingMemory知道TestRule事实,然后能够被更新?我的目标是让规则知道何时收到100个数据包。通常我创建一些东西作为规则的一部分,并将其用作标志。例如,如果不需要创建

我需要我的工作记忆来了解DRL中创建的事实,如下所示:

rule "Your First Rule"
when
    $testRule : TestRule(count >= 100)
then 
    System.out.println("100 PACKETS");
end

有没有一种方法可以让WorkingMemory知道TestRule事实,然后能够被更新?我的目标是让规则知道何时收到100个数据包。

通常我创建一些东西作为规则的一部分,并将其用作标志。例如,如果不需要创建任何内容,则可以创建一个标志

rule "Your First Rule"
when
    $testRule : TestRule(count >= 100)
    not         Flag(id="packets")
then 
    System.out.println("100 PACKETS");
    insert( new Flag("packets") )
    update( $testRule )
end

我不认为这个代码是正确的,但我认为你可以得到这个想法。。。您需要创建一个名为Flag的类。更新需要告诉drools必须更新rete树。

这不会让工作内存知道任何事实,我也需要插入'Flag'类,这仍然需要我以某种方式使DRL插入事实我不理解你的观点,insert()告诉WM有关事实。您不需要从java将Flag类插入到工作内存中,只需要将其导入DRL,规则就会插入事实。那么,也许我在某个地方有一些不好的代码。目前,我的工作记忆没有从DRL中提取任何事实……我添加了一个额外的位(更新($testrule)),这可能会有所帮助。很奇怪,你能从规则中插入一个事实。在我正在使用的应用程序中,我们只插入一个java对象,然后我们有大约60条规则将该对象分解成许多事实。我相信这与我创建包、规则库和工作内存的位置有关