Kouman ou itilize drools tab desizyon nan fòma calcul al touye règ?

Kòd la egzanp sa yo ap dekri pwosesis la nan lè l sèvi avèk tablo desizyon al touye rules.There yo de fason

yon) Sèvi ak APIs nan fèy gaye dirèkteman nan egzekite règleman yo.
b) Konvèti yo sou fèy la gaye briye nan yon dosye drl ak Lè sa a, egzekite règleman yo.

Mwen pral dekri pwosesis la dezyèm (b).







** Prensipal Java klas la se 'DroolExcelDemo.java'. Premye li pral konvèti fèy la briye nan yon (.drl) ranpli ak Lè sa a, egzekite règleman yo.




package DROOLS;

java.io.BufferedWriter enpòte;
enpòte java.io.FileInputStream;
java.io.FileNotFoundException enpòte;
java.io.FileWriter enpòte;
java.io.IOException enpòte;
enpòte java.io.InputStream;
java.util.Collection enpòte;

enpòte org.drools.KnowledgeBase;
enpòte org.drools.KnowledgeBaseFactory;
enpòte org.drools.builder.KnowledgeBuilder;
enpòte org.drools.builder.KnowledgeBuilderFactory;
enpòte org.drools.builder.ResourceType;
org.drools.decisiontable.InputType enpòte;
enpòte org.drools.decisiontable.SpreadsheetCompiler;
enpòte org.drools.definition.KnowledgePackage;
org.drools.event.rule.DebugAgendaEventListener enpòte;
org.drools.event.rule.DebugWorkingMemoryEventListener enpòte;
enpòte org.drools.io.ResourceFactory;
org.drools.runtime.StatefulKnowledgeSession enpòte;

