John, this looks great... I'm wondering if I could trouble you with
explaining a little bit where the flow expression and its workitem get
persisted? I don't see the dispatch pool persisting it before dispatching so
it must be prior to the worker getting the dispatch message but I couldn't
put my finger on exactly where that happens.

Thank you!

--
Raphael.

On Thu, Feb 10, 2011 at 7:42 PM, John Mettraux <[email protected]>wrote:

>
> On Thu, Feb 10, 2011 at 02:48:16PM -0800, Raphael Simon wrote:
> >
> > The title says it all: I'm writing a participant and it needs to retrieve
> > the workitem that was consumed prior to the expression being cancelled.
> What
> > I ended up having to do was to basically copy/paste the
> StorageParticipant
> > code to store and retrieve the workitem. This doesn't seem ideal though.
> I
> > could have my participant inherit from StorageParticipant and reuse the
> > consume and reply method there but that also does not seem ideal (makes
> my
> > participant brittle as it relies in the internal behavior of
> > StorageParticipant). I am wondering if there should be a more generic
> > mechanism for stashing/retrieving/deleting the workitem for a given
> > expression. Both the StorageParticipant and mine could rely on this. I'm
> > happy doing that refactoring and contributing it back but I wanted to
> first
> > check that I am not missing anything.
>
> Hello Raphael,
>
> would that help ?
>
>  https://gist.github.com/821882
>
> ---8<---
> require 'rubygems'
> require 'yajl' # or 'json'
> require 'ruote'
>
> engine = Ruote::Engine.new(Ruote::Worker.new(Ruote::HashStorage.new))
>
> pdef = Ruote.process_definition do
>  alpha
> end
>
> class Alpha
>  include Ruote::LocalParticipant
>
>  def consume(workitem)
>    # do nothing, do not even reply to the engine
>  end
>
>  def cancel(fei, flavour)
>    #p workitem(fei)
>    puts "the workitem as it reached the participant expression :"
>    p applied_workitem(fei)
>  end
> end
>
> engine.register_participant :alpha, Alpha
>
> engine.noisy = true
>
> wfid = engine.launch(pdef)
>
> engine.wait_for(:alpha)
>
> engine.cancel(wfid)
>
> engine.wait_for(wfid)
> --->8---
>
> this #applied_workitem(fei) method is hidden in the ReceiverMixin (which is
> included in Ruote::LocalParticipant).
>
> (Making a note to link to this discussion thread from the documentation).
>
>
> Cheers,
>
> --
> 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

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