Droolsとデシジョン・テーブルを初めて使用しました。私はルールの人の年齢を使ってPersonが年長/若者であるかどうかをテストするルールを作成する必要があります。ルールは機能しますが、無限ループです。意思決定表のDroolsの無限ループ
これは基本的なもので、人の年齢が18歳を超えると、その人は年長で、18歳未満の人は若いです。 (メインクラスの静的、)
Personクラス:私のペルソナクラスはテストデシジョンテーブルのためのシンプルなPOJOです
<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>
:以下は、私のExcelファイルからHTMLです
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;
}
}
私の主な方法、私は、JRE 1.7でのDrools 6.5を使用しています:
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
制約がまだ真であるので、等の任意のヒントをありがとう、リンク、チュートリアル、