jbpm开发步骤-流程实例

本文详细介绍了流程实例的创建及操作方法,包括流程实例的状态控制、活动节点的种类及其功能特性,如状态节点(state)、决定节点(decision)、任务活动(task)等,并解释了如何通过信号(signal)触发流程实例继续执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

流程实例processInstance:

 

 

private ProcessEngine engine;
	private RepositoryService repositoryService;
	private ExecutionService executionService;
	private String deploymentId;
	
	 public ProcessInstanceTest() {
		engine = Configuration.getProcessEngine();
		repositoryService = engine.getRepositoryService();
		executionService = engine.getExecutionService();
	}
	
	/**
	 * 测试流程实例
	 */
	public void testProcessInstance(){
		deploymentId = repositoryService.createDeployment().addResourceFromClasspath("hello.jpdl.xml").deploy();
		List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
		ProcessInstance processInstance = executionService.startProcessInstanceByKey("hello");
		System.out.println(processInstance);
	}

 

 

流程实例的操作都是executtionService来执行的,比如开始一个调用的是startProcessInstanceByKey("hello");

 

由于我们jpdl文件中的是state节点,所以当我们start一个Instance后,它流转到了state节点,此时流程实例处于等待状态,我们可以用

 

processInstance.isEnded()

 来判断,否则就要手动触发向下流转:

 

processInstance = executionService.signalExecutionById(processInstance.getId());

此时才isEnded才为true,除非直接结束他:

 

executionService.endProcessInstance(processInstance.getId(), "删除需要理由吗?");

 或者直接删除一个流程实例:

 

executionService.deleteProcessInstanceCascade(processInstance.getId());

  同样查询流程实例列表用:

 

List<ProcessInstance> list2 = executionService.createProcessInstanceQuery().list();
 

 

 

 

 

二、活动介绍

1、控制流程的活动(让活动在不同节点状态不一样)

 

start state  end Decision fork join sub-process task

 

start开始节点,一个jpdl文件里至少应该有个start节点。start里必须有transition,当我们调用

startProcessInstanceByKey("leave")就会触发他流向到transition指定的节点

 

state状态节点,当流程实例运行到state节点时不会自动向下执行,除非有外部的触发signalExecution(executionId,"to 经理")。

 

 

我们可以在state节点里加一个 监听器,用来判断signal作用在正确的流程实例上

 

 

<state name="经理审批">
	<on event="start" >
		<event-listener="com.luo.listener.StartEventListener"/>
	</on>	
</state>
 

 

 

在StartEventListener我们可以execution.getId(),并且也能为signal提供一个ID向下执行

 

decision 决定节点,里面有若干个transition,他会根据条件判断然后自动向下执行,他有3种设置方式

方法一:

 

<decision name="checkNum">
	<transition name="big" to="tobig">
		<condition expr="#{num > 10}"/>
	</transition>
	<transition name="small" to="toSmall">
		<condition expr="#{num < 10}"/>
	</transition>
</decision>

 

 方法二:首先在jpdl中

 

 

 

<decision name="checkNum" expr="#{content}">
     <transition name="big" to="toBig"/>
     <transition name="small" to="small"/>
</decision>

 

然后在java代码中执行

 

String<String,Object> variables = new HashMap<String,Object>;
variables.put("content",big);
executionService.startProcessInstanceByKey("leave",variables);

 

 

方法三:加一个handler,即实现DecisionHandler接口,重写里面的decide(OpenExecution execution)方法

 

<decision name="checkNum" expr="#{content}">
	<handler class="com.luo.handler.CheckNumHandler"/>	
     <transition name="big" to="toBig"/>
     <transition name="small" to="small"/>
</decision>

 然后在java中

 

 

public class CheckNumHandler implements DecisionHandler{

     public String decide(OpenExecution execution){
              String content = (String)execution.getVariables("content");
               if(content.equals("big")){
                       return "big";
                }
                if(content.equals("small")){
                       return "small";
                }
      }
}

 

fork和join通常一起用:表示分开和合并

 

end 结束节点:

只有当流向到end节点时,才会结束流程实例,其他的并发的流向会放弃任务

可以有多个end,表示不同的结束方式。

 

流向(Executtion)会以不同状态结束,结束的结果可以通过下列方式展示

end 上加一个state属性<end name="ok" state="顺利完成"/>

或者直接用end-cancel或者end-error表示<end-cancel name="cancel"/>

 

 

task任务活动:一个任务可以分配给一个用户,或者一个用户组

类型一:

 

<task name="review" assignee="#{order.owner}">
	<transition to="to big"/>
</task>

 

 assignee属性默认会当作表达式来执行,当然之前会在java中写:

 

Map variables = new HashMap();
variables.put("order",new Order("张三"));//order是我自己的类
executionService.signalExecutionById(psId,variables);

 

 这样这个task只会被分配给张三了,张三在使用

 

taskService.findPersonalTasks("张三");
taskService.getAssignedTasks("张三");

 

 就能获得任务列表了

 

类型二:用户组就涉及到了候选人的问题

 

<task name="review" candidate-groups="sales-dept"/>
	<transition to="to big"/>
</task>

 

 当然之前我们会在java代码中:

