让中国软件影响世界让中国移动BI腾飞杨辉亚信科技(中国)有限公司2010年02月JBPM培训让中国移动BI腾飞相关内容Jbpm4.1开发流程使用jbpm4.1开发遇到的问题Jbpm4.1简介工作流简介Jbpm4.1服务和例子讲解Jbpm4.1与项目集成什么是工作流?简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。我们可以将整个业务过程看作是一条河,其中流过的就是工作流。工作流要解决的问题为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务让中国移动BI腾飞工作流好处业务角度–业务流程标准化–实现应用逻辑和过程逻辑分离–改进和优化业务流程,提高业务工作效率;–实现更好的业务过程控制,提高服务质量;–提高业务流程的灵活性;–业务纽带,协作共享。技术角度–降低开发风险;–统一集中实现;–快速应用开发。让中国移动BI腾飞工作流举例银行取款过程的工作流描述1、客户填写取款单2、银行出纳接收取款单和客户存折3、检查客户信息:1)余额不足,要求重写取款单,返回步骤12)余额足够,继续进行4、客户输入密码:1)密码正确,继续进行2)密码错误,重新输入;3次错误,退出执行5、出纳取出相应现金,并在存折上记录6、将现金和存折交给客户让中国移动BI腾飞图例让中国移动BI腾飞Jbpm简介•2003年1月,建立项目•2004年加入JBoss•jPDL流程描述语言•支持BPEL语言•使用Hibernate做为流程数据持久化,支持任何一种数据库•可以部署在任何J2EE的应用里让中国移动BI腾飞jBpm工具箱(1)让中国移动BI腾飞jBpm图形化流程设计器:图形设计器是一个Eclipse插件;它同时支持业务分析员和技术开发人员,这样就可以在业务流程建模和实际执行之间平滑转换jBpm流程引擎:是一个Java库;处理流程定义和运行时的流程实例执行。可以用在任何java环境(web应用程序,Swing应用程序,EJB等等)。jBpm调度程序:监视和运行已经计划到时执行流程的定时器的组件。jBpm工具箱(2)jBpm数据库兼容包:包括所有支持数据库的相关信息,JDBC驱动程序和数据库初始化脚本。jBpmBPEL扩展:独立的扩展包用来支持BPEL(BusinessProcessExecutionLanguage商业流程执行语言)让中国移动BI腾飞Jbpm开发流程1.选定数据库,对数据库进行初始化;jBPM平台本身需要数据库的支持,所以在使用jBPM之前要先初始化相应的数据库,包括创建表和插入初始化数据等。2.使用JBPM定义流程,生成ProcessDefinition.xml;并加入自定义的处理代码。3.利用JUnitFramework写单元测试。4.部署jBPM。让中国移动BI腾飞Jbpm4.1数据库表(1)表名称描述JBPM4_DEPLOYMENT流程定义表JBPM4_DEPLOYPROP流程定义属性表JBPM4_EXECUTION流程实例表JBPM4_ID_GROUP角色表JBPM4_ID_MEMBERSHIP用户角色表JBPM4_ID_USER用户表JBPM4_JOB定时表JBPM4_LOB存储表JBPM4_PARTICIPATION参与者表JBPM4_SWIMLANE泳道表JBPM4_TASK任务表JBPM4_VARIABLE上下文表Jbpm4.1数据库表(2)表名称描述JBPM4_HIST_ACTINST流程活动(节点)实例表JBPM4_HIST_DETAIL流程历史详细表JBPM4_HIST_PROCINST流程实例历史表JBPM4_HIST_TASK流程任务实例历史表JBPM4_HIST_VAR流程变量(上下文)历史表请假流程实例请假流程jpdl文件Jbpm4.1JPDL(1)process流程处理顶级元素(element)是流程处理定义。控制流程Activities活动start启动说明一个流程的实例从哪里开始。在一个流程里必须有一个开始节点。开始节点必须有一个向外的流向,这个流向会在流程启动的时候执行。state状态节点一个等待状态节点。流程处理的流向会在外部触发器调用提供的API之前一直等待。decision决定节点在多个选择中选择一条路径。也可以当做是一个决定。一个决定活动拥有很多个向外的转移。当一个流向到达一个决定活动时,会自动执行并决定交给哪个向外的转移。Jbpm4.1JPDL(2)concurrency并发使用fork和join活动,可以并行处理任务。end结束结束流向Task任务任务分配者一个简单的任务会被分配给一个指定的用户任务候选人任务可能被分配给一组用户。其中的一个用户应该接受这个任务并完成它。任务分配处理器一个AssignmentHandler可以通过编程方式来计算一个任务的分配人和候选人。任务泳道一个流程中的多任务可以分配给一个单独的泳道。流程实例将记得换选人和用户,在泳道中执行的第一个任务。任务序列在同一个泳道中将被分配给这些用户和候选人任务变量Jbpm4.1JPDL(3)任务变量是任务表单的一个很重要的部分。任务表单显示来自任务和流程实例的数据。然后从用户一侧录入的数据会转换成设置的任务变量。在任务中支持e-mail可以为分配人提供一个提醒,当一个任务添加到他们的列表时,以及在特定的时间间隔进行提醒。sub-process子流程创建一个子流程实例然后等待直到它完成。当子流程实例完成,子流程中的流向就会继续。原子活动java任务流程处理的流向会执行这个活动配置的方法。Script脚本Hql查询使用hql活动,我们可以在database中执行HQLquery,并将返回的结果报仇呢到流程处理的变量中。Sql查询sql活动和hql活动十分相似,sql查询使用sql语句直接查询Jbpm4.1JPDL(4)Event事件事件指定流程中的特定点,那里注册了一系列的时间监听器。当一个流程通过这一点时,事件监听器就会被提醒。Jbpm4.1服务(1)ProcessEngine流程引擎在jBPM内部通过各种服务相互作用。服务接口可以从ProcessEngine中获得,它是从Configuration构建的。流程引擎是线程安全的,它可以保存在静态变量中,甚至JNDI中或者其他重要位置。在应用中,所有线程和请求都可以使用同一个流程引擎对象。ProcessEngineprocessEngine=Configuration.getProcessEngine();repositoryService=processEngine.get(RepositoryService.class);executionService=processEngine.getExecutionService();historyService=processEngine.getHistoryService();managementService=processEngine.getManagementService();taskService=processEngine.getTaskService();identityService=processEngine.getIdentityService();Jbpm4.1服务(2)RepositoryService包含了用来管理发布资源的方法部署流程repositoryService.createDeployment().addResourceFromClasspath(org/jbpm/examples/eventlistener/process.jpdl.xml).deploy()卸载已发布的流程repositoryService.deleteDeploymentCascade(deploymentId);executionService流程实例服务类启动一个新的流程实例ProcessInstanceprocessInstance=executionService.startProcessInstanceByKey(EventListener);Jbpm4.1服务(3)执行等待的流向当使用一个state活动时,执行(或流程实例)会在到达state的时候进行等待,直到一个signal(也叫外部触发器)出现。signalExecution方法可以被用作这种情况。执行通过一个执行id(字符串)来引用。executionService.signalExecutionById(executionId);流程查询executionService.createProcessInstanceQuery().processInstanceId(processInstanceId).list();executionService.findProcessInstanceById(processInstanceId);Jbpm4.1服务(4)taskService任务服务TaskService的主要目的是提供对任务列表的访问途径获得任务列表根据执行人查询ListTasktaskList=taskService.findPersonalTasks(“johndoe”);使用查询条件taskService.createTaskQuery().orderDesc(TaskQuery.PROPERTY_CREATEDATE).assignee(userId).list();完成任务taskService.completeTask(taskId);任务添加注释taskService.addTaskComment(taskId,hi);任务变量MapString,Objectvariables=taskService.getVariables(taskId,variableNames);taskService.setVariables(taskId,variables);Jbpm4.1服务(5)HistoryService历史服务在流程实例执行的过程中,会不断触发事件。从那些事件中,运行和完成流程的历史信息会被收集到历史表中。HistoryService提供了对那些信息的访问功能。ListHistoryProcessInstancehistoryProcessInstances=historyService.createHistoryProcessInstanceQuery().processDefinitionId(ICL-1).orderAsc(HistoryProcessInstanceQuery.PROPERTY_STARTTIME).list();ManagementService管理服务管理服务通常用来管理job。Jobjob=managementService.createJobQuery().processInstanceId(processInstanceId).uniqueResult();managementService.executeJob(job.getId());Jbpm4.1与项目集成(1)Jbpm4.1与spring集成通过Spring暴露服务现在,就可以使用Spring来获取或注入这些Jbpm4所提供的服务了。Jbpm4.1与项目集成(2)集成Spring的事务实现Jbpm4.1与项目集成(3)Jbpm4.1与项目集成(4)Jbpm4.1与hibernate集成使用jbpm4.1开发遇到的问题(1)任务提醒功能jbpm4.1虽然支持任务reminder功能,但duedate和repeat不能设置为变量,只能在编写jpdl时写固定值。而且reminder只能通过jbpm与JMail的集成来发送邮件,没有提供接口可以直接和uniTouch集成方式。使用jbpm4.