Hi Maciej,
I had a mistake again. The behaviour of BPEL WHILE is not equals the for-each. The BPEL WHILE used a condition to decide when the process should keep looping or break. But the for-each is most like a dynamic parallel. So your implementation may be the best solution. And if we could use an expression to decide the multiplicity attribute of JoinActivity, that would be more convenient for other people to use this feature.