我正在尝试在 Drool Fusion(版本 5.4.1)中运行以下规则,但它不起作用。
理想情况下,它应该每 7 秒打印一次“HELLO WORLD”,甚至不会触发一次。
有人可以帮我理解 Drools 中的计时器吗?
import com.drools.message.Message rule "Test" timer(int: 7s 7s) when message:Message (type=="Hello") then System.out.println("Hello World, Drools! " + message.getMsgtext()); end
My code to run the above Rule is:
public class TestDrools { private static String DRL_FILE = "test_drools.drl"; private static KnowledgeBuilder kbuilder = KnowledgeBuilderFactory .newKnowledgeBuilder(); private static Collection pkgs; private static KnowledgeBase kbase = KnowledgeBaseFactory .newKnowledgeBase(); private static StatefulKnowledgeSession ksession; private static WorkingMemoryEntryPoint entryPoint; public static void main(String[] args) { init(); while (true) { Message msg = new Message(); msg.setType("Hello"); msg.setMsgtext("1"); ksession.insert(msg); } } private static void init() { initialiseDrools(); } private static void initialiseDrools() { kbuilder.add(ResourceFactory.newClassPathResource(DRL_FILE), ResourceType.DRL); if (kbuilder.hasErrors()) { System.out.println(kbuilder.getErrors().toString()); throw new RuntimeException("Unable to compile drl\"."); } pkgs = kbuilder.getKnowledgePackages(); KnowledgeBaseConfiguration config = KnowledgeBaseFactory .newKnowledgeBaseConfiguration(); config.setOption(EventProcessingOption.STREAM); kbase = KnowledgeBaseFactory.newKnowledgeBase(config); kbase.addKnowledgePackages(pkgs); KnowledgeSessionConfiguration conf = KnowledgeBaseFactory .newKnowledgeSessionConfiguration(); conf.setOption(ClockTypeOption.get("pseudo")); ksession = kbase.newStatefulKnowledgeSession(conf, null); entryPoint = ksession.getWorkingMemoryEntryPoint("entryone"); new Thread() { @Override public void run() { ksession.fireUntilHalt(); } }.start(); } }
谢谢-桑杰