[rules-users] Agenda events in a Stateless session

Michal Bali michalbali at gmail.com
Sun Mar 8 08:42:56 EDT 2009


It works now (I get a StatefulKnowledgeSessionImpl back which is fine).
Thanks for fixing this.

On Sun, Mar 8, 2009 at 4:43 AM, Mark Proctor <mproctor at codehaus.org> 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>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 listrules-users at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>
>>
>>        _______________________________________________
>> rules-users mailing listrules-users at lists.jboss.orghttps://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 listrules-users at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>
>
> ------------------------------
>
> _______________________________________________
> rules-users mailing listrules-users at lists.jboss.orghttps://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/de20319c/attachment.html 


More information about the rules-users mailing list