Hello all,
I'd like to get Drools working in such a way that it is always running
and I can just stream new events into the runtime and have it execute
rules against them. From what I can tell I need to use stream mode in
order to do this. I've got everything set up for how I think it should
work (based on what I can decipher from the documentation) but what's
happening is that I'm never getting a hit on the rules I write. I can
see the event be asserted but nothing happens.
Here is my set up...
KnowledgeBaseConfiguration config =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
config.setOption(EventProcessingOption.STREAM);
setKnowledgeBase(KnowledgeBaseFactory.newKnowledgeBase(config));
// Create a knowledge agent to pull load the necessary resources
kagent = KnowledgeAgentFactory.newKnowledgeAgent("MyAgenda",
getKnowledgeBase());
initResources(kagent);
setKnowledgeBase(kagent.getKnowledgeBase());
getSession().addEventListener(new DebugAgendaEventListener());
getSession().addEventListener(new DebugWorkingMemoryEventListener());
And here is how I start up Drools...
thread = new Thread() {
@Override
public void run() {
getSession().fireUntilHalt();
}
};
thread.run();
I then feed events into the engine like this...
WorkingMemoryEntryPoint stream =
getSession().getWorkingMemoryEntryPoint(origin);
stream.insert(event);
I'm obviously missing something in my setup. Any help on understanding
how this is supposed to work is greatly appreciated. Again, the goal
here is to get Drools in a state that is always running so I can pipe in
events to it and have rules execute against them.
Jean-Philippe