Hi all,
This is probably a newbie question so please be tolerant :-)
I am involved in the development of a system that has a business
process management component. The system is based on Spring, Hibernate
and Web Work 2. The question is, out of all those available BPM
engines, which ones can easily be integrated into other
infrastructures? My first impression is that BPM engines designed to be
the infrastructure itself, so that functions such as data access,
business logic and user interface are specified around it. As opposed
to using another infrastructure (in our case, Spring + Hibernate + Web
Work) where the BPM engine is merely a component.
Is this distinction real? Should BPM engines logically be the
center-piece of the system? Or am I grossly misunderstanding the issues?
--->
I feel that the best way to use a Workflow/BPM system is as a database is : something external that you access with some system users
.
Sometimes an embedded workflow engine is necessary, but in this
case, the application that embeds should dictate the infrastructure
--->
I think it should be implemented as an aspect
I have implemented a workflow engine before. I made it completely independent of the business objects etc.
However, I had to modify business facades to call into the workflow engine; for example, to start a new
process for a new request. At this point, I am thinking of doing it as an aspect in Spring, and I believe
this will work out nicely.
--->
I am currently building a project using Struts, Spring and Hibernate
with OSWorkflow. The current development build (2.8) has built-in
support for a Spring / Hibernate environment. In this case, performing
an action in the workflow can check against a set of pre-conditions,
which can refer to logic in the business layer and can then call some
functions if the conditions hold, which can also refer to business
logic. This is nice because Spring deals with the dependencies for the
conditions and functions. The end result is my business logic is protected
by the workflow engine, which prevents any action being performed in the wrong stage of the process.
The only downside of OSWorkflow is that you have to call the
workflow action by passing the action's id (an int) and a map of all
the inputs to the engine. I'm getting around this by writing an
abstraction layer that provides nice method signatures (the business
facade) for my struts actions (or any other client). These methods will
map to an action id, take all the arguments from the signature and wrap
them in a map and call the action.
I hope this is helpful.
Adam
http://www.manageability.org/blog/stuff/workflow_in_java/view
方向:分布式系统设计