Shahad,
In
addition to using salience, you would also need to use a semaphore. I am
not sure JBoss (Mark P., et. al.) have implemented a "sequential mode" which
is a feature that is provided by both JRules and Blaze Advisor (among others);
however, that would be a nice feature to add to the rules engine. It
seems that without massive changes to the product, they could allow a
rule-base to be loaded with a "sequential-mode" property in which case, the
RETE engine would be disabled.
I'm not
really up to speed on the LEAPS feature and whether it is being obsoleted...
However, I
just read Mark's response and I respectfully disagree... I believe that you
can simulate sequential processing with salience and a semaphore.
Basically, if the rules in question have a salience order and the working
memory is changed using a semaphore construct, then any subsequent rules
beyond the first rule that fires would not execute.
So, if I
understand the issue that you have, say that there are many thousands of
rules, but you want them evaluated in a specific order. Once the first
rule fires, you can mark the data as processed and preclude the execution of
any additional rules.
There may
be other issues from a performance perspective, but ultimately, I think that
this workaround is very doable.
On the
other hand, I applaud Mark's suggestion to have a member of the JRules
community take the lead on a sequential-mode algorithm for JRules 4.0...
I have been a fan of the Drools/JRules project since the 1.x days and I
have witness this project evolve from an intriguing tool-kit to a
impressive product and I think that your suggestion is fantastic.
Providing this additional feature will further position JRules as a leading
contender in the Business Rules space.
Regards,
Dave
Does anyone know if there's an efficient way of replicating
the Ilog JRules sequential algorithm in Drools?
From a (over simplified) users perspective, the JRules sequential algorithm takes an
ordered list of rules and fires the first rule in the sequence with a valid IF
condition. You can also specify a maximum number of rules in a sequence that
may fire. If you have a large number of simple rules to be fired in
sequence (often precondition validating rules in a complex ruleflow), then
the sequential algorithm gives a significant performance gain over the
RETE algorithm in JRules.
I can see how you might order a set of rules by salience and give then
the same agenda group. Then I assume you will get the equivalent "behaviour"
to the Ilog sequential algorithm described above. However, before I try this
out, I thought I'd ask if anyone has a view on the performance of
this approach; and whether there would be anything to be gained by adding a
similar sequential algorithm to Drools.
I've seen a few Blog posts in the past that suggest that the Ilog
sequential algorithm is similar to LEAPS, but I don't know if that's accurate
- also LEAPS will no longer be supported on Drools 4.0 development
path.
Thanks
Shahad