Java JBossDrools从DRL插入事实
我需要我的工作记忆来了解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个数据包。通常我创建一些东西作为规则的一部分,并将其用作标志。例如,如果不需要创建
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条规则将该对象分解成许多事实。我相信这与我创建包、规则库和工作内存的位置有关