2010-08-10 8 views
1

J'ai une base de connaissances pour effectuer la validation de mon modèle de données. Les événements de modification de l'interface utilisateur sont publiés de manière asynchrone dans un thread distinct qui met à jour la base de connaissances et déclenche les règles. Les erreurs de validation déclenchent une insertion logique d'un objet d'erreur. Je peux les collecter et publier des événements de manière asynchrone dans le thread de l'interface utilisateur. Toutefois, pour faciliter la mise à jour de l'interface utilisateur, je souhaite également publier un événement lorsque l'utilisateur corrige une erreur, c'est-à-dire lorsqu'un objet d'erreur est retiré de la base de connaissances.Réception d'une notification d'événements de rétraction logique Drools

J'ai deux idées sur la façon de le faire, ni dont j'aime:
je pourrais écouter de travailler les événements de mémoire à partir du code de procédure, mais cela irait à l'encontre de l'encapsulation de la fonctionnalité de validation au sein de la base de connaissances.

Alternativement, je pourrais insérer un objet indicateur associé à mon insertion logique d'un objet d'erreur et écrire une règle qui détecte les indicateurs non appariés, les rétracte et déclenche l'événement "erreur corrigée".

Existe-t-il un moyen propre et simple d'activer une règle basée sur la rétraction logique d'un objet d'erreur comme décrit ci-dessus?

Répondre

1

Auto-réponse de sorte que je puisse lier à cela plus tard et savoir s'il y a une meilleure façon de le faire.

est ici l'approche que je liquidée prise:

  1. Lorsqu'une règle de validation est déclenchée, insertLogical un objet avec un identifiant unique représentant l'erreur de validation (par exemple ValidationMessage).

  2. ValidationMessage a une propriété "marquée", dont la valeur par défaut est false.

  3. Définir une règle qui se déclenche en présence de ValidationMessages non marqués. Dans le RHS, marquez le message et effectuez un appel onAssert à un gestionnaire d'événements global. Insérez un deuxième objet (par exemple ValidationMessageFlag) avec le même ID que ValidationMessage.

  4. Définir une règle qui se déclenche lors de l'existence d'un ValidationMessageFlag, lorsqu'aucun ValidationMessage correspondant (avec le même ID existe). Dans le RHS, appelez onRetract dans le gestionnaire d'événements global. Rétractez le ValidationMessageFlag.

Questions connexes