BT

New Early adopter or innovator? InfoQ has been working on some new features for you. Learn more

Ruote: A Workflow Engine Written in Ruby

| by Jean-Jacques Dubray on Oct 18, 2010. Estimated reading time: 1 minute |

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.

Rate this Article

Adoption Stage
Style

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

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and dont miss out on content that matters to you

BT