├── 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 | 
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 |
4 |
5 |
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 |
--------------------------------------------------------------------------------
/drools-lesson3/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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 |
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 |
--------------------------------------------------------------------------------
/drools-lesson4/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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 |
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 |
--------------------------------------------------------------------------------
/kie-client/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
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
--------------------------------------------------------------------------------