`
学会做人
  • 浏览: 120952 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JBPM总结

    博客分类:
  • JBPM
阅读更多

1、利用jpdl图形设计器分析和设计流程
2、定义流程
3、加载和启动jbpm流程定义、
A、利用JbpmConfiguration.createJbpmContext(),得到jbpmContext上下文对象;
B、再利用JbpmContext上下文对象得到GraphSession对象;
C、根据GraphSession对象来加载流程定义,根据流程定义id来加载得到流程定义对象;
D、创建流程实例:启动流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);
E、保存jbpmContext.save(processInstance);
F、关闭jbpmContext.close();

=======================================================================================
一、部署流程定义

JbpmContext jbpmContext =  JbpmConfiguration.getInstance().createJbpmContext();


ProcessDefinition processDefinition = ProcessDefinition
      .parseXmlResource(“jdpl/hello/processdefinition.xml");

//部署流程定义,如果已经存在同名的定义,则版本号会自动累加
jbpmContext. deployProcessDefinition(processDefinition);

 jbpmContext.close();
 
 
 ======================================================================================
 
 二、加载和开始流程
 
 JbpmContext jbpmContext =JbpmConfiguration.getInstance.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
//加载流程定义
ProcessDefinition processDefinition = graphSession
  .loadProcessDefinition(processDefinitionId);

// 创建流程实例:启动流程
ProcessInstance processInstance = new ProcessInstance(processDefinition);

//此时,rootToken指向流程定义的第一个节点

jbpmContext.save(processInstance);

jbpmContext.close();


=====================================================================================

三、给任务设置参与者
某一个任务固定由某人处理:
  <task-node name="collectform" >
      <task >
        <assignment actor-id=“manager” />"
      </task>
      <transition name="auditfork" to="auditfork" />
    </task-node>

=====================================================================================   

四、给任务设置参与者
用变量传递参与者的ID:  值一般在web层确定
定义配置:
  <task-node name="collectform" >
      <task >
        <assignment class='org.ministone.training.jbpm.UserIdAssignmentHandler' />“
       <assignment actor-id=‘#{userId}' />“
      </task>
      <transition name="auditfork" to="auditfork" />
    </task-node>
Handler 实现
public class UserIdAssignmentHandler implements AssignmentHandler {
    public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
        String actorId = (String) executionContext.getVariable("userId");               
        assignable.setActorId(actorId);     
    }
}


=====================================================================================

五、获取工作列表

获取待办列表:
 JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
 TaskMgmtSession taskMgmtSession =   jbpmContext.getTaskMgmtSession();

 //只能获取尚未完成的任务列表(待办任务)
  List list = taskMgmtSession.findTaskInstances(userId);

   jbpmContext.close();
在实际的应用中,需要自己写DAO来获取各种列表,例如待签、待办、已办、办结等列表,而且可以进行条件查询,分页等


======================================================================================
六、执行任务
典型代码:取得某个任务id对应的任务实例
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.start();
jbpmContext.save(taskInstance);
jbpmContext.close();

start()方法的调用
标识着一个任务的执行的开始:任务的开始时间字段会被填充
在实际业务中类似签收的作用
也可以带入参数(actorId)来主动参与任务的执行

======================================================================================

七、如何结束任务

典型代码:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
TaskMgmtSession taskMgmtSession = jbpmContext.getTaskMgmtSession();
TaskInstance taskInstance = taskMgmtSession.loadTaskInstance(id);
taskInstance.end();
jbpmContext.save(taskInstance);
jbpmContext.close();

end 方法的调用
当前任务实例的结束:任务的结束时间字段会被填充
下一个节点的初始化(实际上调用了token.signal()方法)
当前任务的结束和下一个流程节点的开始是在一个事务内完成,从而保证了数据的完整性


======================================================================================

八、设置(流程实例)变量

变量用来处理工作流相关数据
不需要定义
和流程实例信息一起被持久化
变量的访问和赋值是在某一个token上进行的,缺省时,是基于root Token
变量的作用域和所属的token的生命周期一致,分支上同名变量互不影响,和parent的同名变量也互不影响
典型代码:
JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();

ProcessInstance processInstance = graphSession.loadProcessInstance(Long
    .parseLong(instanceId));
ContextInstance contextInstance = processInstance.getContextInstance();
contextInstance.setVariable(vname, value); //设置到了rootToken

jbpmContext.save (processInstance);
jbpmContext.close();


====================================================================================
九、对JbpmContext的理解(-)
职责
封装了对流程实例的持久化操作
用于获取GraphSession对象;
主要方法
Connection getConnection()
Session getSession()
public GraphSession getGraphSession()
public TaskMgmtSession getTaskMgmtSession()
public LoggingSession getLoggingSession()
public SchedulerSession getSchedulerSession()
public void close()

 

  理解(二)
 
  典型用法
 JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();
try {
    TaskInstance taskInstance = ...
     ...do your process operations..............
  jbpmContext.save(taskInstance);
 }catch(Throwable){
    //process exception here
  }
   finally {
    jbpmContext.close();
   }

 

理解(三)
web.xml中的配置
filter>
        <filter-name>JbpmContextFilter</filter-name>
        <filter-class>org.jbpm.web.JbpmContextFilter</filter-class>
    </filter>
……
 <filter-mapping>
        <filter-name>JbpmContextFilter</filter-name>
        <url-pattern>/wfapp/*</url-pattern>
    </filter-mapping>


jsp页面上 <%
      JbpmContext jbpmContext = JbpmConfiguration.getInstance().getCurrentJbpmContext();
      List list = jbpmContext.getGraphSession().findLatestProcessDefinitions();
      for (int i = 0; i < list.size(); i++) {
          ProcessDefinition pd = (ProcessDefinition)list.get(i);
 %>
      <tr><td><%=pd.getName()%></td><td><%=pd.getVersion()%></td> </tr>
 <% }  %> <!– 不需要关闭-->

======================================================================================


十、对GraphSession的理解
职责
Graph 相关的数据持久化操作
主要是ProcessDefinition和ProcessInstance
主要方法
 public void saveProcessDefinition( ProcessDefinition processDefinition )
public ProcessDefinition loadProcessDefinition(long processDefinitionId)
public ProcessDefinition findProcessDefinition(String name, int version)
 public List findAllProcessDefinitions()
public void saveProcessInstance(ProcessInstance processInstance)
 public ProcessInstance loadProcessInstance(long processInstanceId)
public List findProcessInstances(long processDefinitionId)
Delete方法


=====================================================================================

十一、TaskMgmtSession的理解

职责
TaskInstance相关的数据查询操作
TaskInstance数据通过ProcessInstance进行保存
主要方法
public List findTaskInstances(String actorId)
public List findPooledTaskInstances(String actorId)
public List findTaskInstancesByToken(long tokenId)
public TaskInstance loadTaskInstance(long taskInstanceId)
没有save方法,save是通过对processInstance的操作实现的

 

======================================================================================

 

总结:

一、jBPM编程步骤总结
创建流程定义
部署流程定义
启动流程实例
获取任务列表
执行某个任务
结束任务

 

二、工作流应用一般开发步骤
分析业务流程、用jPDL对业务流程进行建模
部署流程定义
创建和启动流程实例
获取待办任务
执行任务
提交(结束)任务

 

 

 

 

 

 

 

分享到:
评论
1 楼 zengqun89 2009-09-21  
谢谢楼主的精华好贴...
请问楼主,您有没有关于会签的实现,任务回退的实现???

相关推荐

    jBPM4学习总结

    【jBPM4学习总结】 jBPM,全称为Java Business Process Management,是一个开源的、灵活且可扩展的业务流程管理框架,涵盖了业务流程管理、工作流和服务协作等多个领域。自2004年10月加入JBoss组织后,jBPM逐渐成为...

    JBPM3总结.docx

    总结来说,JBPM3是一个强大的业务流程管理工具,通过XML描述流程,利用Hibernate进行数据管理,提供了轻量级的依赖和灵活的部署选项。其核心概念如流程定义、流程实例、令牌和事件,共同构建了一个完整的业务流程...

    jbpm3.2开发总结.pdf

    本文主要围绕jbpm3.2在开发过程中的关键概念、组件、API使用以及配置等知识点进行总结。 首先,了解jbpm3.2需要掌握Java语言,J2EE技术栈,特别是Hibernate,因为在jbpm3.2中,流程定义、任务实例等数据的持久化是...

    jbpm简介\jbpm简介

    #### 五、总结 综上所述,jBPM是一个功能强大、易于使用的商业流程管理工作流引擎。它不仅具备丰富的特性和高度的灵活性,而且在实际应用中也表现出了出色的稳定性和性能。对于寻求提高业务流程管理效率、简化软件...

    JBPM4 学习使用总结

    **JBPM4 学习使用总结** JBPM4(Java Business Process Management)是Jboss公司推出的一款开源的工作流管理系统,它提供了完整的业务流程自动化解决方案,包括流程设计、部署、执行、监控以及管理等功能。在深入...

    jBPM3.2.rar_JBPM3.2_jbpm_jbpm 3.2_jbpm3_jbpm3.2教程

    **jbPM 3.2 知识点详解** jbPM,全称为Java Business Process Management,是一个开源的工作流管理系统,主要用于企业级应用中的业务流程管理。...希望这份知识总结能对你在jbPM的学习和使用上提供帮助。

    jbpm3基本资料和代码总结

    **jbpm3基本资料与代码总结** jbpm(Java Business Process Management)是一个开源的工作流管理系统,专注于业务流程的建模、执行和管理。jbpm3是该系统的第三个主要版本,它提供了一整套工具和API,帮助开发者...

    JBPM4学习经验总结

    JBPM4学习经验总结 JBPM4是Java Business Process Management(业务流程管理)的缩写,它是一个开源的、灵活的、易扩展的可执行流程语言框架。JBPM4学习经验总结包括了JBPM4的概念、配置JBPM4开发环境、JBPM默认的...

    jbpm-jpdl-designer-3.0.13.zip_jbpm_jbpm design_jbpm designer_jbp

    总结来说,jbpm-jpdl-designer-3.0.13是一个jbpm的图形化流程设计工具,使用它可以方便地创建和编辑JPDL文件,而无需直接处理XML。这个工具支持在Eclipse集成开发环境下使用,提供了友好的界面和丰富的功能,有助于...

    jbpm工作流引擎总结文档

    jbpm工作流引擎基于J2EE的轻量级,纯java,开源的工作流管理系统。

    jbpm-2.0-beta1.zip_java 工作流引擎_jbpm_jbpm-demo_工作流_工作流引擎

    总结来说,jbpm是一个强大的Java工作流引擎,具有流程建模、执行和管理的全面功能,适合用于构建企业级工作流系统。jbpm-demo提供了丰富的示例,帮助开发者快速上手,而jbpm-2.0-beta1的压缩包则包含了实现这些功能...

    JBPM笔记总结-1

    JBPM笔记总结,最最经典的,初学者的必看

    JBPM阶段性工作总结

    请把webwork、spring、hibernate和jbpm的所有jar包放入web-inf的lib下。然后将这个rar包下的jbpm3.2.1的sql导入mysql中。大家可以用src里面的两个XXXTest测试用例跑一下,代码很粗糙,需要大量重构,请见谅。只是...

    jbpm4web-JBPM4的一个web版本的Demo

    总结来说,jbpm4web是一个实用的学习工具,它使开发者能够深入了解JBPM4的运作机制,并快速上手实践。通过这个Demo,你可以掌握流程设计、执行、管理和监控的关键技术,为实际项目开发打下坚实的基础。

    流程开发java插件jbpm 使用说明 个人总结

    【JBPM简介】 JBPM,全称JBOSS Business Process Management,是一个基于Java的开源工作流管理系统。它提供了一种灵活且可扩展的方式来设计、执行和管理业务流程。JBPM利用直观的流程语言,如任务、异步等待状态、...

    JBPM4.4完整可用审批流程

    这些报错指南可能是开发者根据经验总结出的常见问题解决方案,或者是官方文档中的错误处理部分,对于快速定位和解决问题非常有帮助。 在jbpm4_maven目录下,我们可以期待找到以下内容: 1. **源代码**:包括业务...

    jbpm中文教程-详细

    总结,jbpm作为企业级的业务流程管理工具,其强大之处在于它提供的完整流程生命周期管理、灵活的流程定义和强大的数据持久化能力。结合Hibernate的集成,jbpm成为Java开发人员实现高效流程自动化和管理的理想选择。...

    jbpm jar java

    总结来说,jbpm是一个功能丰富的Java工作流管理框架,它通过提供强大的API和工具,让开发者能够轻松地构建、执行和管理业务流程。在实际开发中,理解jbpm的核心概念、API使用以及最佳实践,将有助于构建高效、灵活的...

Global site tag (gtag.js) - Google Analytics