您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > jbpm工作流全程笔记
1.工作流1工作流(Workflow):就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。工作流是针对工作中具有固定程序的常规活动而提出的一个概念。通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。2工作流就是工作流程的计算机化,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。3通俗的说,就是多个人在一起合作完成某件事情。4工作流可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。并实现数据的规范化录入、查询、统计和存档。OA(办公自动化)主要技术之一就是工作流。2.工作流管理系统(WorkflowManagementSystem,WfMS)1主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。工作流需要依靠工作流管理系统来实现。2工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持:①定义工作流:包括具体的活动、规则等;②运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度;③运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。3.JBPM,全称是JavaBusinessProcessManagement1JBPM是一种基于J2EE的轻量级工作流管理系统,jBPM是公开源代码项目,官方主页为:http://www.jboss.org/jbossjbpm2Jbpm的使用**步骤*编写流程定义(定义规则);*部署流程定义到系统中;*执行流程(使用指定的流程定义);①编写流程定义举例:员工报销费用的流程描述:员工需要先填写报销单据;交给其经理进行审批;审批(通过)后到财务去领款。以上流程由三个步骤组成,每个步骤即是一个任务,分别由一个角色执行。应该使用jBPM提供的JPDL(jBPMProcessDefinitionLanguage)来描述这个流程,这样使用了jBPM的系统才能看的懂。jPDL:是一种直观的流程语言,可以使用任务、等待状态、定时器、自动化动作等等图形化地表示流程。jPDL认为一个商务流程可以被看作是一个UML状态图。jPDL就是详细定义了这个状态图的每个部分,如起始、结束状态,状态之间的转换等。(就是写一个xml文件)②使用jbpm提供的jbpmconsoleweb应用程序测试/使用流程jBPMConsoleweb是由jBPM提供的一个web应用。它是一个管理和监控流程的控制台,用于检查和操纵运行的流程实例。双击server/start.bat启动jbpm提供的jboss服务器,要访问地址为:http://localhost:8080/jbpm-console/部署流程定义到jbpm-console中时的注意事项:A)要求流程定义文件的名字为processdefinition.xml,并且在一个zip压缩文件的根目录中;B)存放流程定义的zip文件所在的路径中不能含有中文(因为jbpm-console应用没有处理中文)。③执行流程部署流程定义后,就可以使用这个流程定义了(执行流程)。在开始一个流程后,要先进入到tokens页面中点击Signal链接,这样才能使流程离开开始状态,以后的步骤中都不需再做这个操作。当流程执行到有任务的节点时,就可以看到当前节点中定义的任务了。任务的办理分为两步:开始和结束。*流程实例通过Token的维护当前正在执行的节点Jbpm是怎么知道一个流程实例现在走到哪个节点了呢?每个流程实例都有一个指针,指向当前正在执行的节点,在当前节点执行完后,到达了下一个节点,就是让这个指针指向下一个节点。这个指针叫做Token(也叫做令牌)。Token是运行时的概念,用来维护指向图结点的指针。Token需要一个信号(signal)来让流程向前执行。当一个signal来到的时候,Token就会通过transition离开当前的结点走到下一个结点。4.jBPM提供了一个图形化的流程设计器,是一个eclipse插件。1使用插件设计流程定义还可以生成图片,这样就可以实现流程的图形化监控。2使用插件设计完流程定义并保存后,会有三个文件:A)processdefinition.xml,流程定义文件;B)processimage.jpg,流程图片;C)gpd.xml,保存流程图片中的各个节点的坐标信息。3插件安装方法:在Eclipse安装目录下的links目录中新建一个文本文件,把扩展名改为.link,并且修改内容为path=${插件中的eclipse文件夹所在的路径}。4使用插件时会遇到的几个问题①插件在eclipse3.3的版本上才能正常工作,所以myeclipse5.1(eclipse3.2)不能使用这个插件。②安装插时,如果Myseclipse安装目录下的eclipse目录中没有links目录,可以手工创建一个。还要注意指定的插件的路径中不能含有中文。③使用插件设计流程定义时,如果再点击插件下方的Source选项卡修改生成的processdefinition.xml,会出现突然少了一些内容或多出一些内容等情况,这是插件的问题。如果想修改流程定义源文件,可以使用普通的xml编辑器打开进行修改,方法是在文件上点击右键-OpenWith-MyEclipseXMLEditor。④如果节点的名字中有中文,则生成的gpd.xml中的节点名字会出现乱码,这会导致不能正确的进行图形化监控。修正方法:在部署流程定义前把gpd.xml文件的编码改为GBK(改为本地编码,也要修改xml文件中的encoding的值为GBK)。要注意如果修改并保存了一下流程定义,就会重新生成processimage.jpg和gpd.xml文件,这时gpd.xml中的encoding又变成了UTF-8,应再改为GBK。(这是一个Bug)。今天,在课堂上,汤阳光老师教我们大家熟悉了Jbpm,并实现了一个简单的办公流程事例,以下是课堂总结和相关实现代码。1.概念1流程定义:预先定义的业务流转逻辑。2流程实例(processinstance):业务的一次实际流转过程。(是流程定义执行期间的体现,包含了流程定义被解释之后的一些信息,诸如开始时间、结束时间和其他相关联的信息)。3任务实例(taskinstance):组成流程实例的元素。(Task被解释执行时的信息,有开始时间、结束时间、参与者等,有create、start、end三种状态)。2.搭建环境:*Jbpm的API:流程有关的所有信息都是要保存到数据库中的。jBPM的其中一个特色就是它使用Hibernate来管理它的数据库。这样,jBPM就将数据的管理职能分离出去,自己则专注于商务逻辑的处理。1添加jar包:jbpm-jpdl.jar(核心);jbpm-identity.jar(可选,组织机构);bsh.jar(BeanShell脚本);jboss-j2ee.jar;hibernate3.jar(Hibernate);antlr-2.7.6.jar(Hibernate);asm.jar(Hibernate);cglib.jar(Hibernate);dom4j.jar(Hibernate);commons-collections.jar(Hibernate);commons-logging.jar(Hibernate);hsqldb.jar(可选,纯Java写的数据库);log4j.jar(可选,日志记录);Junit4(单元测试);2添加配置文件(在jbpm-jpdl-3.2.2/config目录中):jbpm.cfg.xml;hibernate.cfg.xml;log4j.properties(可选,log4j配置文件);修改数据库库连接信息,如果使用的不是HsqlDB数据库,还应添加相应的jdbc驱动。我们选用mysql数据库驱动mysql-connector-java-5.1.7-bin.jar。3生成数据库表。选用单元测试的方式生成数据库表,以下是测试类代码:publicvoidcreateSchema(){//读取配置文件并创建数据库newConfiguration().configure().buildSessionFactory();}3.编写流程定义员工报销,由其经理审批。审批通过后,此员工到财务去领款,流程结束;如果未经理审批通过,流程结束。经理在审批的时候应能看到这个员工要报销的金额,根据金额做出是否通过的决定。*编程步骤,要实现的功能有:a部署流程定义。b启动流程。c获取任务列表。d开始任务。e结束任务。其中编写流程定义和步骤a是添加流程定义到系统中;步骤b,c,d,e是使用系统中存在的某个流程定义执行流程;步骤c,d,e是办理一个任务的过程,流程的执行就是一次次办理任务的过程。有两个重要的类:JbpmConfiguration和JbpmContext。JbpmConfiguration是jBPM的相关配置信息,并有创建JbpmContext的功能,可以把JbpmConfiguration想像成Hibernate中的Configuration与SessionFactory的结合体。使用JbpmConfiguration.getInstance()方法创建一个JbpmConfiguration对象,这会使用默认的jbpm配置文件:在classpath根目录中,并且名字为jbpm.cfg.xml。或者是使用getInstance(StringconfigFilePath)方法,用指定的配置文件构造。Jbpm中几乎所有的操作都是通过JbpmContext完成的,可以把他想像成Hibernate中的Session。他是通过JbpmConfiguration.createJbpmContext()方法创建的,JbpmContext中包装有一个Hibernate的Session(通过他做的数据库操作)。使用完JbpmContext后一定要调用他的close()方法,否则所有信息都不会持久化到数据库当中。因为在调用JbpmConfiguration.createJbpmContext()方法时会创建一个Hibernate的Session并开始事务;在调用JbpmContext.close()方法时会提交事务并且关闭所关联的Session。如果在执行JbpmContext.close()之前调用方法jbpmContext.setRollbackOnly(),则在JbpmContext.close()时会回滚事务。4.部署流程定义这个过程就是把流程定义的相关信息保存到jBPM的数据库中。解析流程定义大致有三种方式,所使用的方法都在ProcessDefinition中,并且都是static的:1)parseXmlResource,parseXmlInputStream和parseXmlReader,是解析一个xml的流程定义文件;2)parseXmlString,是解析一个字符串;3)parseParResource与parseParZipInputStream是解析一个par包。ProcessDefinition.parseXmlResource(xmlResource)接受的参数是流程定义文件的路径,这个路径是相对于classpath的根路径的一个相对路径。Processarchive(par),流程档案文件,是一个zip文件。必须要有一个流程定义文件,名字为processde
本文标题:jbpm工作流全程笔记
链接地址:https://www.777doc.com/doc-1999 .html