blob: fbfc17aace15cd6e50c327663dcc2f8c439e582b [file] [log] [blame]
eZ Component: Workflow, Design
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:Author: Sebastian Bergmann
:Revision: $Revision$
:Date: $Date$
Workflow Model
==============
Activities and Transitions
--------------------------
The workflow model is activity-based [FG02]. The activities that are to be
completed throughout the workflow and the transitions between them are mapped to
the nodes and edges of a directed graph. This choice was made to faciliate the
application of the Graph-Oriented Programming paradigm for the implementation.
Using a directed graph as the foundation for the workflow model makes it
possible to define the syntax of the workflow description language using the
formalism of graph grammars [DQZ01].
Graph Traversal and Execution Strategy
--------------------------------------
The execution of a workflow starts with the graph's only Start node. A graph may
have one or more End nodes that explicitly terminate the workflow execution.
After a node has finished executing, it can activate one or more of its possible
outgoing nodes. Activation adds a node to a set of nodes that are waiting for
execution. During each execution step, a node from this set is executed. When
the execution of a node has been completed, the node is removed from the set.
The workflow execution is implicitly terminated when no nodes are activated
and no more nodes can be activated.
State and Workflow Variables
----------------------------
The workflow model supports state through the concept of workflow variables.
Such a variable can either be requested as user input (from an Input node) or be
set and manipulated through the VariableSet, VariableAdd, VariableSub,
VariableMul, VariableDiv, VariableIncrement, and VariableDecrement nodes.
While a VariableSet node may set the value of a workflow variable to any type
that is supported by PHP, the other variable manipulation nodes only operate on
numeric values.
Variables are bound to the scope of the thread in which they were defined. This
allows parallel threads of execution to use variables of the same name without
side effects.
When the execution of a workflow reaches an Input node (see above), the
execution is suspended until such time when the user input has been provided and
the execution can be resumed.
Control Flow
------------
The control flow semantics of the workflow model draws upon the workflow
patterns from [BK03]. The Sequence, Parallel Split, Synchronization, Exclusive
Choice, Simple Merge, Multi-Choice, Synchronizing Merge, and Discriminator
workflow patterns are all directly supported by the workflow model.
Exclusive Choice and Multi-Choice nodes have branching conditions attached to
them that operate on workflow variables to make their control flow decisions.
Action Nodes and Service Objects
--------------------------------
So far we have only discussed nodes that control the flow and that can
manipulate workflow variables. We are still missing a type of nodes that
actually performs an activity. This is where the Action node comes into play.
When the execution of a workflow reaches an Action node, the business logic of
the attached service object is executed. Service Objects live in the domain of
the application into which the workflow engine is embedded. They have read and
write access to the workflow variables to interact with the rest of the
workflow.
Sub-Workflows
-------------
The workflow model supports sub-workflows to break down a complex workflow into
parts that are easier to conceive, understand, maintain, and which can be
reused.
A sub-workflow is started when the respective Sub-Workflow node is reached
during workflow execution. The execution of the parent workflow is suspended
while the sub-workflow is executing. It is resumed once the execution of the
sub-workflow has ended.
Software Design
===============
Architecture
------------
The workflow engine been designed and implemented as three loosely coupled
components. The Workflow component provides an object-oriented framework to
define workflows and an execution engine to execute them.
The WorkflowDatabaseTiein and WorkflowEventLogTiein components tie the Database
and EventLog components into the main Workflow component for persistence
and monitoring, respectively.
A workflow can be defined programmatically by creating and connecting objects
that represent control flow constructs. The classes for these objects are
provided by the Workflow Definition API. This API also provides the
functionality to save workflow definitions (ie. object graphs) to and load
workflow definitions from a data storage. Two data storage backends have been
implemented, one for relational database systems and another for XML files.
Through the Workflow Execution API the execution of a workflow definition can be
started (and resumed). The figure below shows the conceptual architecture for
the workflow engine.
+---------+ +---------+ +------------------------+
| GUI | <=> | XML | | Mail, SOAP, ... |
+---------+ +---------+ +------------------------+
/\ /\
|| ||
\/ \/
+-------------------------+ +------------------------+
| Workflow Definition API | | Workflow Execution API |
+-------------------------+ +------------------------+
/\ /\
|| ||
|| \/
|| +------------------------+
|| | Workflow Core |
|| +------------------------+
|| /\
|| ||
\/ \/
+-----------------------------------------------------+
| Data Storage |
+-----------------------------------------------------+
The idea that a workflow system should be comprised of loosely coupled
components is discussed, for instance, in [DAM01,DG95,PM99]. Manolescu
states that
"an object-oriented workflow architecture must provide abstractions
that enable software developers to define and enact how the work flows through
the system" [DAM01].
Like Manolescu's Micro-Workflow architecture, the Workflow components
encapsulate workflow features in separate components following the
Microkernel pattern which
"applies to software systems that must be able to adapt to changing
system requirements. It separates a minimal functional core from extended
functionality and customer-specific parts. The microkernel also serves as a
socket for plugging in these extensions and coordinating their
collaboration" [FB96].
The minimalistic core of the Workflow component is provides basic workflow
functionality:
- The Workflow Definition API implements an activity-based workflow model and
provides the abstractions required to build workflows.
- The Workflow Execution API implements the functionality to execute workflows.
On top of these core components other components, for instance for persistence
(suspending and resuming workflow execution), monitoring (status of running
workflows), history (history of executed workflows), and worklist management
(human-computer interface), can be implemented. Each of these components
encapsulates a design decision and can be customized or replaced.
Workflow Virtual Machine
------------------------
Given the fact that standardization efforts, e.g. XPDL [WfMC05] proposed by the
Workflow Management Coalition, have essentially failed to gain universal
acceptance [WA04], the problem of developing a workflow system that supports
changes in the workflow description language needs to be addressed.
Fernandes et. al. propose to
"split the workflow system into two layers: (1) a layer implementing a
Workflow Virtual Machine, which is responsible for most of the workflow system
activities; and (2) a layer where the different workflow description languages
are handled, which is responsible for making the mapping between each workflow
description language and the Workflow Virtual Machine" [SF04].
The Workflow component's Workflow Execution API implements such a workflow
virtual machine and isolates the executing part of a workflow management system,
the backend, from the parts that users interact with, the frontend. This
isolation allows for the definition of a backend language to describe exactly
the workflows that are supported by the executer and its underlying workflow
model. This backend language is not the workflow description language users use
to define their workflows. They use frontend languages that can be mapped to the
system's backend language.
Graph-Oriented Programming
--------------------------
Graph-Oriented Programming [JBOSS] implements the graphical representation and
the wait states of a process language in an object-oriented programming
language. The former can be achieved by providing a framework of node classes.
Objects of these classes represent the nodes in the process graph, relations
between these objects represent the edges. Such an object graph can then be
traversed for execution. These executions need to be persistable, for instance
in a relational database, to support the wait states.
The aforementioned node classes implement the Command design pattern [GoF94] and
encapsulate an action and its parameters.
The executing part of the workflow engine is implemented in an Execution class.
An object of this class represents a workflow in execution. The execution object
has a reference to the current node. When the execution of a workflow is
started, a new execution object is created and the current node is set to the
workflow's start node. The execute() method that is to be provided by the node
classes is not only responsible for executing the node's action, but also for
propagating the execution: a node can pass the execution that arrived in the
node to one of its leaving transitions to the next node.
Like Fowler in [MF05], the authors of the JBoss jBPM manual [JBOSS] acknowledge
the fact that current software development relies more and more on domain
specific languages. They see Graph-Oriented Programming as a means to implement
domain specific languages that describe how graphs can be defined and executed
on top of an object-oriented programming language.
In this context, a process language (like a workflow description language) is
nothing more than a set of Node classes. The semantics of each node are defined
by the implementation of the execute() method in the respective node class. This
language can be used as the backend language of a Workflow Virtual Machine. In
this lanugage, the workflow is represented as a graph of command objects.
One of the advantages of using a domain specific language that Fowler gives in
[MF05 regards the involvement of lay programmers: domain experts who are not
professional programmers but program in domain specific languages as part of the
development effort. In essence this means that a software system that provides a
domain specific language can be customized and extended without knowledge of the
underlying programming language that was used to implement it.
Summary
-------
The core of the workflow engine is a virtual machine that executes workflows
represented through object graphs. These object graphs can be created
programmatically through the software component's Workflow Definition API.
Alternatively, a workflow definition can be loaded from an XML file. Object
graph and XML file are two different representations of a workflow definition
that uses the so-called backend language of the workflow engine's core.
Arbitrary frontend languages such as the XML Process Definition Language (XPDL)
[WfMC05], for instance, can be mapped to the workflow engine's backend language.
Bibliography
============
- [BK03] Bartosz Kiepuszewski.
Expressiveness and Suitability of Languages for Control Flow Modelling in Workflows.
PhD Thesis, Faculty of Information Technology, Queensland University of Technology, Australia, 2003.
- [DAM01 Dragos-Anton Manolescu.
Micro-Workflow: A Workflow Architecture Supporting Compositional Object-Oriented Software Development.
PhD Thesis, Department of Computer Science, University of Illinois at Urbana-Champaign, USA, 2001.
- [DG95] Dimitrios Georgakopoulos and Mark F. Hornick and Amit P. Sheth.
An Overview of Workflow Management: From Process Modeling to Workflow Automation Infrastructure.
In: Distributed and Parallel Databases, Volume 3, Number 2, Pages 119--153, 1995.
- [DQZ01] Da-Qian Zhang and Kang Zhang and Jiannong Cao.
A Context-Sensitive Graph Grammar Formalism for the Specification of Visual Languages.
In: The Computer Journal, Volume 33, Number 3, Pages 186--200, 2001.
- [FB96] Frank Buschmann and Regine Meunier and Hans Rohnert and Peter Sommerlad and Michael Stahl.
Pattern-Oriented Software Architecture -- A System of Patterns.
John Wiley \& Sons, 1996.
- [FG02] Florent Guillaume.
Trying to unify Entity-based and Activity-based workflows.
http://wiki.zope.org/zope3/TryingToUnifiyWorkflowConcepts
- [GoF94] Erich Gamma and Richard Helm and Ralph Johnson and John Vlissides.
Design Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley, 1994.
- [JBOSS] The JBoss Project.
JBoss jBPM: Workflow and BPM Made Practical.
http://docs.jboss.com/jbpm/v3/userguide/graphorientedprogramming.html
- [MF05] Martin Fowler.
Language Workbenches: The Killer-App for Domain Specific Languages?
June, 2005.
http://martinfowler.com/articles/languageWorkbench.html
- [PM99] Peter Muth and Jeanine Weisenfels and Michael Gillmann and Gerhard Weikum.
Integrating Light-Weight Workflow Management Systems within Existing Business Environments.
In: Proceedings of the 15th International Conference on Data Engineering, March 1999, Sydney, Australia.
- [SF04] Sérgio Fernandes and João Cachopo and António Rito-Silva.
Supporting Evolution in Workflow Definition Languages.
In: Proceedings of the 20th Conference on Current Trends in Theory and Practice of Computer Science (SOFSEM 2004), Springer-Verlag, 2004.
- [WA04] W. M. P. van der Aalst and L. Aldred and M. Dumas and A. H. M. ter Hofstede.
Design and Implementation of the YAWL System.
In: Proceedings of the 16th International Conference on Advanced Information Systems Engineering (CAiSE 2004), June 2004, Riga, Latvia.
- [WfMC05] Workflow Management Coalition.
Workflow Process Definition Interface -- XML Process Definition Language (XPDL).
Document Number WFMC-TC-1025, 2005.