Thanks a ton, John. It is much appreciated! It might take me a bit to digest the information above (amidst the umpteen other things I am working on, currently) but will definitely try out the above options and keep ya posted (via this thread) as to "how goes". Thanks again for the prompt response, and I am quite certain I am going to leverage OpenWFEru to solve my workflow requirements. I've used quite a few in the J2EE stack but this is my first stab at one of the Ruby alternatives, and it looks cool so far!
On Apr 22, 9:26 pm, John Mettraux <[email protected]> wrote: > On Thu, Apr 23, 2009 at 12:28 AM, krish <[email protected]> wrote: > > > However, one or more of my tasks would be interacting with 3rd party > > software via web service calls, and ofcourse, it is asynchronous. So, > > what I need to be able to achieve is this - > > > Until I get a response from the 3rd party app(s), I don't want to move > > forward with the workflow. It should basically be in a "paused" state > > (perhaps, I could pause the engine, but what after that?) and should > > resume when it receives a response (HTTP POST, for instance) from the > > 3rd party app. Does the workflow engine support this? > > Hi Krish, > > thanks for your interest. I think I have to finish the documentation > athttp://openwferu.rubyforge.org/part.htmlso that it covers the > answer to your question. > > So in your scenario, you call a webservice and then, later, this > webservice posts its result back to your application (sounds like a > "webhook"). > > I assume your web service is something over HTTP and not necessarily > SOAPesque (http://openwferu.rubyforge.org/participants.html#SoapParticipant). > > I wrote something that might interest you about > (thishttp://jmettraux.wordpress.com/2008/05/27/restful-bpm/), but it's > maybe better to have a fresh look at the issue. > > Ruote-rest and ruote-web2 have a "workitems" resource. A 'client' can > pick a workitem (GET /workitems/x/y) and later issue it back to the > engine by putting back its updated representation (PUT /workitems/x/y) > with a 'proceed' flag set to true (else it simply saves the new > payload of the workitem, but the flow doesn't resume). > > It's nice but you want to "trigger" the webservice, you don't want it > to poll the engine/application for work. > > Your webservice participant could look like : > > ---8<--- > class WebserviceParticipant > def initialize (target_uri, callback_uri) > @target_uri = target_uri > end > def consume (workitem) > representation = to_representation(workitem, @callback_uri) > http_post(@target_uri, representation) > end > end > --->8--- > > This hypothetical implementation assumes the 'endpoint' is known when > the application starts (target_uri), the callback_uri is the URI of > the controller that follows. > > When the participant receives a workitem from the engine, it will turn > the workitem into some representation understood by the target (JSON, > XML, CSV, whatever) and post it. The representation should include the > workitem identification data (at least workflow_instance_id and > expression_id). A suggestion : the representation should include as > well the callback_uri (makes it more loose, and the target may thus > deal with multiple work sources/engines). > > Note that the participant does not reply to the engine, letting the > segment of process instance wait. > > The listener takes the shape of a Rails controller : > > ---8<--- > class CallbackController < ApplicationController > def update > workitem = rebuild_workitem(params) > RuotePlugin.ruote_engine.reply(workitem) > end > end > --->8--- > > It assumes the workitem representation comes back via a PUT (real or > faked). It rebuilds the workitem out of the parameters (mostly the > representation found in the body of the PUT/POST) then replies to the > engine with it. > > The call to reply may potentialy fail (maybe the process instance or > segment got cancelled), so watch out for that. > > This conversation with Axyd might interest you > :http://groups.google.com/group/openwferu-users/browse_frm/thread/28a6... > (in one of the gists there is a technique that, for "workitem > rebuilding" asks the engine for the workitem and then fills it with > the new info). > > This is one way of doing it. I hope this helps. > > In summary, no need to pause the engine, it's always between "apply" > and "reply" calls, it's always waiting in some way. > > Best regards, > > -- > John Mettraux - http://jmettraux.wordpress.com --~--~---------~--~----~------------~-------~--~----~ you received this message because you are subscribed to the "ruote users" group. to post : send email to [email protected] to unsubscribe : send email to [email protected] more options : http://groups.google.com/group/openwferu-users?hl=en -~----------~----~----~----~------~----~------~--~---
