一、 工作流简介

项目中不断的接触工作流,点点滴滴积累了一些,下面把一些学习到的东西整理记录下来。

工作流一般的适用场景:公文流转、行政审批、订单处理、产品研发、制造过程等。用专业一点的语言来描述工作流就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。针对这种特殊的业务实现的称之为工作流管理系统,此系统应提供三方面的支持:1.定义工作流(业务规则);2.运行控制功能(按照业务规则进行调度);3.运行交互(系统用户和工作流系统进行交互的功能)。为了快速和灵活开发相关工作流系统,出现了很多优秀的框架,有:JBPM、OSWorkflow、ActiveBPEL等,下面要讲的就是JBPM。

二、 JBPM主要概念

1. 流程定义:预先定义的业务流转逻辑

2. 流程实例:业务的一次实际流转过程 参与者:任务的执行者 活动(任务):组成流程定义的节点

3. 活动实例:组成流程实例的元素

4. 流转:从一个节点到另一个节点这一行为

5. 工作列表:当前需要办理的任务集合

6. 工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理

三、 JBPM模型说明

1. 流程定义:预先定义的业务流转逻辑

2. 流程实例:业务的一次实际流转过程

3. 参与者:任务的执行者

4. 活动(任务):组成流程定义的节点

5. 活动实例:组成流程实例的元素

6. 流转:从一个节点到另一个节点这一行为 工作列表:当前需要办理的任务集合

7. 工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理

四、 开发环境搭建

JBPM有很多版本,用过3.X和4.4版本,总体感觉4.4更易用,下面以4.4版本为主,此为开源框架,因此免费,国内收费的还有普元的流程关系系统做的也不错,学习之初首先是配置搭建起一个开发环境:

1.   下载相关资源

a)    jBPM下载地址:http://sourceforge.net/projects/jbpm/files/

b)    eclipse版本稍微高一些,以免不兼容

2.   安装流程设计器(GPD,Eclipse插件)

a)    此设计器在eclipse提供界面操作,可通过界面操作形成流程定义文件,也就是上面我们说的业务规则;

b)    安装插件具体过程不再详解,所用到的插件包就在上面下载到的JBPM目录:JBPM_HOME\jbpm-4.4\install\src\gpd下。

3.   在Eclipse中添加JPDL4.4Schema校验

a)    Click Window --> Preferences

b)    Select XML --> XML Catalog

c)    选择 'Catalog Entry' ,点击’FileSystem’

d)    添加Schema文件(xsd文件的路径为:JBPM_HOME/src/jpdl-4.4.xsd)

4.   创建一个Helloworld示例

a)    在src下创建JBPM4 ProcessDefinition文件,命名为hello,会生成hello.jpdl.xml文件;

b)    添加依赖库

i.         JBPM_HOME/jbpm.jar(核心包)

