package study.java.drools.RHS;
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 DroolsRHSFactDef {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
// 获取规则文件当中定义的Address对象并对其进行实例化
KnowledgeBuilder builder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
builder.add(new ClassPathResource("drools_fact_def.drl",
KnowledgeBuilderTest.class), ResourceType.DRL);
// 打印编译错误日志
if (builder.hasErrors()) {
System.out.println("规则中存在错误,错误消息如下");
KnowledgeBuilderErrors kbuidlerErrors = builder.getErrors();
for (Iterator iter = kbuidlerErrors.iterator(); iter.hasNext();) {
System.out.println(iter.next());
}
}
// 产生规则包的集合
Collection<KnowledgePackage> knowledgePackage = builder
.getKnowledgePackages();
KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
// 将KnowledgePackage集合添加到KnowledgeBase当中
knowledgeBase.addKnowledgePackages(knowledgePackage);
/*Order order = new Order();
order.setName("测试定单");
FactType addressType = knowledgeBase.getFactType("com.ai.drools.factdef", "Address");
Object add = addressType.newInstance();
addressType.set(add, "city", "中国上海");
addressType.set(add, "addressName", "中国上海松江�?);
// 获取规则文件当中定义的Person对象并对其进行实例化
FactType personFact = knowledgeBase.getFactType("com.ai.drools.factdef", "Person");
Object obj = personFact.newInstance();// 实例化该对象f
personFact.set(obj, "name", "高杰");// 设置该对象的name属�?
personFact.set(obj, "order", order);
personFact.set(obj, "address", add);*/
StatefulKnowledgeSession statefulKSession = knowledgeBase
.newStatefulKnowledgeSession();
// 插入�?��fact对象
// statefulKSession.insert(obj);
statefulKSession.fireAllRules();
statefulKSession.dispose();
}
}