




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
J2EE工作流管理系统jBPM详解(一)一、jBPM入门简介概述工作流业务流程管理技术是基于SOA谢谢阅读在软件开发和业务两个层次受益:1、方便开发工作流管理系统能够简化企业级软件开发甚至维护。◆降低开发风险-通过使用状态和动作这样的术语,业务分析师和开发人员使用精品文档放心下载同一种语言交谈。这样开发人员就不必将用户需求转化成软件设计了。精品文档放心下载◆实现的集中统一-业务流程经常变化,使用工作流系统的最大好处是:业务流精品文档放心下载程的实现代码,不再是散落在各种各样的系统中。◆加快应用开发-你的软件不用再关注流程的参与者,开发起来更快,代码更容感谢阅读易维护。2、业务流程管理(BPM)感谢阅读◆提高效率-许多流程在自动化过程中会去除一些不必要的步骤较好的流程控制精品文档放心下载-通过标准的工作方法和跟踪审计,提高了业务流程的管理感谢阅读◆改进客户服务-因为流程的一致性,提高了对客户响应的可预见性感谢阅读◆灵活-跨越流程的软件控制,使流程可以按照业务的需要重新设计。精品文档放心下载◆业务流程改进-对流程的关注,使它们趋向于流畅和简单谢谢阅读1.目前解决华谢谢阅读研今后新项目中复杂业务流程如何使用工作流引擎技术进行实现的问题。谢谢阅读2.上升到面向服务体系架构,实现各个服务之间的业务流程。谢谢阅读jBPMJavaBusinessProcessManagementJ2EE的轻量级工作精品文档放心下载流管理系统。jBPM是公开源代码项目,它使用要遵循ApacheLicense.谢谢阅读jBPM在2004年10月18日,发布了2.0版本,并在同一天加入了JBoss,成为谢谢阅读了JBossJBossjBPM.随着jBPM谢谢阅读加入JBossjBPM感谢阅读JBossjBPM只有最小的倚赖性,它可以很容易的作为java库来使用。当然它也谢谢阅读可以用在访问量很大的J2EE群应用服务器环境中。JBossjBPM可以同任何数据库精品文档放心下载配置可以部署在任何应用服务器上。jBPMWfMCXPDL,精品文档放心下载BPML,ebXML,BPEL4WS等,而是采用了它自己定义的精品文档放心下载JBossjBPMProcessdefinitionlanguage(jPdl)。jPdl认为一个商务流程可以精品文档放心下载被看作是一个UML状态图。jPdl就是详细定义了这个状态图的每个部分,如起谢谢阅读始、结束状态,状态之间的转换等。jBPM的另一个特色是它使用Hibernate来管理它的数据库。Hibernate是目前精品文档放心下载JavaHibernatejBPM将数据的管理感谢阅读谢谢阅读选型评估报告)。本文档主要是工作流研究小组关于开源工作流引擎jbpm的研究成果总结。内容感谢阅读包括工作流研究场景的介绍、jbpm的环境配置,并包括以下六个研究主题:精品文档放心下载◆JBPM同开发如何结合,又如何保持独立性;对应用系统的设计实现有什么样感谢阅读的制约◆用户/角色如何同应用系统结合,变化又如何处理◆流程中每个活动,如何动态指定执行者◆类似传阅功能如何实现◆子流程如何实现◆流程执行步骤耗时阀值和自动提醒设置◆jBPM当前版本的稳定性评估术语、定义和缩略语应用场景谢谢阅读房的过程是一个非常典型的工作流场景。我们将这一过程提取出来,作为jbpm精品文档放心下载技术研究的场景。在购房过程中,会有以下人员参与。客户:购房的主体销售人员:在购房过程中指导看房,购房。销售经理:确定认购信息。财务人员:收取定金。客服人员:打印收据,打印客户认购书。客户购房的过程可以描述如下。◆客户来到售楼中心,销售人员进行接待。◆客户向销售人员提供预先申请的服务号。◆销售人员确认服务号是否有效,如果无效现场给出一个新的服务号。谢谢阅读◆销售人员引导客户选房。◆客户确定户型,房号。◆销售人员录入客户认购资料。◆销售人员确认认购资料填写完整。◆销售人员将认购资料提交给销售经理审批。◆确定是否可以获得优惠,如果客户是一次交清房款,获得0.1%优惠。感谢阅读◆交上级经理审批。◆销售人员引导客户到财务处交纳定金。◆交纳定金后,客服人员打印收据。◆客服人员打印认购书。感谢阅读程作一些删改。客户认购的流程改为:◆客户确定购房,销售人员录入认购资料。◆提交认购资料,必须保证录入资料的完整性。◆提交审核,按总金额进行分类审核。如果金额小于50万销售经理审核即可,谢谢阅读大于50万还要上级经理两人同时审核通过。◆审批完成,客户到财务处交纳定金。◆客服人员为客户打印收据,打印认购书,认购完成。上面的流程中一些异常情况(流程中的一些分支)精品文档放心下载在交纳定金之前可以随时放弃认购。感谢阅读精品文档放心下载感谢阅读号。通用的标准规范jBPM是个功能全面的WorkflowEngine,融合了4大功能:Workflow,BPM,精品文档放心下载BPELPageFlowBPELjbossHibernate精品文档放心下载定义的自定义标准jpdl,不支持目前公开的工作流(业务流程)标准,如:感谢阅读◆JCP◆JSR208JavaBusinessIntegration感谢阅读◆JSR207ProcessDefinitionforJava谢谢阅读◆OASIS◆WS-BPEL◆WorkflowManagementCoalition(WFMC)精品文档放心下载◆WFMCXPDL◆BusinessProcessManagementInitiative(BPMI)谢谢阅读◆BPMN◆ObjectManagementGroup(OMG)谢谢阅读◆StateChartXML(SCXML)处理测试阶段的JBossjBPMBPEL扩展准备支持BPEL1.1标准(非标准组织通过的精品文档放心下载标准)。技术方案由于公司采取的架构是ejb3+tapestry4架构,所以我们的场景实现架构也是基精品文档放心下载tapestry4+ejb3+jbpm3.2,我们所采取的jbpm版本是谢谢阅读3.2jbpmjboss作为我们的web服务器感谢阅读开发环境这里我们是采用eclipse3.2开发工具进行开发,Tapestry4+ejb3的开发环境配感谢阅读置和以往的项目配置基本保持一致,这里就不再进行详细介绍,关键就是精品文档放心下载jbpm3.2的配置方法。我们从jBoss官方网站()上下载谢谢阅读jbpm-jpdl-suite-3.2.GA.zip,最新的版本是3.2.GA,这个包括:谢谢阅读◆jbpm-server,预先配置的jboss应用服务器.精品文档放心下载◆jbpm-designer,jBPM流程图形化设计器的eclipse插件.感谢阅读◆jbpm-db,jBPM数据库兼容包(参看下面).感谢阅读◆jbpm,核心jbpm组件包括库和用户手册.◆jbpm-bpel,JBossjBPMBPEL扩展参考.精品文档放心下载预配置的JBoss应用服务器有下列安装组件:核心jBPM组件,打包作为JBoss服务档案谢谢阅读一个包括所有jBPM表格的完整数据库:默认的hypersonic数据库包含所有的谢谢阅读jBPM表格和已经定义的流程.jBPM控制台web应用程序这个可以用来为jBPM管理员.感谢阅读jBPM调度程序所有定时器的执行.调度程序在新手工具箱里配置成了一个谢谢阅读servlet.这个Servlet会为产生一个线程来监视每个定时器的执行.感谢阅读一个流程例子已经发布进了jBPM数据库,关于jbpm-jpdl-suite-3.2套件包的谢谢阅读具体介绍,可以参考JBossjBPMCookbook手册。谢谢阅读JBossjBPM是一个Java库.因此,它可以用在任何java环境比如web应用程感谢阅读序,Swing应用程序,EJB,WebService等等,JBossjBPM核心组件被打包成一个简感谢阅读单的Java库文件.它依赖你所使用的功能性,库jbpm-jpdl.jar及一些相关的第精品文档放心下载三方的库比如.hibernate3.2,dom4j等等谢谢阅读在我们实现场景中。要使用jbpm,我们首先需要将jbpm3.2的包导入我们的项感谢阅读jbpm3.2的主要包括两个包jbpm-jpdl.jar和jbpm-identity.jar感谢阅读jbpm-jpdl.jar是jbpm的核心包,jbpm-identity.jar则是jbpm自带的用户角感谢阅读色权限管理包。我们将这两个包导入我们的项目中。(具体可参考jbpm的用户感谢阅读手册)在jbpm中,流程的定义主要是编写在xml文件中的,我们需要将具体的业务流精品文档放心下载程在xml精品文档放心下载名为“processes”,在该目录我们可以保存流程定义xml文件。精品文档放心下载JBossjBPM包括一个图形化的流程设计工具.这个设计器是用来创作商业流程的,感谢阅读该图形设计器是一个Eclipse谢谢阅读业务分析员和技术开发人员.这样就可以在业务流程建模和实际执行之间平滑转感谢阅读精品文档放心下载来设计。该插件位于jbpm-jpdl-suite-3.2.GA.zip中,插件的安装方法可以参感谢阅读考elipse插件的安装方法。安装完毕后,我们下面可以通过该插件新建流程设感谢阅读计文件。步骤如下:1、在processes目录中右建选择“New”—》“other”感谢阅读2、选择“ProcessDefinition”,点击“Next”感谢阅读输入Processname谢谢阅读务来设计工作流流程文件。Jbpm本身包含很多自己的jbpm数据库表,jBPM内部使用hibernate来管理它的精品文档放心下载HibernatejBPM精品文档放心下载jBPM移植在不同的数据库.感谢阅读操作都保存在jbpm数据表中,通过调用jbpm提供的接口,我们可以对jBPM数感谢阅读据库进行存储,Mysql5.0谢谢阅读“config.files”精品文档放心下载立hibernate.cfg.xml文件:hibernate.cfg.xml<?xmlversion='1.0'encoding='utf-8'?>感谢阅读<!DOCTYPEhibernate-configurationPUBLIC精品文档放心下载"-//Hibernate/HibernateConfigurationDTD3.0//EN"感谢阅读"/hibernate-configuration-3.0.dtd">谢谢阅读<hibernate-configuration><session-factory><!--hibernatedialect--><!--propertyname="hibernate.dialect">感谢阅读org.hibernate.dialect.HSQLDialect</property-->精品文档放心下载<propertyname="hibernate.dialect">谢谢阅读org.hibernate.dialect.MySQLDialect感谢阅读</property><!--JDBCconnectionproperties(begin)===谢谢阅读<propertyname="hibernate.connection.driver_class">感谢阅读org.hsqldb.jdbcDriver</property>精品文档放心下载<propertyname="hibernate.connection.url">jdbc:hsqldb:mem:jbpm<精品文档放心下载/property><propertyname="hibernate.connection.username">sa</property>感谢阅读<propertyname="hibernate.connection.password"></property>精品文档放心下载====JDBCconnectionproperties(end)-->谢谢阅读<!--JDBCconnectionforMySQLdatabase-->精品文档放心下载<propertyname="connection.driver_class">精品文档放心下载com.mysql.jdbc.Driver</property><propertyname="connection.url">谢谢阅读jdbc:mysql://localhost/myjbpm谢谢阅读</property><propertyname="connection.username">root</property>谢谢阅读<propertyname="connection.password">1234</property>谢谢阅读<!--JDBCconnectionpool(usethebuilt-in)-->精品文档放心下载<propertyname="connection.pool_size">1</property>感谢阅读<propertyname="vider_class">感谢阅读org.hibernate.cache.HashtableCacheProvider精品文档放心下载</property><!--usedatasource--><!--DataSourceproperties(begin)感谢阅读<propertyname="hibernate.connection.datasource">谢谢阅读java:comp/env/JbpmDS</property>精品文档放心下载DataSourceproperties(end)-->谢谢阅读<!--Dropandre-createthedatabaseschemaonstartup-->精品文档放心下载<propertyname="hbm2ddl.auto">create</property>谢谢阅读<!--JTAtransactionproperties(begin)===感谢阅读<propertyname="hibernate.transaction.factory_class">精品文档放心下载org.hibernate.transaction.JTATransactionFactory</property>精品文档放心下载<propertyname="hibernate.transaction.manager_lookup_class">精品文档放心下载org.hibernate.transaction.JBossTransactionManagerLookup</property>感谢阅读====JTAtransactionproperties(end)-->感谢阅读<!--CMTtransactionproperties(begin)===精品文档放心下载<propertyname="hibernate.transaction.factory_class">精品文档放心下载org.hibernate.transaction.CMTTransactionFactory</property>精品文档放心下载<propertyname="hibernate.transaction.manager_lookup_class">感谢阅读org.hibernate.transaction.JBossTransactionManagerLookup</property>感谢阅读====CMTtransactionproperties(end)-->谢谢阅读<!--loggingproperties(begin)===感谢阅读<propertyname="hibernate.show_sql">true</property>谢谢阅读<propertyname="hibernate.format_sql">true</property>谢谢阅读<propertyname="hibernate.use_sql_comments">true</property>谢谢阅读====loggingproperties(end)-->谢谢阅读<!--############################################-->感谢阅读<!--#mappingfileswithexternaldependencies#-->精品文档放心下载<!--############################################-->精品文档放心下载<!--followingmappingfilehasadependendyon-->谢谢阅读<!--'bsh-{version}.jar'.-->感谢阅读<!--uncommentthisifyoudon'thavebshonyour-->精品文档放心下载<!--classpath.youwon'tbeabletousethe-->精品文档放心下载<!--scriptelementinprocessdefinitionfiles-->感谢阅读<mappingresource="org/jbpm/graph/action/Script.hbm.xml"/>谢谢阅读<!--followingmappingfileshaveadependendyon-->谢谢阅读<!--'jbpm-identity.jar',mappingfiles-->谢谢阅读<!--ofthepluggablejbpmidentitycomponent.-->感谢阅读<!--Uncommentthefollowing3linesifyou-->感谢阅读<!--wanttousethejBPMidentitymgmgt-->感谢阅读<!--component.--><!--identitymappings(begin)-->谢谢阅读<mappingresource="org/jbpm/identity/User.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/identity/Group.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/identity/Membership.hbm.xml"/>精品文档放心下载<!--identitymappings(end)-->感谢阅读<!--followingmappingfileshaveadependendyon-->感谢阅读<!--theJCRAPI--><!--jcrmappings(begin)===<mappingresource="org/jbpm/context/exe/variableinstanc精品文档放心下载/JcrNodeInstance.hbm.xml"/>感谢阅读====jcrmappings(end)--><!--######################-->谢谢阅读<!--#jbpmmappingfiles#--><!--######################-->感谢阅读<!--hqlqueriesandtypedefs-->精品文档放心下载<mappingresource="org/jbpm/db/hibernate.queries.hbm.xml"/>谢谢阅读<!--graph.defmappingfiles-->精品文档放心下载<mappingresource="org/jbpm/graph/def/ProcessDefinition.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/def/Node.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/def/Transition.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/def/Event.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/def/Action.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/def/SuperState.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/def/ExceptionHandler.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/instantiation/Delegation.hbm.xml"/>谢谢阅读<!--graph.nodemappingfiles-->精品文档放心下载<mappingresource="org/jbpm/graph/node/StartState.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/node/EndState.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/node/ProcessState.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/node/Decision.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/node/Fork.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/node/Join.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/node/State.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/node/TaskNode.hbm.xml"/>精品文档放心下载<!--context.defmappingfiles-->感谢阅读<mappingresource="org/jbpm/context/def/ContextDefinition.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/context/def/VariableAccess.hbm.xml"/>精品文档放心下载<!--taskmgmt.defmappingfiles-->精品文档放心下载<mappingresource="org/jbpm/taskmgmt/def/TaskMgmtDefinition.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/taskmgmt/def/Swimlane.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/def/Task.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/def/TaskController.hbm.xml"/>精品文档放心下载<!--module.defmappingfiles-->感谢阅读<mappingresource="org/jbpm/module/def/ModuleDefinition.hbm.xml"/>谢谢阅读<!--bytesmappingfiles--><mappingresource="org/jbpm/bytes/ByteArray.hbm.xml"/>感谢阅读<!--file.defmappingfiles-->精品文档放心下载<mappingresource="org/jbpm/file/def/FileDefinition.hbm.xml"/>感谢阅读<!--scheduler.defmappingfiles-->谢谢阅读<mappingresource="org/jbpm/scheduler/def/CreateTimerAction.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/scheduler/def/CancelTimerAction.hbm.xml"/>谢谢阅读<!--graph.exemappingfiles-->精品文档放心下载<mappingresource="org/jbpm/graph/exe/Comment.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/exe/ProcessInstance.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/exe/Token.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/exe/RuntimeAction.hbm.xml"/>谢谢阅读<!--module.exemappingfiles-->精品文档放心下载<mappingresource="org/jbpm/module/exe/ModuleInstance.hbm.xml"/>感谢阅读<!--context.exemappingfiles-->感谢阅读<mappingresource="org/jbpm/context/exe/ContextInstance.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/context/exe/TokenVariableMap.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/context/exe/VariableInstance.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/context/exe/variableinstance/ByteArrayInstance.hbm.x谢谢阅读ml"/><mappingresource="org/jbpm/context/exe/variableinstance/DateInstance.hbm.xml"精品文档放心下载/><mappingresource="org/jbpm/context/exe/variableinstance/DoubleInstance.hbm.xm谢谢阅读l"/><mappingresource="org/jbpm/context/exe/variableinstance/HibernateLongInstance.h谢谢阅读bm.xml"/><mappingresource="org/jbpm/context/exe/variableinstance/HibernateStringInstan精品文档放心下载ce.hbm.xml"/><mappingresource="org/jbpm/context/exe/variableinstance/LongInstance.hbm.xml"精品文档放心下载/><mappingresource="org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml"精品文档放心下载/><mappingresource="org/jbpm/context/exe/variableinstance/StringInstance.hbm.xm感谢阅读l"/><!--jobmappingfiles--><mappingresource="org/jbpm/job/Job.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/job/Timer.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/job/ExecuteNodeJob.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/job/ExecuteActionJob.hbm.xml"/>精品文档放心下载<!--taskmgmt.exemappingfiles-->精品文档放心下载<mappingresource="org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/exe/TaskInstance.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml"/>谢谢阅读<!--loggingmappingfiles-->精品文档放心下载<mappingresource="org/jbpm/logging/log/ProcessLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/logging/log/MessageLog.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/logging/log/CompositeLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/log/ActionLog.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/log/NodeLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/log/ProcessInstanceCreateLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/log/ProcessInstanceEndLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/log/ProcessStateLog.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/log/SignalLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/graph/log/TokenCreateLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/graph/log/TokenEndLog.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/graph/log/TransitionLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/context/log/VariableLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/context/log/VariableCreateLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/context/log/VariableDeleteLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/context/log/VariableUpdateLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/context/log/variableinstance/ByteArrayUpdateLog.hb感谢阅读m.xml"/><mappingresource="org/jbpm/context/log/variableinstance/DateUpdateLog.hbm.xml感谢阅读"/><mappingresource="org/jbpm/context/log/variableinstance/DoubleUpdateLog.hbm.x精品文档放心下载ml"/><mappingresource="org/jbpm/context/log/variableinstance/HibernateLongUpdateLo精品文档放心下载g.hbm.xml"/><mappingresource="org/jbpm/context/log/variableinstance/HibernateStringUpdate感谢阅读Log.hbm.xml"/><mappingresource="org/jbpm/context/log/variableinstance/LongUpdateLog.hbm.xml感谢阅读"/><mappingresource="org/jbpm/context/log/variableinstance/StringUpdateLog.hbm.x谢谢阅读ml"/><mappingresource="org/jbpm/taskmgmt/log/TaskLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/log/TaskCreateLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/log/TaskAssignLog.hbm.xml"/>谢谢阅读<mappingresource="org/jbpm/taskmgmt/log/TaskEndLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/taskmgmt/log/SwimlaneLog.hbm.xml"/>精品文档放心下载<mappingresource="org/jbpm/taskmgmt/log/SwimlaneCreateLog.hbm.xml"/>感谢阅读<mappingresource="org/jbpm/taskmgmt/log/SwimlaneAssignLog.hbm.xml"/>精品文档放心下载</session-factory></hibernate-configuration>谢谢阅读我们在web应用项目的web.xml文件中定义JbpmContextFilter谢谢阅读实现JBPMCONTEXT的初始化<filter><filter-name>JbpmContextFilter</filter-name>谢谢阅读<filter-class>org.jbpm.web.JbpmContextFilter<谢谢阅读/filter-class></filter><filter-mapping><filter-name>JbpmContextFilter</filter-name>感谢阅读<url-pattern>/*</url-pattern>谢谢阅读</filter-mapping>到这里,jbpm的配置已经基本完成,关于jbpm详细资料大家可以参考jbpm用谢谢阅读户指南,这里就不多说。子流程的使用成果介绍详细阐述开发成果评审标准:清楚介绍开发成果谢谢阅读是相对独立的。设计思路描述主要的设计思路,开发方法以及技术要点评审标准:清晰表达设计思路和技术要点在jbpm中,我们可以将一个复杂的业务流程文件根据业务逻辑的不同划分为父谢谢阅读精品文档放心下载可以方便我们将来的维护,只对需要修改的流程进行修改,而不影响其他流程。谢谢阅读如何使用精品文档放心下载员按照此成果报告,能够进行一般简单的开发,具有较强的可操作性。感谢阅读评审标准:开发人员按此使用说明基本能应用成果进行开发精品文档放心下载这里我们介绍下关于jbpmxml文件,感谢阅读一个是父流程定义文件,一个是子流程定义文件。这里我想当执行完Payfirst谢谢阅读任务的时候,jbpm流程能自动去我的子流程文件中去执行那边定义的任务。谢谢阅读这里是父流程processdefinition.xml精品文档放心下载<?xmlversion="1.0"encoding="UTF-8"?>谢谢阅读<process-definitionxmlns="urn::jpdl-3.2"name="myapp"感谢阅读>。。。。。。<task-nodename="PayFirst">精品文档放心下载<taskname="PayFirstTask"swimlane="finance"></task>精品文档放心下载<transitionname="gethousecontract"to="subprocess">谢谢阅读<actionname="action"class="com.myapp.action.MessageActionHandler">感谢阅读<message>Haspayfirstbulkofmoney.Printconstractnow!感谢阅读</message></action></transition></task-node><process-statename="subprocess">谢谢阅读<sub-processname="subprocessdefinition"/>精品文档放心下载<transitionto="end"></transition>精品文档放心下载</process-state><task-nodename="passroundforperusal"谢谢阅读signal="last-wait"create-tasks="false">精品文档放心下载<taskname="perusal"><assignmentactor-id="#{processStarter}">精品文档放心下载</assignment></task><eventtype="node-enter"><actionname="createInstance"谢谢阅读class="com.myapp.action.CreateTaskInstanceAction"></action精品文档放心下载></event><transitionname="backto"to="OnePersonAudit">精品文档放心下载</transition></task-node></process-definition>可以看到,上面我们使用到了,在jbpm中,process-state标签代表的是引用感谢阅读子流程。这里我们接着定义子流程文件。子流程subprocessdefinition定义文件谢谢阅读<?xmlversion="1.0"encoding="UTF-8"?>谢谢阅读<process-definitionxmlns="urn::jpdl-3.2"感谢阅读name="subprocessdefinition">谢谢阅读<swimlanename="service"><assignmentactor-id="service1"/>感谢阅读</swimlane><start-statename="subStart">精品文档放心下载<transitionto="PrintContract"></transition>精品文档放心下载</start-state><task-nodename="PrintContract">感谢阅读<taskname="PrintContractTask"swimlane="service"谢谢阅读></task><transitionname="PrintContract"to="end">精品文档放心下载<actionname="action"class="com.myapp.action.MessageActionHandler">精品文档放心下载<message>Finishtheprocessinstancenow.</message感谢阅读></action></transition></task-node><end-statename="end"></end-state>精品文档放心下载</process-definition>示例实现感谢阅读如示例实现的项目工程评审标准:能简单展示开发成果的开发应用上面我们定义了两个XML谢谢阅读谢谢阅读时候一定要先部署子流程,然后在部署父流程。ProcessDefinitionsubProcess=ProcessDefinition.parseXmlResource精品文档放心下载("subprocessdefinition/processdefinition.xml");感谢阅读jbpmContext.deployProcessDefinition(subProcess);精品文档放心下载ProcessDefinitionprocessDefinition=ProcessDefinition.谢谢阅读parseXmlResource("processdefinition.xml");谢谢阅读jbpmContext.deployProcessDefinition(processDefinition);谢谢阅读部署完后,jbpm会将这两个流程定义文件保存在jbpm_processinstance表中,精品文档放心下载PrintContract任务的精品文档放心下载end()jbpm谢谢阅读行。使用规范谢谢阅读约定、约束等评审标准:清晰、详细描述出其应用规范注意事项描述配置、开发等需要注意的问题,包括各种关键点和难点。可逐步补充精品文档放心下载精品文档放心下载里找到答案使用子流程要注意:精品文档放心下载程的异常直接查看jbpm_Token或者jbpm_log无法找到流程间的关系,需要查看精品文档放心下载jbpm_processinstance表,才能找到父流程,因为Token在离开processstate精品文档放心下载的时候就会删除subprocessid,直接看jbpm_log也无法看出两个token之间的谢谢阅读关系。应用系统与jBPM的结合成果介绍在实际开发使用jBPMjBPM系统与业务系统完全分离的策略。jBPM系谢谢阅读统只负责流程的监控和执行,业务的重心仍然是实际业务需求。谢谢阅读设计思路谢谢阅读务在jBPM流程系统中建立相关流程,提供相关流程的监控和执行接口,客户端谢谢阅读可以通过这些接口对流程进行操作。启动一个流程实例时,首先访问流程系统,取得一个新的流程实例ID。在业务谢谢阅读系统中保存这个ID。在进行流程监控和执行时,根据这个ID对流程实例进行操作。感谢阅读如何使用以上面购房流程为例说明,将客户购房过程在一个Order中进行处理。感谢阅读客户登记看房,启动一个流程实例,取得流程ID,保存在Order中感谢阅读API查找当前任务,感谢阅读执行任务时,一方面执行流程,一方面修改Order记录。感谢阅读示例实现Order要记录流程ID。publicclassOrderimplementsSerializable{精品文档放心下载privateLongid;privateLongprocessId;}流程和业务系统的接口为OrderManager和BpmManager。精品文档放心下载客户看房登录时先启动一个流程。BpmManagerbpmManger=...;LongprocessId=bpmManager.createProcess();感谢阅读Orderorder=newOrder();order.setProcessId(processId);精品文档放心下载session.save(order);在后面的步骤中,可以根据Order的processId取得流程ID,执行流程任务。感谢阅读bpmManager.executeProcessTask();感谢阅读session.update(order);注意事项应用系统中用户角色如何与jBPM结合成果介绍应用系统中的用户应该与jBPM流程系统中一致,必须统一起来才能使用。一方精品文档放心下载面可以采用用户帐号同步的策略,从业务系统复制必要的用户信息到jBPM流程精品文档放心下载感谢阅读业务系统从最基本的用户账号上扩展用户信息。设计思路Hibernate感谢阅读使用一个用户账号表,不同映射文件,保持系统的相对独立性。精品文档放心下载如何使用jBPM中用户是由identity模块提供,在实际开发中,可以以jBPM中提供的用精品文档放心下载户表为基础,应用系统的较详细的用户信息在上面扩展。也可以建立一个基础的用户帐号,jBPM中的用户与应用系统中的用户在它的基精品文档放心下载础上扩展。示例实现jBPM中User提供了几最基本的字段。publicclassUserextendsEntityimplementsPrincipal{感谢阅读privatestaticfinallongserialVersionUID=1L;谢谢阅读protectedStringpassword=null;谢谢阅读protectedStringemail=null;精品文档放心下载protectedSetmemberships=null;谢谢阅读publicUser(){}publicUser(Stringname){super(name);}}Hibernate映射文件内容为:<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC谢谢阅读"-//Hibernate/HibernateMappingDTD3.0//EN"感谢阅读"/hibernate-mapping-3.0.dtd">精品文档放心下载<hibernate-mappingauto-import="false"default-access="field">精品文档放心下载<classname="org.jbpm.identity.User"谢谢阅读table="JBPM_ID_USER"discriminator-value="U"><idname="id"column="ID_"><generatorclass="native"/></id>感谢阅读<discriminatortype="char"column="CLASS_"/>感谢阅读<propertyname="name"column="NAME_"/>感谢阅读<propertyname="email"column="EMAIL_"/>精品文档放心下载<propertyname="password"column="PASSWORD_"/>精品文档放心下载<setname="memberships"cascade="all">精品文档放心下载<keycolumn="USER_"/><one-to-manyclass="org.jbpm.identity.Membership"/>感谢阅读</set><setname="permissions"cascade="all"table="JBPM_ID_PERMISSIONS">感谢阅读<keycolumn="ENTITY_"foreign-key="none"/>精品文档放心下载<elementtype="org.jbpm.identity.hibernate.PermissionUserType">感谢阅读<columnname="CLASS_"/><columnname="NAME_"/><columnname="ACTION_"/></element></set></class></hibernate-mapping>CustomUserjBPM中的User中继承的策略,精品文档放心下载它多出一个字段carId。publicclassCustomUserextendsUser{感谢阅读privateStringcardId;publicStringgetCardId(){returncardId;}publicvoidsetCardId(StringcardId){感谢阅读this.cardId=cardId;}}映射文件为:<?xmlversion="1.0"?><!DOCTYPEhibernate-mappingPUBLIC感谢阅读"-//Hibernate/HibernateMappingDTD3.0//EN"谢谢阅读"/hibernate-mapping-3.0.dtd精品文档放心下载"><hibernate-mappingauto-import="false"default-access="field"感谢阅读><subclassname="com.sample.model.CustomUser"感谢阅读extends="org.jbpm.identity.User"discriminator-value="U">精品文档放心下载<jointable="CUSTOM_USER"><keycolumn="ID_"></key><propertyname="cardId"column="CARDID_"/>谢谢阅读</join></subclass></hibernate-mapping>这里,CustomUser是从jBPM中的User继承的。谢谢阅读jBPM当前版本的稳定性评估成果介绍通过官方jbpmRoadMap以及jbpmjirajbpm的版本更精品文档放心下载jbpm4.0精品文档放心下载到jbpm3.2.1版本,而且从jira上发现jbpm3.3谢谢阅读jira上看,目前版本升级主要是bug的修改和功能的完善。感谢阅读流程执行步骤耗时阀值和自动提醒设置成果介绍Jbpm内置调度功能,jbpm的调度部分分为2块,timer主要是流程设计人员的感谢阅读工作,将timer放置到流程中;scheduler是jbpm自己维护的,我们只需要在感谢阅读后台进行调用即可。设计思路流程执行可以建立或删除定时器.定时器存放在一个timerstore里.当一个定时精品文档放心下载器的运行必须先从timerstore里面取得并且在根据指定的时间来启动该定时器谢谢阅读Jbpm时间管理思路整体来说实现的非常清晰:1、引擎解析流程定义xml时,给相应的事件挂接上create-timer和感谢阅读cancel-timer动作2、流程实例实际运转时,create-timer动作在相应事件触发时执行精品文档放心下载3create-timer在job表里插入相应时间jobjob记录附上计算完感谢阅读毕的执行时间4、JobExecutorServlet在后台启动一到多个JobExecutorThread线程精品文档放心下载5、JobExecutorThread线程不停的每隔一段时间对job表扫描一次,找出需要精品文档放心下载执行的job记录,执行之6、只执行一次的job记录,执行完毕后删除之;重复执行的job记录,写入新谢谢阅读的执行时间,更新之7、相应事件触发cancel-timer动作,将对应job记录从job表里删除精品文档放心下载如何使用jBPM通过定时器(timer)实现日程调度。在node中加入timer元素,即可实感谢阅读现基于定时器的节点执行监控,实现自动提醒功能。jbpm提供了2种调用scheduler的方法:精品文档放心下载一种是用在web应用的,采用org.jbpm.scheduler.impl.SchedulerServlet,精品文档放心下载具体的方法这个类的javadocweb.xml中加载它就行感谢阅读了;另一种是针对的c-s程序,jbpm提供了一个很好的示例感谢阅读org.jbpm.scheduler.impl.SchedulerMain,我们可以参照它编写我们自己的精品文档放心下载Scheduler。实例实现最容易的方法指定一个定时器是在节点里加入定时器元素.谢谢阅读运用action的timer的例子<statename='catchcrooks'><timername='reminder'duedate='3businesshours'repeat='10businessminutes谢谢阅读'transition='time-out-transition'>感谢阅读<actionclass='the-remainder-action-class-name'/>谢谢阅读timer>state>运用script的timer的例子<statename='catchcrooks'><timername='reminder'duedate='3businesshours'repeat='10businessminutes感谢阅读'transition='time-out-transition'>感谢阅读<script>System.out.println(newDate())script>感谢阅读timer>state>state'catchcrooks'reminder即被谢谢阅读创建。该定时器延迟3businesshours开始执行动作,每10businessminutes重精品文档放心下载复执行一次,到期后马上执行action类中的Java代码,然后实施谢谢阅读time-out-transition(或script打印时间)迁移。感谢阅读通过在事件的action中加入create-timer和cancel-timer动作,可以分别实感谢阅读现事件对定时器的创建和取消。定时器timer可以被用于decisionforkjoinnodeprocess-statestatesuper-statetask-node等节点,可感谢阅读以设置开始时间duedate和频率repeat,定时器动作可以是所支持的任何动作精品文档放心下载action或script感谢阅读create-timer和cancel-timer感谢阅读素只是create-timer动作依附于node-enter事件、cancel-timer动作依附于感谢阅读node-leave事件的一个简略表示。说说整个过程:1、令牌进入节点catchcrooks2、timer被触发(实际这时是在执行create-timer动作)谢谢阅读3、3businesshours后timer事件触发谢谢阅读4、定义的action被执行5、令牌顺着time-out-transition路径离开catchcrooks节点精品文档放心下载6、cancel-timer动作被执行即timer终止(没有给repeat的机会)谢谢阅读timer要先启动scheduler,如果是web项目则只要在web.xml中配谢谢阅读置JbpmThreadsServlet,这样在项目启动后会自动开启scheduler。谢谢阅读JbpmThreadsServlet配置如下:<!--JbpmThreadsServlet--><servlet><servlet-name>JbpmThreadsServletservlet-name>精品文档放心下载<servlet-class>org.jbpm.web.JbpmThreadsServletservlet-class>精品文档放心下载<load-on-startup>1load-on-startup>精品文档放心下载servlet><servlet-mapping><servlet-name>JbpmThreadsServletservlet-name>谢谢阅读<url-pattern>/threadsurl-pattern>谢谢阅读servlet-mapping>注意事项对time节点来说namerepeattransition谢谢阅读说,每一个time节点的name必须唯一,如果你不定义name属性,引擎会默认感谢阅读把node节点的name赋给timertimer节点谢谢阅读的namename就会是catchcrooksrepeat精品文档放心下载则timer就会只执行一次动作不会重复执行。transition属性,如果定义了这感谢阅读个属性,流程令牌会在timer执行动作完毕后,顺着这个路径离开node节点。精品文档放心下载所以在上面这个例子里,尽管定义了repeat属性,action还是会只执行一次。谢谢阅读action节点,可选,即timer节点在时间到时执行的动作,可以是任意action精品文档放心下载类型,包括script。注意与时间有关的两种action类型:create-timer和感谢阅读cancel-timertimer节点在被引擎解释时就是被分解为create-timer谢谢阅读和cancel-timer两个action,create-timer挂接到node-enter事件中,精品文档放心下载cancel-timer挂接到node-leave事件中。action节点最多只可以挂一个。谢谢阅读传阅功能的实现成果介绍传阅功能是管理系统中比较常见的一个功能,这里使用jbpm实现该功能。感谢阅读设计思路这里通过使用jbpm的transition来实现传阅功能。谢谢阅读如何使用关于jbpm的transition使用很简单,大家可以参考jbpm用户指南精品文档放心下载示例实现<task-nodename="Coding"><taskname="Coding"swimlane="programmer"/>感谢阅读<transitionname="to_CodeReview"to="CodeReview">谢谢阅读</transition><transitionname="to_IntegratedTest"to="IntegratedTest"谢谢阅读></transition></task-node><task-nodename="CodeReview">精品文档放心下载<taskname="ReviewCode"swimlane="manager"/>精品文档放心下载</task><transitionname="to_Coding"to="Coding"><感谢阅读/transition></task-node>上面是一个“代码检查”的类似传阅的流程,程序员编写完代码之后需要传给精品文档放心下载manager进行代码审查,manager审查完毕需要发回给程序员。谢谢阅读动态指定执行者成果介绍上面讲了传阅功能的实现,但大家可以发现,上面的例子只能传阅给流程定义感谢阅读xml感谢阅读精品文档放心下载可能执行者会经常改变。这里我们介绍如何给任务动态指定执行者。感谢阅读设计思路这里我们是通过jbpm的ActionHandler操作动态指定执行者的操作,当进入该谢谢阅读任务节点的时候,我们可以通过为该任务指定一个action操作,该操作根据业感谢阅读务规则进行任务执行者的动态指定。如何使用我们可以在一个任务task节点使用assignment标签指定运行该任务的执行者,感谢阅读如果没指定的人则不能执行该任务,另外我们也可以通过action操作来在程序精品文档放心下载中动态设置assignment中的执行人来实现,这里可以是一个或多个执行人。精品文档放心下载示例实现首先我们将流程在processdefinition.xml定义,示例如下:谢谢阅读<?xmlversion="1.0"encoding="UTF-8"?>谢谢阅读<process-definitionxmlns="urn::jpdl-3.2"name="myapp"精品文档放心下载><task-nodename="OnePersonAudit">谢谢阅读<taskname="OnePersonAuditTask"swimlane="manager">精品文档放心下载<controller><variablename="pass"access="read,write,required"><谢谢阅读/variable></controller></task><!--eventtype="node-leave">感谢阅读<actionname="createInstance"感谢阅读class="com.myapp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外墙保温合同7篇
- 虚假陈述证券民事赔偿案件聘请律师合同6篇
- 集装箱板房购买合同5篇
- 危房改造责任豁免协议
- 第九单元实验活动5:一定溶质质量分数氯化钠溶液的配制教学设计-2023-2024学年九年级化学人教版下册
- 品牌经营代理合同7篇
- 第1课时 加法运算律(教学设计)-2023-2024学年四年级下册数学人教版
- 第六单元 碳和碳的氧化物 课题2 碳的化合物 教学设计-2024-2025学年九年级上学期化学(人教版2024)标签标题
- 天津环保人造草坪施工方案
- 海南拼装运动地板施工方案
- TB-T 3263.1-2023 动车组座椅 第1部分:一等座椅和二等座椅
- SH∕T 3097-2017 石油化工静电接地设计规范
- 部编版五年级下册语文1-8单元习作课件
- 污水处理厂TOT项目招标文件模板
- 劳工及道德体系法律法规清单
- 2024年湖南高速铁路职业技术学院单招职业适应性测试题库及参考答案
- 初中地理实验设计
- 2024年哈尔滨科学技术职业学院单招职业适应性测试题库及答案解析
- 2024年云南昆明市八年级数学第二学期期末统考试题含解析
- 2024年北京市大兴区清源街道招聘笔试冲刺题(带答案解析)
- (2024年)污水处理设备培训方案
评论
0/150
提交评论