If you want to use a helper class it must be in a return value, predicate or eval - none of which are currently indexed. return value and predicate must also be time constant, eval does not have to be.

OK, I fully understand what it means to use something in an eval block -- the scoping/use of that is clear, and that section of the Drools docs seems pretty specific.  What does it mean to use a helper class in a predicate or a return value?  Any sort of example of the two probably closes the knowledge gap here and lets me understand the specifics of the use cases.

What I do get (and thank you for being very clear on this, it helps) is that none of these cases is performant.  It's very clear that if a factual case can be indexed, it can be optimized.  If it cannot, then there is a cost every time the condition must be evaluated.  Of course, now I'm wondering... when does *that* happen?  Is the "cost" a product of # of facts x number of computed constraints? And then pre-computed/indexed constraints are some (small) fixed cost on top of that?

Oh... and when does this "cost" occur?  Every time I call fireAllRules()?  Or does indexing persist across calls to that?  This might be important, because my app right now calls fireAllRules() after pretty much every insertion of a new fact (the ratio of global facts applicable to all cases vs facts for a specific case is about 1 : 1000 -- I probably call fireAllRules at least 1000 times per instantiation of a rules engine -- is that bad?).

OK, sorry. Lots of question packed into one email.  But if you educate me, I promise to only use that knowledge for good and to help others on this list!

  --- Michael