工作流与JBPM开发实例精解

合集下载

基于JBPM的工作流系统的设计与实现

基于JBPM的工作流系统的设计与实现
成 本 、 高企 业 生 产 经 营管 理 水 平 与企 业 竞 争 力 的 目标 。 提 当今 的计 算 机 技 术 已经 实 现 了工 作 流 , 支 持 企 业 经 营 过 程 中 非 常 高 效 执 行 并 监 控 其 执 行 过 程 的 计 算 机 软 件 控 制 系统 。工 作 是 流 软 件 与 计 算 机 桌 面 操 作 系 统 相 似 . 作 系统 驱 动计 算 机 各 部 件 之 间 协 同 运转 , 操 工作 流 软 件 则 驱 动 业 务 过 程 自动 有 序 的 进行 。
流 程 管 理 是 生 产 组 织 和 办 公 自动 化 领 域 来 实 施 的 , 针 对 日常 工 作 中具 有 固定 程序 的 活 动 提 出 的方 法 。 目的是 通 过将 工作 划 是 分 成 定 义 良好 的角 色 与 任 务 , 照一 定 的法 则 和 过 程 来 执 行 这 些 已 经 安 排 好 的任 务 并 对 其 进 行 监 控 , 到 提 高 办 事 效 率 、 按 达 降低 生 产
中 图分 类 号 : 3 3 TP 9 文献标识码 : A 文 章 编 号 :0 9 3 4 (0 11 — 7 7 0 1 0 — 0 4 2 1 )6 3 9 — 2
De ina d I lme tto fW o k o M a a e e tS se Bae nJ M sg n mp e n ain o r f w n g m n y tm sd o BP l
ZH AO Yu-J a i o,ZH AO e W i
( ne fMo enE u ain W u a xi iesy, u a 3 0 2 Chn ) Ce tro d r d ct , o h nTe teUnv r t W h n 4 0 7 , ia l i

jBPM4.3简单深入理解(一)

jBPM4.3简单深入理解(一)

jBPM4.3简单深入理解(一)工作流(系统)主要概念工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理流程定义:预先定义的业务流转逻辑流程实例:业务的一次实际流转过程参与者:任务的执行者活动(任务):组成流程定义的节点活动实例:组成流程实例的元素流转:从一个节点到另一个节点这一行为工作列表:当前需要办理的任务集合开发步骤1)根据实际应用场景创建流程文件;即编写*.jpdl.xml文件2)部署流程文件或流程资源到系统中;3)执行流程(使用指定的流程定义);3.1)启动流程实例3.2)获取任务3.3)开始任务3.4)结束任务3.1到3.4是办理一个任务的过程,流程的执行就是启动流程实例+一次次办理任务的过程。

流程在实际应用场景中的一些操作一.流程的定义管理流程定义的发布、查询、删除、暂停、恢复二.流程实例管理流程实例的启动、显示流程图、执行、暂停、恢复三.任务管理分配任务、收回任务、定时任务、任务与表单绑定四.流程的历史查询任务的历史、流程实例历史、活动历史---下面开始进行代码描述------在详细描述之前,我们先来了解一下流程引擎ProcessEngine引用One ProcessEngine object can be used by all reque sts and threads in an application. Here’s how you can obtain a ProcessEngine把这个交给spring去管理Java代码<beanid="springHelper"class="org.jbpm.pvm.internal.processengine.Spring Helper"/><beanid="processEngine"factory-bean="springHelper"factory-method ="createProcessEngine"/>我们需要的一些服务都是通过流程引擎得到的RepositoryService repositoryService = processEngine.getRepositoryService(); ExecutionService executionService = processEngine.getExecutionService();TaskService taskService = processEngine.getTaskService();HistoryService historyService = processEngine.getHistoryService();ManagementService managementService = processEngine.getManagementService();一.流程的定义管理1.1流程定义的发布(即部署流程文件或流程资源到系统中)流程定义*.jpdl.xml的内容可以从文件,网址,字符串,输入流或zip输入流中获得Org.jbpm.api.newdeployment代码public interface NewDeployment extends Deployment {.../** adds a resource as a string */NewDeployment addResourceFromString(String resourceName, String string);/** adds a resource as a string */NewDeployment addResourceFromInputStream(String resourceName, InputStream inputStream);/** adds a resource as a resource from the classpath */NewDeployment addResourceFromClasspath(String resourceName);/** adds a resource as a url */NewDeployment addResourceFromUrl(URL url);/** adds a resource as a zip stream */NewDeployment addResourcesFromZipInputStream(ZipInputStream zipInputStream);/** adds a resource from a file */NewDeployment addResourceFromFile(File file);...}在测试的时候Java代码ProcessEngine processEngine = new Configuration().buildProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService();//布署当前目录下test.jpdl.xml文件String deploymentId = repositoryService.createDeployment().addResourceFromClasspath("test.jpdl.xml").de ploy();在我们实际应用中,addResourceFromInputStream和addResourcesFromZipInputStream运用较多。

