快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
定义为连接点(Join Point)的pointcut。你还可以看到我们使用了bean(purchseItem) pointcut表达限定我们正在拦截哪个bean。通过用应用于不同过滤器链的不同bean名创建GenericProcessImpl的另一个实例,我们可以定义多个流程。它还包含了对实现为Aopaliance拦截器的活动过滤器的引用。默认的,过滤器按照从顶置底的顺序排列,然而为了更清楚,我们还可以使用order属性。

第二部分(第30行)——通过定义ActivityFilterInterceptor的三个实例来配置活动拦截器。每个实例将被注入后面定义的相应POJO活动bean和事实属性。事实属性定义了一个简单的规则机制,允许我们描述一个简单的条件,基于此,下面的活动将被允许或不允许执行。例如:validateItemFilter定义了 “!VALIDATED_ITEM”事实规则,它将被解释为:如果VALIDATED_ITEM事实还未被注册在事实注册表中,则允许调用活动。只要validatItemActivity执行了,这一事实将被注册在事实注册表中:如果这一事实还未注册,它将允许这一活动执行;如果事实已经注册,它将在流程与同一执行上下文一起重新提交时保护该活动不会被重复执行。

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

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

第三部分(第47行)——为我们的流程配置三个POJO活动。

ActivityFilterInterceptor——它所做的所有事情就是调用底层POJO活动并把该活动返回的事实进行注册(第53 行),并且可以让POJO活动对事实注册表(Fact Registry)或流程的任何其他底层架构组件的地点保持未知(请见下面代码片断)。可是正如我们后面将要看到的,这一拦截器本身的调用是根据每个拦截器配置中所描述的事实规则由AspectJ advice所控制的(第二个AOP层),从而控制各个活动的执行。

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

各个POJO活动简单地返回它们要注册的所有事实的String数组,然后由自己的拦截器将其注册到事实注册表中(见上面代码片断)。

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

TransitionGovernorAspect——是一个AspectJ组件,拦截对每个Spring AOP拦截器(代表各个活动)的调用。它是通过使用Around advise做到这一点的,在其中它对事实规则和当前事实注册表进行比较,就执行或跳过下面的活动拦截器调用做出决策。可以通过调用它自己的invocation对象(ProceedingJoinPoint thisJoinPoint)的proceed(..)方法做到这一点,或者调用拦截过滤器的invocation对象(MethodInvocation proxyMethodInvocation)的proceed(..)方法来做到这一点。

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

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

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

由于它是用AspectJ aspect实现的,我们需要在META-INF/aop.xml中提供配置(见下面配置片断)。

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

因为我们要使用装载时AOP,我们需要在Spring配置中注册编织器。我们通过使用context名字空间来做到这一点:

此时,我们已经做好测试准备了。正如你所见,测试没有什么特殊的,其步骤是:

获得ApplicationContext

获得GenericProcess对象

创建一个事实注册列表

创建对象(在我们的用例中是Map),代表输入数据以及执行上下文

调用process方法

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

由于我们使用的是AspectJ装载时编织,因此需要提供-javaagent选项作为我们的VM参数。

VM参数是:

-javaagent:lib/spring-agent.jar

spring-agient.jar已经存在于lib目录中了。

在执行之后你应该看到类似下面的输出:

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

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

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

正如你从该测试所看到的,初始的事实列表是空的,但是如果你用已有事实填充它,那么流程流将被改变。

试着把给注册表增加事实这行代码的注释去掉。

在你的测试中的把如下代码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号