BT
x Your opinion matters! Please fill in the InfoQ Survey about your reading habits!

Ruote: A Workflow Engine Written in Ruby

by Jean-Jacques Dubray on Oct 18, 2010 |

Ruote is an open source workflow engine implemented in Ruby which was built by John Mettraux, Keneth Kalmer and Torsten Schoenebaum and other contributors. It is used by companies like ThoughtWorks and Rackspace to support mission critical integrations

A ruote engine may execute multiple process instances at a time. Processes are instantiated from process definitions written in a Ruby DSL or in XML (or directly as JSON). Process definitions describe the flow of work among participants. Participants stand for users, groups of users, services, legacy systems, etc.

A ruote process definition describes the flow of work among participants.  While participants are generally registered at start time process definitions are ‘parsed’ at their launch time and transformed into an abstract syntax tree (a ‘tree’ for short) associated to the corresponding process instance. It can mainly read three flavours of process definitions : a Ruby DSL, a XML and plain trees (usually as JSON). A process definition contains one main process definition and may contain one or more sub-process definitions. For example:

 1 require 'ruote' # gem install ruote
 2 
 3 pdef = Ruote.process_definition :name => 'work' do
 4   cursor do
 5     concurrence do
 6       reviewer1
 7       reviewer2
 8     end
 9     editor
10     rewind :if => '${not_ok}' # back to the reviewers if editor not happy
11     publish # the document
12   end
13 end

In ruote 2.1, multiple workers and engines are sharing a storage, and the participant list is persisted as well. ruote-couch is a storage implementation for ruote that uses Apache CouchDB.  ruote-amqp provides an AMQP participant/listener pair that allows you to distribute workitems out to AMQP consumers for processing, as well as launching processes over AMQP.

Ruote implements a complete series of workflow patterns:

  • sequence, parallel split, synchronization, exclusive choice, simple merge
  • multi choice, structured synchronizing merge, multi merge, structured discriminator
  • arbitrary cycles, implicit termination
  • multiple instance patterns
  • deferred choice, interleaved parallel routing, milestone
  • cancel task, cancel case
  • ...

Ruote was completely rewritten for the 2.0 and Ruote's core was rewritten for the 2.1 release. A couple of weeks ago, the team released v2.1.11. John also started to work on the volute project, a state machine implementation. John explained how he sees the difference between a "sequencial workflow" and a "state machine" in this post.

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2014 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT