基于
Spring
的工作流的基本思想
<o:p></o:p>
Spring
是支持控制反转编程机制的一个相对新的框架。本框架把
spring
作为简单工作流引擎,将它用在了更加通用的地方。在对工作流简单介绍之后,将要介绍在基本工作流场景中基于
Spring
的工作流
API
的使用。
<o:p></o:p>
许多
J2EE
应用程序要求在一个和主机分离的上下文中执行处理过程。在许多情况下,这些后台的进程执行多个任务,一些任务依赖于以前任务的状态。由于这些处理任务之间存在相互依赖的关系,使用一套基于过程的方法调用常常不能满足要求。开发人员能够利用
Spring
来容易地将后台进程分离成活动的集合。
Spring
容器连接这些活动,并将它们组织成简单的工作流。
<o:p></o:p>
UML
(统一建模语言)活动图通常被用来作为一个机制对工作流建模。图
2
显示了一个基本的使用标准
UML
活动图对顺序工作流过程的建模过程。
<o:p></o:p>
<o:p></o:p>
<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 303.75pt; HEIGHT: 36pt" o:ole="" type="#_x0000_t75"></v:shape>
<v:imagedata o:title="" src="file:///C:\DOCUME~1\HEWENQ~1\LOCALS~1\Temp\msohtml1\01\clip_image001.emz"></v:imagedata>
<o:p> </o:p>
图
2
顺序工作流模式
<o:p></o:p>
<o:p> </o:p>
顺序工作流是一个在
J2EE
中流行的标准工作流模式。
J2EE
应用程序在后台线程中,通常需要一些顺序发生的事件或者异步事件。
<o:p></o:p>
在框架中,简单工作流被定义成不需要用户干预,以一定顺序执行的任意活动
(Command)
的集合。然而,我们并不建议将这种方式代替存在的工作流框架。在一些场景中,需要更多的用户交互,例如基于用户输入而进行的转向,连接或传输,这时,比较好的方法是配用一个单独的开源或者商业的工作流引擎。一个开源项目已经成功地将更复杂的工作流设计集成到
spring
中(如
OSWorkflow
)。
<o:p></o:p>