jbpm菜鸟入门
- 格式:doc
- 大小:230.50 KB
- 文档页数:4
JBPM开发指南BSTEK2007年7月目录一、概述 (4)二、第一个流程 (5)2.1、开始前的准备 (5)2.2 、Hello World 例子 (6)三、学习JPDL (11)3.1 、简介 (11)3.2 、流程版本(Version) (11)3.3 、流程定义 (12)3.3.1 process-definition(流程定义) (12)3.3.2 node(自动节点) (13)3.3.3 start-state(开始状态) (13)3.3.4 end-state(结束节点) (14)3.3.5 state(状态) (14)3.3.6 task-node (任务节点) (15)3.3.7 fork(分支) (16)3.3.8 join(联合) (17)3.3.9 decision(决策) (18)3.3.10 transition(转换) (19)3.3.11 event(事件) (20)3.3.12 action(动作) (20)3.3.13 script(脚本) (22)3.3.14 expression(表达式) (23)3.3.15 variable(变量) (23)3.3.16 handler(句柄) (23)3.3.17 timer(定时器) (24)3.3.18 create-timer(创建定时器) (25)3.3.19 cancel-timer(取消定时器) (26)3.3.20 task(任务) (26)3.3.21 swimlane(泳道) (27)3.3.22 assignment(委派) (28)3.3.23 controller(控制器) (29)3.3.24 process-state 子流程 (29)3.3.25 sub-process 子流程 (30)3.3.26 condition 条件 (30)3.3.27 exception-handler 异常处理 (31)小结 (33)四、流程中任务的分配 (37)4.1 assignment-handler方式的任务分配 (38)4.2 swimlane方式的任务分配 (39)五、JBPM持久化 (42)5.1 特殊数据库支持 (42)5.2 JBPM数据库的安装 (42)5.2 JBPM流程发布 (45)5.2.1 搭建JBPM的WEB应用 (46)5.2.2 发布第一个流程 (48)六、日历(Scheduler) (54)6.1 Scheduler在C/S程序上的应用 (54)6.2 Scheduler 在Web上的应用 (57)6.3 Scheduler时间的分类 (60)七、异步执行 (63)八、JBPM流程建模与应用 (64)8.1 JBPM的建模工具 (64)8.1.1 建模工具的安装 (64)8.2 公司报销流程示例 (67)8.2.1 流程建模 (67)8.2.2 流程数据库搭建 (76)8.2.3 构建业务表 (79)8.2.4 搭建工程 (82)8.2.5 报销流程的发布 (83)8.2.6 应用程序搭建 (84)九、写在最后 ........................................................................................ 错误!未定义书签。
JSP 简介什么是Java Server Pages?JSP全称Java Server P ages,是一种动态网页开发技术。
它使用JSP标签在HTML网页中插入Java代码。
标签通常以<%开头以%>结束。
JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。
网页开发者们通过结合HTML代码、XHTML 代码、XML元素以及嵌入JSP操作和命令来编写JSP。
JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。
JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
为什么使用JSP?JSP程序与CGI程序有着相似的功能,但和CGI程序相比,JSP程序有如下优势:∙性能更加优越,因为JSP可以直接在HTML网页中动态嵌入元素而不需要单独引用CGI文件。
∙服务器调用的是已经编译好的JSP文件,而不像CGI/P erl那样必须先载入解释器和目标脚本。
∙JSP基于Java Servlets AP I,因此,JSP拥有各种强大的企业级Java AP I,包括JDBC,JNDI,E JB,JAXP等等。
∙JSP页面可以与处理业务逻辑的servlets一起使用,这种模式被Java servlet 模板引擎所支持。
最后,JSP是Java E E不可或缺的一部分,是一个完整的企业级应用平台。
这意味着JSP可以用最简单的方式来实现最复杂的应用。
JSP的优势以下列出了使用JSP带来的其他好处:∙与ASP相比:JSP有两大优势。
首先,动态部分用Java编写,而不是VB或其他MS专用语言,所以更加强大与易用。
第二点就是JSP易于移植到非MS平台上。
∙与纯Servlets相比:JSP可以很方便的编写或者修改HTML网页而不用去面对大量的println语句。
∙与SSI相比:SSI无法使用表单数据、无法进行数据库链接。
JBPM4.4应用开发——入门篇2010-10-27 20:38:24标签:JBPM工作流工作流程入门原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。
否则将追究法律责任。
/1931202/411612首先简单说说JBPM——java Business Process Management (java 业务流程管理)jBPM是一个框架、一堆开放的源代码。
而非一套“应用程序”。
jBPM的流程引擎可以看做是一个java工程——若干java类、依赖库和配置文件;使用和学习jBPM需要如下条件:1.jBPM的流程定义和运行时的上下文需要被存储到关系型数据库中——可以是基于调试目的的内存数据库HSQLDB,也可以是真正的持久化数据库(MySql,Oracle,PostgreSql,Sybase等等);2.jBPM的流程设计一般都需要一个基于客户端的图形化流程设计器软件,当然在jBPM4版本以后可以支持在web上做流程设计(这要归功于Sigvio项目)3.最终,基于jBPM开发出来的应用程序一般都会被部署到一台应用服务器中,以便服务于来自web的访问、监控和管理等。
注意:在jBPM4.3以后,几乎所有的准备工作(安装数据库,建表,安装应用服务器,安装图形化设计器插件等)jBPM软件包的发布者都帮我们做好了。
只要通过Ant脚本“一键获取”所需要的jBPM4整套开发、运行和管理环境。
在安装jBPM之前首先要安装JDK和Ant。
快速开始--------------------------------------------------------一、1.打开cmd命令控制台:进入到${jbpm.home}/install2.运行脚本:ant demo.setup.tomcat或ant.demo.setup.jboss使用这两个服务器都可以。
具体这个命令做了上面事:请查看install目录下的build.xml文件中的目标。
jBPM开发入门指南jBPM开发入门指南(1)工作流虽然还在不成熟的发展阶段,甚至还没有一个公认的规范标准。
但其应用却已经在快速展开,这说明市场对工作流框架的需求是急迫而巨大的。
我们公司的后台短信管理系统涉及短信编发、领导层层审核等操作,这是一个比较典型的工作流系统。
过去我们用的工作流引擎是 shark ,然后在使用后发现其过于庞大,后台数据库操作频繁而未进行优化,直接导致的后果就是前台操作缓慢。
于是经研究决定,将工作流引擎由 shark 换成 jBPM 。
jBPM 之前是一个开源软件,后加入 JBoss 组织。
正好我们公司也是用 JBoss 的。
不过 jBPM 并没有绑定在 JBOSS 上, Tomcat 等也可以使用它。
jBPM 的正处在不断发展中,做为开源软件的特点,其设计变化往往很大。
所以一些过去的资料可能已经不适用了。
于是作者根据自己的使用经验,重新整理出这份文档,以备学习参考。
注:本文使用的 jBPM 版本为 3.1.1环境准备1、安装JDK所有 JAVA 开发第一个需要安装的,没什么好说的。
记得把系统变量 JAVA_HOME 设上。
2、安装AntAnt 是使用 jBPM 必须的一个工具。
jBPM 中的很多操作都要用到 Ant 。
安装方法:( 1 )先下载: /dist/ant/binaries/ ,选一个如: apache-ant-1.6.5-bin.zip 。
( 2 )解压到 D:\ant (当然其他目录也可以)。
( 3 )设置如下系统变量: ANT_HOME=d:\ant 。
( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。
3、安装EclipseEclipse 不是开发 jBPM 必须的工具,但它是对 jBPM 开发很有帮助的工具,特别是 jBPM 提供了一个 Eclipse 插件用来辅助开发 jBPM 。
关于 Eclipse 的安装不赘述了,本文用的版本是: Eclipse3.24安装 jBPMjBPM 的下载地址: /products/jbpm/downloadsz JBoss jBPM 是 jBPM 的软件包z JBoss jBPM Starters Kit 是一个综合包,它包括了 jBPM 软件包、开发插件、一个配置好了的基于 JBoss 的 jBPM 示例、一些数据库配置文件示例。
jBPM开发入门指南(4)7 jBPM 的客户端开发有了前面的 HelloWorld 后台流程,我们就要开始客户端程序了。
正如前面提到的,本文不写 JSP ,而改采用 JUnit 的形式,输出则用 System.out.println 。
举一反三,知道在方法中输入及用 println 输出,在 JSP 和 SWING 等 GUI 界面还不是一样嘛。
这个 JUnit 客户端,我们就借用创建项目时自动生成的SimpleProcessTest.java 了,改写后如下:package com.sample;import junit.framework.TestCase;import org.jbpm.JbpmConfiguration;import org.jbpm.JbpmContext;import org.jbpm.context.exe.ContextInstance;import org.jbpm.graph.def.ProcessDefinition;import org.jbpm.graph.exe.ProcessInstance;public class SimpleProcessTest extends TestCase {private JbpmConfiguration config= JbpmConfiguration.getInstance();private JbpmContext ctx = config.createJbpmContext();// helloworld对应于jbpm_processdefinition表的name字段值,也即processdefinition.xml的name// 这个值得取比较耗时,实际项目里最好和“数据库的JDBC连接”一样,让它共享,不要频繁打开关闭。
private ProcessDefinition processDefinition =ctx.getGraphSession().findLatestProcessDefinition("helloworld");public void testNewRequest() {long id = newRequest();System.out.println("id=" + id);checkNewRequest(id);confirmRequest(id);checkconfirmRequest(id);ctx.close();// 关闭jbpm容器}/***创建一个请假单**@return*/private long newRequest() {// 创建一个新流程ProcessInstance pi = processDefinition.createProcessInstance();// 取得流程的数据环境ContextInstance ci = pi.getContextInstance();// 创建一张请假单ci.setVariable("name", "陈刚" );ci.setVariable("day", 2);assertEquals(null, ci.getVariable("note"));// 请假申请结束,转到下一个流程结点pi.signal();return pi.getId();}/***检查请假单的数据**@param id*/private void checkNewRequest(long id) {// 从数据库提取原流程ProcessInstance pi = ctx.loadProcessInstance(id);// 取得流程的数据环境ContextInstance ci = pi.getContextInstance();// 创建一张请假单assertEquals("陈刚" ,ci.getVariable("name"));assertEquals(Integer.valueOf(2), ci.getVariable("day"));assertEquals("我要请假" , ci.getVariable("note"));// 当前是结点为confirmassertEquals(pi.getRootToken().getNode().getName(), "confirm");// 流程还没结束assertFalse(pi.hasEnded());}/***审批陈刚的请假申请**@param id*/private void confirmRequest(long id) {ProcessInstance pi = ctx.loadProcessInstance(id);ContextInstance ci = pi.getContextInstance();// 不通过ci.setVariable("note", "不准请假,继续加班" );// 审批结束,到下一个流程结点pi.signal();}private void checkConfirmRequest(long id) {ProcessInstance pi = ctx.loadProcessInstance(id);ContextInstance ci = pi.getContextInstance();// ConfirmAction类在signal后执行,所以覆盖了经理的审批意见assertEquals("准假" , ci.getVariable("note"));// 当前是结点为endassertEquals(pi.getRootToken().getNode().getName(), "end");// 流程结束了assertTrue(pi.hasEnded());}}这个例子还是很简单,而且关键是缺少用户、组、权限等工作流系统必须的东西,不过没关系。
第1介绍JBOSS jBPM是一个灵活的、可扩展的工作流管理系统。
JBOSS jBPM拥有直观的流程语言,用任务、异步的等待状态、定时器、自动化动作…等来表示业务流程图,把这些操作绑定在一起,JBOSS jBPM就拥有了非常强大和可扩展的控制流机制。
JBOSS jBPM只有最小的依赖,可以象使用java库一样非常容易的使用它。
另外,也可以通过把它部署在J2EE集群应用服务器中,用在吞吐量极为关键的环境中。
JBOSS jBPM可被配置为任何数据库,并且可以部署到任何应用服务器。
1.1 概述核心工作流和BPM功能被打包为一个简单的java库,这个库包括一个存储到数据库、从数据库更新和获取流程信息的服务。
图1.1 JBOSS jBPM组件概观1.2 JBOSS jBPM入门套件入门套件是一个包含了所有jBPM组件的下载包,包括:l Jbpm-server,一个预配置好的jboss应用服务器。
l Jbpm-designer,图形化设计jBPM流程的eclipse插件。
l Jbpm-db,jBPM数据库兼容包(见下文)。
l Jbpm,核心jbpm组件,包括库和本指南。
l Jbpm-bpel,JBOSS jBPM BPEL扩展参考。
预配置好的JBOSS应用服务器安装了下列组件:l核心的jBPM组件,被打包为了一个服务档案。
l一个包括jBPM库表的集成数据库:默认的hypersonic数据库包含了jBPM表,另外还包含一个流程。
l jBPM控制台web应用程序,可以由流程参与者使用,也可以由jBPM管理员使用。
l jBPM调度程序,用于定时器执行。
调度程序在入门套件中被配置为一个servlet,这个servlet 将产生一个线程来监视和执行定时器。
l jBPM命令执行器,用于命令的异步执行。
命令执行器也被配置为一个servlet,这个servlet 将产生一个线程来监视和执行命令。
l一个流程实例,已经被部署到了jBPM数据库中。
jbpm的入门1这里使用的是mysql数据库开发工具是eclipse首先我们需要初始化话数据库Java代码1.package test.config;2.3.import org.jbpm.JbpmConfiguration;4.5.public class InitDB {6.7.public static void main(String[] args) {8.InitDB initDB = new InitDB();9.initDB.createJbpmDB();10.}11.//初始化JBPM的数据库表12.public void createJbpmDB(){13.JbpmConfiguration.getInstance().createSchema();14.}15.//删除JBPM的数据库表16.public void dropJbpmDB(){17.JbpmConfiguration.getInstance().dropSchema();18.}19.20.}相关的配置文件可以在jbpm的程序包中找到hibernate.cfg.xml要与你的数据库配置相匹配。
接下来我们绘制一个工作流,这里基本上用到jbpm的一个工作流绘制的插件。
我们绘制了一个简单的流程:大体过程如下起始状态--》任务1--》任务2--》结束Java代码1.<?xml version="1.0" encoding="UTF-8"?>2.3.<process-definition xmlns="" name="qj">4.5.6.<start-state name="start-state1">7.<transition to="apply"></transition>8.</start-state>9.10.11.<task-node name="apply">12.<task name="apply">13.<assignment actor-id="1"></assignment>14.</task>15.<transition to="approve"></transition>16.</task-node>17.18.<task-node name="approve">19.<task name="approve">20.<assignment actor-id="2"></assignment>21.</task>22.<transition to="end-state1"></transition>23.</task-node>24.25.26.<end-state name="end-state1"></end-state>27.28.29.</process-definition>这里的actor-id 是一个查看权限现在我们将流程定义发布上去Java代码1.package test.config;2.3.import java.io.FileInputStream;4.import java.io.FileNotFoundException;5.import java.io.InputStream;6.7.import org.jbpm.JbpmConfiguration;8.import org.jbpm.JbpmContext;9.import org.jbpm.graph.def.ProcessDefinition;10.11./**12.* 部署流程13.*14.*/15.public class Deploy {16.public static void main(String[] args) throws FileNotFo undException {17.JbpmContext jbpmContext = JbpmConfiguration.getI nstance().createJbpmContext();18.//取得流程定义19.InputStream is = new FileInputStream("D:\\workspace\ \fwk\\jbpm\\src\\test\\qj\\processdefinition.xml");20.ProcessDefinition pd = ProcessDefinition.parseXmlInp utStream(is);21.//部署流程22.jbpmContext.deployProcessDefinition(pd);23.24.jbpmContext.close();25.}26.}发布之后我们在数据库中已经可以看到相关的配置了。
JBPM教程几个名词解释:Process definition称为流程定义,由点和线组成,点叫node,是节点,线是transition,是流转。
状态节点表示一种等待状态。
Token令牌,就是从一个节点分支,也叫Fork,往往与jion一起成对出现,join就是连接分支节点的会合。
这个分开后就立即会会合。
Decision节点,条件判断,例如请假大于等于5天,或者小于5天的。
任务节点:task node. 就是最多的有操作,有参与者的,有外界用户参与的。
在创建的ProcessInstance对象的同时,会创建一个对应的ContextInstance对象,这个对象负责存放各种流程实例变量,ContextInstance是流程实例变量的容器. 流程实例比如:张三的请假单的流程。
流程定义:比如:请假单流程。
Token令牌:整个流程有一个rootToken,底层还有一个节点的引用,一直指向一个节点。
设计流程时,每个工具的用处:Node就是个普通节点,没有行为,需要我们自己定义。
TaskNode节点是最常用的工具,process state:用来连接两个流程的。
例如:到了一个子节点要启动一个新流程。
Superstate:讲一部分节点连接在一起定义成一个个的阶段。
想创建一个流程:第一:用jbpm创建所需要的数据库表,这是空表,只是建了一些流程需要用到的表而已. JbpmConfiguration.getInstance().createSchema();第二:根据流程定义文件,解释得到流程定义对象,把流程定义持久化到数据库.:context.deployProcessDefinition(def);这样就会在第一步建的三十二张表里面创建部分的数据记录:例如:Jbpm_processdefinition,jbpm_node,jbpm_task,jbpm_transition等等一些表。
一个流程实例对应多个任务实例:某个人的请假单,在某个taskNode里面有两个task节点,就会创建两个taskInstance来和这个instance对应.--------领航致远视频里面的jbpm相关软件包括:Jbpm单独的suite套件,eclipse3.2,spring-module(jbpm的sping插件jbpm提供),单独解压jbpm的suite得到它的全文件:Jbpm运行是需要数据库支持的,db就是为不同数据库生成表的。
成都天府软件园有限公司JBPM5.1入门学习模板文档编号目录1简介 (3)1.1什么是JBPM (3)1.2概述 (3)1.3该版本的改进 (4)1.4E CLIPSE设计器 (5)1.5基于W EB的设计器 (6)1.6JBPM控制台 (6)2入门 (7)2.1下载 (7)2.2资源 (7)2.3环境准备 (8)2.3.1安装JDK (8)2.3.2安装Ant (8)3DEMO(官方例子)学习 (8)3.1下载安装包 (8)3.2启动DEMO (8)3.3学习使用E CLIPSE设计器 (9)3.4学习使用JBPM控制台 (10)3.5学习使用DROOLS-GUVNOR设计器 (12)4用TOMCAT+SSH+JOTM+MYSQL+JBPM移植DEMO (13)4.1环境准备 (13)4.1.1安装JDK (13)4.1.2安装Ant (13)4.1.3安装Eclipse (14)4.1.4安装Tomcat (14)4.1.5安装MySql (14)4.1.6下载Jotm (14)4.2移植H UMAN TASK S ERVICE PROJECT (15)4.2.1修改jbpm相关的数据库配置 (15)4.2.2第二次运行时注释掉以下代码 (16)4.3移植WF PROJECT (16)4.3.1创建jbpm的web工程 (16)4.3.2导入SSH相关的依赖 (22)4.3.3导入jbpm相关的依赖 (23)4.3.4使用jotm配置tomcat 数据源以支持JTA (24)4.3.5Jbpm相关配置文件更新 (28)4.3.6Java服务器端编码 (30)4.3.7Jsp客户端编码 (49)4.3.8Struts和spring的配置 (51)4.4部署和运行 (53)4.4.1启动Demo Human Task Service (53)4.4.2启动Tomcat (53)4.4.3运行Demo (54)附录A:MYSQL安装图解 (58)一、MYSQL5.1安装 (58)二、配置MYSQL SERVER (62)1简介1.1什么是JBPMJBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。
菜鸟画图入门篇
1设计简单的流程图
简单的流程图有开始节点还有结束节点任务节点task 在task节点定义谁来完成任务和这个节点的任务名字
选择处理人
还可以用变量#{jh}这种写法
节点可以自己判断进流转
添加decision节点可以自己判断简单的判断可以这样写
在节点里面加这样一个属性
返回值是个布尔类型可以直接跳转
除了这样用表达式处理以外jbpm还提供你一个复杂的处理方式
添加handler
配置class
集成DecisionHandler 实现方法decide
判断的值可以从context 中拿出来
自己写一些判断然后返回这个decision 中的task的名字就能判断后跳转
实现命名跳转在jbpm中我们要访问很多变量那么我们可以不用放到jbpm 中
可以直接访问的时候跳转
修改这个实现就好了
修改一下这个方法的实现
以后在jbpm 中访问doc_开头的头可以直接访问了
Struts2 前台封装list set
创建泛型文件
前面的是action的名字
内容
workP是workerAction里面的属性
前台应用。