XFLOW2
Process Management System
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.
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. |
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. |