jbpm工作流全程笔记

jbpm工作流全程笔记

1. 工作流<1> 工作流(Workflow):就是自动运作的业务过程部分或整体,表现为参与者对文件、信息或任务按照规程采取行动,并令其在参与者之间传递。

简单地说,工作流就是一系列相互衔接、自动进行的业务活动或任务。

工作流是针对工作中具有固定程序的常规活动而提出的一个概念。

通过将工作活动分解成定义良好的任务、角色、规则和过程来进行执行和监控,达到提高生产组织水平和工作效率的目的。

<2> 工作流就是工作流程的计算机化,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。

工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。

<3> 通俗的说,就是多个人在一起合作完成某件事情。

<4> 工作流可实现业务或公文的申请、审批、会签、登记、操作等环节的管理,可将工作过程进行记录,便于日后检查。

并实现数据的规范化录入、查询、统计和存档。

OA(办公自动化)主要技术之一就是工作流。

2. 工作流管理系统(Workflow Management System, WfMS)<1> 主要功能是通过计算机技术的支持去定义、执行和管理工作流,协调工作流执行过程中工作之间以及群体成员之间的信息交互。

工作流需要依靠工作流管理系统来实现。

<2> 工作流管理系统是定义、创建、执行工作流的系统,应能提供以下三个方面的功能支持:①定义工作流:包括具体的活动、规则等;②运行控制功能:在运行环境中管理工作流过程,对工作流过程中的活动进行调度;③运行交互功能:指在工作流运行中,WfMS与用户(活动的参与者)及外部应用程序工具交互的功能。

3. JBPM,全称是Java Business Process Management<1> JBPM是一种基于J2EE的轻量级工作流管理系统,jBPM是公开源代码项目, 官方主页为:/jbossjbpm<2> Jbpm的使用** 步骤* 编写流程定义(定义规则);* 部署流程定义到系统中;* 执行流程(使用指定的流程定义);①编写流程定义举例:员工报销费用的流程描述:员工需要先填写报销单据;交给其经理进行审批;审批(通过)后到财务去领款。

jbpm-工作流的基本操作

jbpm-工作流的基本操作

