la compréhension de l'ordre du jour du groupe de bave
J'ai essayé un échantillon de exemple pour voir comment l'ordre du jour les travaux de groupe. J'ai d'abord définir le focus de ksession à l'ordre du jour du groupe "ag1" et a tiré les règles.
package com.sample
import com.sample.DroolsTest.Message;
rule "Hello World"
agenda-group "ag1"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( "Hello World" );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "Hello World 2"
agenda-group "ag2"
when
m : Message( status == Message.HELLO, myMessage : message )
then
System.out.println( "Hello World 2" );
m.setMessage( "Goodbye cruel world" );
m.setStatus( Message.GOODBYE );
update( m );
end
rule "GoodBye"
agenda-group "ag1"
when
m : Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( "GoodBye" );
drools.setFocus("ag2");
System.out.println("comeon man");
m.setStatus(com.sample.DroolsTest.Message.HELLO);
update(m);
end
rule "GoodBye 2"
agenda-group "ag2"
when
Message( status == Message.GOODBYE, myMessage : message )
then
System.out.println( "GoodBye 2" );
end
C'est le résultat que j'ai obtenu.
Hello World
GoodBye
comeon man
Hello World 2
GoodBye 2
GoodBye
comeon man
Hello World 2
GoodBye 2
GoodBye
comeon man
Hello World 2
GoodBye 2
GoodBye
comeon man
Hello World 2
GoodBye 2
GoodBye
comeon man
Hello World 2
...
...
J'ai pu comprendre que les 5 premières lignes de la sortie jusqu'à "au Revoir 2". Mais depuis, l'accent a été mis sur "ag2", comment se fait-il revenir à "ag1" de l'ordre du jour du groupe "au Revoir" à la règle et, par conséquent recursed.
Grâce.
OriginalL'auteur Manish Mulani | 2011-07-29
Vous devez vous connecter pour publier un commentaire.
Ordre du jour des groupes de travail comme une pile. Lorsque vous réglez la mise au point d'un agenda de groupe, que le groupe est placé en haut de la pile. Lorsque le moteur essaie de feu de l'activation suivante et il n'y a pas plus d'activations dans un groupe donné, ce groupe est supprimé à partir du haut de la pile et le groupe ci-dessous, il reçoit le focus.
Donc, il va comme ceci (principale est le groupe par défaut qui est toujours présent):
Et la boucle se répète.
Ce genre de comportement est très facile de voir si vous utilisez le journal d'audit dans l'IDE Eclipse.
Espère que cette aide.
Prendre un coup d'oeil dans la session.la méthode addEventListener(nouveau DebugAgendaEventListener())
OriginalL'auteur
Depuis que vous avez changé faits dans la session (votre Message objet est, dans les faits, je suppose) lors du calcul d'une règle, d'autres règles sont calculés de nouveau, et non selon l'ordre du jour-le groupe auquel ils appartiennent, afin de mettre à jour la Bave de la base de connaissances.
Vous pouvez ajouter
no-loop true
pour éviter cela sur la ligne aprèsrule
définitionJe ne suis pas tranquille sûr, mais c'est le comportement que j'ai remarqué sur mon application et doit donc résoudre votre boucle infinie. Par ailleurs, il semble logique de calculer de nouveau les règles lorsque les faits changement.
OriginalL'auteur