下面的示例代码将介绍使用决策表的过程中,执行rules.There两种方法
一) 使用试算表的API直接执行规则.
b) 成drl文件转换为Excel试算表,然后执行规则.
我将介绍第二个过程 (b).
** 主要的Java类是“DroolExcelDemo.java”。首先,它会转换成Excel工作表 (.DRL) 文件,然后执行规则.
package DROOLS;
进口java.io.BufferedWriter;
进口java.io.FileInputStream;
进口java.io.FileNotFoundException;
进口java.io.FileWriter;
进口java.io.IOException异常;
进口的java.io.InputStream;
进口的java.util.Collection;
进口org.drools.KnowledgeBase;
进口org.drools.KnowledgeBaseFactory;
进口org.drools.builder.KnowledgeBuilder;
进口org.drools.builder.KnowledgeBuilderFactory;
进口org.drools.builder.ResourceType;
进口org.drools.decisiontable.InputType;
进口org.drools.decisiontable.SpreadsheetCompiler;
进口org.drools.definition.KnowledgePackage;
进口org.drools.event.rule.DebugAgendaEventListener;
进口org.drools.event.rule.DebugWorkingMemoryEventListener;
进口org.drools.io.ResourceFactory;
进口org.drools.runtime.StatefulKnowledgeSession;
/**
* 这个类将创建一个的drl文件从Excel工作表
* 然后执行规则.
*/
公共类DroolExcelDemo的 {
公共静态无效的主要(最后的字符串[] 参数) {
// 创建知识生成器
最后KnowledgeBuilder kbuilder KnowledgeBuilderFactory.newKnowledgeBuilder();
// 从Excel工作表中创建drl文件
InputStream是= NULL;
尝试 {
是=新的文件输入流(“ð:/工作区/ DroolsDemo的/ src目录/流口水/ DroolExcel.xls的”);
} 抓 (FileNotFoundExceptionË) {
e.printStackTrace();
}
// 创建编译器类的实例
SpreadsheetCompiler SC =新SpreadsheetCompiler();
// 编译的excel生成的 (.DRL) 文件
StringBuffer的DRL =新的StringBuffer(sc.compile(是, InputType.XLS));
// 将方言价值drl文件
drl.insert(drl.indexOf(“流口水”)+40,”方言”MVEL ””+”\Ň”);
// 检查生成的drl文件
System.out.println(“生成DRL文件下方显示–: “);
System.out.println(DRL);
// 写入字符串转换成一个drl文件
尝试 {
的BufferedWriter出新的BufferedWriter(新的FileWriter中(“ð:/工作区/ DroolsDemo的/ src目录/流口水/ RuleFile.drl的”));
out.write(drl.toString());
out.close();
}
抓 (IOException异常Ë){
System.out.println(“例外 “);
}
// 在下一节中使用drl文件前的等待.
尝试 {
视频下载(10000);
} 抓 (InterruptedException的Ë) {
e.printStackTrace();
}
// 从Excel工作表中创建的drl文件结束
// 使用DRL文件
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
// 检查制造商的错误
如果 ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder有误。”);
System.out.println( kbuilder.getErrors().的toString());
}
// 得到编译的软件包 (这是序列化)
最后收集PKGS = kbuilder.getKnowledgePackages();
// 添加软件包的知识库 (部署知识包).
最后知识库kbase KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(PKGS);
// 创建有状态会话
最终StatefulKnowledgeSession ksession的kbase.newStatefulKnowledgeSession();
// 设置事件侦听器
ksession.addEventListener(新DebugAgendaEventListener());
ksession.addEventListener(新DebugWorkingMemoryEventListener());
// 创建消息文本
DroolMessage messagetxt新DroolMessage();
messagetxt.setMessage(“航班号”);
DroolMessage messagetxt1新DroolMessage();
messagetxt1.setMessage(“FlightCode”);
// 插入到会话和消防规则
System.out.println(“插入会话”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“发射前规则”);
ksession.fireAllRules();
System.out.println(“烧成后的规则”);
ksession.dispose();
System.out.println(“后处理”);
}
}
* *第二个文件是“DroolMessage.java’ POJO类. 它拥有上述主要的Java类设置的值.
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;
// 生成器
公共DroolMessage() {
System.out.println(“初始化信息”);
}
// setter和getter方法
公共字符串GETMESSAGE的() {
返回消息;
}
公共无效setMessage(String消息) {
this.message =消息;
}
// 测试方法测试的规则的执行
公共无效测试(字符串测试) {
System.out.println(“解析的开始和结束位置: “+测试);
}
}
** 以下是规则文件所产生的“DroolExcelDemo.java’ 类.
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
// 在B13的规则值, 在B7头
排除 “DroolExcelRule_13”
何时
味精:DroolMessage(消息== “FlightCode”)
然后
msg.test(“7,8”);
结束
** 下面是输入基于Excel的规则文件“DroolExcelDemo.java’ 级以上.
Hi, could you send me DroolExcel.xls file?
thank you!
Hi Daniel,
Thanks for your interest. Please let me know your exact requirement. I will send you the excel sheet.
Cheers
/KP
Hi, could you send me DroolExcel.xls file? I just want to run this code and want to get result
my email
dahalram20@gmail.com
Hi Aakash,
Please send me your exact requirement. I will try my best to help you out.
Thanks,
Techalpine
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
Thanks,
Mani
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.
Thanks
/KP
Hi,
你知道如何使用电子表格的API直接执行规则?
Thanks,
Nithya
你可以请发送Excel文件 ,我想运行并得到结果..??
能否请您提供一个DRL例子,我可以从数据库获取数据并更新事实 .
苏尼尔喜,
可以使用相同的程序用少许修改.
请与我联系 @ techalpineit@gmail.com 为进一步帮助.
Thanks
/KP
Hi,
能否请你分享的Excel ? 我想匹配一串数字或者说搜索字符串在另一个字符串
Thanks
专一喜,
您可以使用相同的数据,如图中的样本文件,做一个为自己.
请寄给我@ techalpineit@gmail.com 为进一步帮助.
Thanks
/KP
Hello,
当我试图执行, 它是提高一个文件中没有发现错误,同时处理以下线.
// 使用DRL文件
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
能否请你建议我还有什么需要做的.
Regards,
谢卡尔·肖
您好谢卡尔,
您需要确保,无论是.drl和.class文件都可以. 请让我知道,如果你面对任何问题.
请寄给我@ techalpineit@gmail.com
Thanks
Kaushik
嗨
这是非常好的博客我执行. 但我想,不添加任何规则文件自动生成规则文件模板.