We may have the concept of workflow in many kinds of projects, and of different scales. There are many well known workflow projects, including Microsoft .NET WF, JBPM by JBOSS, etc. Both of these workflow engines support state workflow, but when working on another project, I noticed that none of these can fit into my requirement, as what I needed was a multi-state workflow engine.
Why do I call it multi-state? At a particular time, one workflow instance should only have one state. However the instance may have multiple aspects, and for each aspect, it can have a separate state. For example, a workflow instance represents a task that need to be done by multiple roles in parallel. One role may see this task at state A, while at the same time, another role may see this task at state B. So in fact, at a particular time, a workflow instance has a State Set associated with it.
So I came across an idea to write a lightweight workflow engine my self. The main feature includes:
- Allow multiple states associated with a workflow instance at a certain stage.
- Lightweight – No XML, pure code and annotation driven.
- Support workflow instance persistence. Workflow context can be persisted into database anytime, and reloaded back into memory.
The project is setup in GitHub – https://github.com/shigengyu/Hyperion. It is in the initial stage, and more introduction will come out later.