《jBPM基础理论》PPT课件.ppt_第1页
《jBPM基础理论》PPT课件.ppt_第2页
《jBPM基础理论》PPT课件.ppt_第3页
《jBPM基础理论》PPT课件.ppt_第4页
《jBPM基础理论》PPT课件.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、SCCE 2010课程体系介绍,第2章jBPM基础,回顾,什么是工作流管理系统 什么是jBPM 如何使用jBPM流程设计器 掌握jBPM的应用,本章内容,jBPM数据库表的两种创建方式 jBPM的基本对象 jBPM流程的打包部署 jBPM的Token令牌 jBPM流程上下文,本章目标,了解jBPM数据库表的创建 掌握jBPM的基本对象 掌握jBPM流程的打包部署 理解jBPM的Token令牌 了解jBPM的流程上下文,1. jBPM数据库表,1.1 schema文件创建jBPM数据库表 使用schema文件进行创建时,需要在jBPM套件的db目录下找到与安装的目标数据库相同的数据库脚本,1.2

2、 自动创建jBPM数据库表,jBPM可以使用JbpmConfiguration对象提供的createSchema方法来创建数据库,/创建数据库 public void testCreateDB() throws Exception /JbpmConfiguration对象将在下一节中详细介绍 JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); jbpmConfiguration.createSchema(); ,自动创建jBPM数据库表,在创建数据库之前,需在classpath中添加hibernate.c

3、fg.xml文件,配置数据库连接信息、数据库方言以及jBPM信息, org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql:/localhost:3306/jbpm_mysql root 000000 ,省略jBPM映射文件,自动创建jBPM数据库表,创建的jBPM数据库,自动创建jBPM数据库表,jBPM数据库表的说明 流程配置类数据库表,自动创建jBPM数据库表,jBPM数据库表的说明 流程运行类数据库表,2. jBPM基本对象,2.1 JbpmConfiguration对象 JbpmConfiguration

4、主要用于读取配置文件,并且提供流程运行过程中所需要的各种服务对象 jBPM套件的源文件目录org.jbpm包下面有一个default.jbpm.cfg.xml文件,它是jBPM默认采用的配置文件,2.1 JbpmConfiguration对象,修改默认配置方式 在classpath下面新建一个jbpm.cfg.xml文件 jbpm.cfg.xml代码, ,JbpmConfiguration对象,JbpmConfiguration是一个单例对象,通过JbpmConfiguration的静态方法getInstance()获得 JbpmConfiguration是一个单例对象,通过JbpmConfi

5、guration的静态方法getInstance()获得,JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();,JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();,JbpmConfiguration对象,JbpmConfiguration常用方法 创建jBPM数据库:Public void createSchema() 删除jBPM数据库:Public void dropSchema(),2.2 JbpmContext对象,Jbp

6、mContext对象主要用于操作流程,可以新建流程、查找任务实例、获取某个人的代办任务等等 JbpmConfiguration对象提供的方法获得JbpmContext对象,在使用完JbpmContext后必须调用JbpmContext的close()方法将其关闭,public void testJbpmObject() throws Exception /通过JbpmConfiguration的静态方法获得JbpmConfiguration实例 JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); /通过J

