<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Mark Proctor wrote:
<blockquote cite="mid:49B328D1.8050802@codehaus.org" type="cite">
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
Michal Bali wrote:
  <blockquote
 cite="mid:58f4ed90903071345x549f1c2apbb1c65345f292875@mail.gmail.com"
 type="cite">Hi,<br>
    <br>
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 <b>null</b> back.<br>
  </blockquote>
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.<br>
</blockquote>
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<br>
<a class="moz-txt-link-freetext" href="https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/">https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/</a><br>
<blockquote cite="mid:49B328D1.8050802@codehaus.org" type="cite">
  <blockquote
 cite="mid:58f4ed90903071345x549f1c2apbb1c65345f292875@mail.gmail.com"
 type="cite"><br>
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):<br>
    <br>
org.drools.runtime.rule.ConsequenceException:
java.lang.ClassCastException: <b>org.drools.reteoo.</b><b>ReteooWorkingMemory
cannot be cast to org.drools.reteoo.</b><b>ReteooStatefulSession</b><br>
&nbsp;&nbsp;&nbsp; at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:943)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:885)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1082)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:682)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:659)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:213)<br>
&nbsp;&nbsp;&nbsp; at com.sample.DroolsTest.main(DroolsTest.java:45)<br>
Caused by: java.lang.ClassCastException:
org.drools.reteoo.ReteooWorkingMemory cannot be cast to
org.drools.reteoo.ReteooStatefulSession<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.DefaultKnowledgeHelper.getKnowledgeRuntime(DefaultKnowledgeHelper.java:222)<br>
&nbsp;&nbsp;&nbsp; at
com.sample.Rule_Hello_World_0.consequence(Rule_Hello_World_0.java:7)<br>
&nbsp;&nbsp;&nbsp; at
com.sample.Rule_Hello_World_0ConsequenceInvoker.evaluate(Rule_Hello_World_0ConsequenceInvoker.java:26)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:934)<br>
&nbsp;&nbsp;&nbsp; ... 6 more<br>
    <br>
for this rule:<br>
rule "Hello World"<br>
&nbsp;&nbsp;&nbsp; when<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Message( )<br>
&nbsp;&nbsp;&nbsp; then<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println( drools.getKnowledgeRuntime() );<br>
end<br>
    <br>
Best Regards,<br>
Michal<br>
    <br>
    <br>
    <div class="gmail_quote">On Fri, Mar 6, 2009 at 6:45 AM, Mark
Proctor <span dir="ltr">&lt;<a moz-do-not-send="true"
 href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt;</span>
wrote:<br>
    <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
      <div bgcolor="#ffffff" text="#000000">
      <div class="im">David Boaz wrote:
      <blockquote type="cite">
        <pre>Your answer refered to Statefull session. My question was regarding a
stateless session, that do not extend WorkingMemory.
  </pre>
      </blockquote>
      </div>
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.<br>
      <font color="#888888"><br>
Mark</font>
      <div>
      <div class="h5"><br>
      <blockquote type="cite">
        <pre>Currently, I did an ugly work-around. The Activation returns a
Collection&lt;FactHandle&gt;, 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:
  </pre>
        <blockquote type="cite">
          <pre>David Boaz wrote:
    </pre>
          <blockquote type="cite">
            <pre>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.
  
      </pre>
          </blockquote>
          <pre>If you are using StatefulKnowledgeSession. Then the Activation has
    Collection&lt; ? extends FactHandle&gt; getFactHandles();

And the KnowledgeRuntime is always available, which extends the 
WorkingMemory.

Mkar
    </pre>
          <blockquote type="cite">
            <pre>David


Mark Proctor wrote:
  
      </pre>
            <blockquote type="cite">
              <pre>David Boaz wrote:
    
        </pre>
              <blockquote type="cite">
                <pre>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?
  
      
          </pre>
              </blockquote>
              <pre>The event listeners don't work in the last release, this is fixed in 
trunk, please give it a try in a snapshot:
<a moz-do-not-send="true"
 href="https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/"
 target="_blank">https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/</a>
    
        </pre>
              <blockquote type="cite">
                <pre>Thanks, David
  
      
          </pre>
              </blockquote>
              <pre>_______________________________________________
rules-users mailing list
<a moz-do-not-send="true" href="mailto:rules-users@lists.jboss.org"
 target="_blank">rules-users@lists.jboss.org</a>
<a moz-do-not-send="true"
 href="https://lists.jboss.org/mailman/listinfo/rules-users"
 target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>


    
        </pre>
            </blockquote>
            <pre>  
      </pre>
          </blockquote>
          <pre>_______________________________________________
rules-users mailing list
<a moz-do-not-send="true" href="mailto:rules-users@lists.jboss.org"
 target="_blank">rules-users@lists.jboss.org</a>
<a moz-do-not-send="true"
 href="https://lists.jboss.org/mailman/listinfo/rules-users"
 target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a>


    </pre>
        </blockquote>
        <pre>  </pre>
      </blockquote>
      <br>
      </div>
      </div>
      </div>
      <br>
_______________________________________________<br>
rules-users mailing list<br>
      <a moz-do-not-send="true"
 href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
      <a moz-do-not-send="true"
 href="https://lists.jboss.org/mailman/listinfo/rules-users"
 target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
      <br>
    </blockquote>
    </div>
    <br>
    <pre wrap=""><hr size="4" width="90%">
_______________________________________________
rules-users mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
  </blockquote>
  <br>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
rules-users mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a>
  </pre>
</blockquote>
<br>
</body>
</html>