about processes and engines

Archive for the ‘openwfe’ Category

OpenWFEru 0.9.6 released

The talk at the TLUG went well : not too much people were sleeping. The beer at the nomikai that followed went (down) even better. I will make the slides available soon.

I just released OpenWFEru 0.9.6.

The main addition is a bunch of Participants and Listeners. Participants ‘participate’ to business processes and listeners ‘listen’ to workitems as they come back from participants (some of those workitems may be LaunchItems, requesting the launch of a new Process instance).

OpenWFEru 0.9.6 features FileParticipant (+FileListener), SocketParticipant (+SocketListener) and SqsParticipant (+SqsListener). SQS stands for “Amazon Simple Queue Service”. In my next blog post, I’ll detail what stands behind this.

Alain helped me use Rote‘s ruby syntax trick, check out the quickstart for the colorful result.

Written by John Mettraux

March 12, 2007 at 9:18 am

talking at the tlug

TLUGI’ll be talking about OpenWFEru, Ruby workflow and BPM (technical point of view) tomorrow afternoon at the TLUG technical meeting of march.

Thanks to Zev and his team for this lively Linux User Group they are supporting.

Written by John Mettraux

March 9, 2007 at 3:56 am


quickstart gaussian blurI’ve written a new quickstart for OpenWFEru.

In one file, it shows a minimum of OpenWFEru : enumerating the participants in an organization (by registering them in the workflow engine), establishing a process definition and launching it (via a LaunchItem).

The participants demonstrated are simple block participants, very easily understandable by Ruby developers.

The process is just launched once, that doesn’t do much justice to the process execution engine which is meant to track more than one of those.

Persistency is not demonstrated within this quickstart example. If you need a further example using a persistent engine and persistent participants, have a look at Mano’s tracker.

I’ll soon expand that quickstart page with details about what is going in this openwferu.rb source file.

Feedback is welcome on the users mailing list.

Written by John Mettraux

March 7, 2007 at 3:44 am

implicit “process-definition”

Until now, you had to do

class IssueTracking2 < OpenWFE::ProcessDefinition
    def make
        process_definition :name => "IssueTracking", :revision => "2" do
            cursor do
                participant :qa_team
                participant :dev_team
                participant :customer_team


With the upcoming OpenWFEru 0.9.6, you’ll simply do

class IssueTracking2 < OpenWFE::ProcessDefinition
    def make
        cursor do
            participant :qa_team
            participant :dev_team
            participant :customer_team


Written by John Mettraux

March 5, 2007 at 2:17 am

OpenWFEru 0.9.4 released

OpenWFEru 0.9.4 is out.

It features the CsvTable and CsvParticipant described in a previous post.

More documentation is available, there is a growing glossary and promising page about expressions. The participants page is still following.

The ‘when’ expression got implemented, you can use it to trigger the execution of a process segment later in time, when a certain condition is met.

Written by John Mettraux

February 15, 2007 at 12:19 am

The OpenWFE manual in Japanese

Sakaguchi Masahiko just translated the OpenWFE manual to Japanese.

That’s a huge effort, very impressive.

Sakaguchi-san is a Japanese open source developer. His interests lie mainly in scripting languages over the Java virtual machine. He just wrote an article on this subject for the magazine “Software Design” of January 2007.

He also wrote the openwfe-pnuts library.

His website / blog :
The manual in Japanese :

Many thanks to Sakaguchi-san

m(_ _)m

Written by John Mettraux

February 14, 2007 at 6:48 am

Posted in bpm, openwfe, workflow

ruby decision tables

update (2008/01/28) : I’ve packaged this ruby decision table system into its own “rufus-decision” gem.

It’s part of OpenWFEru 0.9.4 that will be released this week.

I’ve already blogged about decision tables. Now the implementation is available in Ruby as well.

Disclaimer : this decision table implementation, whether in Java or Ruby is not meant to replace a full rules system with features like forward and backward chaining, RETE implementations and the like. But it covers a lot of cases. Be pragmatic.

For example, in our workflow definition, there’s a point where we’ve got to decide if we should take our umbrella when going to work (please no comments).
In pseudo-code, take would look like :

    if weather == "rainy"
        take_umbrella = "yes"
    elsif weather == "cloudy"
        take_umbrella = "maybe"
        take_umbrella = "no"

