I am trying to run following rules in Drool Fusion( Version 5.4.1 ), but it's not working.
Ideally it should print "HELLO WORLD" every 7 seconds, it's not even triggering once.
Can anybody please help me to understand the timer in 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(); } }
Thank you -Sanjay