package com.sample;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import javax.mail.internet.NewsAddress;
import jxl.demo.Write;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.definition.KnowledgePackage;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import com.dao.UserDAO;
/**
* This is a sample class to launch a rule.
*/
public class DroolsTest3 {
public static final void main(String[] args) throws Exception {
System.out.println("This is a sample class to launch a rule.");
while (true) {
Scanner sc = new Scanner(System.in);
String input = sc.next();
if (input.equals("execute")) {
Person p = new Person();
p.setAge(27);
p.setName("john");
System.out.println("初始化规则引擎...");
executeRule(p);
System.out.println("规则执行结束.");
} else if (input.equals("provide")) {
provide();
}else if(input.equals("refresh")){
refreshKnowledgeBase();
System.out.println("规则刷新完成。");
}
}
}
/** 执行规则 */
private static void executeRule(Person p) throws Exception {
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
.newFileLogger(ksession, "test");
// 将fact实例P放入WorkMemory中
ksession.insert(p);
// 执行规则
ksession.fireAllRules();
logger.close();
}
/** 加载规则包 */
private static KnowledgeBase readKnowledgeBase() throws Exception {
// 加载规则文件
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
File f = new File("D:\\rules\\" + "Test.drl");
URL u = f.toURL();
System.out.println(u);
kbuilder.add(ResourceFactory.newUrlResource(u), ResourceType.DRL);
// 查找规则文件错误提示
KnowledgeBuilderErrors errors = kbuilder.getErrors();
if (errors.size() > 0) {
for (KnowledgeBuilderError error : errors) {
System.err.println(error);
}
throw new IllegalArgumentException("Could not parse knowledge.");
}
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
// 将规则包加入规则库当中
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
return kbase;
}
/** 规则刷新 */
private static KnowledgeBase refreshKnowledgeBase() throws Exception {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
// 遍历规则包
for (KnowledgePackage kpackage : kbase.getKnowledgePackages()) {
// 删除规则包
kbase.removeKnowledgePackage(kpackage.getName());
}
// 添加规则包
kbase = readKnowledgeBase();
return kbase;
}
/** 规则拼装 */
public static void provide() throws IOException, SQLException {
// 设定文件夹,如果不存在就创建
File demo = new File("D:\\rules");
if (!demo.exists()) {
demo.mkdir();
}
// 设定文件名称
File file = new File(demo, "Test.drl");
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(fos);
Writer out = new BufferedWriter(osw);
String myDrl = "";
List<User> list = new ArrayList<User>();
UserDAO dao = new UserDAO();
list=dao.findAll();
myDrl += "package com.sample\n";
for(User user:list){
myDrl+=user.getRuleValue();
}
out.write(myDrl);
System.out.println("文件生成成功!");
out.close();
}
}
drools5 规则动态加载,给出一个范例参考
4星 · 超过85%的资源 需积分: 50 53 浏览量
2015-08-30
15:44:46
上传
评论 1
收藏 1.04MB RAR 举报
csdn510
- 粉丝: 0
- 资源: 4
最新资源
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
- 鱼群算法求解组环问题python源码+文档说明
- 基于决策优化的多波束测深测线规划模型MATLAB代码
- 课程设计-基于python实现的多目标优化算法求解带时间窗的车辆路径规划问题+源代码+文档说明+界面截图+pptx
- 基于通信信号与通信系统的MATLAB仿真源码-课程设计
- 嵌入式-信号机制(概念,发送,定时,捕捉,SIGCHLD 信号实现回收子进程)
- c语言管理系统大一大二笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页