Drools使用学习整理

根据需要,需要对系统已经使用的Drools进行版本升级,之前一直使用的是6.4版本的Drools,确实有点老了,而且API已经开始提示过期了。所以需要对API进行升级,因为是在生产中使用,所以决定在drools中选择最新最稳定的版本7.12,但是API发生了很大的变化,很多类的命名都已经改变,但是引用没变还是Kie-api,所以问题不大,我们按照API文档配置还是很容易的,下面我们来整理一下核心的关键类说明。Drools默认使用kmodule.xml来构建KieContainer,这样的话我们必须要写一个配置文件,这样的话动态新增修改就比较困难了,所以我们希望有通过代码来灵活定义的方式,有没有呢?答案是肯定的。所以们就通过代码的方式动态来定义KieContainer。

//1.获取一个KieServices
KieServices kieServices = KieServices.Factory.get();
//2.创建kiemodule xml对应的class
KieModuleModel kieModuleModel = kieServices.newKieModuleModel();
//3.创建KieFileSystem虚拟文件系统
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
//4.添加具体的KieBase标签
KieBaseModel kieBaseModel = kieModuleModel.newKieBaseModel("kbase").
        addPackage("myPackage");//kie fileSystem 中资源文件的文件夹
//<KieBase></KieBase>标签添加KieSession属性
kieBaseModel.newKieSessionModel("kiession");//a
//5.添加kiemodule.xml文件到虚拟文件系统
String kieModuleModelXml = kieModuleModel.toXML();
kieFileSystem.writeKModuleXML(kieModuleModelXml);//kieModuleModel
//6.把规则文件加载到虚拟文件系统
Resource resource = ResourceFactory.newClassPathResource(ruleFile, "UTF-8");
//这里是把规则文件添加到虚拟系统,第一个参数是文件在虚拟系统中的路径
kieFileSystem.write(resource);
//7.构建所有的KieBase并把所有的KieBase添加到仓库里
kieServices.newKieBuilder(kieFileSystem).buildAll();
KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());//创建kie容器
//8.从容器中获取一个会话,这里和a处添加的是一个key,否则找不到 找不到任何一个会报异常
KieSession kieSession = kieContainer.newKieSession("kiession");
private KieBase buildKieBase(String[] rules) {
		KieServices kieServices = KieServices.Factory.get();
		KieModuleModel kieModuleModel = kieServices.newKieModuleModel();
		KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase").setDefault(true)
				.setEqualsBehavior(EqualityBehaviorOption.EQUALITY)
				.setEventProcessingMode(EventProcessingOption.STREAM);
		kieBaseModel1.newKieSessionModel("KSession").setDefault(true).setType(KieSessionModel.KieSessionType.STATEFUL)
				.setClockType(ClockTypeOption.get("realtime"));
		KieFileSystem kfs = kieServices.newKieFileSystem();
		kfs.writeKModuleXML(kieModuleModel.toXML());
		for (int i = 0; i < rules.length; i++) {
			String ruleFile = rules[i];
			kfs.write(ResourceFactory.newClassPathResource(ruleFile, "UTF-8"));
		}
		kieServices.newKieBuilder(kfs).buildAll();
		KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
		KieBase kbase = kieContainer.getKieBase();
		this.kBase = kbase;
		return kbase;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值