/**
* Klas sa a pral kreye yon dosye drl soti nan fèy briye
* ak Lè sa a, egzekite règleman yo.
*/
piblik klas DroolExcelDemo {
piblik estatik anile final prensipal(final chèn[] arg) {
// Kreye mason konesans
final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();

// Kreye drl dosye soti nan fèy briye
InputStream se = nil;
eseye {
se = nouvo FileInputStream(“D:/Vorkspas / DroolsDemo / src / DROOLS / DroolExcel.xls”);

} trape (FileNotFoundException e) {
e.printStackTrace();
}
// Kreye egzanp klas du
SpreadsheetCompiler SC = nouvo SpreadsheetCompiler();

// Sanble tout briye nan jenere nan (.drl) dosye
StringBuffer drl = nouvo StringBuffer(sc.compile(se, InputType.XLS));

// Antre valè dyalèk nan dosye drl
drl.insert(drl.indexOf(“DROOLS”)+40,”dyalèk ”mvel ””+”\n”);

// Tcheke pwodwi drl dosye a
System.out.println(“Jenere DRL dosye ki montre pi ba a–: “);
System.out.println(drl);

// ekri fisèl nan yon dosye drl
eseye {
BufferedWriter soti = BufferedWriter nouvo(nouvo FileWriter(“D:/Vorkspas / DroolsDemo / src / DROOLS / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
trape (IOException e){
System.out.println(“Eksepsyon “);
}
// Rete tann anvan ou sèvi ak dosye a drl nan pwochen seksyon ki.
eseye {
Thread.sleep(10000);
} trape (InterruptedException e) {
e.printStackTrace();
}
// Kreyasyon Fen dosye drl soti nan fèy briye

// Lè l sèvi avèk DRL dosye
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

// Tcheke mason la pou erè
si ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder gen erè”);
System.out.println( kbuilder.getErrors().toString());
}
// jwenn pakè yo konpile (ki se seryalizabl)
pkgs Koleksyon final = kbuilder.getKnowledgePackages();

// ajoute pakè yo nan yon konnesans (deplwaye pakè yo konesans).
final konnesans kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(pkgs);

// Kreye sesyon stateful
final ksession StatefulKnowledgeSession = kbase.newStatefulKnowledgeSession();

// Fikse koute evènman
ksession.addEventListener(nouvo DebugAgendaEventListener());
ksession.addEventListener(nouvo DebugWorkingMemoryEventListener());

// Kreye mesaj tèks
DroolMessage messagetxt = nouvo DroolMessage();
messagetxt.setMessage(“Nimewo vòl”);

DroolMessage messagetxt1 = nouvo DroolMessage();
messagetxt1.setMessage(“FlightCode”);

// Antre nan sesyon ak dife règ
System.out.println(“insert nan sesyon”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“avan yo te tire règ”);
ksession.fireAllRules();
System.out.println(“apre tire règ”);
ksession.dispose();
System.out.println(“apre jete”);
}
}








* *Dosye a dezyèm se yon DroolMessage.java '’ pojo klas. Lwa sa a bay valè yo mete sou klas la prensipal Java sa dekri anwo a.

package DROOLS;
/**
* This is a POJO for messages.It will be used by the drl file.
* The message values will be set from the DroolExcelDemo class
*/
public class DroolMessage {
// Create variable
private String message;

// Konstrukteur
piblik DroolMessage() {
System.out.println(“inisyalizin Message”);
}
// Meteur ak pikeur metòd
piblik chèn getMessage() {
retounen mesaj;
}
piblik anile setMessage(Mesaj fisèl) {
this.message = mesaj;
}
// metòd tès li teste ekzekisyon an règ
piblik anile tès(Tès fisèl) {
System.out.println(“Kòmanse analyse ak pozisyon fen: “+tès);
}
}

** Sa yo se yon dosye règ pwodwi pa DroolExcelDemo.java la '’ klas.

package DROOLS;
//generated from Decision Table
dialect "mvel"
import DroolMessage;
// rule values at B12, header at B7
rule "DroolExcelRule_12"
when
msg:DroolMessage(message == "FlightNumber")
then
msg.test("1,6");
end

// règ valè nan B13, header nan B7
kòmande sou “DroolExcelRule_13”

Msg:DroolMessage(mesaj == “FlightCode”)
Lè sa a,
msg.test(“7,8”);
fen

** Sa yo se opinyon an briye ki baze sou dosye règ DroolExcelDemo.java la '’ klas pi wo a.


15 thoughts on “Kouman ou itilize drools tab desizyon nan fòma calcul al touye règ?

    1. kaushik Post author

      Hi Daniel,

      Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.

      Cheers
      /Pedersen

    1. kaushik Post author

      Hi Aakash,

      Please send me your exact requirement. I will try my best to help you out.

      Mèsi,
      Techalpine

  1. Manideepa

    Hi,
    Can you please share the DroolExcel.xls file?
    I wanted to execute this program. I am new to Drools and wanted to understand how it works.
    My email address: b4umani2003@gmail.com

    Mèsi,
    Mani

  2. kaushik Post author

    Hi Manideepa,

    The excel sample is already shown in the post. You can use it as it is. If you have some other requirement, do let me know. I would love to help you sort the issues.

    Mèsi
    /Pedersen

  3. Nithya Kathiresan

    Hi,
    Do you know how to use the spread sheet APIs directly to execute the rules?

    Mèsi,
    Nithya

  4. sunil

    Could you please provide a DRL example where I could get the data from Database and update the fact .

  5. Ananya

    Hi,

    Could you please share the excel ? I want to match a string of numbers or rather search string in another string

    Mèsi

  6. Shekhar Shaw

    Alo,
    While I am trying to execute, it is raising a file not found error while processing below line.

    // Lè l sèvi avèk DRL dosye
    kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );

    Could you please suggest what else I need to do.

    Regards,
    Shekhar Shaw

    1. kaushik Post author

      Hello Shekhar,

      You need to ensure that both the .drl and .class files are available. Please check and let me know if you face any problem.

      Please mail me @ techalpineit@gmail.com

      Mèsi
      Kaushik

  7. Rahul Pandey

    hi
    it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.

============================================= ============================================== Buy best TechAlpine Books on Amazon
============================================== ---------------------------------------------------------------- electrician ct chestnutelectric
error

Enjoy this blog? Please spread the word :)

Follow by Email
LinkedIn
LinkedIn
Share