7、bpmConfiguration获得JbpmContext对象 JbpmContext jbpmContext = null; try jbpmContext = jbpmConfiguration.createJbpmContext(); /省略具体流程的操作 catch (Exception e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext对象 ,JbpmContext对象,使用过滤器来获得JbpmContext对象。 Web应用中可以通过JbpmConfiguration对象提供的getCurrentJ

8、bpmContext()方法获得一个JbpmContext对象 jBPM套件的源文件目录org.jbpm.web包下面有一个JbpmContextFilter文件,该文件就是jBPM为JbpmContext提供了一个Filter类,主要代码如下:,JbpmContext jbpmContext = getJbpmConfiguration().createJbpmContext(jbpmContextName); try if (isAuthenticationEnabled) jbpmContext.setActorId(actorId); filterChain.doFilter(serv

9、letRequest, servletResponse); finally jbpmContext.close(); ,JbpmContext对象,使用过滤器,JbpmContext对象,可以通过JbpmConfiguration对象提供的getCurrentJbpmContext()方法获得。在使用完毕后,关闭JbpmContext的工作由filter来完成,无须用户手工操作 使用过滤器的弊端: 用户每次向服务器端发送请求时,无论是否需要使用该JbpmContext对象,filter都会创建该对象,这会对性能产生一定的影响,2.3 ProcessDefinition对象,ProcessDef

10、inition是流程定义对象,对应的数据表是jbpm_processdefinition 。流程定义有版本控制,允许同名的流程定义共存 ProcessDefinition(流程定义)就是在jBPM的可视化流程设计器中拖拽的流程,流程设计完成后可以发布到数据库中,ProcessDefinition对象,Public ProcessInstance createProcessInstance();,Public static ProcessDefinition parseXmlInputStream(java.io.InputStream is);,Public ProcessInstance c

11、reateProcessInstance(java.util.Map variables);,Public static ProcessDefinition parseXmlResource (String xmlResource);,Public static ProcessDefinition parZipInputStream (java.io.ZipInputStream zis);,流程定义的常用方法: 创建流程实例 创建一个新的流程实例 通过解析给出的流程定义的XML文件流,生成一个流程定义对象 通过给出的指定位置的流程定义的XML文件解析成一个流程定义对象 通过解析给出的流程定义

12、的ZIP文件,生成一个流程定义对象,ProcessDefinition对象,流程定义的应用 首先定义流程,ProcessDefinition对象,部署流程,public void testDeploy() throws Exception /获得JbpmConfiguration对象 JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); /通过JbpmConfiguration获得JbpmContext对象 JbpmContext jbpmContext = null; /定义流程定义文件 ProcessD

