Hi Tomaso, On 10/23/07, Tomaso <[EMAIL PROTECTED]> wrote: > > Dear John, > thank you for the wonderful OpenWFE(ru).
You're welcome, if it can make your life easier, that's good. > Our idea is to have a unique db where wf instances are stored and a > plugin (something like a > owferu-service-connector -briefly OpenWFE-sc ) that may be included > into all the rails apps that need workflow "services". Have you considered having a central Rails application providing a RESTful interface to 'client' Rails application ? I would like to implement it (I've been planning to do it since a few months ago, to replace the old REST interface). Your 'client' Rails application could then use ActiveResource to interact with the core RESTful "workflow service". > I suppose that what it needed is something like a DbPersistedEngine: > i'had tried to write this class, > starting from the FilePersistedEngine, and by consequence i provided a > set of classes that enable me to write > yaml on a db, similarly to FilePersistedEngine. > > But now the problem for me is: what data must be stored on the > database in order to obtain a storage service > that can offer at least the same features of the FilePersistedEngine. > Can you describe me what data is needed to obtain this, please? I'd be > very glad to try to write it on my > own ( with your precious help and supervision :) ) Persistence of the engine (the process instances themselves) to a relational database. I've just implemented that but on top of JRuby and a Java Content Repository, that's interesting anyway : http://svn.magnolia.info/svn/modules/community/magnolia-module-workflow/branches/magnolia-module-workflow-openwfe-ruby-3.0/src/main/resources/workflower/engine.rb I'd be glad to help you implement that, with ActiveRecord (and its "serialize" directive), it's very easy. We can get along with 4 columns. Looking at the JCR based implementation : ---8<--- def []= (fei, fe) ldebug { "[]= storing #{fei.to_s}" } @mutex.synchronize do c = locate_expression fei, true vf = c.getJCRNode.getSession.getValueFactory c.createNodeData( WfConstants::NODEDATA_ID, vf.createValue(fei.to_s)) c.createNodeData( WfConstants::NODEDATA_WFID, vf.createValue(fei.wfid)) c.createNodeData( WfConstants::NODEDATA_EXPCLASS, vf.createValue(fe.class.name)) c.createNodeData( WfConstants::NODEDATA_VALUE, vf.createValue(YAML.dump(fe))) @hm.save end end --->8--- The columns are id, wfid, expclass and value (which contains the serialized/yamlized) version of the expression. There is one issue though : the engine is demanding in terms of updates to the storage. In order to limit them (IO is always costly), I generally use the ThreadedStorageMixin : http://openwferu.rubyforge.org/svn/trunk/openwfe-ruby/lib/openwfe/expool/yamlexpstorage.rb which dramatically reduces the number of updates to the filesystem/database necessary. So to sum up all of this, I'd be glad to have your help. The engine persistence to the database is easy to implement, it needs tests and documentation though :) Would your company be OK if code that you author goes out under the BSD license ? What about the RESTful server approach ? Best regards, thanks for your interest, -- John Mettraux -///- http://jmettraux.openwfe.org --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "OpenWFEru dev" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/openwferu-dev?hl=en -~----------~----~----~----~------~----~------~--~---
