- From: Daniel Elenius <daele@ida.liu.se>
- Date: Thu, 28 Oct 2004 13:08:00 -0700
- To: public-sws-ig@w3.org
I have a question regarding how Split should be interpreted, and how it differs from Split-Join. I will illustrate this with the following example. We have a composite process, which consists of a Sequence, where the first item is a Split-Join, and the second a Perform. If we think of these in terms of how a client that wishes to execute an OWL-S composite process would act, I guess the client would do the following: 1) Create a new thread for all but the first item in the ControlConstructBag of the Split-Join, and associate each thread with its ControlConstruct. 2) For each thread, including the first one, invoke the ControlConstruct it is associated with. 3) For the main thread, wait for all the other threads to finish, then invoke the Perform. Here, it does not matter which ControlConstruct is chosen for the main thread, as all threads have to finish anyway. But if we substitue a Split for the Split-Join, step 3 becomes: 3) For the main thread, when finished, invoke the Perform. Here it does matter which thread is chosen as main. This, however, is not reflected in the OWL-S description. We could just say that it is always the first item in the ControlConstructBag that is the main one, but then it should be a ControlConstructList, since bags are not supposed to be seen as having any internal ordering. Another interpretation is: 3) For the the first thread that finishes step 2, invoke the Perform. Here, we don't have to care which thread is "main", but this interpretation seems awkward. AFAIK, this kind of thing is usually not done in concurrent programming. For one thing, each thread has to check that no other thread has gone on to execute the next step in the sequence. I also have another question regarding the interpretation of both Splits and Split-Joins: If a process has no return value, how does a client know when it is finished? If we are executing web services over SOAP, is the client correct in just continuing as soon as it has invoked the service? Or does a service _have_ to have some return value or some other way of letting the caller know it has finished? I'm pretty sure there's no clear-cut answer to this question, so I'm mostly hoping to provoke some discussion. Regards, /Daniel
Received on Thursday, 28 October 2004 20:08:20 UTC