jbpm-⼯作流的基本操作删除流程实例:Jbpm流程引擎定义:jbpm,全称是Java Business Process Management(业务流程管理),他是覆盖了业务流程管理,⼯作流管理,服务协作等领域的⼀个开源的,灵活的,易扩展的可执⾏的流程语⾔框架作⽤:jbpm的流程框架⾮常灵活,使⽤起来也⾮常安全,降低开发的风险,同时jbpm拥有⾃⼰的图形化开发⼯具,⾮常⽅便随时了解和掌握运⾏的进程Jbpm的开发步骤:1、引⼊jbpm 4.4 jar2、引⼊jbpm.cfg.xml、jbpm.hibernate.cfg.xml核⼼配置⽂件如图:Jbpm.cfg.xml 配置:<?xml version="1.0" encoding="UTF-8"?><jbpm-configuration><import resource="jbpm.default.cfg.xml" /><import resource="jbpm.businesscalendar.cfg.xml" /><import resource="jbpm.tx.hibernate.cfg.xml" /><import resource="jbpm.jpdl.cfg.xml" /><import resource="jbpm.bpmn.cfg.xml" /><import resource="jbpm.identity.cfg.xml" /><!-- Job executor is excluded for running the example test cases. --><!-- To enable timers and messages in production use, this should be included. --><!--<import resource="jbpm.jobexecutor.cfg.xml" />--></jbpm-configuration>Jbpm.hibernate.cfg.xml 配置:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property><property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><property name="hibernate.connection.url">jdbc:mysql:///jbpm</property><property name="ername">root</property><property name="hibernate.connection.password">123456</property><property name="hibernate.hbm2ddl.auto">update</property><property name="hibernate.format_sql">true</property><property name="hibernate.show_sql">true</property><mapping resource="jbpm.repository.hbm.xml" /><mapping resource="jbpm.execution.hbm.xml" /><mapping resource="jbpm.history.hbm.xml" /><mapping resource="jbpm.task.hbm.xml" /><mapping resource="jbpm.identity.hbm.xml" /></session-factory></hibernate-configuration>Log4j.properties 配置:### direct log messages to stdout ###log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.erryout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###log4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=c:/mylog.logyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=info, stdout3、创建表结构(有18张表)4、/**5、 * 使⽤jbpm ⽅式创建表结构 18张表6、 */7、public void createTable()8、 {9、 org.jbpm.api.Configuration.getProcessEngine();}流程引擎的使⽤步骤:1 、部署流程实例:1、public void deploy()2、 {3、//通过Configuration 类构建流程引擎对象4、 ProcessEngine processEngine = Configuration.getProcessEngine();5、6、//获取RepositoryService 接⼝服务7、 RepositoryService repositoryService = processEngine.getRepositoryService(); 8、9、//发布的⽅式:零散发布10、 repositoryService.createDeployment()11、 .addResourceFromClasspath("jbpm_test.jpdl.xml")12、 .addResourceFromClasspath("jbpm_test.png")13、 .deploy();14、 }其他发布⽅式:2、启动流程实例:public void startProcessInstanceByKey(){//通过Configuration 类构建流程引擎对象ProcessEngine processEngine = Configuration.getProcessEngine();//获取ExecutionService 对象ExecutionService executionService = processEngine.getExecutionService();executionService.startProcessInstanceByKey("jbpm_test"); //key 默认为流程⽂件名称 }3、查询个⼈任务ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();List<Task> list = taskService.findPersonalTasks("员⼯");for(Task t:list){System.out.println("任务编号:"+t.getId());System.out.println("任务名称:"+t.getName());}4、办理个⼈任务public void personalComplete(){ProcessEngine processEngine = Configuration.getProcessEngine();TaskService taskService = processEngine.getTaskService();pleteTask("50002"); //任务id}流程变量设置:public void taskComplete(){TaskService taskService = Configuration.getProcessEngine().getTaskService();Map<String, User> userMap = new HashMap<String, User>();User user = new User();user.setDay(2);user.setName("⼩明");userMap.put("user", user);//办理业务并设置流程变量taskService.setVariables("240002", userMap);pleteTask("240002");}流程引擎ProcessEngine 的六⼤服务接⼝:流程引擎processEngine 对象的获取:通过Configuration 类的构建如:ProcessEngine processEngine = Configuration.getProcessEngine();1、 RepositoryService 接⼝(流程资源服务):RepositoryService service= processEngine.getRepositoryService()作⽤:提供对流程的部署、删除、查询和流程图的查看操作。

jBPM4.4详细讲解

jBPM4.4详细讲解

jBPM4.4一、什么是jBPMJBPM是一个扩展性很强的工作流系统,百分百用JAVA语言开发,持久层采用Hibernate实现,理论上说,只要Hibernate支持的数据库JBPM都支持。

同时它还能被部署在任何一款JAVA应用服务器上。

