AmiraTalbi

You exactly understand the problem... and you are right, it is not specifically 
a jBpm issue. There is a resource (the process instance) that needs to be 
"used/updated" by each thread in turn, not all at once.

The reason I did not want to use your suggestion is that I think that this 
would block all traffic... In 60 seconds I may have 1,000 incoming 
events/threads, destined for 950 different process instances. In the vast 
majority of cases there is no contention and i could, in theory, process 950 
process instances in parallel... with only 50 blocking.

The only solution that I can think of is to either use the jBpm lock facility 
OR to have an external locking process.
1) Using the jBpm lock facility

  |             long pid = 123; 
  |             JbpmContext jC = jbpmConfiguration.createJbpmContext();
  |             try {
  |                     ProcessInstance pI = 
jC.loadProcessInstanceForUpdate(pid);
  |                     
pI.getRootToken().lock(Thread.currentThread().toString());
  |             }
  |             finally {
  |                     jC.close();
  |             }
  |             try {
  |                     ProcessInstance pI = 
jC.loadProcessInstanceForUpdate(pid);
  |                     
pI.getRootToken().unlock(Thread.currentThread().toString());
  |                     pI.signal();
  |             }
  |             finally {
  |                     jC.close();
  |             }
  | 
The problem with this is it is pretty heavyweight (in terms of database updates 
done) and also I have to write a fair chunk of code to deal with threads that 
die without releasing their lock etc etc etc.

2) Implementing a a lock facility using the database, for example mysql SELECT 
GET_LOCK('lock1',10)
The problem with this is that I need to ensure that no thread attempts to 
acquire a process instance without first getting a lock.

Unfortunately the solution is multi node, so I am not able to do in memory 
locking easily.

I had hoped that jBpm might have a clever way of achieving this without me 
having to write any code.  At an abstract level I believe that this problem is 
similar to a process instance reaching a task node whose task could be 
performed by multiple actors. Presumably in this case jBpm has some mechanism 
to prevent multiple actors fulfilling the task.

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4196919#4196919

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4196919
_______________________________________________
jboss-user mailing list
jboss-user@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to