ii.         JBPM_HOME/lib/*.jar,不添加以下jar包:servlet-api.jar,junit.jar。其中junit.jar一定不要添加,因为是3.8.2版本,与我们使用的junit4有冲突

iii.         所使用的数据库对应的驱动的jar包(第2步所添加的jar包中已包含mysql的jdbc驱动jar包)。

c)    添加并定义JBPM必须的配置文件

i.         配置文件可以从JBPM_HOME/examples/src/中拷贝:

jbpm.cfg.xml、logging.properties、jbpm.hibernate.cfg.xml;

ii.         修改logging.properties中的日志输出级别为WARNING:java.util.logging.ConsoleHandler.level=WARNING;

iii.         修改jbpm.hibernate.cfg.xml中的数据库连接信息。如果使用MySQL,使用的方言一定要是org.hibernate.dialect.MySQL5InnoDBDialect;

iv.         数据库连接编码一定要是UTF-8。否则可能会在部署含有中文字符的流程定义时会抛异常,说sql语法错误。

d)    环境已经配置完毕,下面就是在hello.jpdl.xml进行设计了,具体内容如下:

01.<?xml version="1.0" encoding="UTF-8"?>
02.<process name="helloworld" xmlns="http://jbpm.org/4.4/jpdl">
03. <start g="230,25,114,64" name="start1">
04. <transition g="-59,-17" name="to state1" to="中国"/>
05. </start>
06. <end g="168,333,80,51" name="end1"/>
07. <state g="206,194,62,63" name="中国">
08. <transition g="-47,-17" name="to end1" to="end1"/>
09. </state>
10.</process>

e)    下面就要在利用JUNIT创建一个流程定义测试类,如下

01.package com.test;
02.import java.util.List;
03.import junit.framework.TestCase;
04.import org.jbpm.api.Configuration;
05.import org.jbpm.api.ProcessDefinition;
06.import org.jbpm.api.ProcessEngine;
07.import org.jbpm.api.RepositoryService;
08.
09.public class HelloTest extends TestCase {
10.
11. //----发布流程定义
12. //第一步:启动流程引擎
13. ProcessEngine engine;
14. public HelloTest(){
15. engine=Configuration.getProcessEngine();
16. }
17. //测试发布
18. public void testDeploy(){
19. //获取流程服务
20. RepositoryService service=engine.getRepositoryService();
21. //把流程定义发布到流程引擎中
22. String developementId=service.createDeployment()
23. .addResourceFromClasspath("helloworld.jpdl.xml").deploy();
24.
25.
26. //----查看流程定义
27. //发布流程定义信息,查看已发布流程定义列表
28. List<ProcessDefinition> definitions=service.createProcessDefinitionQuery().list();//执行搜索
29. for (ProcessDefinition processDefinition : definitions) {
30. System.out.println(processDefinition.getId());
31. }
32.
33. //----删除流程定义,这里用级联删除会比较好
34. service.deleteDeploymentCascade(developementId);
35.
36. //查看输出后流程定义的个数
37. System.out.println(service.createProcessDefinitionQuery().list().size());
38.
39. }
40.}

f)     然后利用JUNIT创建一个流程实例测试,如下:

01.import java.util.List;
02.
03.import junit.framework.TestCase;
04.
05.import org.jbpm.api.Configuration;
06.import org.jbpm.api.ExecutionService;
07.import org.jbpm.api.ProcessEngine;
08.import org.jbpm.api.ProcessInstance;
09.
10.public class ProcessInstanceTest extends TestCase {
11. //----发布流程定义
12. //第一步:启动流程引擎
13. ProcessEngine engine;
14. public ProcessInstanceTest(){
15. engine=Configuration.getProcessEngine();
16. }
17. protected void setUp(){
18. engine.getRepositoryService().createDeployment()
19. .addResourceFromClasspath("helloworld.jpdl.xml").deploy();
20. }
21.
22. public void testProcessInstance(){
23. //这个是专门管理流程实例的
24. ExecutionService executionService=engine.getExecutionService();
25. //通过流程定义文件的名称当做KEY来获取流程实例;也就是发布新流程
26. ProcessInstance processInstance=executionService.startProcessInstanceByKey("helloworld");
27. System.out.println(processInstance);
28.
29. //这里输出流程实例是否结束,针对本实例来说肯定是FALSE,因为本实例中有STATE,所以会在STATE这里处理等待状态,不会结束
30. //也就是接下来要说的执行等待的流程,除非你调用executionService.signalExecutionById
31. System.out.println(processInstance.isEnded());
32.
33. //这个方法将是处理等待转该的流程执行到结束,返回值热仍然是一个流程实例
34. processInstance=executionService.signalExecutionById(processInstance.getId());
35. System.out.println(processInstance.isEnded());
36. }
37. public void testDeleteProcessInstance(){
38. ExecutionService executionService=engine.getExecutionService();
39. ProcessInstance processInstance=executionService.startProcessInstanceByKey("helloworld");
40. executionService.deleteProcessInstanceCascade(processInstance.getId());
41.
42. }
43.
44. public void testProcessInastanceList(){
45. ExecutionService executionService=engine.getExecutionService();
46. ProcessInstance pi=executionService.startProcessInstanceByKey("helloworld");
47. ProcessInstance pi1=executionService.startProcessInstanceByKey("helloworld");
48. List<ProcessInstance> pis=executionService.createProcessInstanceQuery().list();
49. for (ProcessInstance processInstance : pis) {
50. System.out.println(processInstance);
51. }
52. }
53.}

以上就是一个简单的测试小程序,通过这个小实例来宏观的认识一下JBPM。

工作流--JBPM简介及开发环境搭建的更多相关文章

  1. Django之Django简介,开发环境搭建,项目应用创建

    软件及Django框架简介 软件框架 一个软件框架是由其中各个软件模块组成的: 每一个模块都有特定的功能: 模块与模块之间通过相互配合来完成软件的开发. 软件框架是针对某一类软件设计问题而产生的. M ...

  2. Python简介及开发环境搭建

    Python简介 Python是一门动态解释性的强类型定义的计算机程序设计语言,是一种完全面向对象的语言,由荷兰人"龟叔"-Guido van Rossum于1989年开发,于19 ...

  3. 【系列】Python编程思想(1):Python简介与开发环境搭建

    李宁老师的 开始学习.   本系列文章深入介绍了Python的各种技术,堪称是目前最全的Python教程.主要目的是让读者可以了解Python的各种核心技术,包括各种Python函数库.本教程使用Py ...

  4. Web笔记(一) Web 简介与开发环境搭建

    Web应用程序的工作原理 大多数的Web应用程序结构都是采用最为流行的B/S软件开发体系结构,将Web应用程序部署在Web服务器上,只要Web服务器启动,用户就可以通过客户端浏览器发送HTTP请求到W ...

  5. Scala语言简介和开发环境配置

    Scala语言的简介和开发环境搭建 Scala是一门结合了面向对象特征和函数式编程特征的语言,它是一个创新的编程语言产品.Scala可以做脚本(就像shell脚本一样),可以做服务端编程语言,可以写数 ...

  6. 如何学习web开发环境搭建和脚手架

    Web前端的学习路线 第一阶段: HTML+CSS: HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础: Js基础教程.js内置对象常用方法.常见DO ...

  7. python学习之python开发环境搭建

    Python简介 Python是一种面向对象.解释型计算机程序设计语言.Python语法简洁而清晰,具有丰富和强大的类库等等众多的特性,这是来自百度百科的介绍,在百度百科还能看到它的更详细的介绍信息, ...

  8. PHP入门教程-开发环境搭建

    1.PHP简介: PHP是能让你生成动态网页的工具之一.PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHP. 2.学习需要基础: a.HTML b.Ja ...

  9. [ZigBee] 2、 ZigBee开发环境搭建

    本节介绍ZigBee基本开发环境搭建,附件中有本节介绍的软件下载地址~ 链接:http://pan.baidu.com/s/1bLdqxg 1.IAR Embedded Workbench 的安装 S ...

随机推荐

  1. [C#][ASP.net] 透过WebBrowser 取得AJAX 后的网页

    原文[C#][ASP.net] 透过WebBrowser 取得AJAX 后的网页 今天 Shih-Min 问我说,假设网页一开始是AJAX 会载入一些资料,但是透过WebClient 去抓 抓到都是J ...

  2. Thrift实现C#通讯服务程序

    Thrift初探:简单实现C#通讯服务程序 好久没有写文章了,由于换工作了,所以一直没有时间来写博.今天抽个空练练手下~最近接触了下Thrift,网上也有很多文章对于Thrift做了说明:       ...

  3. ASP.NET 5应用是如何运行的(3)

    ASP.NET 5应用是如何运行的(3) 设置自定义的入口程序体现应用本身与应用托管之间的分离,它使我们可以创建独立于托管环境的应用,并根据需要寄宿于任何一个我们希望的宿主程序下,对于Web应用来说这 ...

  4. PHP学习笔记----IIS7下安装配置php环境

    原文:PHP学习笔记----IIS7下安装配置php环境 Php如何安装 Php版本的选择 Php在windows下的(php5.4.7)有两种版本: VC9 x86 Non Thread Safe ...

  5. IOS开发苹果官方Sample Code及下载地址

    IOS开发苹果官方Sample Code及下载地址 在线浏览地址:https://developer.apple.com/library/ios/navigation/#section=Resourc ...

  6. SSMS2008插件开发(4)--自定义菜单

    原文:SSMS2008插件开发(4)--自定义菜单 打开上次的项目MySSMSAddin中的Connect类,发现该类继于了两个接口:IDTExtensibility2和IDTCommandTarge ...

  7. OWIN产生的背景以及简单介绍

    OWIN产生的背景以及简单介绍 随着VS2013的发布,微软在Asp.Net中引入了很多新的特性,比如使用新的权限验证模块Identity, 使用Async来提高Web服务器的吞吐量和效率等.其中一个 ...

  8. 为mongodb加上权限

    我们知道mysql在安装的时候需要我们设置一个数据库默认的用户名和密码,mongodb也不例外,不过mongodb是默认的没有设置访问限制的,不需要输入用户名和密码都可以访问的,但是这样会十分的不安全 ...

  9. Redis简介与简单安装

    Redis简介与简单安装   一.NoSQL的风生水起 1.1 后Web2.0时代的发展要求 随着互联网Web2.0网站的兴起,传统的关系数据库在应付Web2.0网站,特别是超大规模和高并发的SNS类 ...

  10. 【推荐分享】大量JavaScript/jQuery电子书籍教程pdf合集下载

    不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小   15天学会jQuery(完整版).pdf 274.79 KB   21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...