O código de exemplo a seguir irá descrever o processo de utilização de tabela de decisão para executar rules.There duas maneiras
um) Usar as APIs planilha diretamente para executar as regras.
b) Converter a planilha excel em um arquivo drl e depois executar as regras.
Vou descrever o segundo processo (b).
** A classe java principal é "DroolExcelDemo.java '. Primeiro ele irá converter a folha de Excel em um (.drl) arquivo e, em seguida, executar as regras.
package DROOLS;
java.io.BufferedWriter importação;
importar java.io.FileInputStream;
java.io.FileNotFoundException importação;
java.io.FileWriter importação;
import java.io.IOException;
importar java.io.InputStream;
java.util.Collection importação;
importação org.drools.KnowledgeBase;
importação org.drools.KnowledgeBaseFactory;
importação org.drools.builder.KnowledgeBuilder;
importação org.drools.builder.KnowledgeBuilderFactory;
importar org.drools.builder.ResourceType;
org.drools.decisiontable.InputType importação;
importação org.drools.decisiontable.SpreadsheetCompiler;
importar org.drools.definition.KnowledgePackage;
org.drools.event.rule.DebugAgendaEventListener importação;
org.drools.event.rule.DebugWorkingMemoryEventListener importação;
importação org.drools.io.ResourceFactory;
org.drools.runtime.StatefulKnowledgeSession importação;
/**
* Esta classe irá criar um arquivo drl da folha de Excel
* e, em seguida, executar as regras.
*/
public class DroolExcelDemo {
public static final void main(final String[] args) {
// Criar construtor do conhecimento
final de KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
// Criar arquivo drl da folha excel
InputStream é = null;
tentar {
é = new FileInputStream(“D:/Área de trabalho / DroolsDemo / src / baba / DroolExcel.xls”);
} pegar (FileNotFoundException e) {
e.printStackTrace();
}
// Criar instância da classe compilador
SpreadsheetCompiler sc = new SpreadsheetCompiler();
// Compilar o excel para gerar o (.drl) arquivo
StringBuffer drl = new StringBuffer(sc.compile(é, InputType.XLS));
// Insira valor dialeto em arquivo drl
drl.insert(drl.indexOf(“Drools”)+40,”dialeto ”MVEL ””+”\n”);
// Verifique o arquivo gerado drl
System.out.println(“Gerar arquivo DRL está mostrando abaixo–: “);
System.out.println(drl);
// escrever string em um arquivo drl
tentar {
BufferedWriter out = BufferedWriter novo(FileWriter novo(“D:/Área de trabalho / DroolsDemo / src / baba / RuleFile.drl”));
out.write(drl.toString());
out.close();
}
pegar (IOException e){
System.out.println(“Exceção “);
}
// Espere antes de usar o arquivo drl na próxima seção.
tentar {
Thread.sleep(10000);
} pegar (InterruptedException e) {
e.printStackTrace();
}
// Criação final do arquivo drl da folha excel
// Usando o arquivo de DRL
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
// Verifique o construtor por erros
se ( kbuilder.hasErrors() ) {
System.out.println(“kbuilder tem erros”);
System.out.println( kbuilder.getErrors().toString());
}
// obter os pacotes compilados (que são serializáveis)
PKGS Coleção final = kbuilder.getKnowledgePackages();
// adicionar os pacotes para uma base de conhecimento (implantar os pacotes de conhecimento).
final de KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(pkgs);
// Criar uma sessão stateful
ksession StatefulKnowledgeSession última kbase.newStatefulKnowledgeSession =();
// Definir ouvintes de eventos
ksession.addEventListener(DebugAgendaEventListener novo());
ksession.addEventListener(DebugWorkingMemoryEventListener novo());
// Criar mensagem de texto
DroolMessage messagetxt = new DroolMessage();
messagetxt.setMessage(“Número do vôo”);
DroolMessage messagetxt1 = new DroolMessage();
messagetxt1.setMessage(“FlightCode”);
// Inserir regras de sessão e fogo
System.out.println(“inserir em sessão”);
ksession.insert(messagetxt);
ksession.insert(messagetxt1);
System.out.println(“antes de disparar regras”);
ksession.fireAllRules();
System.out.println(“após a queima regras”);
ksession.dispose();
System.out.println(“depois de Descarte”);
}
}
* *O segundo arquivo é um DroolMessage.java '’ pojo classe. Ele mantém os valores definidos pela classe java principal descrito acima.
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;
// Construtor
público DroolMessage() {
System.out.println(“inicializar Mensagem”);
}
// Métodos setter e getter
public String GetMessage() {
retornar mensagem;
}
public void setMessage(Mensagem cadeia) {
this.message = mensagem;
}
// Método de teste para testar a execução regra
teste public void(Teste de cadeia) {
System.out.println(“Início análise e posição final: “+teste);
}
}
** A seguir é um arquivo de regra gerada pela DroolExcelDemo.java '’ classe.
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
// valores de regras no B13, cabeçalho no B7
governar “DroolExcelRule_13”
quando
msg:DroolMessage(mensagem == “FlightCode”)
depois
msg.test(“7,8”);
final
** Seguinte é a entrada de arquivo do Excel baseado em regras para o DroolExcelDemo.java '’ classe acima.
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.
Obrigado,
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
Obrigado,
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.
Obrigado
/KP
Hi,
Do you know how to use the spread sheet APIs directly to execute the rules?
Obrigado,
Nithya
can you please send the excel file ,i want to run and get the result..??
Could you please provide a DRL example where I could get the data from Database and update the fact .
Hi Sunil,
You can use the same program with a little modification.
Please contact me @ techalpineit@gmail.com for further help.
Obrigado
/KP
Hi,
Could you please share the excel ? I want to match a string of numbers or rather search string in another string
Obrigado
Hi Ananya,
You can use the same data as shown in the sample file and make one for yourself.
Please mail me @ techalpineit@gmail.com for further help.
Obrigado
/KP
Hello,
While I am trying to execute, it is raising a file not found error while processing below line.
// Usando o arquivo de DRL
kbuilder.add(ResourceFactory.newClassPathResource(“RuleFile.drl”, DroolMessage.class ), ResourceType.DRL );
Could you please suggest what else I need to do.
Regards,
Shekhar Shaw
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
Obrigado
Kaushik
hi
it is very good blog i executed. but i want to generate Rule file template automatically without adding any Rule file.