XFLOW2 Process Management System


Last updated: 2005-01-20

Why yet another workflow engine? (Using my own template)

1. I decided to centralize workflow logic (mostly simple) within an application, so I started looking for a small and simple embeddable workflow engine.
2. I looked at many frameworks and before Xflow I have tried OSWorkflow, jBpm.
3. They are supposed to address my needs but I was not happy with them because configuration difficulties, some obscure workflow definition languages, or over-reliance on scripting.

Why XFlow2?

4. I was inspired by simple workflow definition language in XFlow, which seems to be good enough in many cases and decided to give XFlow a shot. However upon close source code examination I have discovered many things in the implementation ( viva Open Source! ) which made it unusable for me. Therefore I decided to improve its implementation. At some point in future XFlow2 codebase will be merged with original XFlow, but now XFlow2 is a fork and its implementation is VERY different, but API is almost the same. "Almost" is a key word here and the main reason for not merging our codebases.

The differences:

XFLOW2 XFLOW

Works with any RDBMS if appropriate changes will be made to iBatis mapping files.
At this moment works with Postgres and HSQL, MySQL

Works only with HSQL DB
Externalized SQL in iBatis mapping files Hardcoded SQL in source code
Everything has workable defaults but all that can be overriden in config file. Hardcoded queue names and similar stuff
Works just fine as embedded workflow engine. Works only within EJB container as a Message Driven Bean
Much cleaner code because of using proxy classes to handle transaction and iBatis session propagation.  
Workload objects handled with XML (en|de)coder, that makes long term persistence more reliable and provides human readable database fields. Workload objects stored in standard Java serialized form and hex coded that is not suitable for long term persistence, makes debugging and direct use of Xflow databases very difficult.
Not tested yet, should work . At this moment XFlow2 intended for embedded use. Supports SOAP connectors/messages
Workflow ID is a simply Integer Workflow ID is a particular WorkflowID object
Workitem ID is a simply Integer Workitem ID is a Workitem ID object
Protocol classes use collection interfaces rather than exact classes ( List vs. Vector )  
Entire public API exposed in WorkflowEngineWrapper class  
Protocol objects are simply data structures (DTO) Protocol objects implement server side service method.