identityService.createGroup("sales-dept");
identityService.createUser("张三");
identityservice.createMembership("张三","sales-dept");

identityService.createUser("李四");
identityservice.createMembership("李四","sales-dept");

 这样在流程创建后,任务会出现在 张三 李四的分组任务列表中

taskService.findGroupTasks("张三");
 

候选人必须要有人在处理任务之前接受任务,分组任务列表中,用户接口必须只接受“对这些任务接受” 的操作

这样当某个用户接受了后,这个任务的分配人就是当前用户,而这个任务会从“所有分组候选人”的任务列表上消失,他会出现在 用户的已分配任务列表中。

 

任务分配处理器AssigmentHandler可以编程式的来计算一个任务的分配人和候选人

public interface AssigmentHandler extends Serializable{
	void assign(Assignable assignable,OpenExecution execution);
}

 Assignable是任务和泳道的通用接口。。。。。。。。。。。

assignment-handler是task的子元素,用来指定用户对象

<task name="review">
	<assignment-handler class="com.luo.handler.UserAssignHandler">
		<field name="assignee">
			<String value="张三"/>
		</field>
	</assignment-handler>
</task>
 

 

通常用processInstance.findActiveExecutionIn("state name or desition name or ..")来判断name节点是否是当前节点

 

 

 

 

decision

 

 

2、原子活动(让活动在该节点做一些事)

 

java script sql hql emai

 

 

 

 

.1、安装JDK 1.2、安装Ant Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。 安装方法: ( 1 )先下载: 为了执行ant脚本,你需要1.7.0或更高版本的apache ant: http://ant.apache.org/bindownload.cgi ( 2 )解压到 D:\ant (当然其他目录也可以)。 ( 3 )设置如下系统变量: ANT_HOME=d:\ant 。 ( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。 安装 jBPM jBPM 的下载地址: http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=268068 2 、建库 MySQL 中创建一个库,库名: jbpmdb 3 、生成建表的 SQL 语句并建表 这个构建文件${jbpm.home}/db/build.xml包含了脚本 用来创建和删除数据库结构的操作。 进入到这个目录下,运行ant -p 可以获得更多细节。 你的数据库中创建表结构: 首先,更新${jbpm.home}/db/jdbc中的数据库配置文件。 然后,在D:\jbpm-4.0\db\build.xml 更改为 mysql 然后在db目录下执行ant create.jbpm.schema 可以看到 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样 将在 jbpmdb 库中创建一个个的数据表。 --------------------------------------------------------------------- 安装 jBPM 4的 Eclipse 开发插件 jBPM 4的 Eclipse 开发插件 只有GPD 流程设计器(GPD) 图形化流程设计器(GPD)使用Eclipse作为其平台, 并把GPD插件安装到eclipse上。 使用Eclipse软件升级(Software Update)机制安装设计器是非常简单的。 在gpd目录下有一个gpd/jbpm-gpd-site.zip文件, 这就是更新站点(archived update site)的 压缩包。 在Eclipse里添加更新站点的方法: 帮助 --> 安装新软件... 点击 添加... 在 添加站点 对话框中,单击 压缩包... 找到 gpd/jbpm-gpd-site.zip 并点击 '打开' 点击 确定 在 添加站点 对话框中,会返回到 '安装'对话框 选择出现的 jPDL 4 GPD 更新站点 点击 下一步.. 然后点击 完成 接受协议 当它询问的时候重启eclipse 5 配置jBPM运行时 点击 Window --> Preferences 选择 JBoss jBPM --> jBPM 4 --> Runtime Locations 点击 Add... 在 Add Location 对话框中,输入一个名字,比如 jbpm-4.0 然后点击 Search... 在 Browse For Folder 对话框中,选择你的jbpm根目录,然后点击 OK 点击 OK 在 Add Location 对话框中 6 定义jBPM用户库 如何在你的工作空间定义一个用户库, 用来放置jBPM的库文件。 如果你创建一个新工程, 只需要将用户库全部添加到build path下 点击窗口 --> 属性(Windows --> Preferences) 选择Java --> 创建路径 --> 用户类库(Java --> Build Path --> User Libraries) 点击新建(New) 类型名字jBPM Libraries 点击添加JARs(Add JARs...) 找到jBPM安装程序下的lib目录 选择lib下的所有jar文件并点击打开(Open) 选择jBPM Libraries作为入口 重新点击添加JARs(Add JARs) 在jBPM的安装程序的根目录下选择jbpm.jar文件 点击打开(Open) 在jbpm.jar下选择源码附件(Source attachment)作为入口 点击编辑(Edit) 在源码附件的配置(Source Attachment Configuration)对话框中,点击目录(External Folder...) 找到jBPM安装程序下的src目录 点击选择(Choose) 点击两次'确定'(Ok)会关闭所有对话框 7  jBPM 的 demo 新建jBPM项目 主菜单“文件->新建->项目”,在弹出的对话框里,有“ java Project ”项 选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后手动 创建src/test/config copy D:\jbpm-4.0\examples\src 2009-07-07 15:40               546 jbpm.cfg.xml 2009-07-07 15:40             1,085 jbpm.hibernate.cfg.xml ...... .....
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值