[rules-dev] Multi threading usage best practice

Anstis, Michael (M.) manstis1 at ford.com
Mon Jul 14 09:51:49 EDT 2008


Did you synchronise on the insertion of objects into working memory too?
(not as part of an activation on the RHS).
 
What about the use of a stateless session per thread (isn't session
creation really quick once the package\rulebase has been compiled)? In
the mail relay below won't you want the set of rules to apply to one set
of facts inserted by one thread representing one message? Is this
achievable with a shared working memory? (Could you not get an
activation caused by the presence of a fact inserted into working memory
by one thread and the insertion into the same working memory of a fact
by another thread).
 
This is much more interesting that work ;-)
 
Mike


________________________________

	From: rules-dev-bounces at lists.jboss.org
[mailto:rules-dev-bounces at lists.jboss.org] On Behalf Of Fenderbosch,
Eric
	Sent: 14 July 2008 14:36
	To: Rules Dev List
	Subject: RE: [rules-dev] Multi threading usage best practice
	
	
	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/c7e9959d/attachment.html 


More information about the rules-dev mailing list