快速业务通道

使用Spring AOP和AspectJ编排工作流 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

使用Spring AOP和AspectJ编排工作流

时间:2011-03-14 infoq Oleg Zhurakousky 译:宋玮

1.简介

如果你需要实现一个流式的流程,特别是嵌入的,并且你想让其易于配置、扩展、管理和维护。你是否需要一个功能齐备的BPM引擎呢:引擎都有自己的抽象负载,它对于你正在寻找的简单流程编排来说似乎过于笨重了;或者有什么轻量级的替代方案可以使用,让我们不必采用一个功能齐备的BPM引擎?本文说明了如何使用面向方面编程(AOP)技术来构建并编排高可配置、可扩展的轻量级嵌入式流程流(process flow)。目前例子是基于Spring AOP和Aspect J的,其他AOP技术也可实现同样的结果。

2.问题

在我们继续深入讨论之前,首先我们需要更好地理解实际的问题,然后试着把我们对问题的理解与一套可用模式、工具和/或技术进行匹配,看看是否能找到一个合适的。我们的问题就是一个流程(process)本身,那么让我们好好理解一下它吧。什么是流程?流程是经过协调的活动的集合,这些活动致使一组目标得到实现。活动(activity)是指令执行的一个单元,它是一个流程的基本组成部分。每个活动操作一部分共享数据(上下文),以实现流程整体目标的一部分。已被实现的流程目标的各部分代表既成的事实(facts),这些事实被用来协调剩余活动的执行。这实质上把流程重新定义为一个在事实集合上进行操作的规则模式,用来协调定义该流程的那些活动的执行。为了让流程协调活动执行,它必须知道如下属性:

活动——定义流程的活动

共享数据/上下文——定义共享数据的机制和活动所完成的事实

转移规则——基于已注册的事实,定义前一个活动结束之后跟着是哪个活

执行决策——定义执行转移规则的机制

初始化数据/上下文(可选)——由该流程操作的共享数据的初始化状态

下图显示了流程的高层结构:

使用Spring AOP和AspectJ编排工作流 - 编程入门网

我们现在可以用如下需求集合来形式化一个流程:

定义把流程装配为一个活动集合的机制

定义各个活动

定义共享数据的占位符

定义在流程范围内的这些活动协调执行的机制

定义转移规则和执行决策机制,根据由活动注册的事实执行转移规则

使用Spring AOP和AspectJ编排工作流(2)

时间:2011-03-14 infoq Oleg Zhurakousky 译:宋玮

3.架构和设计

我们定义架构将从解决头4个需求开始:

定义把流程装配为一个活动集合的机制

定义各个活动

定义共享数据的占位符

定义在流程范围内的这些活动协调执行的机制

活动是一个无状态工作者,它应该接收一个包含一些数据(上下文)的token。活动应该通过读写来操作这一共享的数据token,同时执行由这个活动所定义的业务逻辑。共享的数据token定义了一个流程的执行上下文。

为了坚持前面我们制定的轻量级原则,没有理由不把我们的活动定义为实现了POJI(Plan Old Java Interfaces)的POJO(Plain Old Java Objects)。

这里是Activity接口的定义,它只有一个process(Object obj)方法,其输入参数代表了一个共享数据(上下文)的占位符。

public interface Activity {    public void process (Object data); }

一个共享数据的占位符可以是结构化或非结构化(比如Map)对象。这完全取决于你。为简单起见,通常我们的Activity接口把它定义为java.lang.Object,但是在真实环境中,它或许被表达为某种结构化对象类型,流程的所有参与者都知道这一结构。

流程

因为流程是活动的集合,我们需要定出装配及执行这种集合的机制。

有许多方式可以达成这一目的。其中之一是把所有活动插入到某种类型的有序集合中,按其预先定义好的顺序迭代它调用每个活动。这种方法的可配置性和可扩展性明显很差,因为流程控制和执行的所有方面(aspects)都将被硬编码。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号