`
卡拉阿风
  • 浏览: 99510 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    博客分类:
  • jBPM
阅读更多
工作流(系统)主要概念
工作流引擎:工作流的核心组件,对流程实例、任务实例以及其状态进行管理
流程定义:预先定义的业务流转逻辑
流程实例:业务的一次实际流转过程
参与者:任务的执行者
活动(任务):组成流程定义的节点
活动实例:组成流程实例的元素
流转:从一个节点到另一个节点这一行为
工作列表:当前需要办理的任务集合

开发步骤
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 requests and threads in an application. Here's how you can obtain a ProcessEngine

我把这个交给spring去管理
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
<bean id="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输入流中获得
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);
...
}

在测试的时候
ProcessEngine processEngine = new Configuration().buildProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
 
//布署当前目录下test.jpdl.xml文件
String deploymentId = repositoryService.createDeployment()
                      .addResourceFromClasspath("test.jpdl.xml").deploy();

在我们实际应用中,addResourceFromInputStream和addResourcesFromZipInputStream运用较多。

二、流程实例管理
2.1流程实例启动
启动方法参看org.jbpm.api.ExecutionService。
启动一个新的流程实例的最简单最常用的方法:
ProcessInstance processInstance = executionService.startProcessInstanceByKey("test");

test即test.jpdl.xml中process name。
有的时候,我们在刚启动实例的时候就需要加一个变量进去。
我们假设在填写请假单之前需要传入一个applyName参数进去
...
<process name="leave" xmlns="http://jbpm.org/4.3/jpdl">
   <start g="67,6,48,48" name="开始">
      <transition g="-30,-10" name="请假" to="填写请假单"/>
   </start>
   <task assignee="#{applyName}" g="45,102,92,52" name="填写请假单">
      <transition g="591,124:-127,-18" name="提交申请" to="主管审核"/>
   </task>
...

我们可以这样来实现
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("applyName", "dyaln");
ExecutionService executionService = processEngine.getExecutionService();
ProcessInstance processInstance = executionService.startProcessInstanceByKey("leave",variables);
1
0
分享到:
评论
5 楼 linhao0907 2012-06-29  
请问下, 当我从jsp上传一个xml文件时,后台通过addResourceFromFile()并不能部署到数据库, 只有jbpm4_deployment有数据,而jbpm4_deployprop没有数据,请问是为什么呢
4 楼 卡拉阿风 2010-02-24  
fying0728 写道
可不可以给一个例子?全面一些的,有代码的

可以到family168上查找
3 楼 fying0728 2010-02-10  
可不可以给一个例子?全面一些的,有代码的
2 楼 卡拉阿风 2010-01-25  
judykula 写道
为什么我整合完后 每次启动tomcat 到
ProcessEngine processEngine = new Configuration().buildProcessEngine(); 
句都出错?
我能发布流程定义文件。说明已经整合成功。经过跟中我发现applicationContext总是空的。请问你知道有什么解决办法吗?


引用
A ProcessEngine is thread safe and can be stored in a static member field or even better in JNDI or some other central location. One ProcessEngine object can be used by all requests and threads in an application.

流程引擎是线程安全的,它可以保存在静态变量中, 甚至JNDI中或者其他重要位置。 在应用中,所有线程和请求都可以使用同一个流程引擎对象
<bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
	<bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />

所以ProcessEngine processEngine在实际应用中不需要我们再次去创建
1 楼 judykula 2010-01-25  
为什么我整合完后 每次启动tomcat 到
ProcessEngine processEngine = new Configuration().buildProcessEngine(); 
句都出错?
我能发布流程定义文件。说明已经整合成功。经过跟中我发现applicationContext总是空的。请问你知道有什么解决办法吗?

相关推荐

Global site tag (gtag.js) - Google Analytics