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
________________________________
From: rules-users-bounces(a)lists.jboss.org
[mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Shahad Ahmed
Sent: Friday, May 11, 2007 8:34 AM
To: rules-users(a)lists.jboss.org
Subject: [rules-users] Sequential rules algorithm
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