- 浏览: 185982 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
梦行Monxin商城系统:
最困难的事情就是认识自己
分享我的大型Java多用户商城系统开发的心得和困难 -
梦行Monxin商城系统:
只要坚持下去,总会有意想不到的收获。
java多用户商城系统LegendShop开发指南 -
onecan:
听从了大家的意见,LegendShop已经把Hibernate ...
分享我的大型Java多用户商城系统开发的心得和困难 -
onecan:
最新版本已经不是免费的了
Java多用户商城,给你一个创业的平台 -
www314599782:
架构很不错我要把它写到我的项目里去
分享我的大型Java多用户商城系统开发的心得和困难
作为spring beans的工作流组件<o:p></o:p>
Spring的ApplicationContext是从接口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类是一个对顺序模式建模的具体子类。有3个Command被连接到工作流处理器,工作流处理器将顺序执行这3个Command。同样更多的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按照顺序执行
发表评论
-
dao2
2014-09-24 09:47 0dao1212 -
resume-mr wang
2014-08-05 15:59 0f aaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... -
legendshop dao
2014-04-14 09:20 0legendshop dao -
ControlDataPopulate
2014-01-06 18:35 0package util; import java.io.B ... -
Excel2SqlConvertor
2014-01-06 18:34 0import java.io.File; import jav ... -
test
2013-01-07 23:26 0dfgdfg -
java多用户商城系统LegendShop开发指南
2012-09-08 18:33 16353LegendShop是基于JAVA编程语言开发的开源电子商 ... -
Java多用户商城LegendShop功能说明
2012-09-08 18:13 1778... -
用Spring Cache 实现Hibernate的二级缓存机制
2012-05-14 12:40 4435因为系统中同时采用Hibernate和Jdbc两种技术, ... -
答复: 大型Java多用户商城系统设计开发的心得和困难
2012-01-04 13:35 2170evanzzy 写道非要拿掉Hiber ... -
分享我的大型Java多用户商城系统开发的心得和困难
2012-01-03 15:37 16390看到别的朋友在ITEYE上发表的“开发电子商务网站技术选型“有 ... -
Java多用户商城,给你一个创业的平台
2011-06-05 11:08 8873现在网上开店的趋 势是越来越多了,一个好的商城系统是如虎添翼。 ... -
关于一个java网购平台的技术方案
2010-05-02 23:38 1756最近用Java做了一个网上购物平台,其技术方案终于写完了 ... -
关于产品动态属性的做法
2010-04-14 14:17 2766最近在做一个电子商务网站( http://www ... -
[Java][JavaScript]字符串数组与字符串之间的互转
2010-02-24 15:49 63291、Java 1-1、字符串数组=>字 ... -
Eclipse WTP 入门
2010-02-24 15:43 2207(转)WTP (Web Tools Platform) 是一个 ... -
JPA annotation 参考
2010-02-24 15:35 1265(转)Table Table用来定义entity主表的name ... -
JMS - javax.jms.IllegalStateException in JBOSS问题之解决
2007-07-07 17:38 4319在jms中的代码如下: java 代码 ... -
设计模式之Command
2007-06-24 12:16 1434原作:板桥里人 Command ... -
struts+spring+hibernate通用分页方法 (2)
2007-06-23 12:07 4119接上: 在struts的Action中: java 代码 ...
相关推荐
在工作流场景中,Spring beans作为工作流组件,容器负责创建、管理和协调这些组件,使得流程的执行变得更加简洁。 Spring中的ApplicationContext接口是BeanFactory的扩展,它是容器的主要接口,用于管理和获取容器...
这个整合包包含的组件可以无缝对接,使得数据访问、业务逻辑处理以及用户界面展现能够高效协同工作。 【描述】"mybatis3+spring+springMVC4整合jar包,导入即可完美使用"意味着开发者只需要将这些jar文件添加到项目...
工作流引擎是软件系统中用于自动化执行业务流程的关键组件,其中Activiti是一个广泛使用的开源工作流引擎,尤其在Java开发环境中。本资源提供的是Actviti 5.22.0版本,它与Spring框架和MySQL数据库进行了集成,旨在...
Spring框架是Java领域中不可或缺的一部分,尤其在企业级应用开发中,Spring Beans作为其核心组件,扮演着至关重要的角色。本文将深入探讨Spring Beans的原理、配置以及它如何与Spring框架的其他部分协同工作。 一、...
3. **Spring Beans**:与Core组件紧密相关,主要处理Bean的定义、实例化、初始化、装配以及销毁。 4. **Spring Context**:构建在Core和Beans之上,提供了更丰富的上下文环境,可以管理应用的全部Bean,并提供国际...
Activiti工作流是一个开源的工作流程管理系统,用于自动化业务流程。这个压缩包包含了43个相关的JAR文件,这些文件是开发Activiti应用的基础组件。在本文中,我们将深入探讨其中的关键组件及其作用。 1. `activiti-...
这个“spring最基本jar”可能包含了Spring框架的基础组件,如Spring Core、Spring Beans、Spring AOP等,是学习和使用Spring框架的基础。理解并掌握这些知识点,能够帮助开发者有效地利用Spring框架构建高效、稳定的...
本压缩包“Spring源码解析”提供了对Spring框架核心组件——IOC(Inversion of Control,控制反转)、AOP(Aspect Oriented Programming,面向切面编程)以及Transaction(事务管理)的源码分析,帮助开发者更全面地...
5. **Spring ORM**:与DAO模块协同工作,提供对流行ORM框架如Hibernate、JPA、MyBatis等的集成。 6. **Spring Web**:包含了用于构建Web应用的组件,如DispatcherServlet,它是Spring MVC的核心,负责处理HTTP请求...
Spring框架作为Java企业级开发的主流选择,其强大的功能和灵活性深受开发者喜爱。在Spring项目中,jar包是构建和运行的基础,它们包含了Spring框架的所有核心组件和依赖。本文将深入探讨"spring基础jar包.zip"中的...
Spring框架是Java开发中最常用的轻量级开源框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在Java开发中,...
Spring框架通常会发布一系列的JAR文件,每个文件对应框架的不同模块,如Spring Core、Spring Beans、Spring AOP等。开发者可以将这些JAR文件添加到项目的类路径中,以便在项目中使用Spring的功能。 在Spring ...
这个最新的jar包包含了Spring框架的所有核心组件,包括Spring Core、Spring Beans、Spring AOP、Spring JDBC、Spring ORM、Spring Web以及Spring MVC等。 1. **Spring Core**: 是Spring框架的基础,提供依赖注入...
Spring框架作为Java开发中的核心组件,其重要性不言而喻,它为企业级应用提供了一种模块化、可测试和灵活的解决方案。 Spring的核心特性包括依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented ...
Spring是一个开源的轻量级Java框架,它简化了企业级应用的开发工作,通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP)实现了松耦合。Spring框架由多个模块组成,包括...
11. **Spring Batch**:对于批量处理和工作流任务,Spring Batch 提供了一个全面的解决方案,包括事务管理、错误处理和重试机制。 12. **Spring Integration**:Spring Integration 提供了连接不同系统和协议的能力...
Spring框架作为一款流行的Java应用开发框架,在不同的版本之间,其提供的功能、性能以及兼容性等方面都有所差异。本文将重点介绍Spring2.0与Spring2.5及以上版本之间的区别,特别是关于它们的jar包组成及其使用场景...
Spring作为一款强大的开源应用框架,广泛应用于企业级Java开发中,为开发者提供了众多便利。本指南旨在帮助开发者理解并掌握Spring的核心功能,提升开发效率。 Spring框架的主要特点是依赖注入(Dependency ...
Spring 集成后,可以利用 Spring 容器管理的工作流定义,便于动态加载和更新流程模型。 6. **事件监听**:Spring 可以注册监听器来捕获和处理 JBPM 的各种事件,如流程启动、结束、任务分配等,实现更精细的控制和...