drools规则引擎应用笔记
生活随笔
收集整理的這篇文章主要介紹了
drools规则引擎应用笔记
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
drools規則引擎筆記
文章目錄
- drools規則引擎筆記
- 一、使用示例
- 1.規則過濾器
- 2.session連接池
- 3.debug log
- 4.規則內容與模型互轉
- 二、規則編譯及動態加載
- 1.校驗jar包中的規則
- 2.自定義classloader
- 3.動態生成kjar并編譯規則
- 4.動態加載自定義類和規則文件
一、使用示例
1.規則過濾器
通過AgendaFilter限制fire,默認支持equals、startWith、endWith、Pattern,可自定義AgendaFilter。
final int count = kieSession.fireAllRules(new RuleNameEqualsAgendaFilter("rule1"));2.session連接池
- kContainer
- kieBase
drools.7.13.0 新特性
3.debug log
ksession.addEventListener( new DebugRuleRuntimeEventListener() );- pom.xml
- logback.xml
Drools engine event listeners and debug logging
4.規則內容與模型互轉
@Testpublic void testPackageDescr() {// 默認生成drlfinal PackageDescr descr = DescrFactory.newPackage().name("com.example.demo").newImport().target(java.util.List.class.getName()).end().newGlobal().type(java.util.List.class.getName()).identifier("count").end().newRule().name("rule1").attribute("enabled","true").lhs().pattern(Person.class.getName()).id("$p", false).constraint("name==\"張三\"").end().end().rhs("System.out.println($p);").end().end().getDescr();final String drl = new DrlDumper().dump(descr);System.out.println(drl);System.out.println("=================================================================");// drl解析成模型DrlParser drlParser = new DrlParser();final StringReader reader = new StringReader(drl);try {// 語法結構解析,不做環境校驗(例如Person類是否存在)final PackageDescr descr1 = drlParser.parse(reader);if (drlParser.hasErrors()) {System.out.println(drlParser.getErrors());throw new DroolsParserException("The model drl " + drl + " is not valid");} else {final String drl1 = new DrlDumper().dump(descr1);System.out.println(drl1);}} catch (DroolsParserException e) {e.printStackTrace();}}二、規則編譯及動態加載
1.校驗jar包中的規則
- KieContainer方式
- KieHelper方式
2.自定義classloader
- KieBuilder 方式
- KieHelper方式
3.動態生成kjar并編譯規則
@Testpublic void buildRulesTest() {KieServices ks = KieServices.Factory.get();ReleaseId releaseId = ks.newReleaseId("com.example", "demo", "1.0");// kieModule模型KieModuleModel kieModuleModel = ks.newKieModuleModel();kieModuleModel.newKieBaseModel().addPackage("com.example.demo").setDefault(true).newKieSessionModel("session").setType(KieSessionModel.KieSessionType.STATEFUL);// 內存文件系統KieFileSystem kfs = ks.newKieFileSystem().generateAndWritePomXML(releaseId).write("src/main/resources/com/example/demo/r1.drl", "package com.example.demo;\n" +"\n" +"import com.example.drools.Person \n" +"dialect \"mvel\"\n" +"\n" +"\n" +"\n" +"global java.lang.Integer count1;\n" +"\n" +"rule \"rule1\"\n" +" when\n" +" $p:Person(name == \"張三\")" +" then\n" +" System.out.println(\"rule1\");\n" +"end\n").writeKModuleXML(kieModuleModel.toXML());/*** 編譯并自動添加到repository倉庫* @see org.drools.compiler.kie.builder.impl.KieBuilderImpl#buildKieProject(org.drools.compiler.kie.builder.impl.ResultsImpl, org.drools.compiler.kie.builder.impl.KieModuleKieProject, org.drools.compiler.compiler.io.memory.MemoryFileSystem)*/final KieBuilder kieBuilder = ks.newKieBuilder(kfs).buildAll();final Results results = kieBuilder.getResults();final boolean b = results.hasMessages(Message.Level.ERROR);if (b) {System.out.println(results.getMessages());throw new RuntimeException(results.toString());} else {final KieContainer kieContainer = ks.newKieContainer(releaseId);KieSession ksession = kieContainer.newKieSession("session");final Person person = new Person();person.setName("張三");person.setAge(21);ksession.insert(person);int count = ksession.fireAllRules();ksession.dispose();System.out.println(count);}}4.動態加載自定義類和規則文件
- 常量
- 動態加載自定義類
- 動態加載規則文件
- 動態賦值及規則調用
視頻:
Drools7規則引擎從入門到精通
總結
以上是生活随笔為你收集整理的drools规则引擎应用笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大固其其
- 下一篇: 关于西门子STEP7 在Windows1