I'm basically writing a debugging tool that allows developers to step through the rule engine itself. In a sense, I'm mimicking the way Jess' developers rely on the (all-agenda) and (run 1) functions, but in a graphic way as opposed to command line functions.
Inside of afterActivationFired(), I am displaying information like a current view of the agenda, and then waiting for user input before returning control to the rule engine. Tracking the activations myself is a good idea. I'm just disappointed that the Drools' API no longer provides the methods needed to inspect the focus stack and its activations. It used to. I suppose I could always cast the Agenda I get to its concrete implementation but I would rather not. Anyway, thanks again for the help. Pegram, Macon wrote: > > Using the listener, you could construct your own agenda stack to track > what's going on. The AgendaEventListener interface has the methods: > agendaGroupPopped(AgendaGroupPoppedEvent event) > agendaGroupPushed(AgendaGroupPushedEvent event) > > In your listener, construct a java.util.Stack, and just Push/Pop > agenda-group information that you retrieve from the AgendaGroupXXXEvent > onto/off of your internal Stack. You can do similar tracking of event > firing with the "before" or "after" ActivationFired event. Construct a > list to capture the sequence of events. > > I'm not entirely clear on what you're trying to accomplish, but the > event listener interface provides hook points for all the related events > on the agenda, so you should be able to craft a listener to do whatever > you need. I've used a similar mechanism in unit testing to validate > correct processing of a set of agenda groups. > > Macon > > -----Original Message----- > From: [email protected] > [mailto:[email protected]] On Behalf Of SPAAARKY21 > Sent: Sunday, October 11, 2009 7:34 PM > To: [email protected] > Subject: Re: [rules-users] Drool 5 API and Agenda Listeners > > > Thanks for clearing that up for me. > > As for the agenda, I am writing an agenda listener already but the > problem > is getting the information I want. In Drools 5, an > org.drools.event.rule.AgendaEventListener's afterActivationFired() > method > takes an org.drools.event.rule.AfterActivationFiredEvent object but > where do > I go from there? The getKnowledgeRuntime() method returns a > KnowledgeRuntime, which has a getAgenda() method that returns an > org.drools.runtime.rule.Agenda. But that Agenda doesn't have methods > for > getting all of the agenda groups on the focus stack. It only has > methods to > clear the agenda or get an activation/agenda/rule flow group by name. > What > I am looking for is a way to get all of the agenda groups on the focus > stack > (as a List or through an Iterator,) and then get each activation from > each > one of those groups. > > In Drools 4, I would have been using an org.drools.Agenda instead, which > has > a getAgendaGroups() method and AgendaGroup has a getActivations() > method. > In a Drools 5 org.drools.runtime.rule.AgendaGroup, there are only three > methods - clear(), getName() and setFocus() - so even if I could get all > of > the AgendaGroups, it wouldn't do me any good. Do you see why I'm having > trouble doing anything useful with the new API? In Drool 5, are you > supposed to approach this in a different way (not in an agenda > listener?) > > > Pegram, Macon wrote: >> >> The primary reason to move to the "Knowledge APIs" apart from what >> you've already mentioned is that they help to bring together the > newest >> features of Drools. In a single KnowledgeBase you can now have not > only >> rules, but Flows, and Complex Event Processing. >> >> As to tracking activity on the agenda... there's two ways... >> 1. If you're using Eclipse, one great feature of the Drools plugin is >> the Audit Log. You can start logging with the following code: >> KnowledgeRuntimeLogger logger = >> KnowledgeRuntimeLoggerFactory.newFileLogger(knowledgeSession, > FILENAME); >> Then open the resulting log in the Eclipse Drools Audit Log tab and > get >> a pretty good graphical representation of what happened during your > run. >> See the following URL for a screenshot: >> > http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-expert/h >> tml_single/index.html#d0e6801 >> >> 2. Create your own AgendaEventListener. Simply implement the > interface >> and place whatever actions you want on each event. Then attach it to >> your session before you start processing like this: >> knowledgeSession.addEventListener(new YourAgendaListener()); >> >> Macon >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of SPAAARKY21 >> Sent: Sunday, October 11, 2009 12:26 PM >> To: [email protected] >> Subject: [rules-users] Drool 5 API and Agenda Listeners >> >> >> I recently moved from Drool 4 to 5 in a little example application I > had >> written. At first I hesitated because I thought the API had changed >> drastically. When I did upgrade, I found that there were few changes. >> However, I was still using all of the "Rule" classes instead of the >> "Knowledge" classes - like RuleBase and StatefulRuleSession instead of >> KnowledgeBase and StatefulKnowledgeBase. It sounds like the > "Knowledge" >> API >> is the way of the future so to speak but I haven't been able to find >> much >> information on it. What is the advantage in using the new "Knowledge" >> API? >> Will the "Rule" API become deprecated at some point? >> >> Anyway, after switching to the Knowledge API, I have been working on > an >> agenda listener I had written. What I want to do is iterate through >> agenda >> groups on the focus stack and, for each group, iterate through the >> activations in the order in which they are queued up. However, I > don't >> see >> any way to do that. In fact, since switching to Drools 5 and the >> "Knowledge" API, it looks like the API for dealing with the agenda and >> activations and whatnot has become quite small. Or at least it is > when >> you >> stick to the interfaces. Am I missing a better way of doing this? >> >> Brandon >> -- >> View this message in context: >> > http://www.nabble.com/Drool-5-API-and-Agenda-Listeners-tp25844904p258449 >> 04.html >> Sent from the drools - user mailing list archive at Nabble.com. >> >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> _______________________________________________ >> rules-users mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> > > -- > View this message in context: > http://www.nabble.com/Drool-5-API-and-Agenda-Listeners-tp25844904p258488 > 53.html > Sent from the drools - user mailing list archive at Nabble.com. > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > _______________________________________________ > rules-users mailing list > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > > -- View this message in context: http://www.nabble.com/Drool-5-API-and-Agenda-Listeners-tp25844904p25855520.html Sent from the drools - user mailing list archive at Nabble.com. _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
