`

作为spring beans的工作流组件

    博客分类:
  • Java
阅读更多
 作为spring beans的工作流组件<o:p></o:p>
SpringApplicationContext是从接口BeanFactory继承的,它被用来作为在spring容器内实际的控制实体和容器。用来负责对一组作为spring beans的一组bean的初始化,配置和生命期管理。我们通过装配在一个基于XML的配置文件中的spring beans来配置ApplicationContext。这个配置文件说明了spring beans互相协作的本质特点。这样,用spring的术语来说,与其他spring beans交互的spring beans就被叫着协作者(collaborators)。缺省情况下,spring beans是作为单例存在于ApplicationContext中的,但是,单例的属性能够被设置为false,从而有效地改变他们在spring中调用原型模式时的行为。如下面的配置文件所示:<o:p></o:p>
    <bean id="defaultErrorHandler" <o:p></o:p>
       class="com.gsta.eshore.framework.jcf.JCFErrorHandler"/> <o:p></o:p>
<bean id="simpleProcessor" class="com.gsta.eshore.framework.jcf.SequenceProcessor" ><o:p></o:p>
       <property name="activities"><o:p></o:p>
           <list><o:p></o:p>
               <ref bean="command1"/><o:p></o:p>
              <ref bean="command2"/><o:p></o:p>
              <ref bean="command3"/><o:p></o:p>
           </list><o:p></o:p>
       </property><o:p></o:p>
       <property name="defaultErrorHandler"><o:p></o:p>
           <ref bean="defaultErrorHandler"></ref><o:p></o:p>
       </property><o:p></o:p>
    </bean><o:p></o:p>
<o:p> </o:p>
将工作流组件实施成spring beans有以下两种作用:<o:p></o:p>
一是容易进行单元测试和很大程度上可重用能力。IoC容器的特点明显地提供了有效的单元测试。使用像spring这样的Ioc容器,在测试期间,协作者之间的依赖能够容易的用假的替代者替代。<o:p></o:p>
二是可重用能力是通过像XSL转换这样的工作流活动实现的。一个被抽象成工作流活动的XSL转换现在能够被任何处理XSL转换的工作流所重用。<o:p></o:p>
Spring控制了一些操作者以一种工作流的方式交互。关键接口如下:<o:p></o:p>
Command 封装了工作流中一个单步业务逻辑;<o:p></o:p>
Request:在工作流活动之间传递具参数的对象。实现了这个接口的对象负责维护对象在工作流转换中从一个活动转换到另一个活动的状态;<o:p></o:p>
Response:封装了执行Command后返回的结果;<o:p></o:p>
ErrorHandler:提供错误处理的回调方法;<o:p></o:p>
BaseProcessor:描述一个作为主工作流线程的执行者的bean<o:p></o:p>
<o:p> </o:p>
SequenceProcessor类是一个对顺序模式建模的具体子类。有3Command被连接到工作流处理器,工作流处理器将顺序执行这3Command。同样更多的BaseProcessor接口的实现也是可以想象得到的。可以开发其他工作流处理过程子类来控制不同的工作流类型,例如,另一种像并行切割模式那样有着变化的执行路径的工作流。对于简单工作流来说,因为活动的顺序是预先决定了的,所以SequenceProcessor是好的选择。<o:p></o:p>
对于使用基于spring的简单工作流的实现来说,排他选择模式是另一个好的选择。例如RunByResultProcessor类,根据Command执行的结果来决定下一个将要执行的Command,例如在执行完Command1之后可以决定执行哪一个Command<o:p></o:p>
下面看看SequenceProcessor做了些什么,由于RunByResultProcessor与之类似,在此省略介绍。<o:p></o:p>
public void doActivities(Request request,Response resp) throws Exception {<o:p></o:p>
        if (logger.isDebugEnabled())<o:p></o:p>
            logger.debug(getBeanName() + " SequenceProcessor is running..");<o:p></o:p>
       Map response = resp.getValues();<o:p></o:p>
       Map params = request.getValues();<o:p></o:p>
        List activities = getActivities();<o:p></o:p>
        for (Iterator it = activities.iterator(); it.hasNext();) {<o:p></o:p>
            Component component = (Component) it.next();<o:p></o:p>
            if (logger.isDebugEnabled())<o:p></o:p>
                logger.debug("正在运行中的活动是 : " + component.getBeanName());<o:p></o:p>
            try {<o:p></o:p>
              component.execute(params, response);<o:p></o:p>
            } catch (Throwable th) {<o:p></o:p>
                ErrorHandler errorHandler = component.getErrorHandler();<o:p></o:p>
                if (errorHandler == null) {<o:p></o:p>
                    logger.info("no Errorhandler for Command "+component.getBeanName() +", run default error handler and abort Command ");<o:p></o:p>
                    ErrorHandler processorerrorHandler=getDefaultErrorHandler();<o:p></o:p>
                    if(processorerrorHandler == null){<o:p></o:p>
                    logger.info("no error handler for this processor, run JCFErrorHandler " + "handler and abort processing ");<o:p></o:p>
                    //执行全局的default ErrorHandler;<o:p></o:p>
                    ((ErrorHandler)ContextServiceLocator.getInstance().getBean("defaultErrorHandler")).handleError(resp, th);<o:p></o:p>
                    }else{<o:p></o:p>
                        // 执行processor级的ErrorHandler;<o:p></o:p>
                       processorerrorHandler.handleError(resp, th);<o:p></o:p>
                    }<o:p></o:p>
                  <o:p></o:p>
                } else {<o:p></o:p>
                    logger.info("run Command Errorhandler and continue");<o:p></o:p>
//                  执行Component级的ErrorHandler;<o:p></o:p>
                    errorHandler.handleError(resp, th);<o:p></o:p>
                }<o:p></o:p>
            }<o:p></o:p>
        }<o:p></o:p>
        logger.debug(getBeanName() + " SequenceProcessor is done.");<o:p></o:p>
    }<o:p></o:p>
                   SequenceProcessor关键代码<o:p></o:p>
<o:p> </o:p>
由上面的代码可见,SequenceProcessor按照顺序执行
分享到:
评论

相关推荐

    工作流解析工作流解析

    在工作流场景中,Spring beans作为工作流组件,容器负责创建、管理和协调这些组件,使得流程的执行变得更加简洁。 Spring中的ApplicationContext接口是BeanFactory的扩展,它是容器的主要接口,用于管理和获取容器...

    mybatis3+spring+springMVC4整合jar包

    这个整合包包含的组件可以无缝对接,使得数据访问、业务逻辑处理以及用户界面展现能够高效协同工作。 【描述】"mybatis3+spring+springMVC4整合jar包,导入即可完美使用"意味着开发者只需要将这些jar文件添加到项目...

    工作流引擎(activiti)JAR包

    工作流引擎是软件系统中用于自动化执行业务流程的关键组件,其中Activiti是一个广泛使用的开源工作流引擎,尤其在Java开发环境中。本资源提供的是Actviti 5.22.0版本,它与Spring框架和MySQL数据库进行了集成,旨在...

    spring-beans

    Spring框架是Java领域中不可或缺的一部分,尤其在企业级应用开发中,Spring Beans作为其核心组件,扮演着至关重要的角色。本文将深入探讨Spring Beans的原理、配置以及它如何与Spring框架的其他部分协同工作。 一、...

    Spring 4.0.4 开发包

    3. **Spring Beans**:与Core组件紧密相关,主要处理Bean的定义、实例化、初始化、装配以及销毁。 4. **Spring Context**:构建在Core和Beans之上,提供了更丰富的上下文环境,可以管理应用的全部Bean,并提供国际...

    activiti工作流开发jar包43个

    Activiti工作流是一个开源的工作流程管理系统,用于自动化业务流程。这个压缩包包含了43个相关的JAR文件,这些文件是开发Activiti应用的基础组件。在本文中,我们将深入探讨其中的关键组件及其作用。 1. `activiti-...

    spring最基本jar

    这个“spring最基本jar”可能包含了Spring框架的基础组件,如Spring Core、Spring Beans、Spring AOP等,是学习和使用Spring框架的基础。理解并掌握这些知识点,能够帮助开发者有效地利用Spring框架构建高效、稳定的...

    Spring源码解析.zip

    本压缩包“Spring源码解析”提供了对Spring框架核心组件——IOC(Inversion of Control,控制反转)、AOP(Aspect Oriented Programming,面向切面编程)以及Transaction(事务管理)的源码分析,帮助开发者更全面地...

    spring所需要的所有jar

    5. **Spring ORM**:与DAO模块协同工作,提供对流行ORM框架如Hibernate、JPA、MyBatis等的集成。 6. **Spring Web**:包含了用于构建Web应用的组件,如DispatcherServlet,它是Spring MVC的核心,负责处理HTTP请求...

    spring基础jar包.zip

    Spring框架作为Java企业级开发的主流选择,其强大的功能和灵活性深受开发者喜爱。在Spring项目中,jar包是构建和运行的基础,它们包含了Spring框架的所有核心组件和依赖。本文将深入探讨"spring基础jar包.zip"中的...

    Spring 所有jar包

    Spring框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在Java开发中,...

    springframework.zip

    Spring框架通常会发布一系列的JAR文件,每个文件对应框架的不同模块,如Spring Core、Spring Beans、Spring AOP等。开发者可以将这些JAR文件添加到项目的类路径中,以便在项目中使用Spring的功能。 在Spring ...

    spring框架最新完整jar包版及操作说明-5.3.1.zip

    这个最新的jar包包含了Spring框架的所有核心组件,包括Spring Core、Spring Beans、Spring AOP、Spring JDBC、Spring ORM、Spring Web以及Spring MVC等。 1. **Spring Core**: 是Spring框架的基础,提供依赖注入...

    跟我学spring3

    Spring框架作为Java开发中的核心组件,其重要性不言而喻,它为企业级应用提供了一种模块化、可测试和灵活的解决方案。 Spring的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...

    spring3.0.5-dist.rar

    Spring是一个开源的轻量级Java框架,它简化了企业级应用的开发工作,通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)实现了松耦合。Spring框架由多个模块组成,包括...

    最新版完整包 spring-5.3.9.RELEASE-dist.zip

    11. **Spring Batch**:对于批量处理和工作流任务,Spring Batch 提供了一个全面的解决方案,包括事务管理、错误处理和重试机制。 12. **Spring Integration**:Spring Integration 提供了连接不同系统和协议的能力...

    spring2.0和spring2.5 及以上版本的jar包区别 spring jar 包详解

    Spring框架作为一款流行的Java应用开发框架,在不同的版本之间,其提供的功能、性能以及兼容性等方面都有所差异。本文将重点介绍Spring2.0与Spring2.5及以上版本之间的区别,特别是关于它们的jar包组成及其使用场景...

    spring开发指南

    Spring作为一款强大的开源应用框架,广泛应用于企业级Java开发中,为开发者提供了众多便利。本指南旨在帮助开发者理解并掌握Spring的核心功能,提升开发效率。 Spring框架的主要特点是依赖注入(Dependency ...

    spring与jbpm的集成包(符集成方法)

    Spring 集成后,可以利用 Spring 容器管理的工作流定义,便于动态加载和更新流程模型。 6. **事件监听**:Spring 可以注册监听器来捕获和处理 JBPM 的各种事件,如流程启动、结束、任务分配等,实现更精细的控制和...

Global site tag (gtag.js) - Google Analytics