1.创建一个drools工程:
2.创建一个Dynamic Web Project(主要体现远程加载规则文件,将规则文件放在这个工程中,并配上服务器):
其中,Sample.drl是个规则文件,在浏览器中访问如图所示:
3.再drools工程中创建一个类,我这里类名为:RemoteLoadRule,意思就是远程加载规则文件
代码为:
package com.sample;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import com.sample.DroolsTest.Message;
/**
* 远程加载规则文件
* @author sihang
*
*/
public class RemoteLoadRule {
public static void main(String [] args) {
//远程加载规则包
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newUrlResource("http://localhost:8080/test/Sample.drl"),
ResourceType.DRL);
//创建知识库
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
//将规则包加载到知识库中
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
//创建Fact对象
Message message = new Message();
message.setMessage("Hello World");
message.setStatus(Message.HELLO);
//创建KnowledgeSession,将Fact对象插入到WorkingMemory中
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
ksession.insert(message);
ksession.fireAllRules();
ksession.dispose();
}
}
4.运行RemoteLoadRule类,结果如下:
远程加载规则文件成功!
其中:如果远程 加载的规则是基于决策表类型的规则文件,则将ResourceType指定为决策表类型就可以了!
希望这篇文章对于研究规则引擎的人有所帮助!