This document show how some from the prescribed textbook "Workflow Management: Models, Methods and Systems" (by Wil van der Aalst and Kees Max van Hee) can be represented in IBM's WebSphere Business Integration Workbench.

Table of Contents

Module 4 - exercise 2.1: German traffic light model

Since the workbench only allows you to draw arcs from the left to right, for this model you will need to use a pair of "go to" objects (see p 162 of the Modeling Guide) each time I use a variable (e.g. *ry) for a task in the linear form given below (e.g. use a "source go to" instead of [*ry], then add the related "destination go to" to the left of the task "red_yellow" and draw an arc to it).

Because the workbench does not allow a place to be the destination of more than one task, you will also need to use a copy for the places "yellow" and "red". For example, when you name the place that is a copy of the place "red", select "red" in the provided list of already existing places; do not type the name "red" since a new (distinct) entity with the name "red" would be created; do not click on the checkbox "make copy" since this would also create a distinct entity. Alternatively, you can also use the command "Copy" (Ctrl C) and then "Paste Special" (Ctrl T) on the places "yellow" and "red".
In the previous paragraph, the use of "go to" objects is proposed but the use of place copies is an alternative.

The linear form show the token (see "@") but tokens cannot be representated with the workbench (in fact, its documentation does not include the strings "token" and "Petri" at all; the represented workflows are not Petri nets).
Because this model has no decision task within it, no case generation/analyse can be done on it. So far, I have failed to make the workbench run a simulation on this model (my simulations stop/complete immediately), may be because this model has no source place, no final place and no human resource (employee).

(c1 *c1 @)->[red_yellow *ry]{ ->(yellow)->[yellow_green *yg],  ->(red *r)->[*ry] };
[*yg]->(green)->[green_yellow *gy];
[*gy]{ ->(yellow)->[yellow_red *yr],  ->(c2)->[*yr] };
[*yr]{ ->(*r),  ->(*c1)->[*ry] }.

Module 4 - exercise 2.2: Project X

This model contains "implicit OR-splits" (p59 in the book):in the linear form, see the strings "){" (for the OR-split after "c6", the "yes" and "no" cases actually form an explicit representation). You have to use place copies in this model too: one for "c7" and two for "c8".

(begin @)->[A *a]{->(c1)->[B *b]->(c4)->[F *f]->(end),
                  ->(c2)->[C *c]->(c5)->[*f],
                  ->(c3)->[D *d]->(c6){yes->[E *e]->(c7 *c7), no->[skip_E]->(*c7)}
[*a]->(c8){ ->[*d], <-[*e],  ->[*b], <-[*b],  ->[*c], <-[*c],  ->[*f] }.

Module 4 - exercise 2.3: Railnet

For this model, I used one copy for b1, b2, b3, b4, f1, f2, f3 and f4. Because this model is large, you might want to use the "zoom out" menu (see the magnifying glass icon with a '-' sign in it) to enter it or, as I did below, use an additional copy of b2 to break this model in two parts.
(Note: the solution given in the book seems to miss an arc from "f4" to "claim_track *ct4"; I have added it here).

(busy1 *b1 @)->[clear_track]->(free1)->[claim_track]->(claimed1)->[use_track]->(*b1).

(busy1 @
 *b1){ <-[claim_track *ct2]<-(free2 *f2 @), ->[*ct2]->(c2)->[transfer *t12],
       ->[*t12]{ ->(free1 *f1), ->(busy2 *b2) };
(*b2){ <-[claim_track *ct3]<-(free3 *f3),   ->[*ct3]->(c3)->[transfer *t23],
       ->[*t23]{ ->(*f2), ->(busy3 *b3 @) };
(*b3){ <-[claim_track *ct4]<-(free4 *f4 @), ->[*ct4]->(c4)->[transfer *t34],
       ->[*t34]{ ->(*f3), ->(busy4 *b4) };
(*b4){ <-[claim_track *ct1]<-(*f1),         ->[*ct1]->(c1)->[transfer *t41],
       ->[*t41]{ ->(*f4), ->(*b1) }.

Dr Philippe A. MARTIN