Drools Use Experience

Source: Internet
Author: User
Tags define local static class knowledge base

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

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.