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.
We purposefuly limit what we expose to end users, as otherwise it
becomes a can of worms and you get leaky exposures, which is what
happened in drools 3 and 4. Casting isn't a problem, just be prepared
that internal apis can change.
Mark
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: rules-users-bounces(a)lists.jboss.org
> [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of SPAAARKY21
> Sent: Sunday, October 11, 2009 7:34 PM
> To: rules-users(a)lists.jboss.org
> 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: rules-users-bounces(a)lists.jboss.org
>> [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of SPAAARKY21
>> Sent: Sunday, October 11, 2009 12:26 PM
>> To: rules-users(a)lists.jboss.org
>> 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
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
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
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>