Drools规则没有解雇

时间:2015-06-12 22:11:47

标签: java drools

我的项目中的Drools规则没有触发。我检查了官方文档和教程(不仅是官方文档),一无所获。

这是我的规则:

package iwium.rules

import iwium.*;

rule "One"
    when
        $var : State();
    then
        $var.setName("fired!");
        System.out.println("fired!");
end

这就是我如何编制规则并解雇它们:

public void run()
{
    createKnowledgeBase();

    //I do need to use it in infinite loop
    while (true)
    {
        kSession = kBase.newStatefulKnowledgeSession();

        State state = new State();
        kSession.insert(state);

        kSession.fireAllRules();

        //to check if rule fired
        for (Object o: kSession.getObjects()) {
            if(o instanceof State) {
                State rs = (State) o;
                if(rs.getName().length() > 1)
                    System.out.println("done");
            }
        }

        kSession.dispose();
    }
}

private void createKnowledgeBase()
{
    this.kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    this.kBuilder.add(ResourceFactory.newClassPathResource(RULES_FILE), ResourceType.DRL);

    if (kBuilder.hasErrors())
    {
        System.err.println(kBuilder.getErrors().toString());
    }

    kBase = KnowledgeBaseFactory.newKnowledgeBase();
    kBase.addKnowledgePackages(kBuilder.getKnowledgePackages());
}

输出为空。

我还在调试器中检查过规则编译是否正确。

有谁知道这里可能出现什么问题?为什么这条规则没有解雇?

0 个答案:

没有答案
相关问题