Disclaimer-- I haven't used either of these locking technologies described, but 
understand how and why Ben is looking to use them.

I think it would be helpful to understand how other use cases would apply to 
support this in the DSL.  I can see a lot of ways where users would 
misinterpret what functionality it can provide by presuming that it would 
support locking across all components and endpoint types.  I think isolating 
the locking to be as close to the parts of code that need locking is a good 
idea-- cuts down on errors due to forgetting to unlock (exceptions, etc).

Another approach might be to create a Bean Processor Support package (aka util 
library) that included support for simplifying lock operations via the various 
methods Ben described.  If its *only* ever going to be used before and after a 
processor, what is the benefit to having it in the DSL, vs leaving it in the 
user's Java code? 

Matt

On Sep 6, 2011, at 3:16 PM, boday wrote:

> hey guys, while working on a solution for a client, I ran into the need to
> "synchronize" multiple routes that modify the same data (users, orders, etc)
> to prevent collisions (stale writes, etc).  Is there an existing way to do
> this that I've overlooked?  
> 
> In the past, I've relied on  http://activemq.apache.org/message-groups.html
> AMQ message groups  for JMS based routes and Hazelcast to span
> routes/containers.  I feel this would be a good fit for the Camel DSL.  Has
> anyone looked into this in the past?
> 
> After doing some quick research, it seems like Java 
> http://download.oracle.com/javase/6/docs/api/java/util/concurrent/locks/Lock.html
> Lock  seems to be the way to go.  Also, Hazelcast can extend this to be
> distributed across VMs.
> 
> So, I've been playing around with adding distributed locking support with
> Hazelcast (see  https://issues.apache.org/jira/browse/CAMEL-4397 CAMEL-4397
> ) and wanted to get some feedback on doing this.  In particular, I'm using a
> Lock instance stored in a ThreadLocal variable (to ensure that the same
> thread releases the lock).  Does anyone see any issue with this approach?
> 
> If all goes well with this, I was planning on also adding a DSL API to
> provide a basic support for (non distributed) 
> http://download.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantLock.html
> ReentrantLocks .
> 
> something like this...
> 
> from(route1).lock(userId).process(processor1).unlock();
> from(route2).lock(userId).process(processor2).unlock();
> 
> Any advice/comments are welcome...thanks
> 
> 
> -----
> Ben O'Day
> IT Consultant -http://consulting-notes.com
> 
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/discuss-implementing-Locks-in-Camel-tp4775904p4775904.html
> Sent from the Camel Development mailing list archive at Nabble.com.

Reply via email to