[rules-users] Agenda events in a Stateless session

Michal Bali michalbali at gmail.com
Sun Mar 8 10:01:47 EDT 2009


I use this maven repo:
http://snapshots.jboss.org/maven2/org/drools/

I use maven to get the latest snapshot by setting the version to
5.0.0.SNAPSHOT

On Sun, Mar 8, 2009 at 1:27 PM, David Boaz <davidb at dbmotion.com> wrote:

>
> 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.
>
> _______________________________________________
> 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/fba395c9/attachment.html 


More information about the rules-users mailing list