java Business Process Management :工作流,工作流引擎注:记得j小写,因为j代表java,与Log4j中j一样工作流管理系统不止一中,如还有Intaliol BPMS …但JBoss jBPM灵活性且扩展性高。

jBPM项目于2002.3由Tom Baeyens 发起,2003.12发布1.0版本,2004年10.18发布2.0,并在这天加入了JBOSS组织-→被RedHat公司二、能干什么提供工作流的实现,帮助更好的进行BPM三、jBPM有什么,简介jBPM的Service API 各种服务1:ProcessEngine:流程引擎。

并不负责具体的业务,而是用于获取各种Service。

2:RepositoryService:流程资源服务的接口,如流程定义发布、查询、删除等。

3:ExecutionService:用于操作流程实例的服务,可以进行流程实例发布、查询、流程推进、设置流程变量等操作。

4:TaskService:用于操作人工任务的服务,可以进行任务创建、查询、获取、提交完成、保存、删除等操作。

5:HistoryService:用于操作流程历史的服务,提供对流程历史库(就是已经完成的流程实例)的操作。

比如:历史流程实例,历史活动实例等。

6:IdentityService:用于操作用户、用户组以及成员关系的服务7:ManagementService:流程管理控制服务的接口,只提供异步工作(Job)相关的执行和查询操作。

四、Myeclipse8.5 搭配开发环境1.jbpm-4.4.zip 下载完2.myeclipse→help→Myeclipse Configuration Center →add…….3.找到\jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip 安装这个插件4.记得不要联网安装,不要选source文件5.安装完后window→JBoss jBPM→runtime Location→add 添加jbpm的路径6.添加lib下所有jar包,如果你使用的是tomcat6.0则:要把Juel-api.jar ,juel-impl.jar,juel-engine.jar 拷到tomcat lib 下并把原来的el-api.jar删掉项目中就不要再导上面三个包五、修改配置文件1、将example中的下列配置文件拷贝到java项目的src目录下:jBPM.cfg.xml、jBPM.hibernate.cfg.xml、jBPM.mail.properties、jBPM.mail.templates.xml、process_forms.css2、在以上配置文件中的jBPM.hibernate.cfg.xml,实际上就是我们熟悉的hibernate.cfg.xml,这里,要修改为连接我们的数据库。

jbpm工作流原理

jbpm工作流原理

jbpm工作流原理jbpm是一个开源的工作流引擎,它基于基于BPMN 2.0规范实现了各种工作流程的管理和执行。

jbpm的工作流原理可以简单概括为以下几个步骤:1. 流程建模:使用BPMN2.0规范的图形化编辑器,开发人员可以定义工作流的各个环节、流程和业务规则。

这些定义信息包括任务、网关、事件和连接线等元素,它们被存储在一个可执行的流程定义中。

2. 流程部署:将流程定义部署到jbpm的运行环境中,使之成为可执行的流程实例。

部署可以通过API接口、命令行工具或Maven插件完成,部署后的流程定义被存储在jbpm的数据库中。

3. 流程实例化:根据流程定义创建流程实例。

每个流程实例都有一个唯一的标识符,它可以根据流程定义的启动事件(如消息、定时器或手动触发)进行创建。

在创建流程实例时,初始任务会被定义并分配给相应的参与者。

4. 任务分配和执行:当流程实例创建后,相关任务会被分配给参与者进行执行。

参与者可以是使用jbpm的应用程序用户,也可以是外部系统或服务。

任务执行者可以根据任务的名称、优先级和截止日期等信息来安排任务的执行顺序和执行者。

5. 事件触发:在流程执行过程中,各种事件(如信号、定时器或消息)可以触发对应的行为。

这些事件可以触发流程的跳转、审核、撤销等操作,从而实现复杂的业务逻辑。

6. 流程控制:jbpm提供了不同的控制结构,如顺序流、并行网关和条件网关等,用于定义流程的流转和跳转条件。

流程的控制结构可以根据业务规则和条件对流程的执行路径进行动态决策。

7. 流程监控和管理:jbpm提供了流程实例的监控和管理功能,可以实时跟踪和监控流程实例的状态、任务和执行情况。

通过集成jbpm的Web控制台或API接口,管理员可以对流程进行管理、跟踪和优化。

总的来说,jbpm的工作流原理是基于BPMN 2.0规范的流程定义和流程实例化,通过任务分配和执行、事件触发和流程控制等过程来管理和执行工作流。

这种基于规范和可视化的方式使得jbpm更加灵活和可维护,适用于各种复杂的业务场景。

基于工作流管理系统JBPM的研究

基于工作流管理系统JBPM的研究

舞 墨
图2 简 单请 假流 程

个新 的流程 对 象 。这 需要 为流 程 定义对 象 增加 一 个版 本属 性 来表示 同名流 程 的不 同版本 。
和 大 部 分 wb 用 一 样 ,系 统 和 用 户 交 互 是 通 过 表 单 来 实现 的 。在 e应
JP 中称 为活动 表 单 。每 个用 户 登录 系统 后 ;系 统都 要获 取 该用户 的任务 BM 列 表 ,获 取 的方 式就 是 查询 令牌 对象 。at r i属性 为该 用 户的 所有 令牌 c o d
序 ,是一个 集群 JE 应用 。 图1 出了JP 的 内部 结构 。 2E 给 BM
J P 流程 引 擎 BM 程客 户 、
\ 、
— — — — —
到我 们 先前 持 久化 到数 据 库里 的那 个流 程 定 义对 象并 把它 导入 到 内存 中。 随 后根 据 该流程 定义 对象 的信 息获 得 活动 表 单 ,生 成对 应的h m空 间 显示 tl 给用 户 ,在这 里就 是请 假 申请等 输入 框 。当A 写后提 交 ,然后用 户P 处理 填 M 这 个流 程 。在 这个 过程 中引擎 生 成一 个流 程 实例 , 因为流 程 定义对 象 只是
《 № 歙 No do ,
工作 流技 术发 端于 1 7年代 中期办 公 自动化 领域 的研 究 工作 ,是近 年 90

来 计算 机 应用 技 术与 信 息技 术领 域 最具 发展 潜 力 的方 向之 一 。IP ,全 称 TM B
是J v u i e s P o e s M n g m n ,是 一 种基 于 J E 的轻 量 级 工作 流 a a B s n s r c s a a e e t 2E 管理 系统 。

基于JBPM与JPDL的工作流管理系统的研究与设计

基于JBPM与JPDL的工作流管理系统的研究与设计