13、efinition pd = ProcessDefinition.parseXmlResource(simple/processdefinition.xml); try jbpmContext = jbpmConfiguration.createJbpmContext();jbpmContext.deployProcessDefinition(pd); /发布流程 catch (Exception e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext对象 ,jBPM数据库表变化 流程定义表如下 流程迁移表如下 流

14、程节点表如下 流程模块定义表如下,ProcessDefinition对象,流程名称,流程版本,ProcessDefinition对象,把上面流程重新后,再定义一个新的流程部署,新的流程如下:,jBPM数据库表变化: 流程定义表如下 流程迁移表如下 流程节点表如下 流程模块定义表如下,ProcessDefinition对象,ProcessDefinition对象,获得最新版本的流程定义对象,public void testGetPd() throws Exception JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInst

15、ance(); JbpmContext jbpmContext = null; try jbpmContext = jbpmConfiguration.createJbpmContext(); /根据流程名称获得最新流程定义 ProcessDefinition pd = jbpmContext.getGraphSession().findLatestProcessDefinition(simple); System.out.println(最新流程定义ID:+pd.getId(); System.out.println(最新流程定义版本:+pd.getVersion(); catch (Exc

16、eption e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext 对象 ,测试结果: 最新流程定义ID:2 最新流程定义版本:2,ProcessDefinition对象,获取所有最新版本的流程定义对象,public void testGetPd() throws Exception JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = null; try jbpmConte

17、xt = jbpmConfiguration.createJbpmContext(); List pdList = jbpmContext.getGraphSession().findLatestProcessDefinitions(); for(ProcessDefinition pd:pdList) System.out.println(流程定义ID:+pd.getId(); System.out.println(“流程定义版本:”+pd.getVersion(); catch (Exception e) e.printStackTrace(); finally jbpmContext.c

18、lose(); /关闭JbpmContext 对象 ,测试结果:流程定义ID:3 流程定义版本:1 流程定义ID:2 流程定义版本:2,ProcessDefinition对象,获取特定版本的流程定义对象,public void testGetPd() throws Exception JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = null; try jbpmContext = jbpmConfiguration.createJbpmContext(

19、); ProcessDefinition pd = jbpmContext.getGraphSession().findProcessDefinition(simple, 1); System.out.println(版本为1的流程定义ID:+pd.getId(); System.out.println(版本为1的流程定义版本:+pd.getVersion(); catch (Exception e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext 对象 ,测试结果:最新流程定义ID:1 最新流程定义版本:1,2

20、.4 ProcessInstance对象,流程实例(ProcessInstance)是基于流程定义的,一个流程定义可以有多个流程实例,而一个流程实例只能有一个流程定义,它们之间是一对多的关系,流程实例的常用方法 获取当前流程实例对应的流程上下文对象 获取流程定义对象 获取流程实例的Token对象 驱动流程向下流转 获取流程实例对应的任务实例管理对象 暂停流程实例 使处于暂停状态的流程实例恢复到可执行状态,ProcessInstance对象,Public void resume();,Public void suspend();,Public TaskMgmtInstance getTaskMg

21、mtInstance();,Public void signal();,Public Token getRootToken();,Public ProcessDefinition getProcessDefinition();,Public ContextInstance getContextInstance();,ProcessInstance对象,创建流程实例并向流程实例表中插入数据 如下:,public void testGetPd() throws Exception JbpmConfiguration jbpmConfiguration = JbpmConfiguration.get

22、Instance(); JbpmContext jbpmContext = null; try jbpmContext = jbpmConfiguration.createJbpmContext(); ProcessDefinition pd = jbpmContext.getGraphSession().findLatestProcessDefinition(leave); /创建流程实例 ProcessInstance pi = (ProcessInstance)processDefinition.createInstance(); System.out.println(流程实例Id:+p

23、i.getId(); catch (Exception e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext 对象 ,3.1流程打包 jBPM流程的打包过程 打开流程设计器中相应的流程 选择“Deployment”标签 把3个流程文件打包成zip包,3. jBPM流程发布,把3个流程文件打包成zip包,3.2 流程发布,前面的部署流程只是部署了一个流程定义文件,现在部署打包的zip包,public void testDeployByZip() throws Exception JbpmConfiguration

24、jbpmConfiguration = JbpmConfiguration.getInstance(); JbpmContext jbpmContext = null; String fileName = E:/leave.zip; /定义流程打包文件的路径 try jbpmContext = jbpmConfiguration.createJbpmContext(); InputStream is = new FileInputStream(new File(fileName); ZipInputStream zis = new ZipInputStream(is); ProcessDefi

25、nition pd = ProcessDefinition.parseParZipInputStream(zis); jbpmContext.deployProcessDefinition(pd); zis.close(); is.close(); catch (Exception e) e.printStackTrace(); finally jbpmContext.close(); /关闭JbpmContext对象 ,发布后,jbpm_bytearray表和jbpm_byteblock表中数据分别如下,4. Token令牌,在jBPM中,一个运行标记Token代表一个processDefi

26、nintion中的一次执行,用于维护流程设计图中结点的指针 Token需要一个信号(signal)来使流程向前执行,信号signal用于指引一个令牌Token去继续一个图的执行,注意: 在流程实例ProcessInstance中,信号signal是委派给根令牌 root token的。因此对流程实例的信号实际就是根令牌的信号,一个流程定义可以有多个流程实例,当一个流程实例创建时,该流程的 主路径就会随之创建。获得根令牌代码如下: 触发流程实例往下运行的操作包含以下两个 强制执行ProcessInstance的signal操作 执行TaskInstance的end操作,Token令牌,Token token = processInstance.getRootToken();,5. 流程上下文,上下文Context是处理流程变量的地方。流程变量使用键值对来维护流程实例相关的信息,上下文必须要存储到数据库中 获得流程上下文的方法为:,ContextInstance context = proce

温馨提示

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

评论

0/150

提交评论