[rules-users] Agenda events in a Stateless session

David Boaz davidb at dbmotion.com
Sun Mar 8 09:27:54 EDT 2009


Is there a maven repository containing the SNAPSHOT version? Is there a trick
that facilitate the development with that version?
David

Mark Proctor wrote:
> 
> 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
>>   
> 
> 
> _______________________________________________
> 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/Agenda-events-in-a-Stateless-session-tp22332020p22397893.html
Sent from the drools - user mailing list archive at Nabble.com.




More information about the rules-users mailing list