This content has been marked as final. Show 3 replies
This could be a complicated question, or a simple one. When you have parallel threads/paths in your process and both paths are modifying the same data, you have to manage that in your design, the same as any other system.
If you really want the parallel paths to modify the same data and to, at whatever point they do so, have access to the latest version of that data (which may have been modified in another parallel thread or perhaps even in another instance of your process) then the suggested method is to use the mechanism available to you in the database, and make this an adf business control. The entity variable in BPEL is designed for this and can be integrated into the task as desired (see Fusion Order Demo tutorial in SOA Suite 11g).
If you simply want to know at the merge point which was the latest update, well, that happens automatically. Whichever thread updated last is the latest update.
Your question is expressed simply enough but I don't know what you really really have in mind.
OK, so any synchronization or special merge logic must be handled at the database level itself via ADF BC...
So there is no mechanism to access the individual tokens (business objects) for each thread in the join/merge gateway like you can in 10g (obpm/albpm)?
There is no current use case for this in the processes we've implemented thus far, but I can see this possibly coming up in the future. We have a somewhat unique situation in that our source business data is accessed via pseudo-JDBC calls to programs written in RPG running on IBM iSeries hardware (JD Edwards World is our ERP). So we don't really have the benefit of typical database transactions.
The initial implementation of BPM 11g is not taking into consideration the Split-Join semantics as we had in OBPM 10gR3 where spawn new threads would have a private set of instances that could then be aggregated with some logic in the Join. The current semantics in BPMN 2.0 state that all spawn thread from a gateway are sharing the same set of instance variables and each would have access to read and update these. The join gateway would simply control when the instance in the join gateway should move forward.