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
-~----------~----~----~----~------~----~------~--~---

Reply via email to