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