├── README.md ├── drools-demo ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── secbro │ │ └── drools │ │ ├── BaseTest.java │ │ ├── EmailService.java │ │ ├── model │ │ ├── Car.java │ │ ├── Customer.java │ │ ├── Message.java │ │ ├── Person.java │ │ └── Risk.java │ │ └── test │ │ ├── ConditionalNamedConsequencesTest.java │ │ ├── FunctionTest.java │ │ ├── GetNameAndPackageTest.java │ │ ├── GlobalTest.java │ │ ├── MapUsageTest.java │ │ ├── QueryTest.java │ │ └── SameObjectsTest.java │ └── resources │ ├── META-INF │ └── kmodule.xml │ └── com │ └── rules │ ├── comment │ └── comment.drl │ ├── conditional │ ├── conditional1.drl │ ├── conditional2.drl │ ├── conditional3.drl │ ├── conditional4.drl │ └── conditional5.drl │ ├── function │ └── function.drl │ ├── global │ └── global.drl │ ├── mapUsage │ └── map.drl │ ├── nameAndPackage │ └── nameAndPackage.drl │ ├── query │ └── query.drl │ └── sameObjects │ ├── same_objects.drl │ └── same_objects_list.drl ├── drools-lesson ├── .gitignore ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── secbro │ │ └── drools │ │ ├── BaseTest.java │ │ ├── chapter1 │ │ └── JdkVersionTest.java │ │ ├── chapter12 │ │ └── NoLoopTest.java │ │ ├── chapter13 │ │ └── RowFlowGroupTest.java │ │ ├── chapter14 │ │ └── LockOnActiveTest.java │ │ ├── chapter15 │ │ └── SalienceTest.java │ │ ├── chapter16 │ │ └── AgendaGroupTest.java │ │ ├── chapter17 │ │ └── AutoFocusTest.java │ │ ├── chapter18 │ │ └── ActivationGroupTest.java │ │ ├── chapter19 │ │ └── DateEffectiveTest.java │ │ ├── chapter2 │ │ └── Drools5ApiTest.java │ │ ├── chapter20 │ │ └── TimerTest.java │ │ ├── chapter21 │ │ └── CalenderTest.java │ │ ├── chapter23 │ │ └── LhsTest.java │ │ ├── chapter24 │ │ └── PatternTest.java │ │ ├── chapter25 │ │ └── MapAndListTest.java │ │ ├── chapter28 │ │ └── InsertTest.java │ │ ├── chapter29 │ │ └── UpdateTest.java │ │ ├── chapter3 │ │ └── Drools7ApiTest.java │ │ ├── chapter30 │ │ └── DeleteTest.java │ │ ├── chapter31 │ │ └── ModifyTest.java │ │ ├── chapter32 │ │ └── ConditionalTest.java │ │ ├── chapter33 │ │ └── QueryTest.java │ │ ├── chapter34 │ │ └── FunctionTest.java │ │ ├── chapter35 │ │ ├── EmailService.java │ │ └── GlobalTest.java │ │ ├── chapter37 │ │ └── ErrorTest.java │ │ ├── chapter39 │ │ └── NewTypeTest.java │ │ ├── chapter4 │ │ └── FactHandlerTest.java │ │ ├── chapter41 │ │ └── MetaTest.java │ │ ├── chapter44 │ │ └── DecisionTest.java │ │ ├── chapter5 │ │ └── StatelessSessionTest.java │ │ ├── model │ │ ├── Car.java │ │ ├── Goods.java │ │ ├── Person.java │ │ ├── Server.java │ │ └── SubPerson.java │ │ └── utils │ │ └── StringUtils.java │ └── resources │ ├── META-INF │ └── kmodule.xml │ ├── com │ ├── activationGroup │ │ └── activationGroup.drl │ ├── agendaGroup │ │ └── agendaGroup.drl │ ├── autoFocus │ │ └── autoFocus.drl │ ├── calenderTest │ │ └── calender.drl │ ├── conditional │ │ └── conditional.drl │ ├── dateEffective │ │ └── dateEffective.drl │ ├── decision │ │ └── decision.xls │ ├── deleteDemo │ │ └── delete.drl │ ├── errorDemo │ │ └── error.drl │ ├── functionDemo │ │ └── function.drl │ ├── globalDemo │ │ └── global.drl │ ├── insertDemo │ │ └── insert.drl │ ├── lhs │ │ └── lhs.drl │ ├── lockOnActive │ │ └── lockOnActive.drl │ ├── mapAndList │ │ └── mapAndList.drl │ ├── metaDemo │ │ └── meta.drl │ ├── modifyDemo │ │ └── modify.drl │ ├── newType │ │ └── NewType.drl │ ├── no-loop │ │ └── no-loop.drl │ ├── pattern │ │ └── pattern.drl │ ├── queryDemo │ │ └── query.drl │ ├── ruleFlowGroup │ │ ├── ruleFlowGroup1.drl │ │ └── ruleFlowGroup2.drl │ ├── rules │ │ ├── drool7Api.drl │ │ ├── factHandler.drl │ │ └── goods.drl │ ├── salienceTest │ │ └── salience.drl │ ├── stateless │ │ └── stateless,.drl │ ├── timerTest │ │ └── timer.drl │ └── updateDemo │ │ └── update.drl │ └── decision.xls ├── drools-lesson2 ├── .gitignore ├── drools-lesson2.iml ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── secbro2 │ │ └── drools │ │ ├── chapter3 │ │ ├── Chapter3.java │ │ └── DemoService.java │ │ ├── chapter4 │ │ └── Chapter4.java │ │ ├── chapter5 │ │ └── Chapter5.java │ │ ├── chapter6 │ │ └── Chapter6.java │ │ ├── chapter7 │ │ └── Chapter7.java │ │ ├── demo │ │ ├── AccumulateDemo.java │ │ ├── BaseDemo.java │ │ ├── CepDemo.java │ │ ├── ChannelService.java │ │ ├── CompareCollectionDemo.java │ │ ├── ContainsDemo.java │ │ ├── Demo10.java │ │ ├── Demo12.java │ │ ├── Demo13.java │ │ ├── Demo14.java │ │ ├── Demo15.java │ │ ├── Demo8.java │ │ ├── Demo9.java │ │ ├── DynamicDrlDemo.java │ │ ├── GlobalService.java │ │ ├── KieHelperDemo.java │ │ ├── MemberOfDemo.java │ │ ├── Person.java │ │ ├── RuleTemplateArrayDemo.java │ │ └── RuleTemplateObjectDemo.java │ │ ├── entity │ │ ├── Company.java │ │ ├── Corporation.java │ │ ├── Member.java │ │ └── Scope.java │ │ └── logger │ │ └── LoggerDemo.java │ └── resources │ ├── META-INF │ ├── beans.xml │ └── kmodule.xml │ └── com │ ├── accumu │ └── accumulate.drl │ ├── cep │ └── cep.drl │ ├── channel │ └── channel.drl │ ├── compareList │ └── compareListRule.drl │ ├── containsVar │ └── containsVar.drl │ ├── deployed │ └── rule1.drl │ ├── dsl │ ├── target.dslr │ └── template.dsl │ ├── dynamic.drl │ ├── global │ └── global.drl │ ├── logger │ └── logger.drl │ ├── memberof │ └── member.drl │ ├── rules │ ├── agenda.drl │ ├── chapter4.drl │ └── chapter5.drl │ └── template │ ├── template.drt │ └── template.xls ├── drools-lesson3 ├── .idea │ ├── compiler.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ ├── uiDesigner.xml │ ├── vcs.xml │ └── workspace.xml ├── drools-lesson3.iml ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── com │ │ ├── firstspace │ │ └── firstproject │ │ │ └── entity │ │ │ ├── Result.java │ │ │ └── User.java │ │ └── secbro2 │ │ └── client │ │ ├── CheckUserClientDemo.java │ │ └── ClientDemo.java └── target │ └── classes │ └── com │ ├── firstspace │ └── firstproject │ │ └── entity │ │ ├── Result.class │ │ └── User.class │ └── secbro2 │ └── client │ ├── CheckUserClientDemo.class │ └── ClientDemo.class ├── drools-lesson4 ├── .gitignore ├── .idea │ ├── compiler.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── junitgenerator-prj-settings.xml │ ├── misc.xml │ ├── uiDesigner.xml │ ├── vcs.xml │ └── workspace.xml ├── doc │ └── doc.md ├── drools-lesson4.iml ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── choupangxia │ │ │ ├── entity │ │ │ ├── Address.java │ │ │ └── Person.java │ │ │ └── utils │ │ │ └── GlobalUtil.java │ └── resources │ │ ├── META-INF │ │ └── kmodule.xml │ │ └── com │ │ ├── decision1 │ │ └── decision.xls │ │ ├── decision10 │ │ └── decision10.xls │ │ ├── decision11 │ │ └── decision11.xls │ │ ├── decision2 │ │ └── decision2.xls │ │ ├── decision3 │ │ └── decision3.xls │ │ ├── decision4 │ │ └── decision4.xls │ │ ├── decision5 │ │ └── decision5.xls │ │ ├── decision6 │ │ └── decision6.xls │ │ ├── decision7 │ │ └── decision7.xls │ │ ├── decision8 │ │ └── decision8.xls │ │ └── decision9 │ │ └── decision9.xls │ └── test │ └── java │ └── decision │ ├── TestAction.java │ ├── TestCondition.java │ ├── TestDecision1.java │ ├── TestDecision2.java │ ├── TestDecision3.java │ ├── TestDecision4.java │ ├── TestDecision5.java │ ├── TestFunctions.java │ ├── TestLoop.java │ ├── TestMultiFact.java │ └── TestMultiTables.java ├── kie-client ├── .idea │ ├── compiler.xml │ ├── inspectionProfiles │ │ └── Project_Default.xml │ ├── misc.xml │ ├── uiDesigner.xml │ ├── vcs.xml │ └── workspace.xml ├── kie-client.iml ├── pom.xml ├── src │ └── main │ │ └── java │ │ └── com │ │ ├── secbro2 │ │ └── client │ │ │ ├── ClientDemo.java │ │ │ ├── ClientWithEntityDemo.java │ │ │ └── UserClientDemo.java │ │ └── testspace │ │ └── firstproject │ │ └── entity │ │ ├── User.java │ │ └── UserCheckResult.java └── target │ ├── classes │ └── com │ │ ├── drools │ │ └── test │ │ │ ├── DroolsTest.class │ │ │ └── Person.class │ │ ├── secbro2 │ │ └── client │ │ │ ├── ClientDemo.class │ │ │ ├── ClientWithEntityDemo.class │ │ │ └── UserClientDemo.class │ │ └── testspace │ │ └── firstproject │ │ └── entity │ │ ├── User.class │ │ └── UserCheckResult.class │ ├── kie-client-1.0-SNAPSHOT.jar │ ├── maven-archiver │ └── pom.properties │ └── maven-status │ └── maven-compiler-plugin │ ├── compile │ └── default-compile │ │ └── inputFiles.lst │ └── testCompile │ └── default-testCompile │ └── inputFiles.lst ├── new-card.png └── springboot-drools-reload-rules ├── .gitignore ├── pom.xml └── src └── main ├── java └── com │ └── secbro │ └── drools │ ├── SpringBootDroolsApplication.java │ ├── component │ └── ReloadDroolsRules.java │ ├── config │ └── DroolsAutoConfiguration.java │ ├── controller │ └── TestController.java │ ├── model │ ├── Address.java │ ├── Rule.java │ └── fact │ │ └── AddressCheckResult.java │ └── utils │ └── KieUtils.java └── resources ├── application.properties └── rules ├── address.drl └── temp.drl /README.md: -------------------------------------------------------------------------------- 1 | ## Drools7-examples 2 | Examples about drools7. Some examples are based on spring-boot. 3 | 4 | - [springboot-drools-reload-rules](https://github.com/secbr/drools/tree/master/springboot-drools-reload-rules) : The examples of integration with springboot and how to use the api to reload rules. 5 | 6 | - [drools-lesson](https://github.com/secbr/drools/tree/master/drools-lesson): 7 | The code of Drools7 lesson(Drools 7 入门视频教程地址):http://edu.csdn.net/course/detail/5523 8 | - [drools-lesson2](https://github.com/secbr/drools/tree/master/drools-lesson2): 9 | The code of Drools7 lesson2(Drools 7 进阶视频教程地址):https://edu.csdn.net/course/detail/10555 10 | - [drools-demo](https://github.com/secbr/drools/tree/master/drools-demo):The examples of drools. 11 | - 视频套餐链接:https://edu.csdn.net/combo/detail/1142 12 | 13 | |Class|Description| 14 | |--|--| 15 | |[ConditionalNamedConsequencesTest.java](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/ConditionalNamedConsequencesTest.java)|The examples of 'Conditional Named Consequences'| 16 | |[SameObjectsTest.java](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/SameObjectsTest.java)|Comparing two instances of same objects in Drools (by list)| 17 | |[GetNameAndPackageTest.java](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/GetNameAndPackageTest.java)|Get the name and package in the rules| 18 | |[GlobalTest.java](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/GlobalTest.java)|Examples of global usage| 19 | |[QueryTest](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/QueryTest.java)|Examples of query usage| 20 | |[MapUsageTest](https://github.com/secbr/drools/blob/master/drools-demo/src/main/java/com/secbro/drools/test/MapUsageTest.java)|Examples of Map usage| 21 | |[FactHandlerTest](https://github.com/secbr/drools/blob/master/drools-lesson/src/main/java/com/secbro/drools/chapter4/FactHandlerTest.java)|Examples of FactHandler usage| 22 | |[StatelessSessionTest](https://github.com/secbr/drools/blob/master/drools-lesson/src/main/java/com/secbro/drools/chapter5/StatelessSessionTest.java)|Examples of StatelessKieSession usage| 23 | 24 | 25 | ## Contact and Exchange 26 | 27 | Join in QQ Group:593177274(已满),715840230(2群); 28 | 29 | Or,send email to secbro2@gmail.com; 30 | 31 | My Blog: www.choupangxia.com 32 | ## 相关文章 33 | [《drools规则引擎-判断集合是否包含集合》](http://www.choupangxia.com/2019/07/14/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-%e5%88%a4%e6%96%ad%e9%9b%86%e5%90%88%e6%98%af%e5%90%a6%e5%8c%85%e5%90%ab%e9%9b%86%e5%90%88/) 34 | 35 | [《drools规则引擎-memberOf操作》](https://www.choupangxia.com/2019/07/15/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-memberof%e6%93%8d%e4%bd%9c/) 36 | 37 | ## Remark 38 | The examples are keep on updating. 39 | If it is useful to you, please give a Star to me. 40 | 41 | 更多信息可关注个人微信公众号:程序新视界 42 | 43 | ![程序新视界](https://www.choupangxia.com/wp-content/uploads/2019/07/weixin.jpg) 44 | -------------------------------------------------------------------------------- /drools-demo/.gitignore: -------------------------------------------------------------------------------- 1 | ##ignore this file## 2 | 3 | /target/ 4 | .idea 5 | *.iml 6 | -------------------------------------------------------------------------------- /drools-demo/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.secbro.drools 8 | drools-demo 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 13 | org.apache.maven.plugins 14 | maven-compiler-plugin 15 | 16 | 1.8 17 | 1.8 18 | 19 | 20 | 21 | 22 | 23 | 24 | 7.0.0.Final 25 | 26 | 27 | 28 | 29 | junit 30 | junit 31 | 4.12 32 | 33 | 34 | org.kie 35 | kie-api 36 | ${drools.version} 37 | 38 | 39 | org.drools 40 | drools-core 41 | ${drools.version} 42 | 43 | 44 | org.drools 45 | drools-compiler 46 | ${drools.version} 47 | 48 | 49 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/BaseTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.runtime.KieContainer; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * Created by zhuzs on 2017/8/4. 9 | */ 10 | public class BaseTest { 11 | 12 | protected KieSession getKieSession(String agendaGroup){ 13 | KieSession kieSession = getKieSession(); 14 | kieSession.getAgenda().getAgendaGroup(agendaGroup).setFocus(); 15 | return kieSession; 16 | } 17 | 18 | protected KieSession getKieSession(){ 19 | KieServices kieServices = KieServices.get(); 20 | KieContainer kieContainer = kieServices.getKieClasspathContainer(); 21 | KieSession kieSession = kieContainer.newKieSession("all-rules"); 22 | return kieSession; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/EmailService.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools; 2 | 3 | import com.secbro.drools.model.Message; 4 | 5 | /** 6 | * Created by zhuzs on 2017/8/11. 7 | */ 8 | public class EmailService { 9 | 10 | public void sendEmail(Message message){ 11 | System.out.println("Send message to email,the fired rule is '" + message.getRule() 12 | + "', and description is '" + message.getDesc() + "'"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/model/Car.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/4. 5 | */ 6 | public class Car { 7 | 8 | private boolean freeParking; 9 | 10 | private Customer owner; 11 | 12 | public boolean isFreeParking() { 13 | return freeParking; 14 | } 15 | 16 | public void setFreeParking(boolean freeParking) { 17 | this.freeParking = freeParking; 18 | } 19 | 20 | public Customer getOwner() { 21 | return owner; 22 | } 23 | 24 | public void setOwner(Customer owner) { 25 | this.owner = owner; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/model/Customer.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/4. 5 | */ 6 | public class Customer { 7 | 8 | private double discount; 9 | 10 | private int age; 11 | 12 | private String type; 13 | 14 | public int getAge() { 15 | return age; 16 | } 17 | 18 | public void setAge(int age) { 19 | this.age = age; 20 | } 21 | 22 | 23 | public double getDiscount() { 24 | return discount; 25 | } 26 | 27 | public void setDiscount(double discount) { 28 | this.discount = discount; 29 | } 30 | 31 | public String getType() { 32 | return type; 33 | } 34 | 35 | public void setType(String type) { 36 | this.type = type; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/model/Message.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/11. 5 | */ 6 | public class Message { 7 | 8 | private String rule; 9 | 10 | private String desc; 11 | 12 | public String getDesc() { 13 | return desc; 14 | } 15 | 16 | public void setDesc(String desc) { 17 | this.desc = desc; 18 | } 19 | 20 | public String getRule() { 21 | return rule; 22 | } 23 | 24 | public void setRule(String rule) { 25 | this.rule = rule; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/model/Person.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/20. 5 | */ 6 | public class Person { 7 | 8 | private int age; 9 | 10 | private String name; 11 | 12 | public int getAge() { 13 | return age; 14 | } 15 | 16 | public void setAge(int age) { 17 | this.age = age; 18 | } 19 | 20 | public String getName() { 21 | return name; 22 | } 23 | 24 | public void setName(String name) { 25 | this.name = name; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/model/Risk.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/11. 5 | */ 6 | public class Risk { 7 | 8 | private String msg; 9 | 10 | public String getMsg() { 11 | return msg; 12 | } 13 | 14 | public void setMsg(String msg) { 15 | this.msg = msg; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/ConditionalNamedConsequencesTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Car; 5 | import com.secbro.drools.model.Customer; 6 | import org.junit.Test; 7 | import org.kie.api.runtime.KieSession; 8 | 9 | /** 10 | * Created by zhuzs on 2017/8/4. 11 | */ 12 | public class ConditionalNamedConsequencesTest extends BaseTest { 13 | 14 | @Test 15 | public void testConditional1() { 16 | KieSession kieSession = getKieSession("conditional1"); 17 | 18 | Customer customer = new Customer(); 19 | customer.setAge(61); 20 | kieSession.insert(customer); 21 | 22 | Car car = new Car(); 23 | car.setOwner(customer); 24 | kieSession.insert(car); 25 | 26 | int count = kieSession.fireAllRules(); 27 | 28 | kieSession.dispose(); 29 | System.out.println("Fire " + count + " rules!"); 30 | } 31 | 32 | @Test 33 | public void testConditional2() { 34 | KieSession kieSession = getKieSession("conditional2"); 35 | 36 | Customer customer = new Customer(); 37 | customer.setAge(61); 38 | kieSession.insert(customer); 39 | 40 | Car car = new Car(); 41 | car.setOwner(customer); 42 | kieSession.insert(car); 43 | 44 | int count = kieSession.fireAllRules(); 45 | 46 | kieSession.dispose(); 47 | System.out.println("Fire " + count + " rules!"); 48 | } 49 | 50 | @Test 51 | public void testConditional3() { 52 | KieSession kieSession = getKieSession("conditional3"); 53 | 54 | Customer customer = new Customer(); 55 | customer.setAge(61); 56 | kieSession.insert(customer); 57 | 58 | Car car = new Car(); 59 | car.setOwner(customer); 60 | kieSession.insert(car); 61 | 62 | int count = kieSession.fireAllRules(); 63 | 64 | kieSession.dispose(); 65 | System.out.println("Fire " + count + " rules!"); 66 | } 67 | 68 | @Test 69 | public void testConditional4() { 70 | KieSession kieSession = getKieSession("conditional4"); 71 | 72 | Customer customer = new Customer(); 73 | customer.setAge(61); 74 | customer.setType("Golden"); 75 | kieSession.insert(customer); 76 | 77 | Car car = new Car(); 78 | car.setOwner(customer); 79 | kieSession.insert(car); 80 | 81 | int count = kieSession.fireAllRules(); 82 | 83 | kieSession.dispose(); 84 | System.out.println("Fire " + count + " rules!"); 85 | } 86 | 87 | @Test 88 | public void testConditional5() { 89 | KieSession kieSession = getKieSession("conditional5"); 90 | 91 | Customer customer = new Customer(); 92 | customer.setAge(61); 93 | customer.setType("Silver"); 94 | kieSession.insert(customer); 95 | 96 | Car car = new Car(); 97 | car.setOwner(customer); 98 | kieSession.insert(car); 99 | 100 | int count = kieSession.fireAllRules(); 101 | System.out.println("Golden : fire " + count + " rules!"); 102 | kieSession.dispose(); 103 | 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/FunctionTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * Created by zhuzs on 2017/8/22. 9 | */ 10 | public class FunctionTest extends BaseTest{ 11 | 12 | 13 | @Test 14 | public void testFunction(){ 15 | KieSession kieSession = this.getKieSession("function-group"); 16 | int count = kieSession.fireAllRules(); 17 | kieSession.dispose(); 18 | System.out.println("Fire " + count + " rule(s)!"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/GetNameAndPackageTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * Created by zhuzs on 2017/8/11. 9 | */ 10 | public class GetNameAndPackageTest extends BaseTest{ 11 | 12 | @Test 13 | public void test(){ 14 | KieSession kieSession = this.getKieSession("Name and package"); 15 | int count = kieSession.fireAllRules(); 16 | kieSession.dispose(); 17 | 18 | System.out.println("Fire " + count + " rule(s)!"); 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/GlobalTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.EmailService; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | /** 9 | * Created by zhuzs on 2017/8/11. 10 | */ 11 | public class GlobalTest extends BaseTest{ 12 | 13 | @Test 14 | public void testGlobal(){ 15 | KieSession kieSession = this.getKieSession("test-global-group"); 16 | 17 | EmailService emailService = new EmailService(); 18 | kieSession.setGlobal("emailService",emailService); 19 | int count = kieSession.fireAllRules(); 20 | kieSession.dispose(); 21 | System.out.println("Fire " + count + " rule(s)!"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/MapUsageTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | import javax.sound.midi.Soundbank; 9 | import java.util.HashMap; 10 | import java.util.Map; 11 | 12 | /** 13 | * Map usage 14 | * Created by zhuzs on 2017/8/31. 15 | */ 16 | public class MapUsageTest extends BaseTest { 17 | 18 | @Test 19 | public void testMapUsage() { 20 | KieSession kieSession = this.getKieSession("map-group"); 21 | 22 | Map map = new HashMap<>(); 23 | Person p1 = new Person(); 24 | p1.setAge(10); 25 | map.put("p1",p1); 26 | 27 | Person p2 = new Person(); 28 | p2.setAge(20); 29 | map.put("p2",p2); 30 | 31 | kieSession.insert(map); 32 | 33 | int count = kieSession.fireAllRules(); 34 | System.out.println("Fire " + count + " rule(s)!"); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/QueryTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.QueryResults; 8 | import org.kie.api.runtime.rule.QueryResultsRow; 9 | 10 | /** 11 | * Created by zhuzs on 2017/8/20. 12 | */ 13 | public class QueryTest extends BaseTest { 14 | 15 | @Test 16 | public void queryTest() { 17 | KieSession kieSession = this.getKieSession("query-test-group1"); 18 | 19 | Person p1 = new Person(); 20 | p1.setAge(29); 21 | Person p2 = new Person(); 22 | p2.setAge(40); 23 | 24 | kieSession.insert(p1); 25 | kieSession.insert(p2); 26 | int count = kieSession.fireAllRules(); 27 | System.out.println("Fire " +count + " rule(s)!"); 28 | 29 | QueryResults results = kieSession.getQueryResults("query-1"); 30 | System.out.println("results size is " + results.size()); 31 | for(QueryResultsRow row : results){ 32 | Person person = (Person) row.get("$person"); 33 | System.out.println("Person from WM, age : " + person.getAge()); 34 | } 35 | 36 | kieSession.dispose(); 37 | } 38 | 39 | @Test 40 | public void queryWithParamTest() { 41 | KieSession kieSession = this.getKieSession("query-test-group1"); 42 | 43 | Person p1 = new Person(); 44 | p1.setAge(29); 45 | p1.setName("Ross"); 46 | Person p2 = new Person(); 47 | p2.setAge(40); 48 | p2.setName("Tom"); 49 | 50 | kieSession.insert(p1); 51 | kieSession.insert(p2); 52 | int count = kieSession.fireAllRules(); 53 | System.out.println("Fire " +count + " rule(s)!"); 54 | 55 | QueryResults results = kieSession.getQueryResults("query-2","Tom"); 56 | System.out.println("results size is " + results.size()); 57 | for(QueryResultsRow row : results){ 58 | Person person = (Person) row.get("$person"); 59 | System.out.println("Person from WM, age : " + person.getAge() + "; name :" + person.getName()); 60 | } 61 | 62 | kieSession.dispose(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /drools-demo/src/main/java/com/secbro/drools/test/SameObjectsTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.test; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Customer; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | /** 12 | * Created by zhuzs on 2017/8/7. 13 | */ 14 | public class SameObjectsTest extends BaseTest { 15 | 16 | @Test 17 | public void testSameObjects() { 18 | KieSession kieSession = getKieSession("two same objects"); 19 | 20 | Customer customer = new Customer(); 21 | customer.setAge(61); 22 | kieSession.insert(customer); 23 | 24 | Customer customer1 = new Customer(); 25 | customer1.setAge(59); 26 | kieSession.insert(customer1); 27 | 28 | int count = kieSession.fireAllRules(); 29 | 30 | kieSession.dispose(); 31 | System.out.println("Fire " + count + " rules!"); 32 | } 33 | 34 | @Test 35 | public void testSameObjectsInList() { 36 | KieSession kieSession = getKieSession("two same objects in list"); 37 | 38 | List list = new ArrayList<>(); 39 | Customer customer = new Customer(); 40 | customer.setAge(61); 41 | list.add(customer); 42 | 43 | Customer customer1 = new Customer(); 44 | customer1.setAge(59); 45 | list.add(customer1); 46 | kieSession.insert(list); 47 | 48 | int count = kieSession.fireAllRules(); 49 | 50 | kieSession.dispose(); 51 | System.out.println("Fire " + count + " rules!"); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/META-INF/kmodule.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/comment/comment.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | rule "Testing Comments" 4 | agenda-group "comments" 5 | when 6 | // this is a single line comment 7 | eval( true ) // this is a comment in the same line of a pattern 8 | then 9 | // this is a comment inside a semantic code block 10 | end 11 | 12 | rule "Test Multi-line Comments" 13 | agenda-group "comments" 14 | when 15 | /* this is a multi-line comment 16 | in the left hand side of a rule */ 17 | eval( true ) 18 | then 19 | /* and this is a multi-line comment 20 | in the right hand side of a rule */ 21 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/conditional/conditional1.drl: -------------------------------------------------------------------------------- 1 | package com.rules.conditional 2 | import com.secbro.drools.model.Customer; 3 | import com.secbro.drools.model.Car; 4 | 5 | rule "conditional1:Give 10% discount to customers older than 60" 6 | agenda-group "conditional1" 7 | when 8 | $customer : Customer( age > 60 ) 9 | then 10 | modify($customer) { setDiscount( 0.1 ) }; 11 | System.out.println("Give 10% discount to customers older than 60"); 12 | end 13 | 14 | rule "conditional1:Give free parking to customers older than 60" 15 | agenda-group "conditional1" 16 | when 17 | $customer : Customer( age > 60 ) 18 | $car : Car ( owner == $customer ) 19 | then 20 | modify($car) { setFreeParking( true ) }; 21 | System.out.println("Give free parking to customers older than 60"); 22 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/conditional/conditional2.drl: -------------------------------------------------------------------------------- 1 | package com.rules.conditional 2 | import com.secbro.drools.model.Customer; 3 | import com.secbro.drools.model.Car; 4 | 5 | rule "conditional2:Give 10% discount to customers older than 60" 6 | agenda-group "conditional2" 7 | when 8 | $customer : Customer( age > 60 ) 9 | then 10 | modify($customer) { setDiscount( 0.1 ) }; 11 | System.out.println("conditional2:Give 10% discount to customers older than 60"); 12 | end 13 | 14 | rule "conditional2:Give free parking to customers older than 60" 15 | extends "conditional2:Give 10% discount to customers older than 60" 16 | agenda-group "conditional2" 17 | when 18 | $car : Car ( owner == $customer ) 19 | then 20 | modify($car) { setFreeParking( true ) }; 21 | System.out.println("conditional2:Give free parking to customers older than 60"); 22 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/conditional/conditional3.drl: -------------------------------------------------------------------------------- 1 | package com.rules.conditional 2 | import com.secbro.drools.model.Customer; 3 | import com.secbro.drools.model.Car; 4 | 5 | rule "conditional3:Give 10% discount to customers older than 60" 6 | agenda-group "conditional3" 7 | when 8 | $customer : Customer( age > 60 ) 9 | do[giveDiscount] 10 | $car : Car(owner == $customer) 11 | then 12 | modify($car) { setFreeParking(true) }; 13 | System.out.println("conditional3:Give free parking to customers older than 60"); 14 | then[giveDiscount] 15 | modify($customer){ 16 | setDiscount(0.1) 17 | }; 18 | System.out.println("conditional3:Give 10% discount to customers older than 60"); 19 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/conditional/conditional4.drl: -------------------------------------------------------------------------------- 1 | package com.rules.conditional 2 | import com.secbro.drools.model.Customer; 3 | import com.secbro.drools.model.Car; 4 | 5 | rule "conditional4:Give 10% discount to customers older than 60" 6 | agenda-group "conditional4" 7 | when 8 | $customer : Customer( age > 60 ) 9 | if(type == "Golden") do[giveDiscount] 10 | $car : Car(owner == $customer) 11 | then 12 | modify($car) { setFreeParking(true) }; 13 | System.out.println("conditional4:Give free parking to customers older than 60"); 14 | then[giveDiscount] 15 | modify($customer){ 16 | setDiscount(0.1) 17 | }; 18 | System.out.println("conditional4:Give 10% discount to customers older than 60"); 19 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/conditional/conditional5.drl: -------------------------------------------------------------------------------- 1 | package com.rules.conditional 2 | import com.secbro.drools.model.Customer; 3 | import com.secbro.drools.model.Car; 4 | 5 | rule "conditional5:Give 10% discount to customers older than 60" 6 | agenda-group "conditional5" 7 | when 8 | $customer : Customer( age > 60 ) 9 | if(type == "Golden") do[giveDiscount10] 10 | else if (type == "Silver") break[giveDiscount5] 11 | $car : Car(owner == $customer) 12 | then 13 | modify($car) { setFreeParking(true) }; 14 | System.out.println("conditional5:Give free parking to customers older than 60"); 15 | then[giveDiscount10] 16 | modify($customer){ 17 | setDiscount(0.1) 18 | }; 19 | System.out.println("giveDiscount10:Give 10% discount to customers older than 60"); 20 | then[giveDiscount5] 21 | modify($customer){ 22 | setDiscount(0.05) 23 | }; 24 | System.out.println("giveDiscount5:Give 10% discount to customers older than 60"); 25 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/function/function.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | function String hello(String name){ 4 | return "Hello " + name + "!"; 5 | } 6 | 7 | rule helloSomeone 8 | 9 | agenda-group "function-group" 10 | 11 | when 12 | eval(true); 13 | then 14 | System.out.println(hello("Tom")); 15 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/global/global.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro.drools.model.Risk 3 | import com.secbro.drools.model.Message 4 | 5 | global com.secbro.drools.EmailService emailService 6 | 7 | rule "test-global" 8 | 9 | agenda-group "test-global-group" 10 | 11 | when 12 | then 13 | Message message = new Message(); 14 | message.setRule(drools.getRule().getName()); 15 | message.setDesc("to send email!"); 16 | emailService.sendEmail(message); 17 | end -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/mapUsage/map.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import java.util.Map; 3 | import com.secbro.drools.model.Person; 4 | 5 | rule "map-usage" 6 | 7 | agenda-group "map-group" 8 | 9 | when 10 | $obj : Object(); 11 | $map : Map(["p1"] != $obj); 12 | then 13 | System.out.println("p1's age is " + ((Person)$map.get("p1")).getAge()); 14 | System.out.println("p2's age is " + ((Person)$map.get("p2")).getAge()); 15 | end 16 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/nameAndPackage/nameAndPackage.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | rule "Get name and package demo" 4 | 5 | agenda-group "Name and package" 6 | 7 | when 8 | then 9 | System.out.println("The rule's name is '" + drools.getRule().getName() + "'"); 10 | System.out.println("The rule's package is '" + drools.getRule().getPackageName() + "'"); 11 | end 12 | 13 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/query/query.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro.drools.model.Person; 3 | 4 | rule "query-test" 5 | agenda-group "query-test-group1" 6 | 7 | when 8 | $person : Person() 9 | then 10 | System.out.println("The rule query-test fired!"); 11 | end 12 | 13 | query "query-1" 14 | $person : Person(age > 30) 15 | end 16 | 17 | query "query-2"(String nameParam) 18 | $person : Person(age > 30,name == nameParam) 19 | end 20 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/sameObjects/same_objects.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | import com.secbro.drools.model.Customer; 4 | 5 | rule "two same objects" 6 | agenda-group "two same objects" 7 | when 8 | $firstCustomer:Customer(age == 59); 9 | $secondCustomer:Customer(this != $firstCustomer,age == 61); 10 | then 11 | System.out.println("firstCustomer age :" + $firstCustomer.getAge()); 12 | System.out.println("secondCustomer age :" + $secondCustomer.getAge()); 13 | end 14 | -------------------------------------------------------------------------------- /drools-demo/src/main/resources/com/rules/sameObjects/same_objects_list.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | import com.secbro.drools.model.Customer; 4 | import java.util.List; 5 | 6 | rule "two same objects in list" 7 | agenda-group "two same objects in list" 8 | when 9 | $list : List(); 10 | $firstCustomer:Customer(age == 59) from $list; 11 | $secondCustomer:Customer(this != $firstCustomer,age == 61) from $list; 12 | then 13 | System.out.println("two same objects in list:firstCustomer age :" + $firstCustomer.getAge()); 14 | System.out.println("two same objects in list:secondCustomer age :" + $secondCustomer.getAge()); 15 | end 16 | -------------------------------------------------------------------------------- /drools-lesson/.gitignore: -------------------------------------------------------------------------------- 1 | ##ignore this file## 2 | 3 | /target/ 4 | .idea 5 | *.iml 6 | -------------------------------------------------------------------------------- /drools-lesson/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.secbro 8 | drools-lesson 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 7.0.0.Final 13 | 14 | 15 | 16 | 17 | junit 18 | junit 19 | 4.12 20 | 21 | 22 | org.kie 23 | kie-api 24 | ${drools.version} 25 | 26 | 27 | org.drools 28 | drools-core 29 | ${drools.version} 30 | 31 | 32 | org.drools 33 | drools-compiler 34 | ${drools.version} 35 | 36 | 37 | org.opensymphony.quartz 38 | quartz 39 | 1.6.1 40 | 41 | 42 | org.drools 43 | drools-decisiontables 44 | ${drools.version} 45 | 46 | 47 | 48 | 49 | 50 | 51 | org.apache.maven.plugins 52 | maven-compiler-plugin 53 | 54 | 1.8 55 | 1.8 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/BaseTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.runtime.KieContainer; 5 | import org.kie.api.runtime.KieSession; 6 | import org.kie.api.runtime.StatelessKieSession; 7 | 8 | /** 9 | * Created by zhuzs on 2017/8/9. 10 | */ 11 | public class BaseTest { 12 | 13 | protected KieSession getKieSession() { 14 | KieServices kieServices = KieServices.get(); 15 | KieContainer kieContainer = kieServices.getKieClasspathContainer(); 16 | KieSession kieSession = kieContainer.newKieSession("all-rules"); 17 | 18 | return kieSession; 19 | } 20 | 21 | protected KieSession getKieSessionBySessionName(String sessionName) { 22 | KieContainer kieContainer = getKieContainer(); 23 | KieSession kieSession = kieContainer.newKieSession(sessionName); 24 | return kieSession; 25 | } 26 | 27 | protected KieContainer getKieContainer(){ 28 | KieServices kieServices = KieServices.get(); 29 | KieContainer kieContainer = kieServices.getKieClasspathContainer(); 30 | return kieContainer; 31 | } 32 | 33 | protected KieSession getKieSession(String agendaGroupName) { 34 | KieSession kieSession = getKieSession(); 35 | kieSession.getAgenda().getAgendaGroup(agendaGroupName).setFocus(); 36 | return kieSession; 37 | } 38 | 39 | protected StatelessKieSession getStatelessKieSession() { 40 | KieContainer kieContainer = getKieContainer(); 41 | StatelessKieSession kieSession = kieContainer.newStatelessKieSession("stateless-rules"); 42 | 43 | return kieSession; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter1/JdkVersionTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter1; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * Created by zhuzs on 2017/8/9. 9 | */ 10 | public class JdkVersionTest extends BaseTest{ 11 | 12 | @Test 13 | public void testJdkVersion(){ 14 | KieSession kieSession = getKieSession(); 15 | int count = kieSession.fireAllRules(); 16 | kieSession.dispose(); 17 | 18 | System.out.println("Fire " + count + " rules!"); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter12/NoLoopTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter12; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | public class NoLoopTest extends BaseTest{ 9 | 10 | @Test 11 | public void testNoLoop(){ 12 | KieSession kieSession = this.getKieSessionBySessionName("no-loop-rules"); 13 | 14 | Person p = new Person(); 15 | p.setAge(5); 16 | 17 | kieSession.insert(p); 18 | kieSession.fireAllRules(); 19 | kieSession.dispose(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter13/RowFlowGroupTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter13; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | public class RowFlowGroupTest extends BaseTest{ 8 | 9 | @Test 10 | public void testRowFlowGroup(){ 11 | KieSession kieSession = this.getKieSessionBySessionName("ruleFlowGroup-rules"); 12 | kieSession.getAgenda().getAgendaGroup("rule-flow-group-1").setFocus(); 13 | 14 | kieSession.fireAllRules(); 15 | kieSession.getAgenda().getAgendaGroup("rule-flow-group-2").setFocus(); 16 | kieSession.fireAllRules(); 17 | 18 | kieSession.getAgenda().getAgendaGroup("rule-flow-group-1").setFocus(); 19 | kieSession.fireAllRules(); 20 | 21 | kieSession.getAgenda().getAgendaGroup("rule-flow-group-2").setFocus(); 22 | kieSession.fireAllRules(); 23 | kieSession.dispose(); 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter14/LockOnActiveTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter14; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | public class LockOnActiveTest extends BaseTest{ 9 | 10 | @Test 11 | public void testLockOnActive(){ 12 | KieSession kieSession = this.getKieSessionBySessionName("lock-on-active-rules"); 13 | 14 | Person p = new Person(); 15 | p.setAge(19); 16 | 17 | kieSession.insert(p); 18 | kieSession.fireAllRules(); 19 | kieSession.dispose(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter15/SalienceTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter15; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | public class SalienceTest extends BaseTest{ 9 | 10 | @Test 11 | public void testSalience(){ 12 | 13 | KieSession kieSession = this.getKieSessionBySessionName("salience-rules"); 14 | 15 | Person person = new Person(); 16 | person.setAge(10); 17 | kieSession.insert(person); 18 | 19 | kieSession.fireAllRules(); 20 | kieSession.dispose(); 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter16/AgendaGroupTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter16; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | public class AgendaGroupTest extends BaseTest{ 8 | 9 | @Test 10 | public void testAgendaGroup(){ 11 | 12 | KieSession kieSession = this.getKieSessionBySessionName("agendaGroup-rules"); 13 | kieSession.getAgenda().getAgendaGroup("agenda-group-test").setFocus(); 14 | kieSession.fireAllRules(); 15 | kieSession.dispose(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter17/AutoFocusTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter17; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | public class AutoFocusTest extends BaseTest{ 8 | 9 | @Test 10 | public void testAutoFocus(){ 11 | KieSession kieSession = this.getKieSessionBySessionName("autoFocus-rules"); 12 | kieSession.fireAllRules(); 13 | kieSession.dispose(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter18/ActivationGroupTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter18; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | public class ActivationGroupTest extends BaseTest{ 8 | 9 | @Test 10 | public void testActivationGroup(){ 11 | 12 | KieSession kieSession = this.getKieSessionBySessionName("activationGroup-rules"); 13 | kieSession.fireAllRules(); 14 | kieSession.dispose(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter19/DateEffectiveTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter19; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | public class DateEffectiveTest extends BaseTest{ 8 | 9 | @Test 10 | public void testDateEffective(){ 11 | System.setProperty("drools.dateformat","yyyy-MM-dd HH:mm"); 12 | KieSession kieSession = this.getKieSessionBySessionName("dateEffective-rules"); 13 | kieSession.fireAllRules(); 14 | kieSession.dispose(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter2/Drools5ApiTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter2; 2 | 3 | import com.secbro.drools.model.Goods; 4 | import org.junit.Test; 5 | import org.kie.api.io.ResourceType; 6 | import org.kie.internal.KnowledgeBase; 7 | import org.kie.internal.builder.KnowledgeBuilder; 8 | import org.kie.internal.builder.KnowledgeBuilderFactory; 9 | import org.kie.internal.definition.KnowledgePackage; 10 | import org.kie.internal.io.ResourceFactory; 11 | import org.kie.internal.runtime.StatefulKnowledgeSession; 12 | 13 | import java.util.Collection; 14 | 15 | /** 16 | * Created by zhuzs on 2017/8/12. 17 | */ 18 | public class Drools5ApiTest { 19 | 20 | @Test 21 | public void testDrools5Api(){ 22 | 23 | KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 24 | kbuilder.add(ResourceFactory.newClassPathResource("com/rules/goods.drl",this.getClass()), 25 | ResourceType.DRL); 26 | 27 | if(kbuilder.hasErrors()){ 28 | System.out.println(kbuilder.getErrors()); 29 | } 30 | 31 | KnowledgeBase knowledgeBase = kbuilder.newKnowledgeBase(); 32 | Collection pks = kbuilder.getKnowledgePackages(); 33 | knowledgeBase.addKnowledgePackages(pks); 34 | 35 | StatefulKnowledgeSession statefulKnowledgeSession = knowledgeBase.newStatefulKnowledgeSession(); 36 | 37 | Goods goods = new Goods(); 38 | 39 | statefulKnowledgeSession.insert(goods); 40 | 41 | int count = statefulKnowledgeSession.fireAllRules(); 42 | statefulKnowledgeSession.dispose(); 43 | 44 | System.out.println("Fire " + count + " rule(s)!"); 45 | System.out.println("The new discount is " + goods.getDiscount() + "%"); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter20/TimerTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter20; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Server; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.FactHandle; 8 | 9 | public class TimerTest extends BaseTest{ 10 | 11 | @Test 12 | public void testTimer() throws InterruptedException { 13 | 14 | KieSession kieSession = this.getKieSessionBySessionName("timerTest-rules"); 15 | 16 | Server server = new Server(); 17 | server.setTimes(0); 18 | 19 | new Thread(new Runnable() { 20 | @Override 21 | public void run() { 22 | kieSession.fireUntilHalt(); 23 | } 24 | }).start(); 25 | 26 | FactHandle factHandle = kieSession.insert(server); 27 | for (int i=1; i<10; i++){ 28 | Thread.sleep(1000); 29 | server.setTimes(i); 30 | kieSession.update(factHandle,server); 31 | } 32 | 33 | Thread.sleep(3000); 34 | kieSession.halt(); 35 | 36 | System.out.println("server尝试结果:" + server.getResult()); 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter21/CalenderTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter21; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | import org.kie.api.time.Calendar; 7 | import org.quartz.impl.calendar.WeeklyCalendar; 8 | 9 | public class CalenderTest extends BaseTest{ 10 | 11 | @Test 12 | public void testCalender(){ 13 | KieSession kieSession = this.getKieSessionBySessionName("calenderTest-rules"); 14 | kieSession.getCalendars().set("weekday",WEEKDAY); 15 | kieSession.getCalendars().set("weekday_exclude",WEEKDAY_EXCLUDE); 16 | kieSession.fireAllRules(); 17 | kieSession.dispose(); 18 | 19 | } 20 | 21 | private static final Calendar WEEKDAY = new Calendar() { 22 | @Override 23 | public boolean isTimeIncluded(long timestamp) { 24 | WeeklyCalendar weeklyCalendar = new WeeklyCalendar(); 25 | weeklyCalendar.setDaysExcluded(new boolean[]{false,false,false,false,false,false,false}); 26 | weeklyCalendar.setDayExcluded(java.util.Calendar.THURSDAY,true); 27 | return weeklyCalendar.isTimeIncluded(timestamp); 28 | } 29 | }; 30 | 31 | private static final Calendar WEEKDAY_EXCLUDE = new Calendar() { 32 | @Override 33 | public boolean isTimeIncluded(long timestamp) { 34 | WeeklyCalendar weeklyCalendar = new WeeklyCalendar(); 35 | weeklyCalendar.setDaysExcluded(new boolean[]{false,false,false,false,false,false,false}); 36 | return weeklyCalendar.isTimeIncluded(timestamp); 37 | } 38 | }; 39 | 40 | } 41 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter23/LhsTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter23; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | public class LhsTest extends BaseTest{ 9 | 10 | @Test 11 | public void testLhs(){ 12 | KieSession kieSession = this.getKieSessionBySessionName("lhs-rules"); 13 | 14 | Person person = new Person(); 15 | person.setAge(10); 16 | 17 | Person person1 = new Person(); 18 | person1.setAge(15); 19 | 20 | kieSession.insert(person1); 21 | kieSession.insert(person); 22 | 23 | 24 | kieSession.fireAllRules(); 25 | kieSession.dispose(); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter24/PatternTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter24; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Car; 5 | import com.secbro.drools.model.Person; 6 | import com.secbro.drools.model.SubPerson; 7 | import org.junit.Test; 8 | import org.kie.api.runtime.KieSession; 9 | 10 | public class PatternTest extends BaseTest{ 11 | 12 | @Test 13 | public void testPattern(){ 14 | KieSession kieSession = this.getKieSessionBySessionName("pattern-rules"); 15 | 16 | Car car = new Car(); 17 | SubPerson subPerson = new SubPerson(); 18 | subPerson.setAge(10); 19 | car.setSubPerson(subPerson); 20 | 21 | // Person person = new Person(); 22 | kieSession.insert(car); 23 | 24 | kieSession.fireAllRules(); 25 | kieSession.dispose(); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter25/MapAndListTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter25; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | import java.util.ArrayList; 9 | import java.util.HashMap; 10 | import java.util.List; 11 | import java.util.Map; 12 | 13 | public class MapAndListTest extends BaseTest{ 14 | 15 | @Test 16 | public void testMapAndList(){ 17 | KieSession kieSession = this.getKieSessionBySessionName("mapAndList-rules"); 18 | 19 | Map map = new HashMap<>(); 20 | map.put("a",1); 21 | map.put("b",2); 22 | 23 | List list = new ArrayList<>(); 24 | Person p = new Person(); 25 | p.setAge(18); 26 | list.add(p); 27 | Person p1 = new Person(); 28 | p1.setAge(20); 29 | list.add(p1); 30 | 31 | kieSession.insert(map); 32 | kieSession.insert(list); 33 | 34 | kieSession.fireAllRules(); 35 | kieSession.dispose(); 36 | 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter28/InsertTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter28; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zhuzs 9 | */ 10 | public class InsertTest extends BaseTest{ 11 | 12 | @Test 13 | public void testInsert(){ 14 | KieSession kieSession = this.getKieSessionBySessionName("insertDemo-rules"); 15 | 16 | kieSession.fireAllRules(); 17 | kieSession.dispose(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter29/UpdateTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter29; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.FactHandle; 8 | 9 | /** 10 | * @author zhuzs 11 | */ 12 | public class UpdateTest extends BaseTest{ 13 | 14 | @Test 15 | public void testUpdate(){ 16 | KieSession kieSession = this.getKieSessionBySessionName("updateDemo-rules"); 17 | 18 | Person p = new Person(); 19 | p.setAge(24); 20 | FactHandle factHandle = kieSession.insert(p); 21 | 22 | kieSession.fireAllRules(); 23 | p.setAge(25); 24 | kieSession.update(factHandle,p); 25 | 26 | // kieSession.fireAllRules(); 27 | kieSession.dispose(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter3/Drools7ApiTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter3; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Car; 5 | import com.secbro.drools.model.Person; 6 | import org.junit.Test; 7 | import org.kie.api.runtime.KieSession; 8 | 9 | /** 10 | * Created by zhuzs on 2017/8/12. 11 | */ 12 | public class Drools7ApiTest extends BaseTest { 13 | 14 | @Test 15 | public void testDrools7Api() { 16 | /*KieSession kieSession = getKieSession("test-drools7"); 17 | 18 | Person p1 = new Person(); 19 | p1.setAge(30); 20 | Car c1 = new Car(); 21 | c1.setPerson(p1); 22 | 23 | Person p2 = new Person(); 24 | p2.setAge(70); 25 | Car c2 = new Car(); 26 | c2.setPerson(p2); 27 | 28 | kieSession.insert(c1); 29 | kieSession.insert(c2); 30 | 31 | int count = kieSession.fireAllRules(); 32 | kieSession.dispose(); 33 | 34 | System.out.println("Fire " + count + " rule(s)!"); 35 | 36 | System.out.println("The discount of c1 is " + c1.getDiscount() + "%"); 37 | System.out.println("The discount of c2 is " + c2.getDiscount() + "%");*/ 38 | 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter30/DeleteTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter30; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.FactHandle; 8 | 9 | /** 10 | * @author zhuzs 11 | */ 12 | public class DeleteTest extends BaseTest{ 13 | 14 | @Test 15 | public void testDelete(){ 16 | KieSession kieSession = this.getKieSessionBySessionName("deleteDemo-rules"); 17 | 18 | Person p = new Person(); 19 | p.setAge(21); 20 | FactHandle factHandle = kieSession.insert(p); 21 | kieSession.delete(factHandle); 22 | 23 | kieSession.fireAllRules(); 24 | 25 | kieSession.dispose(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter31/ModifyTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter31; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | /** 9 | * @author zzs 10 | */ 11 | public class ModifyTest extends BaseTest{ 12 | 13 | @Test 14 | public void testModify(){ 15 | KieSession kieSession = this.getKieSessionBySessionName("modifyDemo-rules"); 16 | 17 | Person p = new Person(); 18 | p.setAge(21); 19 | 20 | kieSession.insert(p); 21 | 22 | kieSession.fireAllRules(); 23 | kieSession.dispose(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter32/ConditionalTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter32; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Car; 5 | import com.secbro.drools.model.Person; 6 | import org.junit.Test; 7 | import org.kie.api.runtime.KieSession; 8 | 9 | /** 10 | * @author zzs 11 | */ 12 | public class ConditionalTest extends BaseTest{ 13 | 14 | @Test 15 | public void test(){ 16 | KieSession kieSession = this.getKieSessionBySessionName("conditional-rules"); 17 | 18 | Person p = new Person(); 19 | p.setAge(19); 20 | Car car = new Car(); 21 | car.setDiscount(80); 22 | 23 | kieSession.insert(p); 24 | kieSession.insert(car); 25 | 26 | kieSession.fireAllRules(); 27 | kieSession.dispose(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter33/QueryTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter33; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.QueryResults; 8 | import org.kie.api.runtime.rule.QueryResultsRow; 9 | 10 | /** 11 | * @author zzs 12 | */ 13 | public class QueryTest extends BaseTest{ 14 | 15 | @Test 16 | public void testQuery(){ 17 | KieSession kieSession = this.getKieSessionBySessionName("query-rules"); 18 | 19 | Person p1 = new Person(); 20 | p1.setAge(20); 21 | p1.setName("Tom"); 22 | 23 | Person p2 = new Person(); 24 | p2.setAge(23); 25 | p2.setName("Daven"); 26 | 27 | kieSession.insert(p1); 28 | kieSession.insert(p2); 29 | 30 | kieSession.fireAllRules(); 31 | 32 | QueryResults queryResults = kieSession.getQueryResults("query-by-age"); 33 | System.out.println("queryResults size is " + queryResults.size()); 34 | for(QueryResultsRow row : queryResults){ 35 | Person person = (Person) row.get("$p1"); 36 | System.out.println("Person name is " + person.getName()); 37 | } 38 | 39 | System.out.println(" ------------------------------------------------------"); 40 | 41 | QueryResults queryResults1 = kieSession.getQueryResults("query-by-param",21); 42 | System.out.println("queryResults1 size is " + queryResults1.size()); 43 | for(QueryResultsRow row : queryResults1){ 44 | Person person = (Person) row.get("$p2"); 45 | System.out.println("Person name is " + person.getName()); 46 | } 47 | 48 | kieSession.dispose(); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter34/FunctionTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter34; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class FunctionTest extends BaseTest{ 11 | 12 | @Test 13 | public void testFunction(){ 14 | KieSession kieSession = this.getKieSessionBySessionName("function-rules"); 15 | 16 | kieSession.fireAllRules(); 17 | kieSession.dispose(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter35/EmailService.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter35; 2 | 3 | /** 4 | * @author zzs 5 | */ 6 | public class EmailService { 7 | 8 | public void sendEmail(){ 9 | System.out.println("Email has been send!"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter35/GlobalTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter35; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class GlobalTest extends BaseTest{ 11 | 12 | @Test 13 | public void testGlobal(){ 14 | KieSession kieSession = this.getKieSessionBySessionName("global-rules"); 15 | 16 | EmailService emailService = new EmailService(); 17 | kieSession.setGlobal("emailService",emailService); 18 | 19 | kieSession.fireAllRules(); 20 | kieSession.dispose(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter37/ErrorTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter37; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class ErrorTest extends BaseTest{ 11 | 12 | @Test 13 | public void testError(){ 14 | KieSession kieSession = this.getKieSessionBySessionName("error-rules"); 15 | 16 | kieSession.fireAllRules(); 17 | kieSession.dispose(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter39/NewTypeTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter39; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.KieBase; 6 | import org.kie.api.definition.type.FactType; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.api.runtime.KieSession; 9 | 10 | /** 11 | * @author zzs 12 | */ 13 | public class NewTypeTest extends BaseTest{ 14 | 15 | @Test 16 | public void testNewType() throws IllegalAccessException, InstantiationException { 17 | 18 | KieContainer kieContainer = this.getKieContainer(); 19 | KieBase kieBase = kieContainer.getKieBase("new-type-kbase"); 20 | FactType factType = kieBase.getFactType("com.newType","Country"); 21 | Object country = factType.newInstance(); 22 | factType.set(country,"name","美国"); 23 | 24 | KieSession kieSession = kieContainer.newKieSession("new-type-rules"); 25 | 26 | kieSession.insert(country); 27 | kieSession.fireAllRules(); 28 | kieSession.dispose(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter4/FactHandlerTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter4; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.api.runtime.rule.FactHandle; 8 | 9 | public class FactHandlerTest extends BaseTest { 10 | 11 | @Test 12 | public void testFactHandler() { 13 | KieSession kieSession = this.getKieSession("fact-handler-group"); 14 | 15 | Person p = new Person(); 16 | p.setAge(81); 17 | 18 | FactHandle handle = kieSession.insert(p); 19 | 20 | System.out.println(handle.toExternalForm()); 21 | 22 | int count = kieSession.fireAllRules(); 23 | System.out.println("Fires " + count + " rules!"); 24 | 25 | p.setAge(90); 26 | kieSession.getAgenda().getAgendaGroup("fact-handler-group").setFocus(); 27 | kieSession.update(handle, p); 28 | 29 | count = kieSession.fireAllRules(); 30 | 31 | System.out.println("Fires " + count + " rules!"); 32 | kieSession.dispose(); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter41/MetaTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter41; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.junit.Test; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class MetaTest extends BaseTest{ 11 | @Test 12 | public void testMeta(){ 13 | KieSession kieSession = this.getKieSessionBySessionName("meta-rules"); 14 | 15 | kieSession.fireAllRules(); 16 | kieSession.dispose(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter44/DecisionTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter44; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import org.drools.decisiontable.InputType; 5 | import org.drools.decisiontable.SpreadsheetCompiler; 6 | import org.junit.Test; 7 | import org.kie.api.runtime.KieSession; 8 | import org.kie.internal.io.ResourceFactory; 9 | 10 | import java.io.File; 11 | import java.io.FileInputStream; 12 | import java.io.FileNotFoundException; 13 | import java.io.InputStream; 14 | 15 | /** 16 | * @author zzs 17 | */ 18 | public class DecisionTest extends BaseTest{ 19 | 20 | @Test 21 | public void checkDrl() throws FileNotFoundException { 22 | File file = new File("E:\\GitHub\\respo\\drools-lesson\\src\\main\\resources\\decision.xls"); 23 | InputStream is = new FileInputStream(file); 24 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 25 | String drl = compiler.compile(is, InputType.XLS); 26 | System.out.println(drl); 27 | } 28 | 29 | @Test 30 | public void checkDrl2() throws FileNotFoundException { 31 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 32 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision/decision.xls"), InputType.XLS); 33 | System.out.println(drl); 34 | } 35 | 36 | @Test 37 | public void testDecision(){ 38 | 39 | KieSession kieSession = this.getKieSessionBySessionName("decision-rules"); 40 | 41 | kieSession.fireAllRules(); 42 | kieSession.dispose(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/chapter5/StatelessSessionTest.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.chapter5; 2 | 3 | import com.secbro.drools.BaseTest; 4 | import com.secbro.drools.model.Person; 5 | import org.junit.Test; 6 | import org.kie.api.runtime.StatelessKieSession; 7 | 8 | import java.util.ArrayList; 9 | import java.util.List; 10 | 11 | public class StatelessSessionTest extends BaseTest{ 12 | 13 | @Test 14 | public void testStateLessSession(){ 15 | StatelessKieSession kieSession = this.getStatelessKieSession(); 16 | List list = new ArrayList<>(); 17 | 18 | Person p = new Person(); 19 | p.setAge(35); 20 | list.add(p); 21 | Person p1 = new Person(); 22 | p1.setAge(20); 23 | list.add(p1); 24 | kieSession.execute(list); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/model/Car.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/12. 5 | */ 6 | public class Car { 7 | 8 | private int discount = 100; 9 | 10 | private SubPerson subPerson; 11 | 12 | private Person person; 13 | 14 | public int getDiscount() { 15 | return discount; 16 | } 17 | 18 | public void setDiscount(int discount) { 19 | this.discount = discount; 20 | } 21 | 22 | public SubPerson getSubPerson() { 23 | return subPerson; 24 | } 25 | 26 | public void setSubPerson(SubPerson subPerson) { 27 | this.subPerson = subPerson; 28 | } 29 | 30 | public Person getPerson() { 31 | return person; 32 | } 33 | 34 | public void setPerson(Person person) { 35 | this.person = person; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/model/Goods.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * Created by zhuzs on 2017/8/12. 5 | */ 6 | public class Goods { 7 | 8 | private int discount = 100; 9 | 10 | public int getDiscount() { 11 | return discount; 12 | } 13 | 14 | public void setDiscount(int discount) { 15 | this.discount = discount; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/model/Person.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | import java.io.Serializable; 4 | import java.util.Date; 5 | 6 | /** 7 | * Created by zhuzs on 2017/8/12. 8 | */ 9 | public class Person implements Serializable{ 10 | 11 | private int age; 12 | 13 | private String name; 14 | 15 | private Date bornDate; 16 | 17 | public int getAge() { 18 | return age; 19 | } 20 | 21 | public void setAge(int age) { 22 | this.age = age; 23 | } 24 | 25 | public String getName() { 26 | return name; 27 | } 28 | 29 | public void setName(String name) { 30 | this.name = name; 31 | } 32 | 33 | public Date getBornDate() { 34 | return bornDate; 35 | } 36 | 37 | public void setBornDate(Date bornDate) { 38 | this.bornDate = bornDate; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/model/Server.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | public class Server { 4 | 5 | private int times; 6 | 7 | private String result; 8 | 9 | public int getTimes() { 10 | return times; 11 | } 12 | 13 | public void setTimes(int times) { 14 | this.times = times; 15 | } 16 | 17 | public String getResult() { 18 | return result; 19 | } 20 | 21 | public void setResult(String result) { 22 | this.result = result; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/model/SubPerson.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | public class SubPerson extends Person{ 4 | } 5 | -------------------------------------------------------------------------------- /drools-lesson/src/main/java/com/secbro/drools/utils/StringUtils.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.utils; 2 | 3 | public class StringUtils { 4 | 5 | public static boolean isNull(String string){ 6 | if( string == null){ 7 | return true; 8 | } 9 | return false; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/META-INF/kmodule.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/activationGroup/activationGroup.drl: -------------------------------------------------------------------------------- 1 | package com.activationGroup 2 | 3 | rule "test-activation-group-1" 4 | activation-group "activation-group" 5 | when 6 | then 7 | System.out.println("test-activation-group-1 被触发"); 8 | end 9 | 10 | rule "test-activation-group-2" 11 | activation-group "activation-group" 12 | salience 1 13 | when 14 | then 15 | System.out.println("test-activation-group-2 被触发"); 16 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/agendaGroup/agendaGroup.drl: -------------------------------------------------------------------------------- 1 | package com.agendaGroup 2 | 3 | rule "test-agenda-group-1" 4 | 5 | agenda-group "agenda-group-test" 6 | 7 | when 8 | then 9 | System.out.println("agenda-group-1 被触发"); 10 | end 11 | 12 | rule "test-agenda-group-2" 13 | 14 | agenda-group "agenda-group-test" 15 | 16 | when 17 | then 18 | System.out.println("agenda-group-2 被触发"); 19 | end 20 | 21 | 22 | rule "test-agenda-group-3" 23 | 24 | agenda-group "agenda-group-3" 25 | 26 | when 27 | then 28 | System.out.println("agenda-group-3 被触发"); 29 | end 30 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/autoFocus/autoFocus.drl: -------------------------------------------------------------------------------- 1 | package com.autoFocus 2 | 3 | rule "test-auto-focus-1" 4 | 5 | agenda-group "auto-focus-1" 6 | auto-focus true 7 | 8 | when 9 | 10 | then 11 | System.out.println("auto-focus-1 被触发"); 12 | end 13 | 14 | rule "test-auto-focus-2" 15 | 16 | agenda-group "auto-focus-2" 17 | 18 | when 19 | 20 | then 21 | System.out.println("auto-focus-2 被触发"); 22 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/calenderTest/calender.drl: -------------------------------------------------------------------------------- 1 | package com.calenderTest 2 | 3 | rule "test-calender-rule" 4 | calendars "weekday" 5 | when 6 | 7 | then 8 | System.out.println("test-calender-rule 被触发"); 9 | end 10 | 11 | rule "test-calender-rule-1" 12 | calendars "weekday_exclude" 13 | when 14 | 15 | then 16 | System.out.println("test-calender-rule-1 被触发"); 17 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/conditional/conditional.drl: -------------------------------------------------------------------------------- 1 | package com.conditional 2 | import com.secbro.drools.model.Person 3 | import com.secbro.drools.model.Car 4 | 5 | rule "conditional-test-rule-1" 6 | no-loop true 7 | when 8 | $p : Person(age > 18) 9 | if (age == 20) do[updatePerson] 10 | else do[updatePerson1] 11 | then 12 | 13 | System.out.println("规则conditional-test-rule-1 被触发"); 14 | 15 | then[updatePerson] 16 | System.out.println("执行updatePerson"); 17 | modify($p){ 18 | setAge(17) 19 | } 20 | then[updatePerson1] 21 | System.out.println("执行updatePerson1"); 22 | modify($p){ 23 | setAge(21) 24 | } 25 | end 26 | 27 | 28 | 29 | rule "conditional-test-rule-2" 30 | extends "conditional-test-rule-1" 31 | 32 | when 33 | // $p : Person(age > 18); 34 | $car : Car(discount < 90); 35 | then 36 | System.out.println("规则conditional-test-rule-2 被触发"); 37 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/dateEffective/dateEffective.drl: -------------------------------------------------------------------------------- 1 | package com.dateEffective 2 | 3 | rule "test-dateEffective-rules-1" 4 | //date-effective "30-Dec-2017" 5 | date-effective "2017-10-31 22:54" 6 | when 7 | 8 | then 9 | System.out.println("test-dateEffective-rules-1 被触发"); 10 | end 11 | 12 | rule "test-dateEffective-rules-2" 13 | 14 | when 15 | 16 | then 17 | System.out.println("test-dateEffective-rules-2 被触发"); 18 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/decision/decision.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson/src/main/resources/com/decision/decision.xls -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/deleteDemo/delete.drl: -------------------------------------------------------------------------------- 1 | package com.deleteDemo 2 | import com.secbro.drools.model.Person 3 | 4 | rule "delete-demo-rule-1" 5 | salience 2 6 | 7 | when 8 | $p: Person(age == 21) 9 | then 10 | System.out.println("delete-demo-rule-1 规则被触发"); 11 | // delete($p); 12 | 13 | end 14 | 15 | rule "delete-demo-rule-2" 16 | salience 1 17 | when 18 | $p: Person(age == 21) 19 | then 20 | System.out.println("delete-demo-rule-2 规则被触发"); 21 | 22 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/errorDemo/error.drl: -------------------------------------------------------------------------------- 1 | package com.errorDemo 2 | 3 | rule 4 | 5 | when 6 | 7 | then 8 | 9 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/functionDemo/function.drl: -------------------------------------------------------------------------------- 1 | package com.functionDemo 2 | import javax.sound.midi.Soundbank 3 | 4 | rule "function-test-rules" 5 | 6 | when 7 | 8 | then 9 | System.out.println("The rule of function-test-rules is fired!"); 10 | helloFunction(); 11 | System.out.println(helloTom("Tom")); 12 | end 13 | 14 | function void helloFunction(){ 15 | System.out.println("helloFunction is called."); 16 | } 17 | 18 | function String helloTom(String name){ 19 | return "Hello " + name + "!"; 20 | } -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/globalDemo/global.drl: -------------------------------------------------------------------------------- 1 | package com.globalDemo 2 | 3 | global com.secbro.drools.chapter35.EmailService emailService 4 | 5 | rule "global-test-ruel" 6 | 7 | when 8 | 9 | then 10 | System.out.println("The rule of global-test-rule is fired!"); 11 | emailService.sendEmail(); 12 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/insertDemo/insert.drl: -------------------------------------------------------------------------------- 1 | package com.insertDemo 2 | import com.secbro.drools.model.Person 3 | 4 | rule "insert-demo-rules-1" 5 | salience 2 6 | when 7 | 8 | then 9 | System.out.println("insert-demo-rules-1规则被触发"); 10 | Person p = new Person(); 11 | p.setAge(25); 12 | insert(p); 13 | 14 | end 15 | 16 | rule "insert-demo-rules-2" 17 | salience 1 18 | //lock-on-active true 19 | when 20 | $p : Person(age == 25) 21 | then 22 | System.out.println("insert-demo-rules-2规则被触发"); 23 | System.out.println("person.age=" + $p.getAge()); 24 | 25 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/lhs/lhs.drl: -------------------------------------------------------------------------------- 1 | package com.lhs 2 | import com.secbro.drools.model.Person 3 | 4 | rule "test-lhs-rule" 5 | 6 | when 7 | $p1 : Person(age == 10 ) and Person(age == 15 ) 8 | then 9 | 10 | System.out.println("规则被触发,age=" + $p1.getAge()); 11 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/lockOnActive/lockOnActive.drl: -------------------------------------------------------------------------------- 1 | package com.lockOnActive 2 | import com.secbro.drools.model.Person 3 | 4 | rule "test-lock-on-active-1" 5 | 6 | when 7 | 8 | $p : Person( age < 20) 9 | then 10 | System.out.println("test-lock-on-active-1 被触发,age=" + $p.getAge()); 11 | $p.setAge(21); 12 | update($p) 13 | end 14 | 15 | rule "test-lock-on-active-2" 16 | lock-on-active true 17 | when 18 | $p : Person(age > 20) 19 | then 20 | System.out.println("test-lock-on-active-2 被触发,age=" + $p.getAge()); 21 | 22 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/mapAndList/mapAndList.drl: -------------------------------------------------------------------------------- 1 | package com.mapAndList 2 | import java.util.Map 3 | import java.util.List 4 | import com.secbro.drools.model.Person 5 | 6 | rule "map-and-list-rules" 7 | 8 | when 9 | 10 | // $map : Map() 11 | // $map : Map(this["a"] == 1) 12 | // $map : Map(this["a"] == 3) 13 | 14 | $list : List() 15 | $p : Person(age == 20) from $list 16 | then 17 | // System.out.println("a=" + $map.get("a")); 18 | // System.out.println("b=" + $map.get("b")); 19 | 20 | System.out.println("person.age=" + ((Person)$list.get(0)).getAge()); 21 | System.out.println("person1.age=" + ((Person)$p).getAge()); 22 | 23 | System.out.println("规则map-and-list-rules 被触发"); 24 | end 25 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/metaDemo/meta.drl: -------------------------------------------------------------------------------- 1 | package com.metaDemo 2 | 3 | rule "meta-test-rules" 4 | 5 | when 6 | 7 | then 8 | City city = new City(); 9 | 10 | city = new City("北京"); 11 | 12 | city = new City("北京","中国"); 13 | 14 | System.out.println("规则被触发"); 15 | end 16 | 17 | declare City 18 | @author("zzs") 19 | name : String @key 20 | address: String 21 | end 22 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/modifyDemo/modify.drl: -------------------------------------------------------------------------------- 1 | package com.modifyDemo 2 | import com.secbro.drools.model.Person 3 | 4 | rule "modify-demo-rule-1" 5 | 6 | when 7 | $p : Person(age == 21) 8 | then 9 | System.out.println("modify-demo-rule-1 被触发"); 10 | modify($p){ 11 | setAge(22) 12 | } 13 | end 14 | 15 | rule "modify-demo-rule-2" 16 | 17 | when 18 | $p : Person(age == 22) 19 | then 20 | 21 | System.out.println("modify-demo-rule-2 被触发"); 22 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/newType/NewType.drl: -------------------------------------------------------------------------------- 1 | package com.newType 2 | import java.util.Date; 3 | 4 | 5 | rule "new-type-rule-1" 6 | 7 | when 8 | $country: Country(name == "美国") 9 | then 10 | Address address = new Address(); 11 | address.setName(CountryName.CHINA.getFullName()); 12 | address.setCity("北京"); 13 | address.setNumber(100000); 14 | insert(address); 15 | end 16 | 17 | rule "new-type-rule" 18 | 19 | when 20 | $address : Address(name == CountryName.CHINA.getFullName()) 21 | then 22 | System.out.println("规则被触发"); 23 | end 24 | 25 | declare Address extends Country 26 | number : Integer 27 | city : String 28 | crateTime : Date 29 | end 30 | 31 | declare Country 32 | name : String 33 | end 34 | 35 | declare enum CountryName 36 | CHINA("中国"); 37 | fullName : String 38 | end 39 | 40 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/no-loop/no-loop.drl: -------------------------------------------------------------------------------- 1 | package com.NoLoop 2 | import com.secbro.drools.model.Person 3 | 4 | rule "test-no-loop-rules" 5 | no-loop true 6 | when 7 | $p : Person(age < 10) 8 | then 9 | $p.setAge($p.getAge() + 1); 10 | System.out.println($p.getAge()); 11 | update($p) 12 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/pattern/pattern.drl: -------------------------------------------------------------------------------- 1 | package com.pattern 2 | import com.secbro.drools.model.Person 3 | import com.secbro.drools.model.Car 4 | 5 | rule "test-pattern-rule" 6 | 7 | when 8 | // $p : Person(bornDate > "3-Nov-2017") 9 | $c : Car(subPerson#com.secbro.drools.model.Person.age == 10) 10 | then 11 | 12 | System.out.println("规则被触发"); 13 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/queryDemo/query.drl: -------------------------------------------------------------------------------- 1 | package com.queryDemo 2 | import com.secbro.drools.model.Person 3 | 4 | rule "query-base-rule" 5 | 6 | when 7 | $p : Person(age == 20) 8 | then 9 | System.out.println("Name is " + $p.getName()); 10 | System.out.println("The rule of is fired rules!"); 11 | end 12 | 13 | query "query-by-age" 14 | $p1 : Person(age == 23) 15 | end 16 | 17 | query "query-by-param"(Integer ageParam) 18 | $p2 : Person(age >= ageParam) 19 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/ruleFlowGroup/ruleFlowGroup1.drl: -------------------------------------------------------------------------------- 1 | package com.ruleFlowGroup 2 | 3 | rule "test-rule-flow-group-1" 4 | ruleflow-group "rule-flow-group-1" 5 | 6 | when 7 | then 8 | System.out.println("rule-flow-group-1 被触发了"); 9 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/ruleFlowGroup/ruleFlowGroup2.drl: -------------------------------------------------------------------------------- 1 | package com.ruleFlowGroup 2 | 3 | rule "test-rule-flow-group-2" 4 | ruleflow-group "rule-flow-group-2" 5 | 6 | when 7 | then 8 | System.out.println("rule-flow-group-2 被触发了"); 9 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/rules/drool7Api.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro.drools.model.Car 3 | 4 | rule "test-drools7-older-than-60" 5 | agenda-group "test-drools7" 6 | when 7 | $car : Car(person.age > 60) 8 | then 9 | $car.setDiscount(80); 10 | System.out.println("test-drools7-older than 60:" + $car.getPerson().getAge()); 11 | end 12 | 13 | rule "test-drools7-other" 14 | agenda-group "test-drools7" 15 | when 16 | $car : Car(person.age <= 60) 17 | then 18 | $car.setDiscount(90); 19 | System.out.println("test-drools7-other:" + $car.getPerson().getAge()); 20 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/rules/factHandler.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro.drools.model.Person 3 | 4 | rule "fact-handler-test" 5 | agenda-group "fact-handler-group" 6 | when 7 | $p : Person(age > 80) 8 | then 9 | System.out.println($p.getAge()); 10 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/rules/goods.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro.drools.model.Goods; 3 | 4 | rule "test-drools5-api" 5 | agenda-group "test-drools5-api" 6 | when 7 | $goods : Goods() 8 | then 9 | $goods.setDiscount(50); 10 | System.out.println("test-drools5-api has fired!"); 11 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/salienceTest/salience.drl: -------------------------------------------------------------------------------- 1 | package com.salienceTest 2 | import com.secbro.drools.model.Person 3 | 4 | rule salience2 5 | salience -1 6 | when 7 | then 8 | System.out.println("salience2 被执行"); 9 | end 10 | 11 | 12 | rule salience1 13 | salience 1 14 | when 15 | then 16 | System.out.println("salience1 被执行"); 17 | end 18 | 19 | rule salience3 20 | salience sal 21 | when 22 | $p: Person(sal : age) 23 | then 24 | System.out.println("salience3 被执行"); 25 | end 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/stateless/stateless,.drl: -------------------------------------------------------------------------------- 1 | package com.stateless 2 | import com.secbro.drools.model.Person 3 | rule "test-stateless" 4 | 5 | when 6 | $p : Person() 7 | then 8 | System.out.println($p.getAge()); 9 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/timerTest/timer.drl: -------------------------------------------------------------------------------- 1 | package com.timerTest 2 | import com.secbro.drools.model.Server 3 | import java.util.Date 4 | 5 | rule "test-timer" 6 | timer (cron:* 0/1 * * * ? ) 7 | when 8 | $s:Server(times > 5) 9 | then 10 | System.out.println("已经尝试" + $s.getTimes() + "次,超过预警次数!"); 11 | $s.setResult(new Date() + "--服务器已经尝试" + $s.getTimes() + "次,依旧失败,发出警报!"); 12 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/com/updateDemo/update.drl: -------------------------------------------------------------------------------- 1 | package com.updateDemo 2 | import com.secbro.drools.model.Person 3 | 4 | rule "update-demo-rule-1" 5 | salience 2 6 | when 7 | $p: Person(age == 24); 8 | then 9 | System.out.println("update-demo-rule-1规则被触发"); 10 | // $p.setAge(25); 11 | // update($p); 12 | end 13 | 14 | rule "insert-demo-rules-2" 15 | salience 1 16 | when 17 | $p : Person(age == 25) 18 | then 19 | System.out.println("update-demo-rule-2规则被触发"); 20 | System.out.println("person.age=" + $p.getAge()); 21 | 22 | end -------------------------------------------------------------------------------- /drools-lesson/src/main/resources/decision.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson/src/main/resources/decision.xls -------------------------------------------------------------------------------- /drools-lesson2/.gitignore: -------------------------------------------------------------------------------- 1 | ##ignore this file## 2 | 3 | /target/ 4 | .idea 5 | *.iml 6 | .gitignore -------------------------------------------------------------------------------- /drools-lesson2/drools-lesson2.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /drools-lesson2/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.secbro.drools 8 | drools-lesson2 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 7.15.0.Final 13 | 14 | 15 | 16 | 21 | 22 | junit 23 | junit 24 | 4.12 25 | 26 | 27 | org.kie 28 | kie-api 29 | ${drools.version} 30 | 31 | 32 | org.drools 33 | drools-core 34 | ${drools.version} 35 | 36 | 37 | org.drools 38 | drools-compiler 39 | ${drools.version} 40 | 41 | 42 | org.kie 43 | kie-ci 44 | ${drools.version} 45 | 46 | 47 | org.drools 48 | drools-templates 49 | ${drools.version} 50 | 51 | 52 | org.drools 53 | drools-decisiontables 54 | ${drools.version} 55 | 56 | 57 | 58 | 59 | org.drools 60 | drools-cdi 61 | ${drools.version} 62 | 63 | 64 | javax.enterprise 65 | cdi-api 66 | 2.0 67 | 68 | 69 | org.jboss.weld.se 70 | weld-se-core 71 | 3.0.0.Final 72 | 73 | 74 | org.slf4j 75 | slf4j-simple 76 | 1.7.25 77 | 78 | 79 | 80 | org.projectlombok 81 | lombok 82 | 1.16.20 83 | provided 84 | 85 | 86 | 87 | 88 | 89 | 90 | org.apache.maven.plugins 91 | maven-compiler-plugin 92 | 93 | 1.8 94 | 1.8 95 | 96 | 97 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter3/Chapter3.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter3; 2 | 3 | import javax.enterprise.inject.se.SeContainer; 4 | import javax.enterprise.inject.se.SeContainerInitializer; 5 | import javax.inject.Inject; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class Chapter3 { 11 | 12 | private final DemoService demoService; 13 | 14 | @Inject 15 | public Chapter3(DemoService demoService) { 16 | this.demoService = demoService; 17 | } 18 | 19 | private void print() { 20 | this.demoService.print(); 21 | } 22 | 23 | public static void main(String[] args) { 24 | SeContainer seContainer = null; 25 | try { 26 | seContainer = SeContainerInitializer.newInstance().initialize(); 27 | 28 | Chapter3 chapter3 = seContainer.select(Chapter3.class).get(); 29 | 30 | chapter3.print(); 31 | } finally { 32 | if (seContainer != null && seContainer.isRunning()) { 33 | seContainer.close(); 34 | } 35 | } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter3/DemoService.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter3; 2 | 3 | /** 4 | * @author zzs 5 | */ 6 | public class DemoService { 7 | 8 | public void print(){ 9 | System.out.println("Hello Drools!"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter4/Chapter4.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter4; 2 | 3 | import com.secbro2.drools.chapter3.Chapter3; 4 | import org.jboss.weld.environment.se.Weld; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.cdi.KSession; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.api.runtime.KieSession; 9 | 10 | import javax.enterprise.inject.se.SeContainer; 11 | import javax.enterprise.inject.se.SeContainerInitializer; 12 | import javax.inject.Inject; 13 | 14 | /** 15 | * @author zzs 16 | */ 17 | public class Chapter4 { 18 | 19 | 20 | @KSession 21 | KieSession kieSession; 22 | 23 | @Inject 24 | Chapter4(KieSession kieSession){ 25 | this.kieSession = kieSession; 26 | } 27 | 28 | public static void main(String[] args) { 29 | 30 | /*Weld weld = new Weld(); 31 | Chapter4 chapter4 = weld.initialize().instance().select(Chapter4.class).get(); 32 | chapter4.doFire();*/ 33 | 34 | SeContainer seContainer = null; 35 | try { 36 | seContainer = SeContainerInitializer.newInstance().initialize(); 37 | 38 | Chapter4 chapter4 = seContainer.select(Chapter4.class).get(); 39 | chapter4.doFire(); 40 | 41 | } finally { 42 | if (seContainer != null && seContainer.isRunning()) { 43 | seContainer.close(); 44 | } 45 | } 46 | } 47 | 48 | 49 | /*public static void main(String[] args) { 50 | KieServices kieServices = KieServices.Factory.get(); 51 | 52 | KieContainer container = kieServices.getKieClasspathContainer(); 53 | 54 | KieSession kieSession = container.newKieSession(); 55 | 56 | // kieSession.insert() 57 | 58 | int nums = kieSession.fireAllRules(); 59 | 60 | System.out.println("Fire " + nums + " rules!"); 61 | }*/ 62 | 63 | private void doFire(){ 64 | // kieSession.insert() 65 | int nums = kieSession.fireAllRules(); 66 | System.out.println("Fire " + nums + " rules!"); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter5/Chapter5.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter5; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.runtime.KieContainer; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class Chapter5 { 11 | 12 | public static void main(String[] args) { 13 | KieServices kieServices = KieServices.Factory.get(); 14 | 15 | KieContainer container = kieServices.getKieClasspathContainer(); 16 | 17 | KieSession kieSession = container.newKieSession("all-kieSession-1"); 18 | 19 | int nums = kieSession.fireAllRules(); 20 | 21 | System.out.println("Fire " + nums + " rules!"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter6/Chapter6.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter6; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.builder.Message; 5 | import org.kie.api.builder.Results; 6 | import org.kie.api.runtime.KieContainer; 7 | 8 | import java.util.Collection; 9 | import java.util.List; 10 | 11 | /** 12 | * @author zzs 13 | */ 14 | public class Chapter6 { 15 | 16 | public static void main(String[] args) { 17 | KieServices kieServices = KieServices.Factory.get(); 18 | 19 | KieContainer container = kieServices.getKieClasspathContainer(); 20 | 21 | Results results = container.verify(); 22 | List messages = results.getMessages(); 23 | System.out.println("messages size:" + messages.size()); 24 | for (Message msg : messages) { 25 | System.out.println("level:" + msg.getLevel() + ";text=" + msg.getText()); 26 | } 27 | 28 | Collection kieBaseNames = container.getKieBaseNames(); 29 | for(String kieBaseName : kieBaseNames){ 30 | System.out.println("kieBaseName----" + kieBaseName); 31 | Collection kieSessionNamesInKieBase = container.getKieSessionNamesInKieBase(kieBaseName); 32 | for(String kieSession : kieSessionNamesInKieBase){ 33 | System.out.println("kieSession-----" + kieSession); 34 | } 35 | } 36 | 37 | 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/chapter7/Chapter7.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.chapter7; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.runtime.KieContainer; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * @author zzs 9 | */ 10 | public class Chapter7 { 11 | 12 | public static void main(String[] args) { 13 | KieServices kieServices = KieServices.Factory.get(); 14 | 15 | KieContainer container = kieServices.newKieContainer(kieServices.newReleaseId("com.secbro2","drools-rules","1.0-SNAPSHOT")); 16 | 17 | KieSession kieSession = container.newKieSession("all-kieSession-1"); 18 | 19 | int nums = kieSession.fireAllRules(); 20 | 21 | System.out.println("Fire " + nums + " rules!"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/AccumulateDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.io.ResourceType; 4 | import org.kie.api.runtime.KieSession; 5 | import org.kie.internal.io.ResourceFactory; 6 | import org.kie.internal.utils.KieHelper; 7 | 8 | /** 9 | * @author zzs 10 | */ 11 | public class AccumulateDemo extends BaseDemo { 12 | 13 | public static void main(String[] args) { 14 | KieHelper kieHelper = new KieHelper(); 15 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/accumu/accumulate.drl"), ResourceType.DRL); 16 | 17 | KieSession kieSession = kieHelper.build().newKieSession(); 18 | 19 | Person p1 = new Person(1, "Tom", 19); 20 | Person p2 = new Person(2, "Lucy", 18); 21 | 22 | kieSession.insert(p1); 23 | kieSession.insert(p2); 24 | 25 | kieSession.fireAllRules(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/BaseDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.builder.Message; 5 | import org.kie.api.builder.Results; 6 | import org.kie.api.io.ResourceType; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.api.runtime.KieSession; 9 | import org.kie.internal.utils.KieHelper; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * @author zzs 15 | */ 16 | public class BaseDemo { 17 | 18 | protected static KieSession getKieSession() { 19 | KieServices kieServices = KieServices.Factory.get(); 20 | KieContainer container = kieServices.getKieClasspathContainer(); 21 | return container.newKieSession("all-kieSession"); 22 | } 23 | 24 | protected static KieSession getKieSession(String sessionName) { 25 | KieServices kieServices = KieServices.Factory.get(); 26 | KieContainer container = kieServices.getKieClasspathContainer(); 27 | return container.newKieSession(sessionName); 28 | } 29 | 30 | protected static KieSession getKieSessionByDrl(String drlContent) { 31 | 32 | KieHelper kieHelper = new KieHelper(); 33 | kieHelper.addContent(drlContent, ResourceType.DRL); 34 | 35 | Results verify = kieHelper.verify(); 36 | boolean hasMessages = verify.hasMessages(Message.Level.WARNING, Message.Level.ERROR); 37 | if (hasMessages) { 38 | List messages = verify.getMessages(Message.Level.WARNING, Message.Level.ERROR); 39 | for (Message message : messages) { 40 | System.out.println("ERROR : " + message.getText()); 41 | } 42 | 43 | throw new RuntimeException("verify has errors!"); 44 | } 45 | 46 | return kieHelper.build().newKieSession(); 47 | } 48 | 49 | } 50 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/CepDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieBase; 4 | import org.kie.api.KieBaseConfiguration; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.conf.EventProcessingOption; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.api.runtime.KieSession; 9 | 10 | /** 11 | * @author zzs 12 | */ 13 | public class CepDemo { 14 | 15 | public static void main(String[] args) throws InterruptedException { 16 | 17 | KieServices kieServices = KieServices.Factory.get(); 18 | 19 | KieBaseConfiguration config = kieServices.newKieBaseConfiguration(); 20 | config.setOption(EventProcessingOption.STREAM); 21 | 22 | KieContainer container = kieServices.getKieClasspathContainer(); 23 | // KieBase kieBase = container.getKieBase("test-cep"); 24 | KieBase kieBase = container.newKieBase("test-cep",config); 25 | 26 | KieSession kieSession = kieBase.newKieSession(); 27 | 28 | Person p1 = new Person(1,"Tom"); 29 | Person p2 = new Person(2,"Lucy"); 30 | kieSession.insert(p1); 31 | 32 | Thread.sleep(3000); 33 | kieSession.insert(p2); 34 | 35 | int count = kieSession.fireAllRules(); 36 | 37 | System.out.println("Fire " + count + " rules!"); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/ChannelService.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.runtime.Channel; 4 | 5 | /** 6 | * @author zzs 7 | */ 8 | public class ChannelService implements Channel { 9 | @Override 10 | public void send(Object object) { 11 | System.out.println(" send object : " + object); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/CompareCollectionDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import com.secbro2.drools.entity.Company; 4 | import org.kie.api.runtime.KieSession; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * DROOLS规则引擎-判断集合是否包含集合 11 | *
12 | * 相关文章链接:http://www.choupangxia.com/2019/07/14/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-%e5%88%a4%e6%96%ad%e9%9b%86%e5%90%88%e6%98%af%e5%90%a6%e5%8c%85%e5%90%ab%e9%9b%86%e5%90%88/ 13 | * @author sec 14 | * @version 1.0 15 | * @date 2019/7/14 2:46 PM 16 | **/ 17 | public class CompareCollectionDemo extends BaseDemo{ 18 | 19 | public static void main(String[] args) { 20 | 21 | KieSession kieSession = getKieSession("compareList"); 22 | 23 | Company company = new Company(); 24 | List targetList = new ArrayList<>(); 25 | targetList.add("教育"); 26 | targetList.add("P2P"); 27 | company.setScopes(targetList); 28 | 29 | List blackList = new ArrayList<>(); 30 | blackList.add("房地产"); 31 | blackList.add("游戏"); 32 | blackList.add("P2P"); 33 | 34 | kieSession.insert(company); 35 | kieSession.insert(blackList); 36 | 37 | kieSession.fireAllRules(); 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/ContainsDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import com.secbro2.drools.entity.Corporation; 4 | import com.secbro2.drools.entity.Scope; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | import java.util.HashSet; 8 | import java.util.Set; 9 | 10 | /** 11 | * @author sec 12 | * @version 1.0 13 | * @date 2019/7/31 8:30 PM 14 | **/ 15 | public class ContainsDemo extends BaseDemo { 16 | 17 | public static void main(String[] args) { 18 | 19 | KieSession kieSession = getKieSession("containsVar"); 20 | 21 | Corporation corporation = new Corporation(); 22 | Set scopes = new HashSet<>(); 23 | scopes.add(new Scope("P2P")); 24 | scopes.add(new Scope("金融")); 25 | scopes.add(new Scope("区块链")); 26 | corporation.setScopes(scopes); 27 | 28 | Scope scope = new Scope("区块链"); 29 | 30 | kieSession.insert(corporation); 31 | kieSession.insert(scope); 32 | 33 | kieSession.fireAllRules(); 34 | 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo10.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.runtime.KieSession; 4 | 5 | /** 6 | * channels 7 | * 8 | * @author zzs 9 | */ 10 | public class Demo10 extends BaseDemo { 11 | 12 | public static void main(String[] args) { 13 | KieSession kieSession = getKieSession("test-channel"); 14 | 15 | ChannelService channelService = new ChannelService(); 16 | 17 | kieSession.registerChannel("test-channel", channelService); 18 | 19 | Person person = new Person(1,"Tom"); 20 | 21 | kieSession.insert(person); 22 | 23 | int count = kieSession.fireAllRules(); 24 | 25 | System.out.println("Fire " + count + " rules!"); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo12.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieBase; 4 | import org.kie.api.event.kiebase.*; 5 | import org.kie.api.io.ResourceType; 6 | import org.kie.api.runtime.KieSession; 7 | import org.kie.internal.io.ResourceFactory; 8 | import org.kie.internal.utils.KieHelper; 9 | 10 | /** 11 | * KieBase Events 12 | * 13 | * @author zzs 14 | */ 15 | public class Demo12 extends BaseDemo { 16 | 17 | public static void main(String[] args) { 18 | KieHelper kieHelper = new KieHelper(); 19 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter4.drl"), ResourceType.DRL); 20 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter5.drl"), ResourceType.DRL); 21 | 22 | KieBase kieBase = kieHelper.build(); 23 | kieBase.addEventListener(new DefaultKieBaseEventListener(){ 24 | @Override 25 | public void beforeKiePackageRemoved(BeforeKiePackageRemovedEvent event) { 26 | super.beforeKiePackageRemoved(event); 27 | String packageName = event.getKiePackage().getName(); 28 | System.out.println("beforeKiePackageRemoved : " + packageName); 29 | } 30 | }); 31 | 32 | kieBase.removeKiePackage("com.rules"); 33 | KieSession kieSession = kieBase.newKieSession(); 34 | kieSession.fireAllRules(); 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo13.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.drools.core.event.DefaultAgendaEventListener; 4 | import org.drools.core.event.DefaultRuleRuntimeEventListener; 5 | import org.kie.api.KieBase; 6 | import org.kie.api.event.rule.BeforeMatchFiredEvent; 7 | import org.kie.api.event.rule.ObjectInsertedEvent; 8 | import org.kie.api.io.ResourceType; 9 | import org.kie.api.runtime.KieSession; 10 | import org.kie.internal.io.ResourceFactory; 11 | import org.kie.internal.utils.KieHelper; 12 | 13 | /** 14 | * KieSession Events 15 | * 16 | * @author zzs 17 | */ 18 | public class Demo13 extends BaseDemo { 19 | 20 | public static void main(String[] args) { 21 | KieHelper kieHelper = new KieHelper(); 22 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter4.drl"), ResourceType.DRL); 23 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter5.drl"), ResourceType.DRL); 24 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/agenda.drl"), ResourceType.DRL); 25 | 26 | KieBase kieBase = kieHelper.build(); 27 | KieSession kieSession = kieBase.newKieSession(); 28 | kieSession.addEventListener(new DefaultRuleRuntimeEventListener(){ 29 | @Override 30 | public void objectInserted(final ObjectInsertedEvent event) { 31 | // intentionally left blank 32 | System.out.println("objectInserted,username=" + ((Person)event.getObject()).getUsername()); 33 | } 34 | }); 35 | 36 | kieSession.addEventListener(new DefaultAgendaEventListener(){ 37 | @Override 38 | public void beforeMatchFired(BeforeMatchFiredEvent event) { 39 | // intentionally left blank 40 | String ruleName = event.getMatch().getRule().getName(); 41 | System.out.println("beforeMatchFired ruleName=" + ruleName); 42 | } 43 | }); 44 | 45 | kieSession.insert(new Person(1,"Tom")); 46 | 47 | kieSession.fireAllRules(); 48 | 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo14.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.drools.compiler.compiler.DrlParser; 4 | import org.drools.compiler.compiler.DroolsParserException; 5 | import org.drools.compiler.lang.dsl.DefaultExpanderResolver; 6 | 7 | import java.io.IOException; 8 | import java.io.StringReader; 9 | 10 | /** 11 | * DSL 12 | * 13 | * @author zzs 14 | */ 15 | public class Demo14 extends BaseDemo { 16 | 17 | public static void main(String[] args) throws IOException, DroolsParserException { 18 | 19 | String dslContent = "[when] There is a person = $p:Person()\n" + 20 | "[when] - id greater than {id:\\d*} = id > {id}\n" + 21 | "[then] print = System.out.println(\"I am fired!\")"; 22 | 23 | String dslrContent = "rule 'test-dsl'\n" + 24 | "\n" + 25 | "when\n" + 26 | " There is a person\n" + 27 | " - id greater than 10\n" + 28 | "then\n" + 29 | " print\n" + 30 | "end"; 31 | 32 | DefaultExpanderResolver resolver = new DefaultExpanderResolver(new StringReader(dslContent)); 33 | 34 | DrlParser parser = new DrlParser(); 35 | 36 | String string = parser.getExpandedDRL(dslrContent,resolver); 37 | 38 | System.out.println(string); 39 | 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo15.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieBase; 4 | import org.kie.api.KieServices; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | /** 8 | * template xls 9 | * 10 | * @author zzs 11 | */ 12 | public class Demo15 extends BaseDemo { 13 | 14 | public static void main(String[] args) { 15 | 16 | KieServices kieServices = KieServices.Factory.get(); 17 | KieBase kieBase = kieServices.getKieClasspathContainer().getKieBase("test-template"); 18 | 19 | KieSession kieSession = kieBase.newKieSession(); 20 | 21 | Person p = new Person(2,""); 22 | kieSession.insert(p); 23 | 24 | kieSession.fireAllRules(); 25 | 26 | System.out.println(p.getUsername()); 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo8.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.builder.KieScanner; 5 | import org.kie.api.runtime.KieContainer; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | /** 9 | * @author zzs 10 | */ 11 | public class Demo8 { 12 | 13 | public static void main(String[] args) throws InterruptedException { 14 | KieServices kieServices = KieServices.Factory.get(); 15 | 16 | KieContainer container = kieServices.newKieContainer(kieServices.newReleaseId("com.secbro2","drools-rules","1.0-SNAPSHOT")); 17 | 18 | KieScanner kieScanner = kieServices.newKieScanner(container); 19 | kieScanner.start(1000); 20 | 21 | KieSession kieSession = container.newKieSession("all-kieSession-1"); 22 | 23 | while (true){ 24 | Thread.sleep(5000); 25 | int nums = kieSession.fireAllRules(); 26 | 27 | System.out.println("Fire " + nums + " rules!"); 28 | } 29 | 30 | 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Demo9.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.runtime.KieSession; 4 | 5 | /** 6 | * @author zzs 7 | */ 8 | public class Demo9 extends BaseDemo { 9 | 10 | public static void main(String[] args) { 11 | KieSession kieSession = getKieSession("test-global"); 12 | GlobalService globalService = new GlobalService(); 13 | kieSession.setGlobal("globalService", globalService); 14 | 15 | Person p = new Person(1,"Tom"); 16 | 17 | kieSession.insert(p); 18 | int count = kieSession.fireAllRules(); 19 | 20 | System.out.println("Fire " + count + " rules!"); 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/GlobalService.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | /** 4 | * @author zzs 5 | */ 6 | public class GlobalService { 7 | 8 | /** 9 | * 是否执行 10 | * @return 11 | */ 12 | public boolean isProcess() { 13 | System.out.println("isProcess:true"); 14 | return true; 15 | } 16 | 17 | public void insertObject(Person person){ 18 | System.out.println("insert person into database " + person); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/KieHelperDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.kie.api.KieBase; 4 | import org.kie.api.io.ResourceType; 5 | import org.kie.api.runtime.KieSession; 6 | import org.kie.internal.io.ResourceFactory; 7 | import org.kie.internal.utils.KieHelper; 8 | 9 | /** 10 | * KieHelper 11 | * 12 | * @author zzs 13 | */ 14 | public class KieHelperDemo extends BaseDemo { 15 | 16 | public static void main(String[] args) { 17 | 18 | KieHelper kieHelper = new KieHelper(); 19 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter4.drl"), ResourceType.DRL); 20 | 21 | /*kieHelper.addContent("package com.rules\n" + 22 | "\n" + 23 | "rule \"chapter4\"\n" + 24 | "\n" + 25 | "when\n" + 26 | "\n" + 27 | "then\n" + 28 | "\n" + 29 | "System.out.println(\"Fire the default rules!\");\n" + 30 | "end",ResourceType.DRL);*/ 31 | 32 | KieBase kieBase = kieHelper.build(); 33 | KieSession kieSession = kieBase.newKieSession(); 34 | kieSession.fireAllRules(); 35 | 36 | kieHelper.addResource(ResourceFactory.newClassPathResource("com/rules/chapter5.drl"), ResourceType.DRL); 37 | kieBase = kieHelper.build(); 38 | kieSession = kieBase.newKieSession(); 39 | kieSession.fireAllRules(); 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/MemberOfDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import com.secbro2.drools.entity.Member; 4 | import org.kie.api.runtime.KieSession; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * DROOLS规则引擎-memberOf操作 11 | *
12 | * 相关文章链接:https://www.choupangxia.com/2019/07/15/drools%e8%a7%84%e5%88%99%e5%bc%95%e6%93%8e-memberof%e6%93%8d%e4%bd%9c/ 13 | * 14 | * @author sec 15 | * @version 1.0 16 | * @date 2019/7/14 2:46 PM 17 | **/ 18 | public class MemberOfDemo extends BaseDemo { 19 | 20 | public static void main(String[] args) { 21 | 22 | KieSession kieSession = getKieSession("memberOfSession"); 23 | 24 | String str = "欢迎张三!"; 25 | List list = new ArrayList<>(); 26 | list.add("欢迎"); 27 | list.add("张三"); 28 | list.add("!"); 29 | 30 | Member member = new Member(); 31 | member.setName("张三"); 32 | 33 | kieSession.insert(str); 34 | kieSession.insert(list); 35 | kieSession.insert(member); 36 | 37 | kieSession.fireAllRules(); 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/Person.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | /** 4 | * @author zzs 5 | */ 6 | public class Person { 7 | 8 | private Integer id; 9 | 10 | private String username; 11 | 12 | private Integer age; 13 | 14 | public Person(){ 15 | } 16 | 17 | public Person(Integer id,String username){ 18 | this.id = id; 19 | this.username = username; 20 | } 21 | 22 | public Person(Integer id,String username,Integer age){ 23 | this.id = id; 24 | this.username = username; 25 | this.age = age; 26 | } 27 | 28 | public Integer getId() { 29 | return id; 30 | } 31 | 32 | public void setId(Integer id) { 33 | this.id = id; 34 | } 35 | 36 | public String getUsername() { 37 | return username; 38 | } 39 | 40 | public void setUsername(String username) { 41 | this.username = username; 42 | } 43 | 44 | public Integer getAge() { 45 | return age; 46 | } 47 | 48 | public void setAge(Integer age) { 49 | this.age = age; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/RuleTemplateArrayDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.drools.template.DataProvider; 4 | import org.drools.template.DataProviderCompiler; 5 | import org.drools.template.objects.ArrayDataProvider; 6 | import org.kie.api.runtime.KieSession; 7 | 8 | import java.io.InputStream; 9 | 10 | /** 11 | * @author zzs 12 | */ 13 | public class RuleTemplateArrayDemo extends BaseDemo { 14 | 15 | 16 | public static void main(String[] args) { 17 | 18 | InputStream template = RuleTemplateArrayDemo.class.getResourceAsStream("/com/template/template.drt"); 19 | 20 | DataProvider dataProvider = new ArrayDataProvider(new String[][]{ 21 | {"1", "Tom"}, {"2", "Lucy"} 22 | }); 23 | 24 | DataProviderCompiler compiler = new DataProviderCompiler(); 25 | 26 | String drl = compiler.compile(dataProvider, template); 27 | 28 | KieSession kieSession = getKieSessionByDrl(drl); 29 | 30 | Person person = new Person(1,""); 31 | 32 | kieSession.insert(person); 33 | 34 | kieSession.fireAllRules(); 35 | 36 | System.out.println("Person's username is " + person.getUsername()); 37 | 38 | 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/demo/RuleTemplateObjectDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.demo; 2 | 3 | import org.drools.template.ObjectDataCompiler; 4 | import org.drools.template.jdbc.ResultSetGenerator; 5 | import org.kie.api.runtime.KieSession; 6 | 7 | import java.io.InputStream; 8 | import java.sql.Connection; 9 | import java.sql.ResultSet; 10 | import java.sql.SQLException; 11 | import java.sql.Statement; 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | /** 16 | * @author zzs 17 | */ 18 | public class RuleTemplateObjectDemo extends BaseDemo { 19 | 20 | 21 | public static void main(String[] args) throws SQLException { 22 | 23 | InputStream template = RuleTemplateArrayDemo.class.getResourceAsStream("/com/template/template.drt"); 24 | 25 | List personList = new ArrayList<>(); 26 | personList.add(new Person(1,"Tom")); 27 | personList.add(new Person(2,"Lucy")); 28 | 29 | ObjectDataCompiler dataCompiler = new ObjectDataCompiler(); 30 | String drl = dataCompiler.compile(personList, template); 31 | 32 | KieSession kieSession = getKieSessionByDrl(drl); 33 | 34 | Person person = new Person(1,""); 35 | 36 | kieSession.insert(person); 37 | 38 | kieSession.fireAllRules(); 39 | 40 | System.out.println("Person's username is " + person.getUsername()); 41 | 42 | // sql 43 | 44 | /*Connection connection = null; 45 | Statement statement = connection.createStatement(); 46 | ResultSet resultSet = statement.executeQuery("select id, username from user "); 47 | ResultSetGenerator generator = new ResultSetGenerator(); 48 | String drl = generator.compile(resultSet, template);*/ 49 | 50 | 51 | } 52 | 53 | } 54 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/entity/Company.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.entity; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * @author sec 7 | * @version 1.0 8 | * @date 2019/7/14 2:56 PM 9 | **/ 10 | public class Company { 11 | 12 | private List scopes; 13 | 14 | public List getScopes() { 15 | return scopes; 16 | } 17 | 18 | public void setScopes(List scopes) { 19 | this.scopes = scopes; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/entity/Corporation.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.entity; 2 | 3 | import lombok.Data; 4 | 5 | import java.util.Set; 6 | 7 | /** 8 | * @author sec 9 | * @version 1.0 10 | * @date 2019/7/31 8:37 PM 11 | **/ 12 | @Data 13 | public class Corporation { 14 | 15 | private Set scopes; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/entity/Member.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.entity; 2 | 3 | /** 4 | * @author sec 5 | * @version 1.0 6 | * @date 2019/7/15 9:12 PM 7 | **/ 8 | public class Member { 9 | 10 | private String name; 11 | 12 | public String getName() { 13 | return name; 14 | } 15 | 16 | public void setName(String name) { 17 | this.name = name; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/entity/Scope.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.entity; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author sec 7 | * @version 1.0 8 | * @date 2019/7/31 8:36 PM 9 | **/ 10 | @Data 11 | public class Scope { 12 | 13 | 14 | public Scope(String scope){ 15 | this.scope = scope; 16 | } 17 | 18 | private String scope; 19 | 20 | } 21 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/java/com/secbro2/drools/logger/LoggerDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.drools.logger; 2 | 3 | import com.secbro2.drools.demo.BaseDemo; 4 | import org.kie.api.runtime.KieSession; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | /** 9 | * @author sec 10 | * @version 1.0 11 | * @date 2019/11/3 10:39 PM 12 | **/ 13 | public class LoggerDemo extends BaseDemo { 14 | 15 | private static Logger logger = LoggerFactory.getLogger(LoggerDemo.class); 16 | 17 | public static void main(String[] args) { 18 | 19 | KieSession kieSession = getKieSession("loggerTest"); 20 | kieSession.setGlobal("logger", logger); 21 | 22 | kieSession.insert("abc"); 23 | 24 | int count = kieSession.fireAllRules(); 25 | logger.info("触发了" + count + "条规则!"); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/META-INF/beans.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/META-INF/kmodule.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/accumu/accumulate.drl: -------------------------------------------------------------------------------- 1 | package com.accumu 2 | 3 | import com.secbro2.drools.demo.Person 4 | 5 | rule "test-accumulate" 6 | 7 | when 8 | 9 | $sumAge : Number(intValue > 30) from accumulate (Person($age : age),sum($age)) 10 | $avAge : Number(intValue >= 18) from accumulate (Person($age : age),average($age)) 11 | 12 | then 13 | System.out.println($sumAge); 14 | System.out.println($avAge); 15 | 16 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/cep/cep.drl: -------------------------------------------------------------------------------- 1 | package com.cep 2 | 3 | import com.secbro2.drools.demo.Person 4 | declare Person 5 | @Role(event) 6 | @expires(2s) 7 | end 8 | 9 | rule "test-cep" 10 | 11 | when 12 | 13 | // $p : Person() over window : length(1) 14 | $p : Person() over window : time(2s) 15 | 16 | then 17 | 18 | System.out.println($p.getUsername()); 19 | 20 | end 21 | 22 | // time(2s) 23 | // length(2) -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/channel/channel.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro2.drools.demo.Person; 3 | 4 | rule "test-channel" 5 | 6 | when 7 | $p : Person() 8 | then 9 | 10 | System.out.println("Fire the global rules!"); 11 | 12 | channels["test-channel"].send($p); 13 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/compareList/compareListRule.drl: -------------------------------------------------------------------------------- 1 | package com.compareList 2 | 3 | import com.secbro2.drools.entity.Company 4 | import java.util.List 5 | import java.util.ArrayList 6 | 7 | rule "compareListRule" 8 | 9 | when 10 | $blackList: List(); 11 | $company: Company($scopList:scopes,toCompareList(scopes,$blackList)); 12 | 13 | then 14 | 15 | System.out.println("黑名单规则触发!"); 16 | 17 | end 18 | 19 | function boolean toCompareList(List targetList, List blackList){ 20 | 21 | boolean flag = false; 22 | for(Object obj : targetList){ 23 | if(blackList.contains(obj)){ 24 | flag = true; 25 | break; 26 | } 27 | } 28 | return flag; 29 | } -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/containsVar/containsVar.drl: -------------------------------------------------------------------------------- 1 | package com.containsVar 2 | 3 | import com.secbro2.drools.entity.Corporation 4 | import com.secbro2.drools.entity.Scope 5 | import java.util.List 6 | 7 | rule "containsVar1" 8 | 9 | when 10 | 11 | $c: Corporation($scopes:scopes); 12 | $s: Scope(scope == "P2P") from $scopes; 13 | 14 | then 15 | 16 | System.out.println("containsVar1行业类型为:P2P"); 17 | end 18 | 19 | rule "containsVar2" 20 | 21 | when 22 | 23 | $c: Corporation($scopes:scopes); 24 | exists (Scope(scope == "P2P") from $scopes); 25 | then 26 | 27 | System.out.println("containsVar2行业类型为:P2P"); 28 | 29 | end 30 | 31 | 32 | rule "containsVar3" 33 | 34 | when 35 | $s: Scope(scope == "区块链") 36 | $c: Corporation(scopes contains $s); 37 | then 38 | 39 | System.out.println("containsVar3行业类型为:区块链"); 40 | 41 | end 42 | 43 | rule "containsVar4" 44 | 45 | when 46 | $s: Scope(scope == "区块链") 47 | exists (Corporation(scopes contains $s)); 48 | then 49 | 50 | System.out.println("containsVar4行业类型为:区块链"); 51 | 52 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/deployed/rule1.drl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson2/src/main/resources/com/deployed/rule1.drl -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/dsl/target.dslr: -------------------------------------------------------------------------------- 1 | rule 'test-dsl' 2 | 3 | when 4 | There is a person 5 | - id greater than 10 6 | then 7 | print 8 | end 9 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/dsl/template.dsl: -------------------------------------------------------------------------------- 1 | [when] There is a person = $p:Person() 2 | [when] - id greater than {id:\d*} = id > {id} 3 | [then] print = System.out.println("I am fired!") -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/dynamic.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | rule "dynamic-test" 4 | 5 | when 6 | 7 | then 8 | 9 | System.out.println("Fire the default rules in the package of com!"); 10 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/global/global.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro2.drools.demo.Person; 3 | global com.secbro2.drools.demo.GlobalService globalService 4 | 5 | rule "test-global" 6 | enabled(globalService.isProcess()) 7 | when 8 | $p : Person() 9 | then 10 | 11 | System.out.println("Fire the global rules!"); 12 | globalService.insertObject($p); 13 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/logger/logger.drl: -------------------------------------------------------------------------------- 1 | package com.logger 2 | 3 | global org.slf4j.Logger logger 4 | 5 | rule "loggerTest" 6 | 7 | when 8 | 9 | $s:String(); 10 | 11 | then 12 | System.out.println("123"); 13 | logger.info("print:" + $s); 14 | 15 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/memberof/member.drl: -------------------------------------------------------------------------------- 1 | package com.memberof 2 | 3 | import com.secbro2.drools.entity.Member 4 | import java.util.List 5 | 6 | rule "memberofRule1" 7 | 8 | when 9 | 10 | $s:String(); 11 | $c:Member(name memberOf $s); 12 | 13 | then 14 | 15 | System.out.println("memberofRule规则触发!"); 16 | 17 | end 18 | 19 | rule "memberofRule2" 20 | 21 | when 22 | 23 | $list:List(); 24 | $c:Member(name memberOf $list); 25 | 26 | then 27 | 28 | System.out.println("memberofRule2规则触发!"); 29 | 30 | end 31 | -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/rules/agenda.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | import com.secbro2.drools.demo.Person 3 | 4 | rule "agenda-rule" 5 | 6 | when 7 | $p:Person(id > 100) 8 | then 9 | 10 | System.out.println("Fire the default rules---5!"); 11 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/rules/chapter4.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | rule "chapter4" 4 | 5 | when 6 | 7 | then 8 | 9 | System.out.println("Fire the default rules!"); 10 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/rules/chapter5.drl: -------------------------------------------------------------------------------- 1 | package com.rules 2 | 3 | rule "chapter5" 4 | 5 | when 6 | 7 | then 8 | 9 | System.out.println("Fire the default rules---5!"); 10 | end -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/template/template.drt: -------------------------------------------------------------------------------- 1 | template header 2 | id 3 | username 4 | 5 | package com.template; 6 | 7 | import com.secbro2.drools.demo.Person; 8 | 9 | template "template-rules" 10 | 11 | rule "Categorize Persons_@{row.rowNumber}" 12 | no-loop true 13 | when 14 | $p: Person(id == @{id}) 15 | then 16 | 17 | modify ($p){ setUsername("@{username}")}; 18 | 19 | end 20 | end template -------------------------------------------------------------------------------- /drools-lesson2/src/main/resources/com/template/template.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson2/src/main/resources/com/template/template.xls -------------------------------------------------------------------------------- /drools-lesson3/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /drools-lesson3/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /drools-lesson3/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /drools-lesson3/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /drools-lesson3/drools-lesson3.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /drools-lesson3/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.secbro2 8 | drools-lesson3 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 7.28.0.Final 13 | 14 | 15 | 16 | 17 | org.kie.server 18 | kie-server-client 19 | ${drools.version} 20 | 21 | 22 | org.kie.server 23 | kie-server-api 24 | ${drools.version} 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /drools-lesson3/src/main/java/com/firstspace/firstproject/entity/Result.java: -------------------------------------------------------------------------------- 1 | package com.firstspace.firstproject.entity; 2 | 3 | import org.kie.api.definition.type.Label; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * This class was automatically generated by the data modeler tool. 9 | */ 10 | public class Result implements Serializable { 11 | 12 | static final long serialVersionUID = 1L; 13 | 14 | @Label(value = "编码") 15 | private String code; 16 | 17 | @Label(value = "信息") 18 | private String message; 19 | 20 | public Result() { 21 | } 22 | 23 | public String getCode() { 24 | return this.code; 25 | } 26 | 27 | public void setCode(String code) { 28 | this.code = code; 29 | } 30 | 31 | public String getMessage() { 32 | return this.message; 33 | } 34 | 35 | public void setMessage(String message) { 36 | this.message = message; 37 | } 38 | 39 | public Result(String code, String message) { 40 | this.code = code; 41 | this.message = message; 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /drools-lesson3/src/main/java/com/firstspace/firstproject/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.firstspace.firstproject.entity; 2 | 3 | import org.kie.api.definition.type.Description; 4 | import org.kie.api.definition.type.Label; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * This class was automatically generated by the data modeler tool. 10 | */ 11 | public class User implements Serializable { 12 | 13 | static final long serialVersionUID = 1L; 14 | 15 | @Label(value = "ID") 16 | private Integer id; 17 | 18 | @Label(value = "用户名") 19 | private String username; 20 | 21 | @Description(value = "age > 18 && age < 60") 22 | @Label(value = "年龄") 23 | private Integer age; 24 | 25 | public User() { 26 | } 27 | 28 | public Integer getId() { 29 | return this.id; 30 | } 31 | 32 | public void setId(Integer id) { 33 | this.id = id; 34 | } 35 | 36 | public String getUsername() { 37 | return this.username; 38 | } 39 | 40 | public void setUsername(String username) { 41 | this.username = username; 42 | } 43 | 44 | public Integer getAge() { 45 | return this.age; 46 | } 47 | 48 | public void setAge(Integer age) { 49 | this.age = age; 50 | } 51 | 52 | public User(Integer id, String username, 53 | Integer age) { 54 | this.id = id; 55 | this.username = username; 56 | this.age = age; 57 | } 58 | 59 | } -------------------------------------------------------------------------------- /drools-lesson3/src/main/java/com/secbro2/client/CheckUserClientDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.client; 2 | 3 | import com.firstspace.firstproject.entity.Result; 4 | import com.firstspace.firstproject.entity.User; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.command.Command; 7 | import org.kie.api.command.KieCommands; 8 | import org.kie.api.runtime.ExecutionResults; 9 | import org.kie.server.api.marshalling.MarshallingFormat; 10 | import org.kie.server.api.model.ServiceResponse; 11 | import org.kie.server.client.KieServicesClient; 12 | import org.kie.server.client.KieServicesConfiguration; 13 | import org.kie.server.client.KieServicesFactory; 14 | import org.kie.server.client.RuleServicesClient; 15 | 16 | import java.util.LinkedList; 17 | import java.util.List; 18 | 19 | /** 20 | * @author sec 21 | * @version 1.0 22 | * @date 2020/2/8 1:40 PM 23 | **/ 24 | public class CheckUserClientDemo { 25 | 26 | public static final String SERVER_URL = "http://127.0.0.1:8080/kie-server/services/rest/server"; 27 | public static final String USERNAME = "kieserver"; 28 | public static final String PASSWORD = "kieserver1!"; 29 | public static final long TIME_OUT = 10000L; 30 | public static final String KIE_CONTAINER_ID = "FirstProject_1.0.0"; 31 | 32 | public static void main(String[] args) { 33 | 34 | // KisService 配置信息设置 35 | KieServicesConfiguration kieServicesConfiguration = 36 | KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, TIME_OUT); 37 | kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON); 38 | 39 | // 创建规则服务客户端 40 | KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration); 41 | 42 | RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); 43 | 44 | // 规则输入条件 45 | User user = new User(1, "Tom", 20); 46 | Result checkResult = new Result("NOT PASS", "初始值"); 47 | 48 | // 命令定义,包含插入数据,执行规则 49 | KieCommands kieCommands = KieServices.Factory.get().getCommands(); 50 | List> commands = new LinkedList<>(); 51 | commands.add(kieCommands.newInsert(user, "user")); 52 | commands.add(kieCommands.newInsert(checkResult, "checkResult")); 53 | 54 | ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, 55 | kieCommands.newBatchExecution(commands, "hello-session")); 56 | 57 | ExecutionResults executionResults = results.getResult(); 58 | 59 | user = (User) executionResults.getValue("user"); 60 | checkResult = (Result) executionResults.getValue("checkResult"); 61 | System.out.println("age:" + user.getAge() + ";username:" + user.getUsername()); 62 | System.out.println("code:" + checkResult.getCode() + ";message:" + checkResult.getMessage()); 63 | 64 | 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /drools-lesson3/src/main/java/com/secbro2/client/ClientDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.client; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.command.Command; 5 | import org.kie.api.command.KieCommands; 6 | import org.kie.api.runtime.ExecutionResults; 7 | import org.kie.server.api.marshalling.MarshallingFormat; 8 | import org.kie.server.api.model.ServiceResponse; 9 | import org.kie.server.client.KieServicesClient; 10 | import org.kie.server.client.KieServicesConfiguration; 11 | import org.kie.server.client.KieServicesFactory; 12 | import org.kie.server.client.RuleServicesClient; 13 | 14 | import java.util.LinkedList; 15 | import java.util.List; 16 | 17 | /** 18 | * @author sec 19 | * @version 1.0 20 | * @date 2020/2/8 1:40 PM 21 | **/ 22 | public class ClientDemo { 23 | 24 | public static final String SERVER_URL = "http://127.0.0.1:8080/kie-server/services/rest/server"; 25 | public static final String USERNAME = "kieserver"; 26 | public static final String PASSWORD = "kieserver1!"; 27 | public static final long TIME_OUT = 10000L; 28 | public static final String KIE_CONTAINER_ID = "FirstProject"; 29 | 30 | public static void main(String[] args) { 31 | 32 | // KisService 配置信息设置 33 | KieServicesConfiguration kieServicesConfiguration = 34 | KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, TIME_OUT); 35 | kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON); 36 | 37 | // 创建规则服务客户端 38 | KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration); 39 | 40 | RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); 41 | 42 | // 规则输入条件 43 | String name = "Tom"; 44 | 45 | // 命令定义,包含插入数据,执行规则 46 | KieCommands kieCommands = KieServices.Factory.get().getCommands(); 47 | List> commands = new LinkedList<>(); 48 | commands.add(kieCommands.newInsert(name)); 49 | commands.add(kieCommands.newFireAllRules()); 50 | 51 | ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, 52 | kieCommands.newBatchExecution(commands, "hello-session")); 53 | 54 | String msg = results.getMsg(); 55 | System.out.println(msg); 56 | System.out.println(results.getType()); 57 | 58 | 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /drools-lesson3/target/classes/com/firstspace/firstproject/entity/Result.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson3/target/classes/com/firstspace/firstproject/entity/Result.class -------------------------------------------------------------------------------- /drools-lesson3/target/classes/com/firstspace/firstproject/entity/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson3/target/classes/com/firstspace/firstproject/entity/User.class -------------------------------------------------------------------------------- /drools-lesson3/target/classes/com/secbro2/client/CheckUserClientDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson3/target/classes/com/secbro2/client/CheckUserClientDemo.class -------------------------------------------------------------------------------- /drools-lesson3/target/classes/com/secbro2/client/ClientDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson3/target/classes/com/secbro2/client/ClientDemo.class -------------------------------------------------------------------------------- /drools-lesson4/.gitignore: -------------------------------------------------------------------------------- 1 | # Created by .ignore support plugin (hsz.mobi) 2 | ### Java template 3 | # Compiled class file 4 | *.class 5 | 6 | # Log file 7 | *.log 8 | 9 | # BlueJ files 10 | *.ctxt 11 | 12 | # Mobile Tools for Java (J2ME) 13 | .mtj.tmp/ 14 | 15 | # Package Files # 16 | *.jar 17 | *.war 18 | *.nar 19 | *.ear 20 | *.zip 21 | *.tar.gz 22 | *.rar 23 | 24 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 25 | hs_err_pid* 26 | /target/* 27 | -------------------------------------------------------------------------------- /drools-lesson4/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /drools-lesson4/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /drools-lesson4/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /drools-lesson4/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /drools-lesson4/doc/doc.md: -------------------------------------------------------------------------------- 1 | ## RuleSet区域 2 | - RuleSet 3 | - Sequential 4 | - SequentialMaxPriority 5 | - SequentialMinPriority 6 | - EscapeQuotes 7 | - NumericDisabled 8 | - Import 9 | - Variables 10 | - Functions 11 | - Queries 12 | - Declare 13 | 14 | ### 规则属性 15 | 16 | - PRIORITY 17 | - DURATION 18 | - TIMER 19 | - ENABLED 20 | - CALENDARS 21 | - NO-LOOP 22 | - LOCK-ON-ACTIVE 23 | - AUTO-FOCUS 24 | - ACTIVATION-GROUP 25 | - AGENDA-GROUP 26 | - RULEFLOW-GROUP 27 | 28 | ## RuleTable区域 29 | 30 | - NAME 31 | - DESCRIPTION 32 | - CONDITION 33 | - ACTION 34 | - METADATA 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /drools-lesson4/drools-lesson4.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /drools-lesson4/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.choupangxia 8 | drools-lesson4 9 | 1.0 10 | 11 | 12 | 7.34.0.Final 13 | 14 | 15 | 16 | 17 | org.drools 18 | drools-core 19 | ${drools.version} 20 | 21 | 22 | org.drools 23 | drools-compiler 24 | ${drools.version} 25 | 26 | 27 | org.drools 28 | drools-decisiontables 29 | ${drools.version} 30 | 31 | 32 | org.projectlombok 33 | lombok 34 | 1.18.10 35 | 36 | 37 | org.slf4j 38 | slf4j-simple 39 | 1.7.29 40 | 41 | 42 | log4j 43 | log4j 44 | 1.2.17 45 | 46 | 47 | junit 48 | junit 49 | 4.12 50 | test 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /drools-lesson4/src/main/java/com/choupangxia/entity/Address.java: -------------------------------------------------------------------------------- 1 | package com.choupangxia.entity; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author sec 7 | * @version 1.0 8 | * @date 2020/3/20 8:03 AM 9 | **/ 10 | @Data 11 | public class Address { 12 | 13 | private String country; 14 | 15 | private String city; 16 | } 17 | -------------------------------------------------------------------------------- /drools-lesson4/src/main/java/com/choupangxia/entity/Person.java: -------------------------------------------------------------------------------- 1 | package com.choupangxia.entity; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * @author sec 7 | * @version 1.0 8 | * @date 2020/3/16 3:56 PM 9 | **/ 10 | @Data 11 | public class Person { 12 | 13 | private String name; 14 | 15 | private int age; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /drools-lesson4/src/main/java/com/choupangxia/utils/GlobalUtil.java: -------------------------------------------------------------------------------- 1 | package com.choupangxia.utils; 2 | 3 | /** 4 | * @author sec 5 | * @version 1.0 6 | * @date 2020/3/16 4:23 PM 7 | **/ 8 | public class GlobalUtil { 9 | 10 | private static int count = 0; 11 | 12 | public static void add() { 13 | count++; 14 | System.out.println("GlobalUtil.add()---count=" + count); 15 | } 16 | 17 | public static int getCount() { 18 | return count; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/META-INF/kmodule.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision1/decision.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision1/decision.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision10/decision10.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision10/decision10.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision11/decision11.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision11/decision11.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision2/decision2.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision2/decision2.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision3/decision3.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision3/decision3.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision4/decision4.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision4/decision4.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision5/decision5.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision5/decision5.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision6/decision6.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision6/decision6.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision7/decision7.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision7/decision7.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision8/decision8.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision8/decision8.xls -------------------------------------------------------------------------------- /drools-lesson4/src/main/resources/com/decision9/decision9.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/drools-lesson4/src/main/resources/com/decision9/decision9.xls -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestAction.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.drools.decisiontable.InputType; 5 | import org.drools.decisiontable.SpreadsheetCompiler; 6 | import org.junit.Test; 7 | import org.kie.api.KieServices; 8 | import org.kie.api.builder.Message; 9 | import org.kie.api.builder.Results; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * @author sec 18 | * @version 1.0 19 | * @date 2020/3/12 10:51 AM 20 | **/ 21 | @Slf4j 22 | public class TestAction { 23 | 24 | @Test 25 | public void checkDrl2() { 26 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 27 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision6/decision6.xls"), 28 | InputType.XLS); 29 | System.out.println(drl); 30 | } 31 | 32 | @Test 33 | public void testDecision() { 34 | 35 | KieContainer container = KieServices.get().getKieClasspathContainer(); 36 | Results results = container.verify(); 37 | if (results.hasMessages(Message.Level.ERROR)) { 38 | List messages = results.getMessages(); 39 | for (Message message : messages) { 40 | log.info("错误信息:{}", message); 41 | } 42 | } 43 | 44 | KieSession kieSession = container.newKieSession("decision-rules6"); 45 | 46 | int count = kieSession.fireAllRules(); 47 | 48 | log.info("Fired {} rules!", count); 49 | kieSession.dispose(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestCondition.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import com.choupangxia.entity.Person; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.drools.decisiontable.InputType; 6 | import org.drools.decisiontable.SpreadsheetCompiler; 7 | import org.junit.Test; 8 | import org.kie.api.KieServices; 9 | import org.kie.api.builder.Message; 10 | import org.kie.api.builder.Results; 11 | import org.kie.api.runtime.KieContainer; 12 | import org.kie.api.runtime.KieSession; 13 | import org.kie.internal.io.ResourceFactory; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * @author sec 19 | * @version 1.0 20 | * @date 2020/3/12 10:51 AM 21 | **/ 22 | @Slf4j 23 | public class TestCondition { 24 | 25 | @Test 26 | public void checkDrl2() { 27 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 28 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision7/decision7.xls"), 29 | InputType.XLS); 30 | System.out.println(drl); 31 | } 32 | 33 | @Test 34 | public void testDecision() { 35 | 36 | KieContainer container = KieServices.get().getKieClasspathContainer(); 37 | 38 | Person p1 = new Person(); 39 | p1.setAge(10); 40 | p1.setName("我是青少年"); 41 | 42 | Person p2 = new Person(); 43 | p2.setAge(28); 44 | p2.setName("我是中年人"); 45 | 46 | Person p3 = new Person(); 47 | p3.setAge(88); 48 | p3.setName("我是老年人"); 49 | 50 | Person p4 = new Person(); 51 | p4.setAge(129); 52 | p4.setName("寿星"); 53 | 54 | KieSession kieSession = container.newKieSession("decision-rules7"); 55 | 56 | kieSession.insert(p1); 57 | kieSession.insert(p2); 58 | kieSession.insert(p3); 59 | kieSession.insert(p4); 60 | 61 | int count = kieSession.fireAllRules(); 62 | 63 | log.info("Fired {} rules!", count); 64 | kieSession.dispose(); 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestDecision1.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import org.drools.decisiontable.InputType; 4 | import org.drools.decisiontable.SpreadsheetCompiler; 5 | import org.junit.Test; 6 | import org.kie.internal.io.ResourceFactory; 7 | 8 | import java.io.*; 9 | 10 | /** 11 | * 获取规则文件内容,并生成对应的规则 12 | * @author sec 13 | * @version 1.0 14 | * @date 2020/3/12 10:27 AM 15 | **/ 16 | public class TestDecision1 { 17 | 18 | @Test 19 | public void createDrl() throws IOException { 20 | 21 | File file = new File("/Users/zzs/develop/github/drools/drools-lesson4/src/main/resources/com/decision1" + 22 | "/decision.xls"); 23 | InputStream is = new FileInputStream(file); 24 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 25 | String drl = compiler.compile(is, InputType.XLS); 26 | System.out.println(drl); 27 | // 关闭资源 28 | is.close(); 29 | } 30 | 31 | @Test 32 | public void checkDrl2() { 33 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 34 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision1/decision.xls"), 35 | InputType.XLS); 36 | System.out.println(drl); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestDecision2.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.junit.Test; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.builder.Message; 7 | import org.kie.api.builder.Results; 8 | import org.kie.api.runtime.KieContainer; 9 | import org.kie.api.runtime.KieSession; 10 | 11 | import java.util.List; 12 | 13 | /** 14 | * @author sec 15 | * @version 1.0 16 | * @date 2020/3/12 10:51 AM 17 | **/ 18 | @Slf4j 19 | public class TestDecision2 { 20 | 21 | @Test 22 | public void testDecision() { 23 | 24 | KieContainer container = KieServices.get().getKieClasspathContainer(); 25 | 26 | Results results = container.verify(); 27 | if (results.hasMessages(Message.Level.ERROR)) { 28 | List messages = results.getMessages(); 29 | for (Message message : messages) { 30 | log.info("错误信息:{}", message); 31 | } 32 | } 33 | 34 | 35 | KieSession kieSession = container.newKieSession("decision-rules"); 36 | 37 | int count = kieSession.fireAllRules(); 38 | log.info("Fired {} rules!", count); 39 | kieSession.dispose(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestDecision3.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.drools.decisiontable.InputType; 5 | import org.drools.decisiontable.SpreadsheetCompiler; 6 | import org.junit.Test; 7 | import org.kie.api.KieServices; 8 | import org.kie.api.builder.Message; 9 | import org.kie.api.builder.Results; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * @author sec 18 | * @version 1.0 19 | * @date 2020/3/12 10:51 AM 20 | **/ 21 | @Slf4j 22 | public class TestDecision3 { 23 | 24 | @Test 25 | public void checkDrl2() { 26 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 27 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision2/decision2.xls"), 28 | InputType.XLS); 29 | System.out.println(drl); 30 | } 31 | 32 | @Test 33 | public void testDecision() { 34 | 35 | KieContainer container = KieServices.get().getKieClasspathContainer(); 36 | Results results = container.verify(); 37 | if (results.hasMessages(Message.Level.ERROR)) { 38 | List messages = results.getMessages(); 39 | for (Message message : messages) { 40 | log.info("错误信息:{}", message); 41 | } 42 | } 43 | 44 | KieSession kieSession = container.newKieSession("decision-rules2"); 45 | 46 | int count = kieSession.fireAllRules(); 47 | log.info("Fired {} rules!", count); 48 | kieSession.dispose(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestDecision4.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.drools.decisiontable.InputType; 5 | import org.drools.decisiontable.SpreadsheetCompiler; 6 | import org.junit.Test; 7 | import org.kie.api.KieServices; 8 | import org.kie.api.builder.Message; 9 | import org.kie.api.builder.Results; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * @author sec 18 | * @version 1.0 19 | * @date 2020/3/12 10:51 AM 20 | **/ 21 | @Slf4j 22 | public class TestDecision4 { 23 | 24 | @Test 25 | public void checkDrl2() { 26 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 27 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision3/decision3.xls"), 28 | InputType.XLS); 29 | System.out.println(drl); 30 | } 31 | 32 | @Test 33 | public void testDecision() { 34 | 35 | KieContainer container = KieServices.get().getKieClasspathContainer(); 36 | Results results = container.verify(); 37 | if (results.hasMessages(Message.Level.ERROR)) { 38 | List messages = results.getMessages(); 39 | for (Message message : messages) { 40 | log.info("错误信息:{}", message); 41 | } 42 | } 43 | 44 | KieSession kieSession = container.newKieSession("decision-rules3"); 45 | 46 | int count = kieSession.fireAllRules(); 47 | log.info("Fired {} rules!", count); 48 | kieSession.dispose(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestDecision5.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import com.choupangxia.utils.GlobalUtil; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.drools.decisiontable.InputType; 6 | import org.drools.decisiontable.SpreadsheetCompiler; 7 | import org.junit.Test; 8 | import org.kie.api.KieServices; 9 | import org.kie.api.builder.Message; 10 | import org.kie.api.builder.Results; 11 | import org.kie.api.runtime.KieContainer; 12 | import org.kie.api.runtime.KieSession; 13 | import org.kie.internal.io.ResourceFactory; 14 | 15 | import java.util.List; 16 | 17 | /** 18 | * @author sec 19 | * @version 1.0 20 | * @date 2020/3/12 10:51 AM 21 | **/ 22 | @Slf4j 23 | public class TestDecision5 { 24 | 25 | @Test 26 | public void checkDrl2() { 27 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 28 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision4/decision4.xls"), 29 | InputType.XLS); 30 | System.out.println(drl); 31 | } 32 | 33 | @Test 34 | public void testDecision() { 35 | 36 | KieContainer container = KieServices.get().getKieClasspathContainer(); 37 | Results results = container.verify(); 38 | if (results.hasMessages(Message.Level.ERROR)) { 39 | List messages = results.getMessages(); 40 | for (Message message : messages) { 41 | log.info("错误信息:{}", message); 42 | } 43 | } 44 | 45 | KieSession kieSession = container.newKieSession("decision-rules4"); 46 | 47 | int count = kieSession.fireAllRules(); 48 | 49 | log.info("count:{}", GlobalUtil.getCount()); 50 | log.info("Fired {} rules!", count); 51 | kieSession.dispose(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestFunctions.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import lombok.extern.slf4j.Slf4j; 4 | import org.drools.decisiontable.InputType; 5 | import org.drools.decisiontable.SpreadsheetCompiler; 6 | import org.junit.Test; 7 | import org.kie.api.KieServices; 8 | import org.kie.api.builder.Message; 9 | import org.kie.api.builder.Results; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * @author sec 18 | * @version 1.0 19 | * @date 2020/3/12 10:51 AM 20 | **/ 21 | @Slf4j 22 | public class TestFunctions { 23 | 24 | @Test 25 | public void checkDrl2() { 26 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 27 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision5/decision5.xls"), 28 | InputType.XLS); 29 | System.out.println(drl); 30 | } 31 | 32 | @Test 33 | public void testDecision() { 34 | 35 | KieContainer container = KieServices.get().getKieClasspathContainer(); 36 | Results results = container.verify(); 37 | if (results.hasMessages(Message.Level.ERROR)) { 38 | List messages = results.getMessages(); 39 | for (Message message : messages) { 40 | log.info("错误信息:{}", message); 41 | } 42 | } 43 | 44 | KieSession kieSession = container.newKieSession("decision-rules5"); 45 | 46 | int count = kieSession.fireAllRules(); 47 | 48 | log.info("Fired {} rules!", count); 49 | kieSession.dispose(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestLoop.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import com.choupangxia.entity.Person; 4 | import lombok.extern.slf4j.Slf4j; 5 | import org.drools.decisiontable.InputType; 6 | import org.drools.decisiontable.SpreadsheetCompiler; 7 | import org.junit.Test; 8 | import org.kie.api.KieServices; 9 | import org.kie.api.runtime.KieContainer; 10 | import org.kie.api.runtime.KieSession; 11 | import org.kie.internal.io.ResourceFactory; 12 | 13 | /** 14 | * @author sec 15 | * @version 1.0 16 | * @date 2020/3/12 10:51 AM 17 | **/ 18 | @Slf4j 19 | public class TestLoop { 20 | 21 | @Test 22 | public void checkDrl2() { 23 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 24 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision9/decision9.xls"), 25 | InputType.XLS); 26 | System.out.println(drl); 27 | } 28 | 29 | @Test 30 | public void testDecision() { 31 | 32 | KieContainer container = KieServices.get().getKieClasspathContainer(); 33 | 34 | Person person = new Person(); 35 | person.setAge(24); 36 | person.setName("Tom"); 37 | 38 | KieSession kieSession = container.newKieSession("decision-rules9"); 39 | 40 | kieSession.insert(person); 41 | int count = kieSession.fireAllRules(); 42 | log.info("Person age:{}", person.getAge()); 43 | log.info("Fired {} rules!", count); 44 | kieSession.dispose(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestMultiFact.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import com.choupangxia.entity.Address; 4 | import com.choupangxia.entity.Person; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.drools.decisiontable.InputType; 7 | import org.drools.decisiontable.SpreadsheetCompiler; 8 | import org.junit.Test; 9 | import org.kie.api.KieServices; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | /** 15 | * @author sec 16 | * @version 1.0 17 | * @date 2020/3/12 10:51 AM 18 | **/ 19 | @Slf4j 20 | public class TestMultiFact { 21 | 22 | @Test 23 | public void checkDrl2() { 24 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 25 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision8/decision8.xls"), 26 | InputType.XLS); 27 | System.out.println(drl); 28 | } 29 | 30 | @Test 31 | public void testDecision() { 32 | 33 | KieContainer container = KieServices.get().getKieClasspathContainer(); 34 | 35 | Person person = new Person(); 36 | person.setAge(25); 37 | person.setName("Tom"); 38 | 39 | Address address = new Address(); 40 | address.setCountry("China"); 41 | address.setCity("BeiJing"); 42 | 43 | KieSession kieSession = container.newKieSession("decision-rules8"); 44 | 45 | kieSession.insert(person); 46 | kieSession.insert(address); 47 | 48 | int count = kieSession.fireAllRules(); 49 | 50 | log.info("Fired {} rules!", count); 51 | kieSession.dispose(); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /drools-lesson4/src/test/java/decision/TestMultiTables.java: -------------------------------------------------------------------------------- 1 | package decision; 2 | 3 | import com.choupangxia.entity.Address; 4 | import com.choupangxia.entity.Person; 5 | import lombok.extern.slf4j.Slf4j; 6 | import org.drools.decisiontable.InputType; 7 | import org.drools.decisiontable.SpreadsheetCompiler; 8 | import org.junit.Test; 9 | import org.kie.api.KieServices; 10 | import org.kie.api.runtime.KieContainer; 11 | import org.kie.api.runtime.KieSession; 12 | import org.kie.internal.io.ResourceFactory; 13 | 14 | /** 15 | * @author sec 16 | * @version 1.0 17 | * @date 2020/3/12 10:51 AM 18 | **/ 19 | @Slf4j 20 | public class TestMultiTables { 21 | 22 | @Test 23 | public void checkDrl2() { 24 | SpreadsheetCompiler compiler = new SpreadsheetCompiler(); 25 | String drl = compiler.compile(ResourceFactory.newClassPathResource("com/decision10/decision10.xls"), 26 | InputType.XLS); 27 | System.out.println(drl); 28 | } 29 | 30 | @Test 31 | public void testDecision() { 32 | 33 | KieContainer container = KieServices.get().getKieClasspathContainer(); 34 | 35 | Person person = new Person(); 36 | person.setAge(24); 37 | person.setName("Tom"); 38 | 39 | Address address = new Address(); 40 | address.setCountry("China"); 41 | address.setCity("BeiJing"); 42 | 43 | KieSession kieSession = container.newKieSession("decision-rules10"); 44 | 45 | kieSession.insert(person); 46 | kieSession.insert(address); 47 | int count = kieSession.fireAllRules(); 48 | 49 | log.info("Fired {} rules!", count); 50 | kieSession.dispose(); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /kie-client/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /kie-client/.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /kie-client/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /kie-client/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /kie-client/kie-client.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /kie-client/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.secbro2 8 | kie-client 9 | 1.0-SNAPSHOT 10 | 11 | 12 | 7.28.0.Final 13 | 14 | 15 | 16 | 17 | org.kie 18 | kie-api 19 | ${drools.version} 20 | 21 | 22 | org.drools 23 | drools-core 24 | ${drools.version} 25 | 26 | 27 | org.drools 28 | drools-compiler 29 | ${drools.version} 30 | 31 | 32 | org.kie.server 33 | kie-server-client 34 | ${drools.version} 35 | 36 | 37 | org.kie.server 38 | kie-server-api 39 | ${drools.version} 40 | 41 | 42 | 43 | org.projectlombok 44 | lombok 45 | 1.16.20 46 | provided 47 | 48 | 49 | junit 50 | junit 51 | 4.12 52 | provided 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /kie-client/src/main/java/com/secbro2/client/ClientDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.client; 2 | 3 | import org.kie.api.KieServices; 4 | import org.kie.api.command.Command; 5 | import org.kie.api.command.KieCommands; 6 | import org.kie.api.runtime.ExecutionResults; 7 | import org.kie.server.api.marshalling.MarshallingFormat; 8 | import org.kie.server.api.model.ServiceResponse; 9 | import org.kie.server.client.KieServicesClient; 10 | import org.kie.server.client.KieServicesConfiguration; 11 | import org.kie.server.client.KieServicesFactory; 12 | import org.kie.server.client.RuleServicesClient; 13 | 14 | import java.util.LinkedList; 15 | import java.util.List; 16 | 17 | /** 18 | * @author sec 19 | * @version 1.0 20 | * @date 2020/2/8 1:40 PM 21 | **/ 22 | public class ClientDemo { 23 | 24 | public static final String SERVER_URL = "http://localhost:8080/kie-server/services/rest/server"; 25 | public static final String USERNAME = "kieserver"; 26 | public static final String PASSWORD = "kieserver1!"; 27 | public static final long TIME_OUT = 10000L; 28 | public static final String KIE_CONTAINER_ID = "FirstProject"; 29 | 30 | public static void main(String[] args) { 31 | 32 | // KisService 配置信息设置 33 | KieServicesConfiguration kieServicesConfiguration = 34 | KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, TIME_OUT); 35 | kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON); 36 | 37 | // 创建规则服务客户端 38 | KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration); 39 | System.out.println(kieServicesClient.listContainers().getResult().getContainers()); 40 | 41 | RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); 42 | 43 | // 规则输入条件 44 | String name = "Tom"; 45 | 46 | // 命令定义,包含插入数据,执行规则 47 | KieCommands kieCommands = KieServices.Factory.get().getCommands(); 48 | List> commands = new LinkedList<>(); 49 | 50 | commands.add(kieCommands.newInsert(name)); 51 | commands.add(kieCommands.newFireAllRules()); 52 | ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, 53 | kieCommands.newBatchExecution(commands,"hello-xx-session")); 54 | 55 | System.out.println(results.getType()); 56 | System.out.println(results.getResult()); 57 | 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /kie-client/src/main/java/com/secbro2/client/ClientWithEntityDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.client; 2 | 3 | import com.testspace.firstproject.entity.User; 4 | import org.drools.core.command.runtime.rule.GetObjectsCommand; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.command.Command; 7 | import org.kie.api.command.KieCommands; 8 | import org.kie.api.runtime.ExecutionResults; 9 | import org.kie.server.api.marshalling.MarshallingFormat; 10 | import org.kie.server.api.model.ServiceResponse; 11 | import org.kie.server.client.KieServicesClient; 12 | import org.kie.server.client.KieServicesConfiguration; 13 | import org.kie.server.client.KieServicesFactory; 14 | import org.kie.server.client.RuleServicesClient; 15 | 16 | import java.util.ArrayList; 17 | import java.util.Collection; 18 | import java.util.LinkedList; 19 | import java.util.List; 20 | 21 | /** 22 | * @author sec 23 | * @version 1.0 24 | * @date 2020/2/8 1:40 PM 25 | **/ 26 | public class ClientWithEntityDemo { 27 | 28 | public static final String SERVER_URL = "http://localhost:8080/kie-server/services/rest/server"; 29 | public static final String USERNAME = "kieserver"; 30 | public static final String PASSWORD = "kieserver1!"; 31 | public static final long TIME_OUT = 10000L; 32 | // 别名 33 | public static final String KIE_CONTAINER_ID = "FirstProject_1.0.1"; 34 | public static final String KIE_SESSION = "hello-xx-session"; 35 | 36 | public static void main(String[] args) { 37 | 38 | // KisService 配置信息设置 39 | KieServicesConfiguration kieServicesConfiguration = 40 | KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, TIME_OUT); 41 | kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON); 42 | 43 | // 创建规则服务客户端 44 | KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration); 45 | System.out.println(kieServicesClient.listContainers().getResult().getContainers()); 46 | 47 | RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); 48 | 49 | // 规则输入条件 50 | User user = new User(null,"Tom",12); 51 | 52 | // 命令定义,包含插入数据,执行规则 53 | KieCommands kieCommands = KieServices.Factory.get().getCommands(); 54 | GetObjectsCommand getObjectsCommand = new GetObjectsCommand(); 55 | getObjectsCommand.setOutIdentifier("out"); 56 | 57 | List> commands = new LinkedList<>(); 58 | commands.add(kieCommands.newInsert(user,"user")); 59 | 60 | commands.add(getObjectsCommand); 61 | commands.add(kieCommands.newFireAllRules()); 62 | ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, 63 | kieCommands.newBatchExecution(commands,KIE_SESSION)); 64 | 65 | 66 | ExecutionResults executionResults = results.getResult(); 67 | 68 | Collection identifiers = executionResults.getIdentifiers(); 69 | for (String string : identifiers) { 70 | System.out.println(string); 71 | } 72 | 73 | ArrayList objects = (ArrayList) executionResults.getValue("out"); 74 | // its will get all object Contains the last sessions object ; 75 | System.out.println(objects.size()); 76 | for (Object ob : objects) { 77 | System.out.println(ob); 78 | // System.out.println(lo.getName()); 79 | } 80 | 81 | // its get right 82 | user = (User) executionResults.getValue("user"); 83 | // System.out.println(user.getAge()); 84 | // System.out.println(user.getUsername()); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /kie-client/src/main/java/com/secbro2/client/UserClientDemo.java: -------------------------------------------------------------------------------- 1 | package com.secbro2.client; 2 | 3 | import com.testspace.firstproject.entity.User; 4 | import com.testspace.firstproject.entity.UserCheckResult; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.command.Command; 7 | import org.kie.api.command.KieCommands; 8 | import org.kie.api.runtime.ExecutionResults; 9 | import org.kie.server.api.marshalling.MarshallingFormat; 10 | import org.kie.server.api.model.ServiceResponse; 11 | import org.kie.server.client.KieServicesClient; 12 | import org.kie.server.client.KieServicesConfiguration; 13 | import org.kie.server.client.KieServicesFactory; 14 | import org.kie.server.client.RuleServicesClient; 15 | 16 | import java.util.LinkedList; 17 | import java.util.List; 18 | 19 | /** 20 | * @author sec 21 | * @version 1.0 22 | * @date 2020/2/8 1:40 PM 23 | **/ 24 | public class UserClientDemo { 25 | 26 | public static final String SERVER_URL = "http://localhost:8080/kie-server/services/rest/server"; 27 | public static final String USERNAME = "kieserver"; 28 | public static final String PASSWORD = "kieserver1!"; 29 | public static final long TIME_OUT = 10000L; 30 | // 别名 31 | public static final String KIE_CONTAINER_ID = "FirstProject_1.0.1"; 32 | public static final String KIE_SESSION = "hello-xx-session"; 33 | 34 | public static void main(String[] args) { 35 | 36 | // KisService 配置信息设置 37 | KieServicesConfiguration kieServicesConfiguration = 38 | KieServicesFactory.newRestConfiguration(SERVER_URL, USERNAME, PASSWORD, TIME_OUT); 39 | kieServicesConfiguration.setMarshallingFormat(MarshallingFormat.JSON); 40 | 41 | // 创建规则服务客户端 42 | KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(kieServicesConfiguration); 43 | System.out.println(kieServicesClient.listContainers().getResult().getContainers()); 44 | 45 | RuleServicesClient ruleServicesClient = kieServicesClient.getServicesClient(RuleServicesClient.class); 46 | 47 | // 规则输入条件 48 | User user = new User(null,"Tom",12); 49 | UserCheckResult checkResult = new UserCheckResult(); 50 | 51 | // 命令定义,包含插入数据,执行规则 52 | KieCommands kieCommands = KieServices.Factory.get().getCommands(); 53 | 54 | 55 | List> commands = new LinkedList<>(); 56 | commands.add(kieCommands.newInsert(user,"user")); 57 | 58 | commands.add(kieCommands.newInsert(checkResult,"checkResult")); 59 | commands.add(kieCommands.newFireAllRules()); 60 | ServiceResponse results = ruleServicesClient.executeCommandsWithResults(KIE_CONTAINER_ID, 61 | kieCommands.newBatchExecution(commands,KIE_SESSION)); 62 | 63 | 64 | ExecutionResults executionResults = results.getResult(); 65 | 66 | user = (User) executionResults.getValue("user"); 67 | checkResult = (UserCheckResult) executionResults.getValue("checkResult"); 68 | System.out.println("age:" + user.getAge()+";username:" + user.getUsername()); 69 | System.out.println("code:" + checkResult.getCode()+";message:" + checkResult.getMessage()); 70 | 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /kie-client/src/main/java/com/testspace/firstproject/entity/User.java: -------------------------------------------------------------------------------- 1 | package com.testspace.firstproject.entity; 2 | 3 | /** 4 | * This class was automatically generated by the data modeler tool. 5 | */ 6 | 7 | public class User implements java.io.Serializable { 8 | 9 | static final long serialVersionUID = 1L; 10 | 11 | @org.kie.api.definition.type.Label(value = "ID") 12 | private Integer id; 13 | @org.kie.api.definition.type.Label(value = "用户名") 14 | private String username; 15 | @org.kie.api.definition.type.Label(value = "年龄") 16 | private Integer age; 17 | 18 | public User() { 19 | } 20 | 21 | public java.lang.Integer getId() { 22 | return this.id; 23 | } 24 | 25 | public void setId(java.lang.Integer id) { 26 | this.id = id; 27 | } 28 | 29 | public java.lang.String getUsername() { 30 | return this.username; 31 | } 32 | 33 | public void setUsername(java.lang.String username) { 34 | this.username = username; 35 | } 36 | 37 | public java.lang.Integer getAge() { 38 | return this.age; 39 | } 40 | 41 | public void setAge(java.lang.Integer age) { 42 | this.age = age; 43 | } 44 | 45 | public User(java.lang.Integer id, java.lang.String username, 46 | java.lang.Integer age) { 47 | this.id = id; 48 | this.username = username; 49 | this.age = age; 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /kie-client/src/main/java/com/testspace/firstproject/entity/UserCheckResult.java: -------------------------------------------------------------------------------- 1 | package com.testspace.firstproject.entity; 2 | 3 | /** 4 | * This class was automatically generated by the data modeler tool. 5 | */ 6 | 7 | public class UserCheckResult implements java.io.Serializable { 8 | 9 | static final long serialVersionUID = 1L; 10 | 11 | @org.kie.api.definition.type.Label(value = "结果编码(PASS或NOT-PASS)") 12 | private java.lang.String code; 13 | @org.kie.api.definition.type.Label(value = "信息描述") 14 | private java.lang.String message; 15 | 16 | public UserCheckResult() { 17 | } 18 | 19 | public java.lang.String getCode() { 20 | return this.code; 21 | } 22 | 23 | public void setCode(java.lang.String code) { 24 | this.code = code; 25 | } 26 | 27 | public java.lang.String getMessage() { 28 | return this.message; 29 | } 30 | 31 | public void setMessage(java.lang.String message) { 32 | this.message = message; 33 | } 34 | 35 | public UserCheckResult(java.lang.String code, java.lang.String message) { 36 | this.code = code; 37 | this.message = message; 38 | } 39 | 40 | } -------------------------------------------------------------------------------- /kie-client/target/classes/com/drools/test/DroolsTest.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/drools/test/DroolsTest.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/drools/test/Person.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/drools/test/Person.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/secbro2/client/ClientDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/secbro2/client/ClientDemo.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/secbro2/client/ClientWithEntityDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/secbro2/client/ClientWithEntityDemo.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/secbro2/client/UserClientDemo.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/secbro2/client/UserClientDemo.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/testspace/firstproject/entity/User.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/testspace/firstproject/entity/User.class -------------------------------------------------------------------------------- /kie-client/target/classes/com/testspace/firstproject/entity/UserCheckResult.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/classes/com/testspace/firstproject/entity/UserCheckResult.class -------------------------------------------------------------------------------- /kie-client/target/kie-client-1.0-SNAPSHOT.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/kie-client-1.0-SNAPSHOT.jar -------------------------------------------------------------------------------- /kie-client/target/maven-archiver/pom.properties: -------------------------------------------------------------------------------- 1 | #Generated by Maven 2 | #Sat Feb 08 12:46:24 CST 2020 3 | version=1.0-SNAPSHOT 4 | groupId=com.secbro2 5 | artifactId=kie-client 6 | -------------------------------------------------------------------------------- /kie-client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst -------------------------------------------------------------------------------- /kie-client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/kie-client/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst -------------------------------------------------------------------------------- /new-card.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/new-card.png -------------------------------------------------------------------------------- /springboot-drools-reload-rules/.gitignore: -------------------------------------------------------------------------------- 1 | ##ignore this file## 2 | 3 | /target/ 4 | .idea 5 | *.iml 6 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | com.secbro 7 | spring-boot-drools 8 | 0.0.1-SNAPSHOT 9 | jar 10 | 11 | spring-boot-drools 12 | Demo project for Spring Boot 13 | 14 | 15 | UTF-8 16 | UTF-8 17 | 1.8 18 | 1.5.4.RELEASE 19 | 7.0.0.Final 20 | 21 | 22 | 23 | 24 | 25 | org.springframework.boot 26 | spring-boot-starter-parent 27 | pom 28 | ${spring.version} 29 | import 30 | 31 | 32 | 33 | 34 | 35 | org.springframework.boot 36 | spring-boot-starter-web 37 | 38 | 39 | mysql 40 | mysql-connector-java 41 | 42 | 43 | org.springframework.boot 44 | spring-boot-starter-test 45 | 46 | 47 | org.kie 48 | kie-spring 49 | ${drools.version} 50 | 51 | 52 | org.springframework 53 | spring-tx 54 | 55 | 56 | org.springframework 57 | spring-beans 58 | 59 | 60 | org.springframework 61 | spring-core 62 | 63 | 64 | org.springframework 65 | spring-context 66 | 67 | 68 | 69 | 70 | org.drools 71 | drools-compiler 72 | ${drools.version} 73 | 74 | 75 | org.apache.commons 76 | commons-lang3 77 | 3.3.2 78 | 79 | 80 | org.springframework.boot 81 | spring-boot-starter-actuator 82 | 1.2.3.RELEASE 83 | 84 | 85 | 86 | 87 | 88 | 89 | org.springframework.boot 90 | spring-boot-maven-plugin 91 | 92 | 93 | org.apache.maven.plugins 94 | maven-compiler-plugin 95 | 96 | 1.8 97 | 1.8 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/SpringBootDroolsApplication.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 8 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 9 | * 本人博客地址:http://blog.csdn.net/wo541075754 10 | */ 11 | @SpringBootApplication 12 | public class SpringBootDroolsApplication { 13 | 14 | public static void main(String[] args) { 15 | SpringApplication.run(SpringBootDroolsApplication.class, args); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/component/ReloadDroolsRules.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.component; 2 | 3 | import com.secbro.drools.utils.KieUtils; 4 | import org.kie.api.KieBase; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.builder.KieBuilder; 7 | import org.kie.api.builder.KieFileSystem; 8 | import org.kie.api.builder.Message; 9 | import org.kie.api.builder.Results; 10 | import org.kie.api.io.Resource; 11 | import org.kie.api.io.ResourceType; 12 | import org.kie.api.runtime.KieContainer; 13 | import org.kie.internal.io.ResourceFactory; 14 | import org.kie.internal.utils.KieHelper; 15 | import org.springframework.stereotype.Component; 16 | import org.springframework.stereotype.Service; 17 | 18 | import java.io.StringReader; 19 | import java.io.UnsupportedEncodingException; 20 | 21 | /** 22 | * Created by neo on 17/7/31. 23 | */ 24 | 25 | @Component 26 | public class ReloadDroolsRules { 27 | 28 | public void reload() throws UnsupportedEncodingException { 29 | KieServices kieServices = getKieServices(); 30 | KieFileSystem kfs = kieServices.newKieFileSystem(); 31 | kfs.write("src/main/resources/rules/temp.drl", loadRules()); 32 | KieBuilder kieBuilder = kieServices.newKieBuilder(kfs).buildAll(); 33 | Results results = kieBuilder.getResults(); 34 | if (results.hasMessages(Message.Level.ERROR)) { 35 | System.out.println(results.getMessages()); 36 | throw new IllegalStateException("### errors ###"); 37 | } 38 | 39 | KieUtils.setKieContainer(kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId())); 40 | System.out.println("reload新规则重载成功"); 41 | } 42 | 43 | private String loadRules() { 44 | // 从数据库加载的规则 45 | return "package plausibcheck.adress\n\n rule \"Postcode 6 numbers\"\n\n when\n then\n System.out.println(\"规则2中打印日志:校验通过!\");\n end"; 46 | 47 | } 48 | 49 | private KieServices getKieServices() { 50 | return KieServices.Factory.get(); 51 | } 52 | 53 | public void reloadByHelper() throws UnsupportedEncodingException { 54 | 55 | KieHelper kieHelper = new KieHelper(); 56 | kieHelper.addContent(loadRules(),ResourceType.DRL); 57 | 58 | Results results = kieHelper.verify(); 59 | if (results.hasMessages(Message.Level.ERROR)) { 60 | System.out.println(results.getMessages()); 61 | throw new IllegalStateException("### errors ###"); 62 | } 63 | 64 | // KieBase kieBase = kieHelper.build(); 65 | KieContainer kieContainer = kieHelper.getKieContainer(); 66 | 67 | 68 | KieUtils.setKieContainer(kieContainer); 69 | System.out.println("新规则重载成功"); 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/config/DroolsAutoConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.config; 2 | 3 | import com.secbro.drools.utils.KieUtils; 4 | import org.kie.api.KieBase; 5 | import org.kie.api.KieServices; 6 | import org.kie.api.builder.*; 7 | import org.kie.api.runtime.KieContainer; 8 | import org.kie.internal.io.ResourceFactory; 9 | import org.kie.spring.KModuleBeanFactoryPostProcessor; 10 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 11 | import org.springframework.context.annotation.Bean; 12 | import org.springframework.context.annotation.Configuration; 13 | import org.springframework.core.io.Resource; 14 | import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 15 | import org.springframework.core.io.support.ResourcePatternResolver; 16 | 17 | import java.io.IOException; 18 | 19 | /** 20 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 21 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 22 | * 本人博客地址:http://blog.csdn.net/wo541075754 23 | */ 24 | @Configuration 25 | public class DroolsAutoConfiguration { 26 | 27 | private static final String RULES_PATH = "rules/"; 28 | 29 | @Bean 30 | @ConditionalOnMissingBean(KieFileSystem.class) 31 | public KieFileSystem kieFileSystem() throws IOException { 32 | KieFileSystem kieFileSystem = getKieServices().newKieFileSystem(); 33 | for (Resource file : getRuleFiles()) { 34 | kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_PATH + file.getFilename(), "UTF-8")); 35 | } 36 | return kieFileSystem; 37 | } 38 | 39 | private Resource[] getRuleFiles() throws IOException { 40 | ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver(); 41 | return resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "**/*.*"); 42 | } 43 | 44 | @Bean 45 | @ConditionalOnMissingBean(KieContainer.class) 46 | public KieContainer kieContainer() throws IOException { 47 | KieServices kieServices = getKieServices(); 48 | final KieRepository kieRepository = kieServices.getRepository(); 49 | 50 | kieRepository.addKieModule(new KieModule() { 51 | @Override 52 | public ReleaseId getReleaseId() { 53 | return kieRepository.getDefaultReleaseId(); 54 | } 55 | }); 56 | 57 | KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem()); 58 | Results results = kieBuilder.getResults(); 59 | if (results.hasMessages(Message.Level.ERROR)) { 60 | System.out.println(results.getMessages()); 61 | throw new IllegalStateException("### errors ###"); 62 | } 63 | 64 | kieBuilder.buildAll(); 65 | 66 | KieContainer kieContainer = kieServices.newKieContainer(kieRepository.getDefaultReleaseId()); 67 | KieUtils.setKieContainer(kieContainer); 68 | return kieContainer; 69 | } 70 | 71 | private KieServices getKieServices() { 72 | return KieServices.Factory.get(); 73 | } 74 | 75 | @Bean 76 | @ConditionalOnMissingBean(KieBase.class) 77 | public KieBase kieBase() throws IOException { 78 | return kieContainer().getKieBase(); 79 | } 80 | 81 | @Bean 82 | @ConditionalOnMissingBean(KModuleBeanFactoryPostProcessor.class) 83 | public KModuleBeanFactoryPostProcessor kiePostProcessor() { 84 | return new KModuleBeanFactoryPostProcessor(); 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/controller/TestController.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.controller; 2 | 3 | import com.secbro.drools.component.ReloadDroolsRules; 4 | import com.secbro.drools.model.fact.AddressCheckResult; 5 | import com.secbro.drools.model.Address; 6 | import com.secbro.drools.utils.KieUtils; 7 | import org.kie.api.runtime.KieSession; 8 | import org.springframework.stereotype.Controller; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.ResponseBody; 11 | 12 | import javax.annotation.Resource; 13 | import java.io.IOException; 14 | 15 | /** 16 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 17 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 18 | * 本人博客地址:http://blog.csdn.net/wo541075754 19 | */ 20 | @RequestMapping("/test") 21 | @Controller 22 | public class TestController { 23 | 24 | @Resource 25 | private ReloadDroolsRules rules; 26 | 27 | @ResponseBody 28 | @RequestMapping("/address") 29 | public void test(){ 30 | KieSession kieSession = KieUtils.getKieContainer().newKieSession(); 31 | 32 | Address address = new Address(); 33 | address.setPostcode("994251"); 34 | 35 | AddressCheckResult result = new AddressCheckResult(); 36 | kieSession.insert(address); 37 | kieSession.insert(result); 38 | int ruleFiredCount = kieSession.fireAllRules(); 39 | System.out.println("触发了" + ruleFiredCount + "条规则"); 40 | 41 | if(result.isPostCodeResult()){ 42 | System.out.println("规则校验通过"); 43 | } 44 | 45 | kieSession.dispose(); 46 | } 47 | 48 | @ResponseBody 49 | @RequestMapping("/reload") 50 | public String reload() throws IOException { 51 | rules.reload(); 52 | return "ok"; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/model/Address.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | /** 4 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 5 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 6 | * 本人博客地址:http://blog.csdn.net/wo541075754 7 | */ 8 | public class Address { 9 | 10 | private String postcode; 11 | 12 | private String street; 13 | 14 | private String state; 15 | 16 | public String getPostcode() { 17 | return postcode; 18 | } 19 | 20 | public void setPostcode(String postcode) { 21 | this.postcode = postcode; 22 | } 23 | 24 | public String getStreet() { 25 | return street; 26 | } 27 | 28 | public void setStreet(String street) { 29 | this.street = street; 30 | } 31 | 32 | public String getState() { 33 | return state; 34 | } 35 | 36 | public void setState(String state) { 37 | this.state = state; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/model/Rule.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model; 2 | 3 | import org.apache.commons.lang3.builder.ToStringBuilder; 4 | 5 | //import javax.persistence.Column; 6 | //import javax.persistence.Entity; 7 | //import javax.persistence.GeneratedValue; 8 | //import javax.persistence.Id; 9 | import java.io.Serializable; 10 | 11 | //@Entity 12 | public class Rule implements Serializable { 13 | 14 | private static final long serialVersionUID = 1L; 15 | // @Id 16 | // @GeneratedValue 17 | private Long id; 18 | // @Column(nullable = false, unique = true) 19 | private String ruleKey; 20 | // @Column(nullable = false) 21 | private String content; 22 | private String version; 23 | private String lastModifyTime; 24 | private String createTime; 25 | 26 | public Long getId() { 27 | return id; 28 | } 29 | 30 | public void setId(Long id) { 31 | this.id = id; 32 | } 33 | 34 | public String getRuleKey() { 35 | return ruleKey; 36 | } 37 | 38 | public void setRuleKey(String ruleKey) { 39 | this.ruleKey = ruleKey; 40 | } 41 | 42 | public String getContent() { 43 | return content; 44 | } 45 | 46 | public void setContent(String content) { 47 | this.content = content; 48 | } 49 | 50 | public String getVersion() { 51 | return version; 52 | } 53 | 54 | public void setVersion(String version) { 55 | this.version = version; 56 | } 57 | 58 | public String getLastModifyTime() { 59 | return lastModifyTime; 60 | } 61 | 62 | public void setLastModifyTime(String lastModifyTime) { 63 | this.lastModifyTime = lastModifyTime; 64 | } 65 | 66 | public String getCreateTime() { 67 | return createTime; 68 | } 69 | 70 | public void setCreateTime(String createTime) { 71 | this.createTime = createTime; 72 | } 73 | 74 | 75 | 76 | @Override 77 | public String toString() { 78 | return ToStringBuilder.reflectionToString(this); 79 | } 80 | } -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/model/fact/AddressCheckResult.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.model.fact; 2 | 3 | /** 4 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 5 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 6 | * 本人博客地址:http://blog.csdn.net/wo541075754 7 | */ 8 | public class AddressCheckResult { 9 | 10 | /** 11 | * true:通过校验;false:未通过校验 12 | */ 13 | private boolean postCodeResult = false; 14 | 15 | public boolean isPostCodeResult() { 16 | return postCodeResult; 17 | } 18 | 19 | public void setPostCodeResult(boolean postCodeResult) { 20 | this.postCodeResult = postCodeResult; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/java/com/secbro/drools/utils/KieUtils.java: -------------------------------------------------------------------------------- 1 | package com.secbro.drools.utils; 2 | 3 | import org.kie.api.runtime.KieContainer; 4 | 5 | /** 6 | * 你的支持是我努力的最大动力!社区的建立离不开你的支持。 7 | * 此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。 8 | * 本人博客地址:http://blog.csdn.net/wo541075754 9 | */ 10 | public class KieUtils { 11 | 12 | private static KieContainer kieContainer; 13 | 14 | public static KieContainer getKieContainer() { 15 | return kieContainer; 16 | } 17 | 18 | public static void setKieContainer(KieContainer kieContainer) { 19 | KieUtils.kieContainer = kieContainer; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/resources/application.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/springboot-drools-reload-rules/src/main/resources/application.properties -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/resources/rules/address.drl: -------------------------------------------------------------------------------- 1 | package plausibcheck.adress 2 | rule "Postcode should be filled with exactly 5 numbers" 3 | 4 | when 5 | then 6 | System.out.println("logs in rule :check success!"); 7 | end -------------------------------------------------------------------------------- /springboot-drools-reload-rules/src/main/resources/rules/temp.drl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/secbr/drools/97847ea2f974e84b30bcb38b7ff321933640004c/springboot-drools-reload-rules/src/main/resources/rules/temp.drl --------------------------------------------------------------------------------