spreadsheetAs we don’t want to clutter our process definition with such cruft (or we simply don’t want to hardcode that into our source), we fire up our spreadsheet and write down the [business] rule.

That makes for a nice CSV file :

in:weather, in:month, out:take_umbrella?

Leveraging OpenWFEru CSV tables, we can write such Ruby code :

require 'openwfe/util/csvtable'

table ="path/to/our/file.csv")

h = { "weather" => "cloudy" }

puts h["table_umbrella?"]
    # will yield "no"

h = { "weather" => "cloudy", "month" => "june" }

puts h["table_umbrella?"]
    # will yield "yes"

# ...

That feature will be available with OpenWFEru 0.9.4 (or immediately by checking out OpenWFEru). You can already have a look at the unit tests for it.

The documentation for CSV tables as [decision] participants to business processes will be available soon.

Written by John Mettraux

February 11, 2007 at 9:25 am

Posted in openwfe, openwferu, ruby, rules

in the top ten

OpenWFEru - 20070209OpenWFEru, our open source ruby workflow engine made it in the top ten of the most active projects at RubyForge.

OpenWFE made it two times in Sourceforge’s most active, now it’s the Ruby era. The RubyForge is a nice place to develop in (thanks Tom).

There are still lots of things to do, like writing doc for CSV participants (aka decision tables), implementing persistence for workitem stores, thinking about ActiveRecord integration, port more of the original OpenWFE expressions, enhance the website, …

It’s great to code in Ruby…

Written by John Mettraux

February 9, 2007 at 7:12 am

OpenWFE 1.7.3pre0 released

Just released OpenWFE 1.7.3pre0.

It’s available via the sourceforge downloads.

Let the changelog speak for itself :

- 1.7.3pre0   svn3624
- [webclient] bug #1648292 : could not add field to ListAttribute whose
              name contained space. Fixed - s3622
- [applic]    bug #1651193 : intermittent exception due to unprotected
              SimpleDateFormat in Time utils. Fixed - s3621
- [engine]    todo #1634623 : ParticipantExpression : if the attribute
              'forgotten' is present sets the flag even to false - s3614
- [release]   todo #1634680 : switched from /bin/sh to /bin/bash - s3613
- [release]   bug #1632788 : sql scripts were not copied into release. Fixed
              - s3612
- [decision]  bug #1632789 : double table apply found by Gregory Joseph. Fixed
              - s3611
- [engine]    rfe #1610616 : implemented control.getFlowPosition() returning
              the expressions where a workflow instance is located.
- [-all-]     todo #1613738 : moved core non workflow things from openwfe-applic
              to openwfe-base - s3604
- [worklist]  bug #1605360 : REST getStoreNames() was broken. Fixed - s3569
- [worklist]  rfe #1601487 : added descriptions to REST listLaunchables() -
- [rel]       bug #1600317 : launchitem 4 pointed to wrong flow URL. Fixed -

The development of the Ruby engine slowed the development of the Java engine but did not stop it.

Written by John Mettraux

February 8, 2007 at 6:16 am

Posted in bpms, openwfe, workflow

OpenWFEru 0.9.3 released

Just released OpenWFEru 0.9.3.

It features more participants, and an implementation of the cron expression (following the work on the scheduler).

The participant names can now be used as expressions (a feature not present in the classical Java OpenWFE) :

class AccountingThriceDefinition < OpenWFE::ProcessDefinition
    def make
        process_definition :name => "accounting_thrice", :revision => "0" do
            sequence do
                # sending thrice in a row, a workitem to the 'accounting' participant
                participant :ref => "accounting"
                participant "accounting"

This technique also works with XML process definitions (if the participant name doesn’t conflict with XML conventions). This should enhance the readability of some process definitions. In certain cases, being explicit doesn’t hurt though.

Otherwise, lots of small incremental improvements and changes have been made.

The next steps :

- implement persistence for the workitem store participants (yaml based)
– implement more of the OpenWFE expressions (like ‘when’, ‘do’, ‘redo’, ‘undo’, …)
– explore integration with Ruby on Rails

Feedback is welcome on the users mailing list

Written by John Mettraux

February 5, 2007 at 2:15 am


Get every new post delivered to your Inbox.