Rules Engine
Business Rules Engines are required to execute one or more rules in an Enterprise or Software System. The ability to maintain and execute rules as separate from the application code is the greatest advantage of such engines. Business Rules Engine are a form of Expert System. Expert System in the most simple terms, allows human expert-like decision making abilities.
Business Rules Engine are, primarily, of two types and classified on the basis of how rules are scheduled for execution.
Forward Chaining (Data-Driven)
[CREDITS FOR THE IMAGE GO TO http://www.igcseict.info]
Business Rules Engine are, primarily, of two types and classified on the basis of how rules are scheduled for execution.
Forward Chaining (Data-Driven)
1. Inference Engine: These are based on a set of 'If-Then' kind of behaviors or evaluations.
2. Reaction Rules: These are used to process event patterns and perform actions.
2. Reaction Rules: These are used to process event patterns and perform actions.
Backward Chaining (Goal-Driven)
1. It tries to resolve facts based on particular goals.
![](http://www.amzi.com/ExpertSystemsInProlog/intro1-2.gif)
[CREDITS FOR THE IMAGE GO TO http://www.amzi.com]
1. It tries to resolve facts based on particular goals.
![](http://www.amzi.com/ExpertSystemsInProlog/intro1-2.gif)
[CREDITS FOR THE IMAGE GO TO http://www.amzi.com]
Drools Expert
Drools Expert works on the basis of Rete/Rete-OO Algorithm. Drools is an open-source project that has the following major components
[CREDITS FOR THE IMAGE GO TO http://en.wikipedia.org]
Drools Expert works on the basis of Rete/Rete-OO Algorithm. Drools is an open-source project that has the following major components
- Drools Guvnor (Business Rules Manager) – [A Centralized Repository for Drools Knowledge Bases]
- Drools Expert (Rules Engine) – [Uses the rules to Perform Reasoning]
- Drools Flow (Process/Workflow), or jBPM 5 – [Provides for Workflow and Business Processes]
- Drools Fusion (Event Processing/Temporal Reasoning) – [Provides for Complex Event Processing]
- Drools Planner/OptaPlanner (Automated Planning) – [Optimizes Automated Planning, including NP-Hard Planning Problems]
[CREDITS FOR THE IMAGE GO TO http://en.wikipedia.org]
Use-Case(s) Implement Here [To Demonstrate Drools Expert]
1. If the 'Source IP' is a Specific IP and the 'Source Port' is a Specific Number, then mark the 'Event' as 'Blacklisted' [Unsafe Event Detection]
I will demonstrate only this particular use-case in this blog entry (including how to run the 'Intelligent Data
Loader') to understand rules engine processing. You may need to do the following
before you can download and run the code:
A. Download Drools 6.1.0 Distribution (Include in Classpath)
B. Download the Eclipse Plugin for Drools (Include in Classpath)
C. Use JDK 1.8.0 and JEE 1.7 Libraries (If Required) (Include in Classpath)
D. Brief Read on MVEL Dialect and Drools Expert (Above/Official)
1. Start a Java Project in Eclipse [Classpath]
You may choose to start a 'Java' project only as opposed to a 'Drools' project. Then include the following JARs in the classpath:
2. The Directory / Folder Structure should Include a 'resources' as Source Folder
3. Create the Drools Expert Configuration File (kmodule.xml)
4. Create the Rule using 'mvel' Dialect
The creation of your first rule using 'mvel' dialect though should not be a very difficult task for the experience Java developer. I am not explaining the use-case implementation detail, except that it checks if the source ip and source port are equal to a specific number.
5. Develop the Core Rules Engine Processing Class
Instantiate the important Drools Runtime objects as shown below. You may also understand from the below code, how to include and refer the rules file (.drl) from the classpath.
6. Build a Data Loader (To Inject Positive Test Cases and Load Test)
There is a data loader that starts internally a threaded loading mechanism for sending multiple events to the Drools Expert Runtime. You have to make sure that you 'Inject' a positive test case at every interval, to test out the functionality of Drools Expert. The Java Event Object in our example is "SampleEvent".
7. Output of Running the SampleDataLoaderDriver [Rules Engine Output]
1. Start a Java Project in Eclipse [Classpath]
You may choose to start a 'Java' project only as opposed to a 'Drools' project. Then include the following JARs in the classpath:
3. Create the Drools Expert Configuration File (kmodule.xml)
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="rules" packages="rules">
<ksession name="ksession-rules"/>
</kbase>
</kmodule>
4. Create the Rule using 'mvel' Dialect
The creation of your first rule using 'mvel' dialect though should not be a very difficult task for the experience Java developer. I am not explaining the use-case implementation detail, except that it checks if the source ip and source port are equal to a specific number.
package com.bw2015.sample.biz.re;
// list any import classes here.
import com.bw2015.sample.biz.vo.SampleEvent;
// use case 01
// detect if we can blacklist a specific ip and port access
rule "Port and IP Blacklist Rule"
dialect "mvel"
no-loop
when
$sampleEvent:SampleEvent(eventSourceIp=="216.39.58.18", eventSourcePort=="8080")
then
System.out.println("***** Blacklisted IP and Port Detected in Event with Remarks - " + $sampleEvent.getEventRemarks());
end
5. Develop the Core Rules Engine Processing Class
Instantiate the important Drools Runtime objects as shown below. You may also understand from the below code, how to include and refer the rules file (.drl) from the classpath.
private static SampleRulesEngine reService = null;
// Drools Expert Runtime Configuration
private KieServices ks;
private KieContainer kContainer;
private KieSession kSession;
public static SampleRulesEngine getInstance() {
if(reService==null) {
reService = new SampleRulesEngine();
reService.init();
}
return reService;
}
public void init() {
try {
System.out.println("initializing kie runtime for drools expert...");
ks = KieServices.Factory.get();
kContainer = ks.getKieClasspathContainer();
KieSessionConfiguration sessionConfiguration = KnowledgeBaseFactory.newKnowledgeSessionConfiguration();
kSession = kContainer.newKieSession("ksession-rules", sessionConfiguration);
System.out.println("initialized the kie runtime for drools expert...");
} catch (Exception e) {
e.printStackTrace();
}
}
6. Build a Data Loader (To Inject Positive Test Cases and Load Test)
There is a data loader that starts internally a threaded loading mechanism for sending multiple events to the Drools Expert Runtime. You have to make sure that you 'Inject' a positive test case at every interval, to test out the functionality of Drools Expert. The Java Event Object in our example is "SampleEvent".
7. Output of Running the SampleDataLoaderDriver [Rules Engine Output]
There are other rule forms that you may use such as Decision Tables. It is only a matter of configuration, classpath, regular expressions and a straightforward understanding of .xls files to create Decision Tables. Also, I recommend that you make sure that you use Microsoft Excel to edition the Decision Table Spreadsheet, else you may end up with weird issues.
Download the entire Sample Rules Engine Code in Drools 6.1.0 as a Eclipse Project (.ZIP)
No comments:
Post a Comment