BPM业务流程管理JBPM与S集成开发指南_第1页
BPM业务流程管理JBPM与S集成开发指南_第2页
BPM业务流程管理JBPM与S集成开发指南_第3页
BPM业务流程管理JBPM与S集成开发指南_第4页
BPM业务流程管理JBPM与S集成开发指南_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JBPM与Spring集成开发指南1术语工作流:全部或者部分,由计算机支持或自动处理的业务过程。“workflows”,感谢阅读系统通过运行一些软件来执行workflows感谢阅读形式(计算机化的业务规则——过程定义)驱动。工单:一次申请的提交记录,该记录具有唯一性。工单相关的概念:精品文档放心下载l精品文档放心下载派发、接收处理、回复等一系列工单处理操作。l工单统计:对各种处理工单的数量,类型进行数据统计和导出、报表打印。精品文档放心下载l谢谢阅读定处理流程。l工单日志:记录工单操作日志,有效管理日志的处理状况和责任。精品文档放心下载2感谢阅读谢谢阅读是对那些与IT应用程序、工具交互的过程,进行自动化处理。虽然,工作流技术广泛用于感谢阅读感谢阅读型的工业和制造业。3概述在人们日常生活和工作中,都将与工作流程发生密切的关系,“工作流”干预过程、谢谢阅读谢谢阅读个业务目标或者对整个业务目标的完成做贡献。应用领域广泛,比如:谢谢阅读l公司或组织内部请假或休假流程、通知分发流程等l政府政策审批流程、l网上书店图书订阅流程、发送流程等l驾照学习流程等等。都在IT感谢阅读而对过程自动化提供计算机支持。“工作流”采用计算机化后,可以大大提高工作和生活的谢谢阅读扩展对新流程的支持等。JBPM是当前优秀的开源工作流引擎。本文档是关于JBPM与Spring框架集成分析文档。包感谢阅读括:基本概念、设计要点、常见问题解答、参考资源等。本文主要介绍了集成开发的高级内容,基础知识参见:参考资料感谢阅读本文档适合所有计算机开发人员。4基本概念4.1什么是工作流“工作流精品文档放心下载与者间传递,来完成整个业务目标或者对整个业务目标的完成做贡献。同时,“工作流”可谢谢阅读能由手工组织,实际上,多数“工作流”都在IT系统中进行组织的,从而对过程自动化提精品文档放心下载供计算机支持,WFMC把工作定位在这个方向上。“工作流”定义:全部或者部分,由计算机支持或自动处理的业务过程。谢谢阅读工作流经常与“过程重组(BPR—BusinessProcessRe-engineering”联系在一起。BPR是感谢阅读精品文档放心下载是所有的BPR谢谢阅读提供了业务过程逻辑与IT感谢阅读相反,工作流技术并不只在BPR中采用,例如用于现有的业务过程中。感谢阅读“工作流管理系统(WFMS—WorkflowManagementSystem”通过管理工作活动序列,调用与谢谢阅读各种活动步骤相关的人员、IT资源,对业务过程提供自动化处理。谢谢阅读“工作流管理系统”定义:工作流管理系统是这样的一个系统,详细定义、管理并执行精品文档放心下载“workflows”workflows谢谢阅读——精品文档放心下载精品文档放心下载多种方法实现工作流管理系统,使用多种IT和通讯组件,运行环境可以从一个小的本地工感谢阅读作组到企业间。因此,WFMC参考模型从各种角度考虑工作流管理系统,希望提供各种不同感谢阅读的实现技术、运行环境。尽管实现的方法多种多样,但所有的WFMS都表现出某种共同的特性,这为不同产品间的集谢谢阅读感谢阅读如何能使其与其他各种不同的实现方法相关联。在最高层,所有的WFMS都相同的特性,即为下边的3个功能提供支持:精品文档放心下载●建立时期(Build-time)功能,定义、模拟工作流过程,及其组成活动。精品文档放心下载●运行时期(Run-time)控制功能,在运行环境中管理工作流过程,管理不同感谢阅读●运行时期与用户、IT应用程序(工具)的交互,来处理各种活动的执行。谢谢阅读下图描述WFMS的基本特性,以及上述功能间的关系:谢谢阅读4.2JBPM4.2.1介绍jBPMisaplatformforexecutableprocesslanguagesrangingfrombusinessprocessmanagemen精品文档放心下载t(BPM)overworkflowtoserviceorchestration.Therearemanyprocesslanguages.Eachoneis精品文档放心下载targetedtowardsaspecificfunctionandaspecificenvironment.jBPMallowsallofthesepro精品文档放心下载cesslanguagestobebuildnativelyontopofonesingletechnology:theProcessVirtualMachi感谢阅读ne(PVM).jBPMalreadysupports3verydifferentprocesslanguages:jPDL,WS-BPELandSeamPa精品文档放心下载geflow.Thismightexpandinthefutureasnewprocesslanguagesareaddedtoourplatform.感谢阅读jBPM(JBossBusinessProcessManagement谢谢阅读流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。精品文档放心下载jPDL是构建于jBPM框架上的流程语言之一。在jPDL中提供了任务(tasks谢谢阅读(waitstatestimersautomatedactions谢谢阅读化的流程定义,很直观地描述业务流程。jPDL可以部署于Java语言的任何应用环境下,JavaSEApplication(Swing/SWT)、感谢阅读JavaEEApplication(ApplicationServer)。谢谢阅读4.2.2jPDL分发包组成目前jPDL的最新版本是3.2.2,您可以在以下地址:谢谢阅读http://labs.jboss./jbossjbpm/jpdl_downloads/谢谢阅读是标准包(jbpm-jpdl-3.2.2.zip)只有20M(jbpm-jpdl-suite-3.2.2.zip)谢谢阅读将近80Mjboss谢谢阅读直接运行。4.2.3jPDL的核心程序包(jbpm-jpdl.jar)精品文档放心下载它是一个典型的jarAPI精品文档放心下载最简化的业务流程样例中,jPDL将流程定义存储与XML格式的定义文件中,在运行时载入感谢阅读感谢阅读际应用中,流程信息必须被持久化的存储于数据库中。jPDL使用了Hibernate作为其对象精品文档放心下载持久化的API。4.2.4GraphicalProcessDesigner插件(jbpm-jpdl-designer-3.1.2.zip)精品文档放心下载它是一个基于Eclipse感谢阅读手动编辑XML精品文档放心下载行的jPDL系统上。4.2.5jPDL身份包(jbpm-identity.jar)精品文档放心下载它是jPDLGroupUserPermission等用精品文档放心下载感谢阅读合您。4.2.6jPDLWeb控制台(jbpm-console.war)感谢阅读它是一个标准WebJSFjPDLjPDL谢谢阅读jPDL感谢阅读GettingstartedDEMOjPDL。谢谢阅读4.2.7静态的流程定义模型流程定义实体(ProcessDefinition)感谢阅读编号PD-001对象流程定义实体(ProcessDefinition)描述-002精品文档放心下载谢谢阅读义还可以有多个不同的版本,如:针对同样的报销流程可以有修订前和修订后的两个流程定谢谢阅读义,同时存储于jPDL数库中。用户可以通过流程名称和版本号获取相应的流程定义。在默感谢阅读认请况下,系统启用最新的流程定义。Java对象org.jbpm.graph.def.ProcessDefinition感谢阅读数据库表JBPM_PROCESSDEFINITION该表存储流程定义的通用信息,如:流程名称、版本号谢谢阅读表关联说明JBPM_PROCESSDEFINITION表中,每条记录有自己的数据库流水号谢谢阅读ID_JBPM_PROCESSDEFINITION的外键(ForeignKeys):感谢阅读startstate_同JBPM_NODE(流程结点)表关联。此外键指向流程定义中的起始结点ID谢谢阅读流程结点(Node)编号PD-002对象流程结点(Node)描述流程结点是对流程中的过程环节/-002中的每个方框即代表一感谢阅读jBPM中就是执行一段制定的Java谢谢阅读代码;二,转递、维持流程的延续,直至达到最终结点。在jPDL的结点设计中,系统开放谢谢阅读了充分的用户行为模型,程序员可以基于这些行为接口,实现自定义的业务功能。在jPDL谢谢阅读中,系统预定义了一系列的Node类型,同时也允许程序员开发定义自己的Node类型。精品文档放心下载Java对象org.jbpm.graph.def.Node数据库表JBPM_NODE该表存储结点的定义信息。表关联说明JBPM_NODE表中,每条记录有自己的数据库流水号精品文档放心下载ID_JBPM_NODE的外键(ForeignKeys):谢谢阅读processdefinition_-此外键说明该Node从属的流程定义对象ID谢谢阅读subprocessdefinition_-此外键指定了一个由该Node发起的子流程。在主流程离开当前结谢谢阅读点之前,该子流程必须完成执行过程。action_-此外键指定该结点动作类的ID感谢阅读superstate_-该外键是一个自关联键,指向结点的上级父结点ID。一个子流程中的多个结谢谢阅读点从属于同一个父流程结点。decisiondelegation_–该外键指定了结点委派的判定类ID(所谓委派判定类是指根据用精品文档放心下载户的业务逻辑,判定流程的下一个流向的JavaClass)感谢阅读流程转向(Transitions)编号PD-003对象流程转向(Transitions)描述谢谢阅读源结点和一个目标结点。在jPDL中transition的命名是通产是唯一的,结点依靠感谢阅读transitionNode中存在有多个同名的transition感谢阅读transitiontransition列表第一位感谢阅读置的即是默认的transition。Java对象org.jbpm.graph.def.Transition感谢阅读数据库表JBPM_TRANSITION该表存储流程定义中的转向对象。精品文档放心下载表关联说明JBPM_TRANSITION表中,每条记录有自己的数据库流水号谢谢阅读ID_JBPM_TRANSITION的外键(ForeignKeys):精品文档放心下载processdefinition_-该外键指向transition所属的流程定义对象ID感谢阅读from_-该外键指向transition的源结点ID感谢阅读to_-该外键指向transition的目标结点ID精品文档放心下载动作(Actions)编号PD-004对象动作(Actions)描述Actions是指一系列的在流程事件中运行的Java代码。流程图是软件需求的传达的重要手谢谢阅读Actions则是向流程图添感谢阅读构的情况下,可以将Java的代码与之关联。Actions通过事件(Events)同流程绑定,常

用的主要事件包括:进入结点、离开结点、进行转向。请注意,同Events关联的Actions和处于Node中的Actions是有不同的。处于Events中的Actions是通过事件触发执行的,感谢阅读Node中的Action则要承担起精品文档放心下载ActionsActions的命名在任何地方引用精品文档放心下载该Actions。命名的Actions可以作为主流程定义的公用子元素。这个功能可以提高对感谢阅读Actions定义的复用。Java对象org.jbpm.graph.def.Action数据库表JBPM_ACTION该表存储流程定义中的动作对象。感谢阅读表关联说明JBPM_ACTION表中,每条记录有自己的数据库流水号ID_谢谢阅读JBPM_ACTION的外键(ForeignKeys):谢谢阅读processdefinition_-指明action所属的流程定义ID精品文档放心下载event_-指明action绑定的eventID精品文档放心下载actiondelegation_-指明action的委派对象ID感谢阅读exceptionhandler_-指定action的异常处理ID谢谢阅读referencedaction_-指向当前action引用的action的ID精品文档放心下载timeraction_-指向当前action引用的计时器action谢谢阅读事件(Events)编号PD-005对象事件(Events)描述jBPM的引擎触发事件,精品文档放心下载这通常发生在jbpm计算后续状态的时候。事件总是和流程中的元素绑定,这些元素包括:谢谢阅读processdefinitionnodetransitiontask感谢阅读nodenode-enter事件和node-leave事件。事件是actionactionjBPM引擎触发事件的时候,

事件中绑定的actionjBPM件,将逐层向上传播到顶层的流程定义元素。这样的设计使得事件可以被集中化处理。谢谢阅读Java对象org.jbpm.graph.def.Event数据库表JBPM_EVENT该表存储流程定义中的事件对象,这些事件与相关的action绑定。精品文档放心下载表关联说明JBPM_EVENT表中,每条记录有自己的数据库流水号ID_谢谢阅读JBPM_EVENT的外键(ForeignKeys):谢谢阅读processdefinition_-指向event所属的流程定义ID精品文档放心下载node_-指向event所属的nodeIDtransition_-指向event所属的transitionID精品文档放心下载task_-指向event所属的任务ID任务(Task)编号PD-006对象任务(Task)描述Taskinstances感谢阅读任务可以在任务结点(Task-Node)和流程定义(process-definition)两个地方定义。通精品文档放心下载精品文档放心下载感谢阅读精品文档放心下载有命名的任务都可以通过名字被引用。在整个的流程定义中,任务名必须是唯一的。此外,谢谢阅读谢谢阅读在之后的运行中改变优先级。.Java对象org.jbpm.taskmgmt.def.Task精品文档放心下载数据库表JBPM_TASK该表存储流程定义中声明的任务对象。精品文档放心下载表关联说明JBPM_TASK表中,每条记录有自己的数据库流水号ID_精品文档放心下载JBPM_TASK的外键(ForeignKeys):感谢阅读processdefinition_-指向task所属的流程定义ID感谢阅读taskmgmtdefinition_-指向task引用的TaskMgmtDefintion对象ID感谢阅读tasknode_-指向task所属的任务结点ID精品文档放心下载startstate_-指向task所属流程的起始结点ID谢谢阅读assignmentdelegation_-指定task委派处理的class对象的ID感谢阅读swimlane_-指定task要授权的swimlane(角色)ID谢谢阅读taskcontroller_-指定一个task赋值的委托类感谢阅读4.2.8具体化的流程实例模型流程实例中最重要的三个对象:流程实例(ProcessInstanceToken谢谢阅读(TaskInstance).流程实例(ProcessInstance)感谢阅读编号PI-001对象流程实例(ProcessInstance)描述感谢阅读息Java对象org.jbpm.graph.exe.ProcessInstance感谢阅读数据库表JBPM_PROCESSINSTANCE该表存储运行时的流程对象信息。精品文档放心下载表关联说明JBPM_PROCESSINSTANCE表中,每条记录有自己的数据库流水号精品文档放心下载ID_JBPM_PROCESSINSTANCE的外键(ForeignKeys):processdefinition_-该流程实例对应的流程定义的ID

roottoken_-该流程实例引用的跟令牌感谢阅读superprocesstoken_-如果当前流程是某个流程实例的子流程,则指向该父流程的ID精品文档放心下载令牌(Token)编号PI-002对象令牌(Token)描述感谢阅读执行的位置。Java对象org.jbpm.graph.exe.Token数据库表JBPM_TOKEN该表存储运行时令牌对象信息,它表示当前流程执行到的位置。谢谢阅读表关联说明JBPM_TOKENID_JBPM_TOKENForeignKeys感谢阅读processinstance_-指向该令牌所属的流程实例的ID。感谢阅读subprocessinstance_-指向该令牌所属的子流程实例ID。感谢阅读node_-令牌所在(所指向的)的当前节点ID.parent_-如果当前令牌是一个分支流程或子流程的令牌,则该值指向其父令牌ID。谢谢阅读任务实例(TaskInstance)谢谢阅读编号PI-003对象任务实例(TaskInstance)描述精品文档放心下载-->开始处理-->精品文档放心下载TaskInstance对象中的getter感谢阅读精品文档放心下载据库中。Java对象org.jbpm.taskmgmt.exe.TaskInstance谢谢阅读数据库表JBPM_TASKINSTANCE该表存储运行时任务实例信息。谢谢阅读表关联说明JBPM_TASKINSTANCE表中,每条记录有自己的数据库流水号ID_JBPM_TASKINSTANCE的外键精品文档放心下载(ForeignKeys):task_-指向定义该实例的任务IDtoken_-指向任务实例对应的令牌IDswimlaneinstatnce_-swimlane实例,表示处理该任务的角色感谢阅读taskmgmtinstance_-管理该任务的模块实例ID谢谢阅读4.3SpringSpringFramework是一个Java/JavaEE/.NET的分层应用程序框架。该框架基于感谢阅读ExpertOne-on-OneJavaEEDesignandDevelopment(ISBN0-7645-4385-7)一文中的代码,并精品文档放心下载最初由RodJohnson和JuergenHoelleretal开发。SpringFramework提供了一个简易的开发感谢阅读谢谢阅读类。Spring中包含的关键特性:◆强大的基于JavaBeans的采用控制翻转谢谢阅读(InversionofControl,IoC)原则的配置管理,使得应用程序的组建更加快捷简易。◆一感谢阅读个可用于从applet到JavaEE等不同运行环境的核心Bean工厂。◆数据库事务的一般化抽感谢阅读JTA和单个感谢阅读JDBC数据源的一般化策略,使Spring的事务支持不要求JavaEE环境,这与一般的JTA或感谢阅读者EJBCMT相反。◆JDBC抽象层提供了有针对性的异常等级(不再从SQL异常中提取原始代精品文档放心下载码),简化了错误处理,大大减少了程序员的编码量.再次利用JDBC'感谢阅读'模块.并且面向JDBC的异常与Spring(DataAccessObject)异常等级精品文档放心下载相一致.DAO实现和事务策略等形式与HibernateJDO和iBATISSQLMaps集,解决了许多典型的Hibernate集成问题.所有

这些全部遵从Spring通用事务处理和通用数据访问对象异常等级规范.◆灵活的基于核心Spring功能的MVC网页应用程序框架。开发者通过策略接口将拥有对该框架的高度控制,精品文档放心下载JSPFreeMarkerVelocityTilesiText以及精品文档放心下载POI。值得注意的是,Spring中间层可以轻易地结合于任何基于MVC框架的网页层,例如感谢阅读Struts,WebWork,或Tapestry。◆提供诸如事务管理等服务的面向方面编程框架。感谢阅读4.4SpringModulesSpringModulesisasub-projectofSpringintendedtoeaseintegrationwith3rdpartyproduct精品文档放心下载swithoutoverloadingthecoreframeworkwithadditionaldependencies.感谢阅读Themodulesincludedinthe0.9releaseare:精品文档放心下载Antintegration.Fluxsuiteofproductsintegration.精品文档放心下载HiveMindintegration.Luceneintegration.ApacheOJBintegration.O/RBrokerintegration.OSWorkflowintegration.Tapestryintegration.SupportfordeclarativecachingservicesincludingEHCache,JCS,OSCache,GigaSpacesando精品文档放心下载thers.Supportfordb4oSupportforJSR-94RulesEnginessuchasDroolsandJess感谢阅读SupportforvariousJakartamonsponentssuchasConfiguration,Lang,ChainandmonsValidat感谢阅读orSupportforJavaSpaces,includingGigaspacesandBlitz.精品文档放心下载SupportforjBPM3.0.xand3.1.x精品文档放心下载SupportforJSR-170(JavaContentRepository)includingJackrabbitandJeceira.感谢阅读SupportforwebtemplateengineslikeFreemarker,Groovy,Velocity,WebMacroandXSLT.精品文档放心下载Valang:ValidationLanguage.谢谢阅读BeanValidationFramework.SpringMVCadd-ons.XTFramework:Domain-DrivenDesignorientedframeworkandSpringMVCAJAXsupportfordevel感谢阅读opingricherdomainmodelsandricheruserinterfaces.精品文档放心下载5集成5.1IntroductionjjBPMmoduleoffersintegrationbetweentheSpringandjBPMallowingforreuseofSpring'sHi谢谢阅读bernatesupportalongwiththeIoCcontainer.ThemoduleallowsjBPM'sunderlyingHibernate精品文档放心下载sessionFactorytobeconfiguredthroughSpringandjBPMactionstoaccessSpring'scontext.谢谢阅读5.2ConfigurationUsersfamiliarwithSpringwillseethatthejBPMmodulestructureresembleswiththeormpack谢谢阅读agefromthemainSpringdistribution.Themoduleoffersacentraltemplateclassforworking谢谢阅读withjBPM,acallbacktoaccessthenativeJbpmContextandalocalfactorybeanforconfigurat精品文档放心下载ionandcreatingajBPMinstance.精品文档放心下载<beans><!--DataSourcedefinition--><beanid="dataSource"class="...">...</bean><!-感谢阅读-HibernateSessionFactorydefinition--><beanid="hibernateSessionFactory"class="or感谢阅读g.springframework.orm.hibernate3.LocalSessionFactoryBean">...</bean><!--helperf感谢阅读orreadingjBPMprocessdefinitions--><beanid="simpleWorkflow"class="org.springmodu感谢阅读les.workflow.jbpm31.definition.ProcessDefinitionFactoryBean"><propertyname="def谢谢阅读initionLocation"value="classpath:org/springmodules/workflow/jbpm31/simpleWorkfl感谢阅读ow.xml"/></bean><!--jBPMconfiguration--><beanid="jbpmConfiguration"class="org.s精品文档放心下载pringmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean"><propertyname="精品文档放心下载sessionFactory"ref="hibernateSessionFactory"/><propertyname="configuration"valu谢谢阅读e="classpath:jbpm.cfg.xml"/><propertyname="processDefinitions"><list><reflocal=感谢阅读"simpleWorkflow"/></list></property><propertyname="createSchema"value="true"/><谢谢阅读propertyname="processDefinitionsResources"><list><value>classpath:/org/springmo谢谢阅读dules/workflow/jbpm31/someOtherWorkflow.xml</value></list></property></bean><!-感谢阅读-jBPMtemplate--><beanid="jbpmTemplate"class="org.springmodules.workflow.jbpm31.感谢阅读JbpmTemplate"><constructor-argindex="0"ref="jbpmConfiguration"/><constructor-ar精品文档放心下载gindex="1"ref="simpleWorkflow"/></bean>set</beans>精品文档放心下载Theexampleaboveshowshow(existing)Spring-managedHibernateSessionFactoriesandtran感谢阅读sactionmanagementcanbereusedwithjBPM.精品文档放心下载5.3LocalJbpmConfigurationFactoryBean精品文档放心下载ThemainelementisLocalJbpmConfigurationFactoryBeanwhichshouldbefamiliartousersac精品文档放心下载ustomedtoSpring.BasedonthejbpmconfigurationfileandthegivenSessionFactory,itwill谢谢阅读createajBPMconfigurationwhichcanbeusedforworkingwiththegivenprocessdefinitions.谢谢阅读ItispossibletoreplacejBPMxmlconfigurationwithjBPM3.1.xnewlyaddedObjectFactory-n精品文档放心下载otethatifbotharepresentthexmlconfigurationispreffered.LocalJbpmConfigurationFac谢谢阅读toryBeanallowsthecreationoftheunderlyingschemabasedontheprocessdefinitionsloade谢谢阅读dautomaticallyatstartup.NotethatthesessionFactorypropertyisnotmandatory-HibernateSessionFactorycanbereu谢谢阅读sedwithjBPMorjBPMcanworkbyitselfwithoutanyintegrationwiththeexistinginfrastruct感谢阅读ure.However,inmostscenarios,usingLocalJbpmConfigurationFactoryBeanallowsonetota谢谢阅读keadvantageofSpringtransactionmanagementinfrastructuresoit'spossiblewithoutanyc精品文档放心下载odechangetousejBPM,Hibernateandjdbc-basedcodeinsidethesametransactionalcontext,谢谢阅读beitmanagedlocallyorglobally(JTA).Moreover,itispossibletousethread-boundsession精品文档放心下载orOpenSessionInViewpatternswithjBPM.感谢阅读LocalJbpmConfigurationFactoryBeanisalsoawareoftheenclosingapplicationContextlif感谢阅读ecycle-jBPMwillbeinitializedoncethecontextisstarted(usuallyapplicationstartup)a谢谢阅读ndwillbeclosedproperlywhenthecontextisdestroyed(applicationisshutdown).谢谢阅读NotethatLocalJbpmConfigurationFactoryBeancanbeconfiguredprogramaticallyandcanbe谢谢阅读usedstandaloneonlytobuildanjBPMcontextwhichcanbeusedindependentlyofSpringModule精品文档放心下载sjBPMsupport.5.4InversionofControl:JbpmTemplateandJbpmCallback感谢阅读AnotherimportantfeatureofSpringModulesjBPMsupportisJbpmTemplate.Thetemplateoffe感谢阅读rsveryconvientwaysofworkingdirectlywithprocessdefinitionsaswellasjBPMAPItakingc感谢阅读areofhandlingexceptions(beitjBPMorHibernatebased)inrespecttotheongoingtransacti谢谢阅读on(ifit'spresent),theunderlyingHibernatesession(ifpesistentservicesareused)andt精品文档放心下载hejBPMcontext.jBPMexceptions(andtheunderlyingHibernateinformation)aretranslated感谢阅读intoSpring'sDAOexceptionhierarchy.Everythinghappensinatransparentandconsistentm精品文档放心下载anner.Thisispossible,aswitheverySpring-styletemplate,evenwhendirectaccesstothen谢谢阅读ativeJbpmContextisdesired,throughtheJbpmCallback:publicProcessInstancefindProcessInstance(finalLongprocessInstanceId){return(Pro

cessInstance)execute(newJbpmCallback(){publicObjectdoInJbpm(JbpmContextcontext){//dosomething...returncontext.getGraphSession().loadProcessInstance(processIns感谢阅读tanceId.longValue());}});}精品文档放心下载Aswell,asLocalJbpmConfigurationFactoryBean,theJbpmTemplatecanbeconfiguredprogra感谢阅读maticallyandcanbeusedstandaloneonapre-existingjbpmContext(configuredthroughLoca精品文档放心下载lJbpmConfigurationFactoryBeanornot)andcanbeusedindependentlyofSpringModulesjBPM感谢阅读support.5.5ProcessDefinitionFactoryBean谢谢阅读ProcessDefinitionFactoryBeanisasimplereaderthatloadsjBPMprocessdefinitionusingS精品文档放心下载pring'sResourceLoaders.Thus,thexmlfilescanbeloadusingtheclasspath,relativeorabs谢谢阅读olutefilepathorevenfromtheServletContext.Seetheofficialdocumentationformoreinfo谢谢阅读rmation.NoteAsreportedontheforums,usingProcessDefinitionFactoryBeanjBPM3.1.1willtriggeranew谢谢阅读processdefinitiontobepersisted(throughdeployProcessDefinition)ateachstartup.Whi谢谢阅读lethisisusefulindevelopmentwhenthedatabaseiscreatedonapplicationstartupanddestr谢谢阅读oyedonclosing,forcaseswherethedefinitiondoesn'tchange,theprocessshouldnotbedecl精品文档放心下载aredinsideSpringXMLfiles.NoteAsreportedhere,duetothestaticnatureofjBPM,processdefinitionswhichincludesubproc感谢阅读essesarenotloadedproperlyifaJbpmContextdoesnotexistatthetimeoftheloading(noexce感谢阅读ptionisthrownwhatsoever).AsaworkaroundconsiderusingtheLocalJbpmConfigurationFac感谢阅读toryBean'sprocessDefinitionsResourcesproperty.感谢阅读<!--[if!supportMisalignedColumns]-->感谢阅读5.6OutsideSpringcontainerItisimportanttonotethatwhileourexampleshowedLocalJbpmConfigurationFactoryBeanan精品文档放心下载dJbpmTemplatetemplateinsideaSpringxml,theseclassesdonotdependoneachotheroronSpr精品文档放心下载ingapplicationcontext.Theycanbejustaswellconfiguredprogramaticallyandcan谢谢阅读5.7AccessingSpringbeansfromjBPMactionsAnotherimportantfeatureofSpringModulesjBPMintegrationisallowingSpringconfigured

beanstobereusedinsidejBPMactions.ThisallowsonetoleverageSpringcontainercapabilities(beanlifecycles,scoping,injection,proxyingjusttonameafew)inatransparentwayw谢谢阅读ithjBPM.ConsiderthefollowingSpringapplicationcontext:谢谢阅读<beans><!--SpringbeanvisibleinsidejBPMprocessed--><beanid="jbpmAction"class="or谢谢阅读g.MyJbpmActionHandler"singleton="true"><propertyname="someProp"ref="anotherBean感谢阅读"/>...</bean>..</beans>andjBPMprocessdefinition:<?xmlversion="1.0"encoding="UTF-8"?><process-definitionname="simpleWorkflow"><s精品文档放心下载tart-state><transitionto="myState"></transition></start-state><statename="mySta感谢阅读te"><transitionto="end"><actionname="myAction"config-type="bean"class="org.spri谢谢阅读ngmodules.workflow.jbpm31.JbpmHandlerProxy"><targetBean>jbpmAction</targetBean>感谢阅读<factoryKey>jbpmConfiguration</factoryKey></action></transition></state><end-st谢谢阅读atename="end"/></process-definition>谢谢阅读JbpmHandlerProxytransparentlylocatesSpringapplicationContextandsearchesthebeani感谢阅读dentifiedbythetargetBeanparameter(inthiscasejbpmAction)anddelegateallcallstothe精品文档放心下载jBPMaction.Thisway,oneisnotlimitedonlytotheinjectionofferedbyjBPMcontainerandca感谢阅读nintegrateandmunicateinaveryeasymannerwithotherSpringmanagedbeans.Moreover,your感谢阅读actionlifecyclecanbesigleton(onesharedinstance)orprototype(everycallgetsanewins感谢阅读tance)orinSpring2.0scopedtoacertainapplicationponent(likeoneinstanceperhttpsess感谢阅读ion).TheoptionalfactoryKeyparameterspecifiedinthisexampleshouldbeusedwhenoneisdealin感谢阅读gwithmorethenonejBPMconfigurationinsidethesameclassloader(notmoninpractice).The精品文档放心下载factoryKeyshouldbethesameasthebeannameoftheLocalJbpmConfigurationFactoryBeantob精品文档放心下载eused(inourcasejbpmConfiguration).感谢阅读6关键设计6.1环境配置6.1.1RequiredJaredition本文分析和举例时,采用的软件版本为:1.spring-2.1-m4.jar2.spring-modules-jbpm31.jar精品文档放心下载3.jbpm-jpdl-3.2.2.jar6.1.2applicationContext.xml感谢阅读配置jbpm中相关xml文件感谢阅读<beanid="hibernateSessionFactory精品文档放心下载"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">精品文档放心下载<propertyname="dataSource"><reflocal="dataSource"/></property>谢谢阅读<propertyname="mappingDirectoryLocations">感谢阅读<list><value>classpath://mypany/jbpmtest/system/po</value>感谢阅读</list></property><propertyname="mappingLocations">感谢阅读<list><value>classpath*:/org/jbpm/**/*.hbm.xml</value>谢谢阅读</list></property><propertyname="hibernateProperties">精品文档放心下载<props><propkey="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>感谢阅读<propkey="hibernate.show_sql">true</prop>谢谢阅读<propkey="hibernate.query.substitutions">true1,false0,yes'Y',no'N'</prop>感谢阅读<!--(JBPMConfig)avoidhappen:org.hibernate.HibernateException:Couldnotinstantiat精品文档放心下载ecacheimplementation--><propkey="vider_class">org.hibernate.cache.HashtableCachePro精品文档放心下载vider</prop></props></property></bean>JbpmTemplate和LocalJbpmConfigurationFactoryBean配置感谢阅读<!--beanid="openApply"class="org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBea

n"><propertyname="definitionLocation"精品文档放心下载value="classpath:../../jbpmPrcsDef/openApply/processdefinition.xml"/>感谢阅读</bean--><!--jBPMconfiguration--><beanid="jbpmConfiguration"精品文档放心下载class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">谢谢阅读<propertyname="sessionFactory"ref="sessionFactory"/>感谢阅读<propertyname="configuration"value="classpath:jbpm.cfg.xml"/>感谢阅读<propertyname="createSchema"value="false"/>感谢阅读<!--propertyname="processDefinitions">谢谢阅读<list><reflocal="openApply"/></list></property--></bean><!--jBPMtemplate--><beanid="jbpmTemplate"class="org.springmodules.workflow.jbpm31.JbpmTemplate">精品文档放心下载<constructor-argindex="0"ref="jbpmConfiguration"/>谢谢阅读</bean>6.1.3jbpm-configuration<jbpm-configuration><!--Thisconfigurationisusedwhenthereisnojbpm.cfg.xmlfilefoundinthe精品文档放心下载rootoftheclasspath.Itisaverybasicconfigurationwithoutpersistence感谢阅读andmessageservices.Onlytheauthorizationserviceinstalled.谢谢阅读Youcanparseandcreateprocesses,butwhenyoutrytouseoneofthe感谢阅读unavailableservices,you'llgetanexception.感谢阅读--><jbpm-context><!--servicename="persistence"factory="org.jbpm.persistence.db.DbPersistenceServ谢谢阅读iceFactory"/--><servicename="persistence">精品文档放心下载<factory><beanclass="org.jbpm.persistence.db.DbPersistenceServiceFactory">精品文档放心下载<fieldname="isTransactionEnabled"><false/></field>感谢阅读<fieldname="isCurrentSessionEnabled"><true/></field>精品文档放心下载</bean></factory></service><servicename="tx"factory="org.jbpm.tx.TxServiceFactory"/>谢谢阅读<servicename="message"factory="org.jbpm.msg.db.DbMessageServiceFactory"/>谢谢阅读<servicename="scheduler"factory="org.jbpm.scheduler.db.DbSchedulerServiceFactor精品文档放心下载y"/><servicename="logging"factory="org.jbpm.logging.db.DbLoggingServiceFactory"/>感谢阅读<servicename="authentication"factory="org.jbpm.security.authentication.DefaultA精品文档放心下载uthenticationServiceFactory"/>感谢阅读</jbpm-context><!--configurationpropertyusedbypersistenceserviceimplorg.jbpm.persistence.db.Db精品文档放心下载PersistenceServiceFactorynowsetusingspringconfigurationfile谢谢阅读<stringname="resource.hibernate.cfg.xml"value="hibernate.cfg.xml"/>谢谢阅读--><!--configurationresourcefilespointingtodefaultconfigurationfilesinjbpm-{versio精品文档放心下载n}.jar--><stringname="resource.business.calendar"value="org/jbpm/calendar/jbpm.business.感谢阅读perties"/><stringname="resource.default.modules"value="org/jbpm/graph/def/jbpm.default.mo谢谢阅读perties"/><stringname="resource.converter"value="org/jbpm/db/hibernate/谢谢阅读perties"/><stringname="resource.action.types"value="org/jbpm/graph/action/action.types.xm感谢阅读l"/><stringname="resource.node.types"value="org/jbpm/graph/node/node.types.xml"/>谢谢阅读<stringname="resource.parsers"value="org/jbpm/jpdl/par/jbpm.parsers.xml"/>感谢阅读<stringname="resource.varmapping"value="org/jbpm/context/exe/jbpm.varmapping.xm感谢阅读l"/><longname="jbpm.msg.wait.timout"value="5000"singleton="true"/>精品文档放心下载<intname="jbpm.byte.block.size"value="1024"singleton="true"/>精品文档放心下载<stringname="mail.smtp.host"value="localhost"/>精品文档放心下载<beanname="jbpm.task.instance.factory"class="org.jbpm.taskmgmt.impl.DefaultTask精品文档放心下载InstanceFactoryImpl"singleton="true"/>谢谢阅读<beanname="jbpm.variable.resolver"class="org.jbpm.jpdl.el.impl.JbpmVariableReso感谢阅读lver"singleton="true"/><!--beanname="jbpm.mail.address.resolver"class="org.jbpm.identity.mail.Identity谢谢阅读AddressResolver"singleton="true"/-->精品文档放心下载</jbpm-configuration>6.2流程定义发布6.2.1意图通过servlet感谢阅读流程文件。6.2.2动机随着业务流程的变化,流程定义文件也需要变更进行重新发布,需要一种灵活的发布方式。谢谢阅读即要避免每次启动服务器都重新发布,也要避免发布后,不能再次更新的问题。谢谢阅读一个更好的办法就是可以通过一个serlet进行控制是否进行发布。精品文档放心下载6.2.3适用性当流程定义没有变化时,当启动servlet容器时,不必重复部署。谢谢阅读6.2.4效果灵活控制发布方式,避免重复发布。6.2.5实现lJbpmDeployServlet:获得要发布的文件、部署方式。感谢阅读lJbpmDefinitionService:根据部署方式,获得流程实例ProcessDefinition感谢阅读lJbpmContext:完成实际部署。6.3面向接口的设计6.3.1意图精品文档放心下载根据需要增加对新组件的使用。6.3.2动机jbpm组件内部相关的类可能随着版本不同而变化。或者今后想采用其他工作流组件。设计感谢阅读独立于实现的接口提供了一直的规约,屏蔽变化。6.3.3适用性使用第三方组件。6.3.4结构适配器模式。6.3.5实现在jPDL中,对流程的建模被划分为两大部分,一是针对“流程定义”的静态模型部分;二精品文档放心下载是针对具体“流程实例”的运行时动态模型。静态的流程定义模型:流程定义实体(ProcessDefinitionNode精品文档放心下载(TransitionsActionsEventsTask谢谢阅读ProcessInstanceToken精品文档放心下载任务实例(TaskInstance)可以根据功能范围的不同,可以封装不同的接口和实现不同实现类。对于流程文件的操作、谢谢阅读对流程的操作,可以分为两大类接口。接口模型参数约定为了使得业务程序和工作流组件之间信息交互,这些参数包括:谢谢阅读l业务流程标识。n对于受理系统、工单系统等,可以成为:工单标识n可以该标识通过工作流ContextInstance对象中保存到:jbpm_variableinstance表中。

n个唯一的值,并需要把该值传递给工作流组件。精品文档放心下载n谢谢阅读l用户标识n应用于:创建、取消/结束任务、任务回退等操作时l任务标识n应用于:取消/结束任务等l任务名称n谢谢阅读精品文档放心下载或称为:业务处理环节名称、业务状态名称、工单状态等l流程转向名称n从一个节点转移到另外一个节点。n应用于:创建流程、完成任务、回退任务。参数命名约定l命名方式n简洁、合乎规范、如果是英文名称,采用通用缩写,或英文全称。感谢阅读l节点名称n名词+动词l转移路径名称n动词+名词参数处理方式l业务流程具体环节名称(工单状态名称)n精品文档放心下载应。n通常它将在页面或流程图中展示。n定义在常量类中,并提供帮助方法。n谢谢阅读通成本。l工作流流程名称n根据工作流程的不同,通过采用不同的工作流程,不同的流程有不同环节。感谢阅读n谢谢阅读示,数据存储。n建议该名称与工作流中流程定义文件名称采用一样。不需要额外的转换,降低沟通成本。感谢阅读操作流程文件接口l使用流程存档文件,部署新的流程定义。nParam:归档文件名l使用流程存档文件,创建一个新版本的流程定义。nParam:归档文件名l部署新的流程定义nParam:普通文件名l创建一个新版本的流程定义nParam:普通文件名l根据流程名称获取流程定义nParam:流程名称nReturn:流程定义对象l根据流程标识获取流程定义nParam:流程标识nReturn:流程定义对象操作流程接口l创建流程实例,并创建和启动流程的开始任务实例。nParam:流程名称、业务流程id、创建人nReturn:开始任务实例idl删除流程实例nParam:业务流程idl查询流程实例当前所处节点nParam:业务流程idnReturn:任务节点名称l判断流程实例是否完成nParam:业务流程idnReturn:true/falsel完成某个任务实例,并转移到流程的缺省节点nParam:用户标识、任务实例idnReturn:流程实例当前节点名称l完成某个任务实例,并转移到指定的节点。nParam:用户标识、任务实例id、任务完成后的转移名精品文档放心下载nReturn:流程实例当前节点名称l完成任务实例,取消该任务实例对应的未完成的兄弟任务实例感谢阅读nParam:用户标识、任务实例id、任务完成后的转移名精品文档放心下载nReturn:流程实例当前节点名称。l任务实例是否完成nParam:任务实例idnReturn:true/falsel获取任务实例的转移路径nParam:任务实例id、是否包含缺省转移路径,true:包含;false:不包含。谢谢阅读nReturn:true/falsel查询流程实例的根令牌标识n业务流程idnReturn:根令牌标识l关闭工作流服务6.4用户管理6.4.1Theassignmentdatamodel感谢阅读Thedatamodelformanagingassignmentsoftaskinstancesandswimlaneinstancestoactorsis谢谢阅读thefollowing.EachTaskInstancehasanactorIdandasetofpooledactors.感谢阅读Figure11.1.Theassignmentmodelclassdiagram精品文档放心下载TheactorIdistheresponsibleforthetask,whilethesetofpooledactorsrepresentsacollec精品文档放心下载tionofcandidatesthatcanbeeresponsibleiftheywouldtakethetask.BothactorIdandpoole感谢阅读dActorsareoptionalandcanalsobebined.谢谢阅读6.4.2意图感谢阅读在<swimlane>中,<assignmen>中的pooled-actors属性,可以配置为业务系统中的角色标精品文档放心下载识,一个角色它本身代表一类用户,不需配置为具体的用户标识。精品文档放心下载当用户登录系统,如果查看自己工作(或待处理的任务、待处理的工单)精品文档放心下载6.4.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论