[rules-users] Drool 5 API and Agenda Listeners

Mark Proctor mproctor at codehaus.org
Mon Oct 12 18:12:06 EDT 2009


SPAAARKY21 wrote:
> 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 at lists.jboss.org
>> [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of SPAAARKY21
>> Sent: Sunday, October 11, 2009 7:34 PM
>> To: rules-users at 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 at lists.jboss.org
>>> [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of SPAAARKY21
>>> Sent: Sunday, October 11, 2009 12:26 PM
>>> To: rules-users at 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 at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at 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 at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>     
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20091012/fb374205/attachment.html 


More information about the rules-users mailing list