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
