[rules-users] Agenda events in a Stateless session

Mark Proctor mproctor at codehaus.org
Sat Mar 7 23:43:12 EST 2009


Mark Proctor wrote:
> Michal Bali wrote:
>> Hi,
>>
>> I guess the issue is that StatelessKnowledgeSession doesn't extend 
>> the WorkingMemory interface as David pointed out. So if you call 
>> event.getKnowledgeRuntime() you'll get *null* back.
> when in an event or in a consequence, whether using a stateless or 
> stateful session it should return a knowledgeruntime instance - if 
> it's not, it's a bug. I'll look into it.
I've looked into this and fixed the bug, you should now be able to 
access the knowledgeruntime from the consequence and the event. Please 
do retest all of this from trunk
https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/
>>
>> Similar issue happens when you call drools.getKnowledgeRuntime() from 
>> within rule's consequence. However in this case it throws the 
>> following exception (running with snapshot from 07. 03. 2009):
>>
>> org.drools.runtime.rule.ConsequenceException: 
>> java.lang.ClassCastException: 
>> *org.drools.reteoo.**ReteooWorkingMemory cannot be cast to 
>> org.drools.reteoo.**ReteooStatefulSession*
>>     at 
>> org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)
>>     at 
>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:943)
>>     at 
>> org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:885)
>>     at 
>> org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1082)
>>     at 
>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:682)
>>     at 
>> org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:659)
>>     at 
>> org.drools.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:213)
>>     at com.sample.DroolsTest.main(DroolsTest.java:45)
>> Caused by: java.lang.ClassCastException: 
>> org.drools.reteoo.ReteooWorkingMemory cannot be cast to 
>> org.drools.reteoo.ReteooStatefulSession
>>     at 
>> org.drools.base.DefaultKnowledgeHelper.getKnowledgeRuntime(DefaultKnowledgeHelper.java:222)
>>     at 
>> com.sample.Rule_Hello_World_0.consequence(Rule_Hello_World_0.java:7)
>>     at 
>> com.sample.Rule_Hello_World_0ConsequenceInvoker.evaluate(Rule_Hello_World_0ConsequenceInvoker.java:26)
>>     at 
>> org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:934)
>>     ... 6 more
>>
>> for this rule:
>> rule "Hello World"
>>     when
>>         Message( )
>>     then
>>         System.out.println( drools.getKnowledgeRuntime() );
>> end
>>
>> Best Regards,
>> Michal
>>
>>
>> On Fri, Mar 6, 2009 at 6:45 AM, Mark Proctor <mproctor at codehaus.org 
>> <mailto:mproctor at codehaus.org>> wrote:
>>
>>     David Boaz wrote:
>>>     Your answer refered to Statefull session. My question was regarding a
>>>     stateless session, that do not extend WorkingMemory.
>>>       
>>     you are using an event, that event exposes the knowledgeruntime
>>     in the event listener - stateless and stateful use the same event
>>     model and both expose the knowledgeruntime as a parameter. All
>>     events should extend KnowledgeRuntimeEvent which provides the
>>     method getKnowledgeRuntime.
>>
>>     Mark
>>
>>>     Currently, I did an ugly work-around. The Activation returns a
>>>     Collection<FactHandle>, and I noticed that in runtime, the FactHandle is
>>>     instanceof InternalFactHandle, that do have a getObject(). So, My code looks
>>>     like:
>>>     for(FactHandle handle:activation.getFactHandles()){
>>>       assert(handle instanceof InternalFactHandle);
>>>       Object o=((InternalFactHandle)handle).getObject();
>>>       ...
>>>     }
>>>     Im looking for the correct way to implement this functionality. 
>>>     Thanks, David
>>>
>>>
>>>     Mark Proctor wrote:
>>>       
>>>>     David Boaz wrote:
>>>>         
>>>>>     Thanks Mark,
>>>>>
>>>>>     The post bellow doesn't deal with the event listener registration.
>>>>>     Assuming
>>>>>     the registration was solved, now I have another issue. How to retrieve
>>>>>     the
>>>>>     Facts given Fact-handles? In a stateless session, I have no access to the
>>>>>     working memory.
>>>>>       
>>>>>           
>>>>     If you are using StatefulKnowledgeSession. Then the Activation has
>>>>         Collection< ? extends FactHandle> getFactHandles();
>>>>
>>>>     And the KnowledgeRuntime is always available, which extends the 
>>>>     WorkingMemory.
>>>>
>>>>     Mkar
>>>>         
>>>>>     David
>>>>>
>>>>>
>>>>>     Mark Proctor wrote:
>>>>>       
>>>>>           
>>>>>>     David Boaz wrote:
>>>>>>         
>>>>>>             
>>>>>>>     Hi all,
>>>>>>>
>>>>>>>     Im trying to listen to the events fired during the evaluation of a
>>>>>>>     stateless
>>>>>>>     session. I implemented org.drools.event.rule.AgendaEventListener. The
>>>>>>>     events
>>>>>>>     fire as expected. From the event I can extract the Activation, the Rule
>>>>>>>     and
>>>>>>>     the list of FactHandles. Now, from each FactHandle I want to retrieve
>>>>>>>     the
>>>>>>>     associated fact (Object). For that, I need a WorkingMemory. But the WM
>>>>>>>     doesn't participate in the event signature. In addition, since Im using
>>>>>>>     a
>>>>>>>     stateless session, the working memory does not exist until I execute()
>>>>>>>     method.
>>>>>>>
>>>>>>>     Can you please help?
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>     The event listeners don't work in the last release, this is fixed in 
>>>>>>     trunk, please give it a try in a snapshot:
>>>>>>     https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/
>>>>>>         
>>>>>>             
>>>>>>>     Thanks, David
>>>>>>>       
>>>>>>>           
>>>>>>>               
>>>>>>     _______________________________________________
>>>>>>     rules-users mailing list
>>>>>>     rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>>>>>>     https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>>
>>>>>>
>>>>>>         
>>>>>>             
>>>>>       
>>>>>           
>>>>     _______________________________________________
>>>>     rules-users mailing list
>>>>     rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>>>>     https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>>         
>>>       
>>
>>
>>     _______________________________________________
>>     rules-users mailing list
>>     rules-users at lists.jboss.org <mailto: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
>>   
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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/20090308/0e76a54e/attachment.html 


More information about the rules-users mailing list