package study.java.drools;
import java.util.Collection;
import java.util.Iterator;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.KnowledgePackage;
import org.drools.io.impl.ClassPathResource;
import org.drools.runtime.StatefulKnowledgeSession;
import study.java.drools.apiTest.KnowledgeBuilderTest;
public class RuleEngine {
private static RuleEngine ruleEngine = new RuleEngine();
private RuleEngine() {
}
public static RuleEngine getInstance() {
return ruleEngine;
}
public StatefulKnowledgeSession runRules(Object[] facts, String[] ruleFiles) {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
if (ruleFiles != null) {
for (String ruleFile : ruleFiles) {
System.out.println("add ruleFile========" + ruleFile);
kbuilder.add(new ClassPathResource(ruleFile,
KnowledgeBuilderTest.class), ResourceType.DRL);
}
}
if (kbuilder.hasErrors()) {
System.out.println("规则中存在错误,错误消息如下");
KnowledgeBuilderErrors kbuidlerErrors = kbuilder.getErrors();
for (Iterator iter = kbuidlerErrors.iterator(); iter.hasNext();) {
System.out.println(iter.next());
}
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages(pkgs);
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
if (facts != null) {
for (int i = 0; i < facts.length; i++) {
Object fact = facts[i];
System.out.println("insert fact: " + fact);
ksession.insert(fact);
}
}
ksession.fireAllRules();
ksession.dispose();
return ksession;
}
}