hmmm, that is indeed tricky. a way of solving this generically, is to have the service call being executed externally. That is, you send a message to something external, it gets processed there. Your process simply goes further to a wait state. Then when the work is done, you put a message back on some queue (doesn't need to be a queue, can just be a method) that checks if the process is still in the wanted wait state. If so, it triggers, if not it can either wait and try again later or discard it. integrations like camel / spring integration might be suitable here for this kind of logic.