<!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">
    <br>
    Hi Edson, hi all,<br>
    <br>
    To stick to the subject, I have a strange problem (stack trace in
    PS) with a rule containing two accumulate calls, the result of the
    first one is re-injected as the input of the second one. Those
    accumulate functions are "home made". <br>
    The first one (tokenize) returns an ArrayList of Token objects built
    by tokenizing the "text" of the Sentence objects.<br>
    The second one (build10windows) returns an ArrayList of Window
    objects, each one them containing 10 consecutive tokens.<br>
    Here is the rule<br>
    <br>
    <tt>&nbsp;&nbsp;&nbsp; when<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $budget : ManualAnnotation(text == "something")<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <b>$tokens</b> : java.util.ArrayList() <b>from
        accumulate </b>($s : Sentence(), <b>tokenize</b>($s))<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $windows : java.util.ArrayList() <b>from accumulate </b>($t
      : Token() <b>from $tokens</b>, <b>build10windows</b>($t))<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # removed a part here but the problem occurs even without
      this part<br>
      &nbsp;&nbsp;&nbsp; then<br>
      &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; retract($budget);<br>
    </tt><br>
    Is there anything else one should be aware of when implementing
    their own accumulate function? I mean things related to the fact
    that "classical" accumulate functions (sum, average) return an
    immutable object that does not share anything with the context
    object.<br>
    Although accumulate, reverse, and getResult methods of my functions
    are unit tested, I suspect something that could be related to
    stateless/stateful considerations.<br>
    What do you think?<br>
    <br>
    Many thanks,<br>
    <br>
    Bruno.<br>
    <br>
    PS :<br>
    <br>
    The stack trace is:<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:218)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:99)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.command.runtime.rule.FireAllRulesCommand.execute(FireAllRulesCommand.java:33)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:159)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.command.runtime.BatchExecutionCommandImpl.execute(BatchExecutionCommandImpl.java:81)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:262)<br>
    &nbsp;&nbsp;&nbsp; ... 5 more<br>
    Caused by: java.lang.NullPointerException<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.reteoo.AccumulateNode.getFirstMatch(AccumulateNode.java:967)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.reteoo.AccumulateNode.splitList(AccumulateNode.java:920)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.reteoo.AccumulateNode.removePreviousMatchesForLeftTuple(AccumulateNode.java:874)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.reteoo.AccumulateNode.retractLeftTuple(AccumulateNode.java:205)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateRetractLeftTuple(CompositeLeftTupleSinkAdapter.java:238)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateRetractLeftTupleDestroyRightTuple(CompositeLeftTupleSinkAdapter.java:138)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.reteoo.AccumulateNode.retractLeftTuple(AccumulateNode.java:212)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.reteoo.ObjectTypeNode.retractObject(ObjectTypeNode.java:240)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.reteoo.EntryPointNode.retractObject(EntryPointNode.java:231)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1288)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:201)<br>
    &nbsp;&nbsp;&nbsp; at
org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:214)<br>
    &nbsp;&nbsp;&nbsp; at
defaultpkg.Rule_Display_windows_0.defaultConsequence(Rule_Display_windows_0.java:21)<br>
    &nbsp;&nbsp;&nbsp; at
defaultpkg.Rule_Display_windows_0DefaultConsequenceInvoker.evaluate(Rule_Display_windows_0DefaultConsequenceInvoker.java:29)<br>
    &nbsp;&nbsp;&nbsp; at
    org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917)<br>
    &nbsp;&nbsp;&nbsp; ... 15 more<br>
    <br>
    <br>
    Bruno.<br>
    <br>
    Le 24/08/2011 16:21, Edson Tirelli a &eacute;crit&nbsp;:
    <blockquote
cite="mid:CAD7AJnfTinYwm91e7k3wiNmSUN2ZPsaj=7mOiccNumGYouwEZA@mail.gmail.com"
      type="cite">
      <div><br>
      </div>
      &nbsp; &nbsp;Yes, evaluation is incremental, so for every new fact, it will
      call accumulate() and getResult().
      <div><br>
      </div>
      <div>&nbsp; &nbsp;We do want to reduce the calls to getResult(), improving
        performance, but it is not easy to figure out a way, as from an
        engine perspective, it never knows when the application is done
        inserting facts and it is time to calculate the final result.</div>
      <div><br>
      </div>
      <div>&nbsp; &nbsp;Edson<br>
        <br>
        <div class="gmail_quote">2011/8/24 Bruno Freudensprung <span
            dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:bruno.freudensprung@temis.com">bruno.freudensprung@temis.com</a>&gt;</span><br>
          <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
            0.8ex; border-left: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">
            Hi,<br>
            <br>
            While testing my custom accumulation function I noticed an
            unexpected<br>
            behavior (th'ats of course a personal point of view).<br>
            It seems that Drools 5.1 calls accumulate(...) and
            getResult(...) as<br>
            many times as the number of accumulated facts (accumulate,
            getResult,<br>
            accumulate, getResult, etc...).<br>
            Is it supposed to work like this?<br>
            <br>
            Best regards,<br>
            <br>
            Bruno.<br>
            <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>
          </blockquote>
        </div>
        <br>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        &nbsp; Edson Tirelli<br>
        &nbsp; JBoss Drools Core Development<br>
        &nbsp; JBoss by Red Hat @ <a moz-do-not-send="true"
          href="http://www.jboss.com">www.jboss.com</a><br>
      </div>
      <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
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>