1.DRL definition:
Package Com.sample
Import com.sample.DroolsTest.Holding;
Import Com.sample.DroolsTest.MatchingRule;
Global Java.util.List batchmatchinglist;
DECLARE customeraddress
Number:int
Streetname:string
City:string
End
function void Printruleinfo () {
int i;
i = 108;
String str = "Define local variable in I rule Engine";
Java.util.List lst = new Java.util.ArrayList ();
Lst.add ("Test1");
Lst.add ("Test2");
SYSTEM.OUT.PRINTLN ("local variable:" + str + ":" + i + ":" + lst.get (1));
}
Rule "Rule 1"
Salience 100
No-loop true
When
Hd:holding ()
Then
System.out.println (Drools.getrule (). GetName () + ":" + hd.getexternalid ());
if (hd.domatching (Matchingrule.matchingbystock)) {
Retract (HD);
}
Drools.setfocus ("G2");
End
Rule "Rule 2"
Salience 99
Agenda-group "G2"
No-loop true
When
Hd:holding ()
Then
System.out.println (Drools.getrule (). GetName () + ":" + hd.getexternalid ());
Hd.domatching (Matchingrule.matchingbyfund);
End
Rule "Rule 3"
Salience 98
Agenda-group "G3"
No-loop true
When
Hd:holding ()
Then
System.out.println (Drools.getrule (). GetName () + ":" + hd.getexternalid ());
Hd.domatching (Matchingrule.matchingbybond);
End
2.java class:
Package com.sample;
Import java.util.ArrayList;
Import org.drools.KnowledgeBase;
Import org.drools.KnowledgeBaseFactory;
Import Org.drools.base.RuleNameEndsWithAgendaFilter;
Import Org.drools.base.RuleNameStartsWithAgendaFilter;
Import Org.drools.builder.KnowledgeBuilder;
Import Org.drools.builder.KnowledgeBuilderError;
Import org.drools.builder.KnowledgeBuilderErrors;
Import org.drools.builder.KnowledgeBuilderFactory;
Import Org.drools.builder.ResourceType;
Import Org.drools.common.DefaultFactHandle;
Import Org.drools.event.rule.DefaultWorkingMemoryEventListener;
Import org.drools.io.ResourceFactory;
Import Org.drools.logger.KnowledgeRuntimeLogger;
Import org.drools.logger.KnowledgeRuntimeLoggerFactory;
Import org.drools.runtime.StatefulKnowledgeSession;
Import org.drools.runtime.rule.Activation;
Import Org.drools.runtime.rule.AgendaFilter;
Import Org.drools.runtime.rule.FactHandle;
/**
* This is a sample class to launch a rule.
*/
public class Droolstest {
private static statefulknowledgesession ksession = null;
private static java.util.map<string, facthandle> holdingmapping = new java.util.hashmap<string, FactHandle > ();
public static final void main (string[] args) {
try {
Load up the Knowledge base
Knowledgebase Kbase = Readknowledgebase ();
Ksession = Kbase.newstatefulknowledgesession ();
Knowledgeruntimelogger logger = Knowledgeruntimeloggerfactory.newfilelogger (ksession, "test");
Java.util.List batchmatchinglist = new ArrayList ();
Ksession.setglobal ("Batchmatchinglist", batchmatchinglist);
Ksession.addeventlistener (New Defaultworkingmemoryeventlistener ());
Go!
Holding HD = new Holding ();
Hd.externalid = "S01";
Holding hd2 = new Holding ();
Hd2.externalid = "D02";
Holding HD3 = new Holding ();
Hd3.externalid = "f03";
Holding hd4 = new Holding ();
Hd4.externalid = "S09";
Facthandle f1 = Ksession.insert (HD);
Facthandle F2 = Ksession.insert (HD2);
Facthandle F3 = Ksession.insert (HD3);
Facthandle F4 = Ksession.insert (HD4);
Holdingmapping.put (Hd.externalid, F1);
Holdingmapping.put (Hd2.externalid, F2);
Holdingmapping.put (Hd3.externalid, F3);
Holdingmapping.put (Hd4.externalid, F4);
Ksession.fireallrules (New Rulenamestartswithagendafilter ("F"));
Ksession.fireallrules ();
Logger.close ();
catch (Throwable t) {
T.printstacktrace ();
}
}
private Static Knowledgebase Readknowledgebase () throws Exception {
knowledgebuilder kbuilder = Knowledgebuilderfactory.newknowledgebuilder ();
kbuilder.add (Resourcefactory.newclasspathresource ("MATCHBYID.DRL"), RESOURCETYPE.DRL);
//kbuilder.add (Resourcefactory.newclasspathresource ("MATCHBYDETAIL.DRL"), ResourceType.DRL);
knowledgebuildererrors errors = kbuilder.geterrors ();
if (errors.size () > 0) {
for (knowledgebuildererror error:errors) {
&NBSP;&NBSP;&NBSP;SYSTEM.ERR.PRINTLN (Error);
}
throw New IllegalArgumentException ("could not parse knowledge.");
}
knowledgebase kbase = Knowledgebasefactory.newknowledgebase ();
kbase.addknowledgepackages (Kbuilder.getknowledgepackages ());
return kbase;
}
public static class Holding {
Private String Externalid;
Private String Externalname;
Public String Getexternalid () {
return externalid;
}
Public String Getexternalname () {
return externalname;
}
public void dobatchmatching (Matchingrule matchingrule) {
Java.util.List batchmatchinglist = (java.util.List) ksession.getglobal ("Batchmatchinglist");
for (int i = 0; i < batchmatchinglist.size (); i++) {
String externalid = (string) batchmatchinglist.get (i);
boolean ismatched = false;
switch (matchingrule) {
case matchingbystock:
if (Externalid.startswith ("S0")) {
ismatched = True ;
}
break;
case Matchingbybond:
if (Externalid = = "D02") {
ismatched = true;
}
break;
case matchingbyfund:
if (Externalid = = "F03") {
ismatched = true;
}
break;
Default
Break
}
if (ismatched) {
System.out.println ("==> backend matched:" + matchingrule + "--->>>" + externalid);
Facthandle handle = Holdingmapping.get (Externalid);
DroolsTest.ksession.retract (handle);
}
}
Ksession.getagenda (). Getagendagroup ("afterdomatching"). SetFocus ();
Ksession.fireallrules (New Rulenamestartswithagendafilter ("afterdomatching"));
}
public Boolean domatching (matchingrule matchingrule) {
boolean = false;
switch (matchingrule) {
case matchingbystock:
if (Externalid.startswith ("S0")) {
ismatched = true;
&NBSP}
break
case matchingbybond:
if (Externalid = = "D02") {
ismatched = true;
}
break;
case matchingbyfund:
if (Externalid = = "F03") {
ismatched = true;
}
break;
Default
Break
}
if (ismatched) {
System.out.println ("==> backend matched:" + matchingrule + "--->>>" + externalid);
Facthandle handle = DroolsTest.ksession.getFactHandle (this);
DroolsTest.ksession.retract (handle);
}
return ismatched;
}
}
public static enum Matchingrule {
Matchingbystock, Matchingbybond, Matchingbyfund,
}
}
Multiple fact, such as: M a c1,n a c2, the most to deal with m*n rule, preferably in the process of fact, retract off the current fact