0
我是新來的Drools和決策表。我需要創建一個規則來測試一個人是年齡還是年輕的人使用規則的年齡。該規則的作品,但無限循環。Drools無限循環決策表
這是規則,是基本的,人年齡> 18那麼人年齡大,或者年齡小於18歲的人年輕。下面是我的Excel文件的HTML:
<style type="text/css">
\t table.tableizer-table {
\t \t font-size: 10px;
\t \t border: 1px solid #CCC;
\t \t font-family: Courier New, Courier, monospace;
\t }
\t .tableizer-table td {
\t \t padding: 4px;
\t \t margin: 3px;
\t \t border: 1px solid #CCC;
\t }
\t .tableizer-table th {
\t \t background-color: #DED11F;
\t \t color: #FFF;
\t \t font-weight: bold;
\t }
</style>
<table class="tableizer-table">
<thead><tr class="tableizer-firstrow"><th></th><th> </th><th>RuleTable Person</th><th> </th><th> </th><th> </th><th> </th></tr></thead><tbody>
<tr><td> </td><td> </td><td>CONDITION</td><td> </td><td>ACTION</td><td>ACTION</td><td>ACTION</td></tr>
<tr><td> </td><td> </td><td>p:Persona</td><td> </td><td> </td><td> </td><td> </td></tr>
<tr><td> </td><td> </td><td>edad >= </td><td>edad <</td><td>System.out.println("Age: " + p.getEdad());</td><td>p.setMayorEdad($param);update(p);</td><td>System.out.println("Older:" +p.isMayorEdad());</td></tr>
<tr><td> </td><td>Person rules</td><td>Status</td><td>Status</td><td>print</td><td>Is older?</td><td>Print ?</td></tr>
<tr><td> </td><td>Older</td><td>18</td><td> </td><td>X</td><td>true</td><td>X</td></tr>
<tr><td> </td><td>Yougn</td><td> </td><td>18</td><td>X</td><td>false</td><td>X</td></tr>
</tbody></table>
我的女神類是考驗決策表一個簡單的POJO:
Person類(靜態,在主類):
public static class Persona{
String nombre;
String apellidoPaterno;
String apellidoMaterno;
int edad;
float salario;
boolean mayorEdad = false;
public Persona() {
super();
}
public Persona(String nombre, String apellidoPaterno, String apellidoMaterno, int edad, float salario) {
super();
this.nombre = nombre;
this.apellidoPaterno = apellidoPaterno;
this.apellidoMaterno = apellidoMaterno;
this.edad = edad;
this.salario = salario;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidoPaterno() {
return apellidoPaterno;
}
public void setApellidoPaterno(String apellidoPaterno) {
this.apellidoPaterno = apellidoPaterno;
}
public String getApellidoMaterno() {
return apellidoMaterno;
}
public void setApellidoMaterno(String apellidoMaterno) {
this.apellidoMaterno = apellidoMaterno;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public float getSalario() {
return salario;
}
public void setSalario(float salario) {
this.salario = salario;
}
public boolean isMayorEdad() {
return mayorEdad;
}
public void setMayorEdad(boolean mayorEdad) {
this.mayorEdad = mayorEdad;
}
}
我主要的方法,我使用Drools的6.5與1.7 JRE:
public static final void main(String[] args) {
try {
// load up the knowledge base
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.getKieClasspathContainer();
KieSession kSession = kContainer.newKieSession("ksession-dtables");
Persona p = new Persona();
p.setNombre("Person");
p.setEdad(18);
p.setMayorEdad(true);
kSession.insert(p);
kSession.fireAllRules();
kSession.dispose();
} catch (Throwable t) {
t.printStackTrace();
}
}
這是輸出,在無限循環中。
Age: 4
Older:false
Age: 4
Older:false
Age: 4
Older:false
Age: 4
Older:false
Age: 4
感謝您的任何提示,鏈接,教程等