We have multiple threads performing
inserts/updates/queries/fireAllRules and had to synchronize access on working
memory. The performance impact is surprisingly almost
non-existent.
Hi,
Would synchronising on working memory effectively serialise the
effects of fireAllRules()?
...
synchronised(wm) {
wm.fireAllRules();
}
...
I don't know whether this would kill your through-put
either.
Cheers,
Mike
Hello
I'm using Drools 4.0.7 inside a mail relay
application 2 determine the operations that need 2 b executed on each passing
message.
To do this i'm using the following scenario:
-
I have a ruleBase.newStatefulSession().
-
I have a fixed set of facts.
-
I have a fixed set of rules.
-
Each mailer (a thread that is handling a single message) is inserting
the message to the working memory, calls the "fireAllRules" method and
retracts the message.
-
Rules that r executed change custom attributes in the
message.
Problem:
I noticed that sometimes a rule can b
executed on the same message more then once.
Assumption:
My
guess is that because i'm working is a multi threading environment
but using a stateful session, what happens is:
- Thread A is inserting Message A.
- Thread B is inserting Message B
- Thread A is calling fireAllRules
- Rule X is executed on messages A + B.
- Thread B is calling fireAllRules
- Rule X is executed on messages A + B
- Thread A is retracting Message A
- Thread B is retracting message B
Question:
My goal is 2 make
sure a rule is executed only once on a single message.
Any ideas on how 2
avoid the situation described
above?
TnX
Dotan
Invite your mail contacts to join your friends list with Windows Live Spaces.
It's easy! Try it!