《jBPM基础理论》PPT课件.ppt

上传人:za****8 文档编号:13337845 上传时间:2020-06-15 格式:PPT 页数:38 大小:2.70MB
返回 下载 相关 举报
《jBPM基础理论》PPT课件.ppt_第1页
第1页 / 共38页
《jBPM基础理论》PPT课件.ppt_第2页
第2页 / 共38页
《jBPM基础理论》PPT课件.ppt_第3页
第3页 / 共38页
点击查看更多>>
资源描述
SCCE2010课程体系介绍,第2章jBPM基础,回顾,什么是工作流管理系统什么是jBPM如何使用jBPM流程设计器掌握jBPM的应用,本章内容,jBPM数据库表的两种创建方式jBPM的基本对象jBPM流程的打包部署jBPM的Token令牌jBPM流程上下文,本章目标,了解jBPM数据库表的创建掌握jBPM的基本对象掌握jBPM流程的打包部署理解jBPM的Token令牌了解jBPM的流程上下文,1.jBPM数据库表,1.1schema文件创建jBPM数据库表使用schema文件进行创建时,需要在jBPM套件的db目录下找到与安装的目标数据库相同的数据库脚本,1.2自动创建jBPM数据库表,jBPM可以使用JbpmConfiguration对象提供的createSchema方法来创建数据库,/创建数据库publicvoidtestCreateDB()throwsException/JbpmConfiguration对象将在下一节中详细介绍JbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();jbpmConfiguration.createSchema();,自动创建jBPM数据库表,在创建数据库之前,需在classpath中添加hibernate.cfg.xml文件,配置数据库连接信息、数据库方言以及jBPM信息,org.hibernate.dialect.MySQLDialectcom.mysql.jdbc.Driverjdbc:mysql:/localhost:3306/jbpm_mysqlroot000000,省略jBPM映射文件,自动创建jBPM数据库表,创建的jBPM数据库,自动创建jBPM数据库表,jBPM数据库表的说明流程配置类数据库表,自动创建jBPM数据库表,jBPM数据库表的说明流程运行类数据库表,2.jBPM基本对象,2.1JbpmConfiguration对象JbpmConfiguration主要用于读取配置文件,并且提供流程运行过程中所需要的各种服务对象jBPM套件的源文件目录org.jbpm包下面有一个default.jbpm.cfg.xml文件,它是jBPM默认采用的配置文件,2.1JbpmConfiguration对象,修改默认配置方式在classpath下面新建一个jbpm.cfg.xml文件jbpm.cfg.xml代码,JbpmConfiguration对象,JbpmConfiguration是一个单例对象,通过JbpmConfiguration的静态方法getInstance()获得JbpmConfiguration是一个单例对象,通过JbpmConfiguration的静态方法getInstance()获得,JbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();,JbpmContextjbpmContext=jbpmConfiguration.createJbpmContext();,JbpmConfiguration对象,JbpmConfiguration常用方法创建jBPM数据库:PublicvoidcreateSchema()删除jBPM数据库:PublicvoiddropSchema(),2.2JbpmContext对象,JbpmContext对象主要用于操作流程,可以新建流程、查找任务实例、获取某个人的代办任务等等JbpmConfiguration对象提供的方法获得JbpmContext对象,在使用完JbpmContext后必须调用JbpmContext的close()方法将其关闭,publicvoidtestJbpmObject()throwsException/通过JbpmConfiguration的静态方法获得JbpmConfiguration实例JbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();/通过JbpmConfiguration获得JbpmContext对象JbpmContextjbpmContext=null;tryjbpmContext=jbpmConfiguration.createJbpmContext();/省略具体流程的操作catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,JbpmContext对象,使用过滤器来获得JbpmContext对象。Web应用中可以通过JbpmConfiguration对象提供的getCurrentJbpmContext()方法获得一个JbpmContext对象jBPM套件的源文件目录org.jbpm.web包下面有一个JbpmContextFilter文件,该文件就是jBPM为JbpmContext提供了一个Filter类,主要代码如下:,JbpmContextjbpmContext=getJbpmConfiguration().createJbpmContext(jbpmContextName);tryif(isAuthenticationEnabled)jbpmContext.setActorId(actorId);filterChain.doFilter(servletRequest,servletResponse);finallyjbpmContext.close();,JbpmContext对象,使用过滤器,JbpmContext对象,可以通过JbpmConfiguration对象提供的getCurrentJbpmContext()方法获得。在使用完毕后,关闭JbpmContext的工作由filter来完成,无须用户手工操作使用过滤器的弊端:用户每次向服务器端发送请求时,无论是否需要使用该JbpmContext对象,filter都会创建该对象,这会对性能产生一定的影响,2.3ProcessDefinition对象,ProcessDefinition是流程定义对象,对应的数据表是jbpm_processdefinition。流程定义有版本控制,允许同名的流程定义共存ProcessDefinition(流程定义)就是在jBPM的可视化流程设计器中拖拽的流程,流程设计完成后可以发布到数据库中,ProcessDefinition对象,PublicProcessInstancecreateProcessInstance();,PublicstaticProcessDefinitionparseXmlInputStream(java.io.InputStreamis);,PublicProcessInstancecreateProcessInstance(java.util.Mapvariables);,PublicstaticProcessDefinitionparseXmlResource(StringxmlResource);,PublicstaticProcessDefinitionparZipInputStream(java.io.ZipInputStreamzis);,流程定义的常用方法:创建流程实例创建一个新的流程实例通过解析给出的流程定义的XML文件流,生成一个流程定义对象通过给出的指定位置的流程定义的XML文件解析成一个流程定义对象通过解析给出的流程定义的ZIP文件,生成一个流程定义对象,ProcessDefinition对象,流程定义的应用首先定义流程,ProcessDefinition对象,部署流程,publicvoidtestDeploy()throwsException/获得JbpmConfiguration对象JbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();/通过JbpmConfiguration获得JbpmContext对象JbpmContextjbpmContext=null;/定义流程定义文件ProcessDefinitionpd=ProcessDefinition.parseXmlResource(simple/processdefinition.xml);tryjbpmContext=jbpmConfiguration.createJbpmContext();jbpmContext.deployProcessDefinition(pd);/发布流程catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,jBPM数据库表变化流程定义表如下流程迁移表如下流程节点表如下流程模块定义表如下,ProcessDefinition对象,流程名称,流程版本,ProcessDefinition对象,把上面流程重新后,再定义一个新的流程部署,新的流程如下:,jBPM数据库表变化:流程定义表如下流程迁移表如下流程节点表如下流程模块定义表如下,ProcessDefinition对象,ProcessDefinition对象,获得最新版本的流程定义对象,publicvoidtestGetPd()throwsExceptionJbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();JbpmContextjbpmContext=null;tryjbpmContext=jbpmConfiguration.createJbpmContext();/根据流程名称获得最新流程定义ProcessDefinitionpd=jbpmContext.getGraphSession().findLatestProcessDefinition(simple);System.out.println(最新流程定义ID:+pd.getId();System.out.println(最新流程定义版本:+pd.getVersion();catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,测试结果:最新流程定义ID:2最新流程定义版本:2,ProcessDefinition对象,获取所有最新版本的流程定义对象,publicvoidtestGetPd()throwsExceptionJbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();JbpmContextjbpmContext=null;tryjbpmContext=jbpmConfiguration.createJbpmContext();ListpdList=jbpmContext.getGraphSession().findLatestProcessDefinitions();for(ProcessDefinitionpd:pdList)System.out.println(流程定义ID:+pd.getId();System.out.println(“流程定义版本:”+pd.getVersion();catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,测试结果:流程定义ID:3流程定义版本:1流程定义ID:2流程定义版本:2,ProcessDefinition对象,获取特定版本的流程定义对象,publicvoidtestGetPd()throwsExceptionJbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();JbpmContextjbpmContext=null;tryjbpmContext=jbpmConfiguration.createJbpmContext();ProcessDefinitionpd=jbpmContext.getGraphSession().findProcessDefinition(simple,1);System.out.println(版本为1的流程定义ID:+pd.getId();System.out.println(版本为1的流程定义版本:+pd.getVersion();catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,测试结果:最新流程定义ID:1最新流程定义版本:1,2.4ProcessInstance对象,流程实例(ProcessInstance)是基于流程定义的,一个流程定义可以有多个流程实例,而一个流程实例只能有一个流程定义,它们之间是一对多的关系,流程实例的常用方法获取当前流程实例对应的流程上下文对象获取流程定义对象获取流程实例的Token对象驱动流程向下流转获取流程实例对应的任务实例管理对象暂停流程实例使处于暂停状态的流程实例恢复到可执行状态,ProcessInstance对象,Publicvoidresume();,Publicvoidsuspend();,PublicTaskMgmtInstancegetTaskMgmtInstance();,Publicvoidsignal();,PublicTokengetRootToken();,PublicProcessDefinitiongetProcessDefinition();,PublicContextInstancegetContextInstance();,ProcessInstance对象,创建流程实例并向流程实例表中插入数据如下:,publicvoidtestGetPd()throwsExceptionJbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();JbpmContextjbpmContext=null;tryjbpmContext=jbpmConfiguration.createJbpmContext();ProcessDefinitionpd=jbpmContext.getGraphSession().findLatestProcessDefinition(leave);/创建流程实例ProcessInstancepi=(ProcessInstance)processDefinition.createInstance();System.out.println(流程实例Id:+pi.getId();catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,3.1流程打包jBPM流程的打包过程打开流程设计器中相应的流程选择“Deployment”标签把3个流程文件打包成zip包,3.jBPM流程发布,把3个流程文件打包成zip包,3.2流程发布,前面的部署流程只是部署了一个流程定义文件,现在部署打包的zip包,publicvoidtestDeployByZip()throwsExceptionJbpmConfigurationjbpmConfiguration=JbpmConfiguration.getInstance();JbpmContextjbpmContext=null;StringfileName=E:/leave.zip;/定义流程打包文件的路径tryjbpmContext=jbpmConfiguration.createJbpmContext();InputStreamis=newFileInputStream(newFile(fileName);ZipInputStreamzis=newZipInputStream(is);ProcessDefinitionpd=ProcessDefinition.parseParZipInputStream(zis);jbpmContext.deployProcessDefinition(pd);zis.close();is.close();catch(Exceptione)e.printStackTrace();finallyjbpmContext.close();/关闭JbpmContext对象,发布后,jbpm_bytearray表和jbpm_byteblock表中数据分别如下,4.Token令牌,在jBPM中,一个运行标记Token代表一个processDefinintion中的一次执行,用于维护流程设计图中结点的指针Token需要一个信号(signal)来使流程向前执行,信号signal用于指引一个令牌Token去继续一个图的执行,注意:在流程实例ProcessInstance中,信号signal是委派给根令牌roottoken的。因此对流程实例的信号实际就是根令牌的信号,一个流程定义可以有多个流程实例,当一个流程实例创建时,该流程的主路径就会随之创建。获得根令牌代码如下:触发流程实例往下运行的操作包含以下两个强制执行ProcessInstance的signal操作执行TaskInstance的end操作,Token令牌,Tokentoken=processInstance.getRootToken();,5.流程上下文,上下文Context是处理流程变量的地方。流程变量使用键值对来维护流程实例相关的信息,上下文必须要存储到数据库中获得流程上下文的方法为:,ContextInstancecontext=processInstance.getContextInstance();,流程上下文,流程上下文中,流程变量支持覆盖操作,publicvoidtestContextInstance()throwsExceptiontryProcessDefinitionpd=ProcessDefinition.parseXmlResource(simple/processdefinition.xml);ProcessInstanceinstance=newProcessInstance(processDefinition);/获得流程上下文ContextInstancecontextInstance=instance.getContextInstance();contextInstance.setVariable(var,设置变量);StringvarStr=(String)contextInstance.getVariable(var);System.out.println(变量名称:+varStr);contextInstance.setVariable(var,重新设置变量);varStr=(String)contextInstance.getVariable(var);System.out.println(变量名称:+varStr);contextInstance.setVariable(var,newInteger(1);IntegervarInt=(Integer)contextInstance.getVariable(var);System.out.println(变量名称:+varInt);catch(Exceptione)e.printStackTrace();,运行结果:变量名称:设置变量变量名称:重新设置变量变量名称:1,总结,如何创建jBPM数据库如何使用jBPM基本对象如何打包部署jBPM掌握jBPM的Token掌握jBPM上下文,
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!