me tc SSa di r v o waed v lp n f ce c n O t n mp es f r e eo me te in y,i rv y tm e a it o t i mp o e ss e rusbly-saa i t d manan bly. i c lbly a itia it i n i
Ke r s:BP ;PDL; r l w a a e n y t m y wo d J M J wo kf o m n g me ts se
0 引 言
工作流 的定义 : 工作流是一种经营过程 , 它可 以 按照一定 的规则完全或者部分 自动化 执行 。在工作流 中定义 了许 多任务 的触发顺 序以及触发的条件 。每个
任务可 以是 由一个 或者 多个软 件系 统来完 成 , 可 以 也
业级应用 系统 时 , 能将 复杂 的工作 流程从 业务 逻辑 中 分离 出来 , 从而 引出了对工 作流管 理 系统 的研 究 和探
性 和可维 护 性 。 关键 词 : P JD ; J M; P L 工作 流管 理 系统 B
中图分 类号 :P l . T 3 15 文献标 识码 : A 文章 编 号 :6 3 6 9 2 1 ) 8 0 5 — 4 1 7 — 2 X(0 1 0 — 0 0 0
S u y a d De in o o k o M a a e n y tm t d n sg fW r f w n g me tS se l
第2 1卷 第 8 期
2 1 年 8月 01
计 算 机 技 术 与 发 展
C OMP r U ER ECHNOL T OGY AND DEo 8 1 21 . Aug 2 . 011
基于 J P 与 J D B M P L的 工作 流 管理 系统 的 研 究 与 设 计
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1.工作流与JBPM 开发实例前几天发了一篇文章,没几个人看也没人留言,看来我这功夫差的还是远啊,今天来一个实际点的吧。

可能上回的废话太多。

说说这个jbpm应该怎么来用。

首先当你想学一个框架的时候一定是你要有项目来用他了,OK,那么你项目当中的流程是什么你应该清楚吧,那么当你清楚了这些的时候我们就开始我们这个最简单的例子吧。

假如我们现在有这么一个例子,公司员工想报销点出差费,那么他要将他的申请提交给他的第一级领导——部门主管去审批,然后部门主管审批完了之后还要交给这个部门主管的上级公司老总进行审批。

那么针对这个简单的流程,我们应该从哪里下手呢?首先第一件事情就是写流程定义文件,那么这个文件我们用什么来写呢,他就是一个符合某个语法的xml文件,幸运的是jbpm给我们提供了一个集成的开发环境让我们来用。

首先去官网上下一个jbpm-jpdl-suite-3.2.GA包,解压后你会发现他里面有一个designer文件夹,那个里面就是我们写流程定义文件的开发环境,他是一个eclipse的插件,但是好像他给我们的那个eclipse版本有问题,建议大家从新下一个eclipse-SDK-3.2.1-win32.zip这个版本的eclipse,然后覆盖他给我们提供的那个。

准备工作做完了,那么我们就开始吧,首先我们打开解压目录下的designer 文件夹中的designer.bat文件,他弹出一个eclipse,然后我们就用这个东西来开发我们的流程定义文件了。

打开之后你就会看见一个他的小例子,不过我们不去用他,我们自己新建一个工程。

右键-new-other-jBoss jbpm-process project。

这个时候你会看见他弹出一个对话框,输入你的工程名字,然后点击next,这个时候你会发现他已经把jbpm加载进去了,记住要选中Generate simple ......。

工程建立完了,我们开始建立我们的流程定义文件。

在工程里面你会发现src/main/jpdl这个source folder,然后你会看见他里面已经有了一个流程定义文件了,但是我们不去用他的,我们自己建立一个,右键src/main/jpdl,然后new-other-jBoss jbpm-process definition。

这个时候他就会弹出一个对话框,起一个你要写的流程定义文件的名字输入进去,OK,可以了。

这个时候你打开你建立的那个文件夹,里面就有processdefinition.xml文件,ok,打开他。

在右面的图里面你就可以看到一张什么都没有的白纸,我们看看这部分左面的那些东西,什么start啊,end啊,tasknode啊,fork啊,join啊。

那我们来解释一下这是个什么东西呢,我们看看我们的需求,员工要写一个报销单,然后交给部门主管来处理,那么部门主管就应该算是一个tasknode,他就是一个任务节点。

start和end其实就是一个虚状态,当我们写完报销单的时候我们就提交了,这个时候他就到了第一个tasknode这个节点了。

然后他审批完了还要交给总经理审批,那么他又是一个tasknode,然后总经理审批完了结束,ok,是一个end。

start--》tasknode(部门主管审批)--》tasknode(总经理审批)--》end。

如果觉得看的有点模糊可以看看我传上来的那个图。

然后你在这个试图框的下面可以看到有个source,点击一下,就会发现他已经自动的给你生成xml代码了。

但是这样还是有点不够,我们只是定义了一个tasknode节点,并没有定义tasknode节点的任务由谁来做。

那么我们还要定义一个tasknode节点是由谁来做的:那么这段代码是这么写的:Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.3.<process-definition4. xmlns="" name="test1">5. <start-state name="start">6. <transition name="" to="部门经理审批"></transition>7. </start-state>8. <task-node name="部门经理审批">9. <task>10. <assigment actorId="部门经理"></assigment>11. </task>12. <transition name="" to="总经理审批"></transition>13. </task-node>14. <task-node name="总经理审批">15. <task>16. <assigment actorId="总经理"></assigment>17. </task>18. <transition name="" to="end1"></transition>19. </task-node>20. <end-state name="end1"></end-state>21.</process-definition>这样的话我们的流程定义文件就定义完了,但是这只是把文件定义完了,系统并不知道啊,所以我们还要把我们的文件部署到系统中去,那么这个过程是这样的:首先我们在src/main/java里面新建立一个包,然后建立一个class,随便起个名字,就叫TestJBPM_01吧,那么在这个类里面我们要做的是什么呢?我们要先导入表,因为jbpm要运行就要用到很多个表,ok,那么我们这个里面导入表和hibernate导入表是差不多的,它的代码是这样的:Java代码1.package com.jbpm.test;2.3.import junit.framework.TestCase;4.5.import org.jbpm.JbpmConfiguration;6.7.public class TestJbpm_01 extends TestCase {8.9. public void testJbpm(){10.11. //创建jbpm数据库表。

他就像hibernate里面的哪个export一样。

实际上他就是hibernate里面的哪个export。

12. //应为他映射了很多个表,所以我们就能创建那么多个表。

13. JbpmConfiguration.getInstance().createSchema();14.15. }16.}然后呢我们就开始部署我们的流程定义文件,我们将这个文件当中的内容呢放到数据库当中去,当我们以后再用的时候呢我们就随时的将它加载出来。

Java代码1.package com.jbpm.test;2.3.import junit.framework.TestCase;4.5.import org.jbpm.JbpmConfiguration;6.import org.jbpm.JbpmContext;7.import org.jbpm.graph.def.ProcessDefinition;8.9.public class TestJbpm_02 extends TestCase {10.11. //jbpmConfiguration对象的创建12. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();13.14. public void testJbpm(){15.16. //然后我们把processDefinition里面相关的对象持久化到数据库里面去。

17. //流程定义文件里面有很多个概念,他有node,有transition,还有processDefinition,那么我们不需要一个18. //一个保存,jbpm把保存这么多对象的方法封装成一个接口,叫做deployProcessDefinition。

我们只要调用这个19. //方法,传一个processDefinition对象,我们就能将他们存入到数据库里面去。

20.21. //这个首先第一步我们要得到一个processDefinition对象,然后我们把他部署到流程中去。

22. ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("testJBPM/testJbpm.xml");23. //我们要存就必须获得一个session对象,而jbpm已经把session对象封装到一个JbpmContext对象里面了。

24. //那么这个jbpmContext对象是怎么得到的呢,我们要先有一个jbpmConfiguration对象,我们要对数据库进行25. //操作的时候一定要有jbpmConfiguration这个对象,用他来创建一个类似于hibernate当中的session一样的26. //对象——jbpmContext。

他是我们对数据库所有的操作的一个接口。

27. JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();28. try{29. //然后部署的操作已经由jbpmContext给我们创建好了,我们只需要调一下他的一个方法就可以了。

30. jbpmContext.deployProcessDefinition(processDefinition);31. }finally{32. //最后我们还要对他close一下,就像我们用hibernate的时候要close session一样。

33. jbpmContext.close();34. }35. }36.}Ok,第二步我们也做完了,那么现在我们开始做第三步,也就是说,我们流程定义文件写好了,现在我们的系统当中有了这样一个报销流程,那么就开始实际的去用她吧,一个人小报销了,那么她就要写一个报销的申请,但是这个报销的申请写完了存到数据库当中了还不能算完了,应该和我们的这个流程关联起来啊,那么她应该怎么去关联呢,嘿嘿,是这样地:我们在建立这个申请单这个类的时候应该定义一个processInstanceId属性,她是一个long型的,她就记录这我们的这个流程实例的id,那么什么是流程实例(processInstance)呢,她是我们工作流当中第二重要的概念,他和流程定义的关系就相当于对象和类之间的关系,类是一个抽象的东西,她定义完了是什么也干不了的,要想用她内部定义的东西我们就要new出一个实例来,当然这个里面也是这样的。

相关文档
最新文档