2017-06-19 3 views
0

Voir ci-dessous J'ai essayé l'exemple de la page ci-dessous. Tout fonctionne bien, mais je ne reçois pas la règle appliquée et génère le statut applicable à partir de cette règle.Drools Génération de fichiers de règles dynamiques à partir de la base de données (fichier drl) en utilisant le modèle de règle

Emplacement du code exemple: http://dilipsarangi.blogspot.co.uk/2015/09/drools-610-dynamic-rules-in-database.html

Je suis en mesure de charger les données de la table pour le cas de test. mais lorsque System.out.println(aa.getName() + "," + aa.getStatus());

aa.getstatus est null.

La règle générée dynamique.

package org.drools.template.jdbc; 
dialect "mvel" 

rule "ageRule_7" 
    when 
     $person : Person(age>=81 && age<100) 
    then 
    $person.status=":" + "Old Aged"; 
end 

rule "ageRule_6" 
    when 
     $person : Person(age>=61 && age<81) 
    then 
    $person.status=":" + "Senior Citizen"; 
end 

rule "ageRule_5" 
    when 
     $person : Person(age>=41 && age<61) 
    then 
    $person.status=":" + "Middle Aged"; 
end 

rule "ageRule_4" 
    when 
     $person : Person(age>=18 && age<41) 
    then 
    $person.status=":" + "Youth"; 
end 

rule "ageRule_3" 
    when 
     $person : Person(age>=13 && age<18) 
    then 
    $person.status=":" + "Juvenile"; 
end 

rule "ageRule_2" 
    when 
     $person : Person(age>=6 && age<13) 
    then 
    $person.status=":" + "Young Age"; 
end 

rule "ageRule_1" 
    when 
     $person : Person(age>=2 && age<6) 
    then 
    $person.status=":" + "Baby"; 
end 

rule "ageRule_0" 
    when 
     $person : Person(age>=0 && age<2) 
    then 
    $person.status=":" + "Infant"; 
end 

Répondre

0

Vous devez mettre à jour l'objet personne $ dans chaque règle, après avoir modifié la propriété d'état:

update($person); 

Sans cela, toute modification de l'objet est pas défini dans la mémoire de travail.

Bien que les travaux ci-dessus, vous êtes mieux utiliser le mot-clé modifier la place:

modify($person) {$person.setStatus=":" + "Infant"}; 

Et même pour chacune des règles. Dans ce cas, le mot clé update n'est pas requis.

Il existe certaines fonctionnalités telles que les beans réactive pour les propriétés où la mise à jour ne peut pas être utilisée. Il est donc préférable d'utiliser la modification comme meilleure pratique.

+0

J'utilise 6.4.0 final La règle que j'ai publiée est générée en utilisant le fichier drt. Ther modèle de drt réel ' J'ai essayé de changer le modèle avec des changements ci-dessous il n'a pas fonctionné réellement. Voir l'exemple dans le lien fournir ce fichier drl réel 'puis // $ person.status = ":" + "@ {status}"; modify ($ person) {$ person.status = ":" + "@ {status}";} ' –

+0

Désolé, déplacez le point-virgule en dehors des parenthèses {}. J'ai mis à jour la réponse. – Neil

+0

@JavaEvangelist Il est également recommandé d'utiliser les méthodes 'setX()' plutôt que d'accéder aux champs. – laune