使用Spring AOP和AspectJ编排工作流 - 编程入门网
们还可以用某种非传统的方式来考虑流程:假定流程是一个行为较少的抽象,并没有具体实现。可是,从一个活动过滤器(Activity Filters)链中过滤这种抽象,可以定义这个流程的性质、状态和行为。
假定我们有一个叫做GenericProcess的类,其定义了process(..)方法:
如果我们直接传递输入对象来调用process(..)方法,不会发生什么事情,因为process(..)方法没有做什么事情,上下文的状态将保持非修改状态。但是如果我们试图在调用process(..)之前找到一种方法来引入活动,并让该活动修改这个输入对象,那么process(..)方法仍将保持不变,但是因为输入对象是由活动预先处理过的,流程上下文的整体结果将会改变。 这种把拦截过滤器(Intercepting Filter)应用到目标资源的技术在拦截过滤模式中有很好的文档记录,在今天的企业级应用中被广泛使用。典型的例子是Servlet过滤器(Filters)。 拦截过滤器模式用一个过滤器封装了已有应用资源,这个过滤器拦截了请求的接收及响应的传递。一个拦截过滤器可以前置处理(pre-process)或重定向(redirect)应用请求,而且可以后置处理(post-process)或替换(replace)应用响应的内容。拦截过滤器还可以改变顺序,无需改变源代码就可以把一个分离的、可声明部署的服务链加入到现有资源——http://java.sun.com/blueprints/patterns/InterceptingFilter.html。 过去,这一架构通常用来解决非功能关注点(concerns),比如安全、事务等等……但是你可以清楚地看到,通过拦截过滤器(代表各个活动)链来装配类流程结构,同样的方法也可以很容易被应用来解决应用的功能特性。 下图显示了对于一个流程(Process)的调用如何被过滤器链拦截,其中每个过滤器都与流程的某个活动(Activity)相关联,这样,实际的目标流程组件没有什么事情可干,使之成为一个空的、可重用的目标对象。改变该过滤器链你就得到了自己一个不同的流程。 使用Spring AOP和AspectJ编排工作流(3)时间:2011-03-14 infoq Oleg Zhurakousky 译:宋玮唯一留下来要做的事情就是看看有没有一个框架,可以帮助我们以优雅的方式装配类似这样的东西。 基于代理的(Proxy-based)Spring AOP看起来是理想的选择,因为它给我们提供了简单的结构和最重要的东西——执行机制。它将使我们能够定义一个有序拦截过滤器集合,来代表一个给定流程的各个活动。输入的流程请求将会由这些过滤器所代理,用活动过滤器(Activity Filters)中的行为实现来装饰流程。 这样留给我们的只有下面唯一的需求: 定义转移规则和执行决策机制,根据由活动注册的事实执行转移规则 基于代理的过滤器的美妙之处是转移机制本身。每当我们调用一个目标对象(流程)时,拦截过滤器将一个接一个的被代理机制所调用。这是自动的,而且在每个活动必须被调用的情况下工作得相当好。但是实际并不总是这种情况。早先我们在问题定义中描述之一是:“已经被实现的流程目标的那部分,表示已完成的事实,它被用来协调剩余活动的执行”——这意味着一个活动完成并不是必须转移到另一个活动。在实际的流程中,转移必须严格地基于前一个活动已完成和/或未完成的事实。这些事实必须向共享数据占位符注册,这样它们就可以被审核。 完成这一点可以简单到在我们的拦截过滤器中放一个IF语句:
但是这将产生多个问题。在我们研究是些什 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |