Hi Koen,

I agree with you on one and three.

jBPM works, great, solves all problems and there is at the moment no mission 
critical need for real concurrency.

It is/was important for me to know the limitations because I am using JMS 
intensively (mainly for transaction reasons) and have to guard against 
concurrency problems. The conclusion of this Thread for me is: lock on 
processInstance. Which is fine for me, but effectively means no real concurrent 
execution.

We can leave it at that.

Everything from now on is purely academic.

(I haven't been to the office for the last week due to a flu and do not (yet) 
have jBPM or other tools set up at home, so this will look a bit cheap but it 
should make the point.)

A technical (not business) usecase true concurrency 

a) workload in jBPM actions:

  | thread1.................
  | tx1.....................
  |                                        <start/>
  | 
  |                                        <fork/>
  | 
  |            <state a>                                         <state b>
  |              <action>                                          <action>
  |                <send JMS>                                        <send JMS>
  |                  continue in new Thread                            continue 
in new Thread
  |                  (thread2)                                         (thread3)
  |                </send JMS>                                       </send JMS>
  |              </action>                                         </action>
  |            </state a>                                        <state b>
  | tx1.....................
  | thread1.................
  | 
  | thread2.....                                     thread3.....
  | tx2.........                                     tx3.........
  |             <MDB>                                            <MDB>
  |               signal()                                         signal()
  | 
  |               <state c>                                        <state d>
  |                 <action/>                                        <action/>
  |               </state c>                                       </state d>
  | 
  |               <state e>                                        <state f>
  |                 <action/>                                        <action/>
  |               </state e>                                       </state f>
  | 
  |                                      !!!!!!!!!!
  | 
  |               <join/>                                          <join/>
  |             </MDB>                                           <MDB>
  | 
  |                                      ??????????
  | 
  | tx2.........                                     tx3..........
  | thread2.....                                     thread3......
  | 

The point Sean made was that if tx2 and tx3 happen concurrently, when reaching 
the Join node both will not recognize that the other has possibly finished and 
neither will therefore continue.

You can circumvent the problem from above if you delegate all workload to MDBs

b) all workload in MDBs:

  | thread1.................
  | tx1.....................
  |                         <start/>
  | 
  |                         <fork/>
  | 
  |            <state c>                   <state d>
  |              <action>                    <action>
  |                 <send JMS>                  <send JMS>
  |              </action>                   </action>
  |             </state c>                  </state d>
  | 
  |             <state e>                   <state f>
  |               <action>                    <action>
  |                 <send JMS>                  <send JMS>
  |               </action>                   </action>
  |             </state e>                  </state f>
  |                           <join/>
  | tx1.....................
  | thread1.................

MDBa, MDBb, MDBc, MDBd do their stuff totally idependently.

But then the execution or rather failure of e.g. <state f> could not rollback 
<state d> (not the sending of the JMS message, the failure of the workload.) so 
this isn't the szenario I would want to use.

Koen, you've mentioned it a few times before yourself. Its a concurrency issue 
that doesn't go away with messaging. When you think about it there will be no 
simple solution to it.

And once again: Have a very Merry Third Advent, sing Christmas jingles, go 
drink Glühwein on a Weihnachtsmarkt and don't go looking for blonde D-Cups.

Rainer

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3911956


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_idv37&alloc_id865&op=click
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to