[rules-dev] Multi threading usage best practice

Fenderbosch, Eric Eric.Fenderbosch at fedex.com
Mon Jul 14 09:36:12 EDT 2008


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.

________________________________

From: rules-dev-bounces at lists.jboss.org
[mailto:rules-dev-bounces at lists.jboss.org] On Behalf Of Anstis, Michael
(M.)
Sent: Monday, July 14, 2008 9:24 AM
To: Rules Dev List
Subject: RE: [rules-dev] Multi threading usage best practice


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


________________________________

	From: rules-dev-bounces at lists.jboss.org
[mailto:rules-dev-bounces at lists.jboss.org] On Behalf Of 9Lives 9Lives
	Sent: 14 July 2008 13:41
	To: rules-dev at lists.jboss.org
	Subject: [rules-dev] Multi threading usage best practice
	
	
	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:
	

	1.	
		I have a ruleBase.newStatefulSession().
	2.	
		I have a fixed set of facts.
	3.	
		I have a fixed set of rules.
	4.	
		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.
	5.	
		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:
	

	1.	Thread A is inserting Message A. 
	2.	Thread B is inserting Message B 
	3.	Thread A is calling fireAllRules 
	4.	Rule X is executed on messages A + B. 
	5.	Thread B is calling fireAllRules 
	6.	Rule X is executed on messages A + B 
	7.	Thread A is retracting Message A 
	8.	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!
<http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.
aspx&mkt=en-us>  

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20080714/feee6eee/attachment.html 


More information about the rules-dev mailing list