[rules-users] Question on data safety and threading...

Felipe Piccolini felipe.piccolini at bluesoft.cl
Wed Mar 21 16:24:43 EDT 2007


jdepaul,

    We are implementing a diferent solution for that. We are using a  
Topic JMS using spring, so we have build diferent RuleBases and  
publish them
in this topicJMS as a post, then a WorkingMemoryFactory has a  
listener for changes on the topics, and when that happens the factory  
refresh the
singleton reference to the RuleBase (sincronyzed) and provides a  
newWorkingMemory... no maps, one factory for each rulebase (we have  
them identified)
and the diferent ruleBases are managed by diferent topic-beans-names  
in the spring configuration. I guess it can be managed by maps too.
We will send the code in 3 weeks when we have it tested and operative.

Good luck!.

On 13-03-2007, at 19:32, Michael Neale wrote:

> in your case - as you are swapping out the RuleBase - I woudl  
> suggest locking or syncing things when swapping - not sure how to  
> do that given that spring is in control.
>
> Also, i would suggest you use RuleBase#newWorkingMemory(false) so  
> that it doesn't keep a weakhashmap around pointint back to the  
> working memories, as you don't need it (it will mean less big GC  
> pauses under heavy load in your case).
>
> Michael.
>
> On 3/13/07, jdepaul <jjdepaul at us.ibm.com> wrote:
>
> I know the threading topic has been discussed quite extensively,  
> but I still
> need some guidance in the following case:
>
> My application has a RuleManager object that maintains references  
> to many
> RuleBase objects in a HashMap. I'm using Spring Framework to wire  
> the bean
> relationships together.
>
> The RulesManager is typically busy servicing client requests for  
> instances
> of WorkingMemory objects which it fetches from the individual RuleBase
> objects it maintains in its Hash ( wm.newWorkingMemory() ).
>
> >From time to time, I'll need RulesManager to reaload the rules  
> that are
> associated with the individual RuleBase object - for that, I'm  
> going to
> create a new instance of the RuleBase object and then I need an  
> efficient
> and safe way to 'swap' this new RuleBase object for the old object  
> reference
> in the RulesManager's map.
>
> My question is: should I synchronize the getWorkingMemory(..)  
> method inside
> my RulesManager object that uses the hashmap, AND also synchronize  
> the code
> that does the object swap - would that be sufficient?! How would I  
> do it
> using Collections.synchronizedMap() - remember that I don't have  
> that much
> control over the creation of the Map since Spring controls that  
> part of
> populating hashmap at startup.
>
> The critical factors for me are speed and efficiency in servicing  
> regular
> client requests for WorkingMemory - ideally, I'd synchronize only  
> the method
> that does the object swap, but I'm sure that may have some bad
> consequences... though as long as I can avoid the race condition I  
> could
> probably live with it.
>
> Thanks in advance for ideas -
> --
> View this message in context: http://www.nabble.com/Question-on- 
> data-safety-and-threading...-tf3396050.html#a9454823
> Sent from the drools - user mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users


Felipe Piccolini M.
felipe.piccolini at bluesoft.cl




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20070321/65a34483/attachment.html 


More information about the rules-users mailing list