`

jbpm工作流学习心得

阅读更多

一,装载流程:
 第一种:

java 代码
  1. JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();   
  2. JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();   
  3.  try {   
  4.   Entity[] entities = IdentityXmlParser   
  5.     .parseEntitiesResource("hsqldb/identity.db.xml");   
  6.   IdentitySession identitySession = new IdentitySession(jbpmContext   
  7.     .getSession());   
  8.   for (int i = 0; i < entities.length; i++) {   
  9.    identitySession.saveEntity(entities[i]);   
  10.   }   
  11.  } finally {   
  12.   jbpmContext.close();   
  13.  }  


 第二种:

java 代码
  1. ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(   
  2.     "<process-definition>" +   
  3.   "  <start-state>" +   
  4.   "    <transition to='s' />" +   
  5.   "  </start-state>" +   
  6.   "  <state name='s'>" +   
  7.   "    <transition to='end' />" +   
  8.   "  </state>" +   
  9.    "  <end-state name='end' />" +   
  10.    "</process-definition>"  
  11.  );  

 


二,创建一个流程实例:
 第一种方法:ProcessInstance processInstance =  new ProcessInstance(processDefinition);
 第二种方法:processInstance = jbpmContext.newProcessInstanceForUpdate("websale");

三,取得流程实例,流程实例数据环境

java 代码

三,创建一个事务实例:TaskInstance taskInstance=processInstance.getTaskMgmtInstance().createStartTaskInstance();

四,创建一个流程实例数据环境:
 ContextInstance contextInstance = processInstance.getContextInstance();
    流程环境变量可以存取变量:contextInstance.getVariable("item");

 

java 代码
  1. TaskInstance taskInstance = createNewProcessInstance();   
  2.      Map taskVariables = new HashMap();   
  3.      taskVariables.put("item""cookies");   
  4.      taskVariables.put("quantity""lots of them");   
  5.      taskVariables.put("address""sesamestreet 46");        
  6.      taskInstance.addVariables(taskVariables);  

五,创建令牌:
 Token token = processInstance.getRootToken();//等于processDefinition.getStartState();

六, 现在开始流程执行,离开start-state 结束默认的转换(transition)
 token.signal();

七,保存事务

java 代码
  1. jbpmContext = jbpmConfiguration.createJbpmContext();   
  2. jbpmContext.close();  

八,jbpm数据库表创建和删除:
 第一种:

java 代码
  1. DbPersistenceServiceFactory dbPersistenceServiceFactory = (DbPersistenceServiceFactory) jbpmConfiguration   
  2.   .getServiceFactory(Services.SERVICENAME_PERSISTENCE);  


 
 第二种:

java 代码
  1. static JbpmSessionFactory jbpmSessionFactory =    
  2.        JbpmSessionFactory.buildJbpmSessionFactory();   
  3.     
  4.  static {   
  5.                 // 因为HSQLDBin-memory数据库是干净的数据库,   
  6.                 // 在我们开始测试前,我们需要建立table.   
  7.      // The next line creates the database tables and foreign key    
  8.      // constraints.    
  9.      jbpmSessionFactory.getJbpmSchema().createSchema();//创建   
  10.   dbPersistenceServiceFactory.dropSchema();//删除   
  11.   }  


九,jbpm session创建
 JbpmSession jbpmSession = jbpmSessionFactory.openJbpmSession();

十,任务分派
 在jBPM, 推 和 拉l 模式 (看下面) 的任务分派可以组合使用. 流程能计算任务的责任并把它"推"到他/她的任务清单里(tasklist).或者另外的方法, 把任务分配给参与者池, 这种情况下池中的每一个参与者可以"拉"任务并且把它们放到参与者个人的任务清单中(tasklist).

 1,分配接口:通过接口AssignmentHandler来分配任务实例:

 public interface AssignmentHandler extends Serializable {
   void assign( Assignable assignable, ExecutionContext executionContext );
 }

 一个分配handler实现在任务实例建立的时候被调用. 在这个时候,任务实例可以分配给一个或多个参与者.
 
 2,AssignmentHandler 实现可以调用 Assignable 方法(setActorId或 setPooledActors )来分配任务.
 
 可分配的要么是一个 TaskInstance 或者 SwimlaneInstance (= 流程角色).

 

java 代码
  1. public interface Assignable {   
  2.     public void setActorId(String actorId);   
  3.     public void setPooledActors(String[] pooledActors);   
  4.  }  

 3, 分配一个TaskInstance给用户, 调用 Assignable.setActorId(String actorId) .
  分配一个TaskInstance给候选参与者池, 调用 Assignable.setPooledActors(String[] actorIds).

 4,流程中的每个任务都可以用在运行时间执行分配handler的实现关联起来.

 5,推模式:任务实例的actorId 表明对指定任务责任的. TaskInstance 缓存的参与者是任务参与者的候选人.
 典型的,TaskInstance 的actorId将引用一个用户. 缓存的参与者可以引用用户和组.
 
 6,拉模型:
  获取集中的任务典型两个步骤操作:
  1)从身份组件得到给定用户所有的组
  2)根据用户的actorId和从用户组得到的actorId来得到所有共有的任务
 得到给定用户的所有共有的任务的清单通过方法 TaskMgmtSession.findPooledTaskInstances(String actorId)  或 TaskMgmtSession.findPooledTaskInstances(List actorIds) .

 为了防止多个用户在同一个共有的任务上工作, 更新TaskInstance 为用户的actorId就可以了.
 做了这个, 任务实例将不会显示在共有的任务清单里,但只在用户的个人任务清单里.
 设置TaskInstance 的actorId 为null,将会把任务实例放回共有的任务里.

 7,个人任务清单是所有所有指定actorId作为用户的 TaskInstances.这个清单的获得是用过 TaskMgmtSession.findTaskInstances(String actorId).

 8,泳道:泳道(swimlane)是流程角色
 所有分派是在给定swimlane任务实例上完成.

 9,任务事件:任务有动作关联. 有4个标准任务事件类型定义: task-create, task-assign, task-start 和 task-end.
 task-create 在任务实例建立的时候被产生.
 task-assign 当任务实例被分配的时候产生.你可以访问前一个参与者通过 executionContext.getTaskInstance().getPreviousActorId()
 task-start 是当 TaskInstance.start()被调用时产生 .
 task-end 当 TaskInstance.end(...)被调用时产生 .
 
 10,任务定时器:任务定时器指明的事情是 cancel-event 可以定制的.默认的, 任务上的定时器在任务结束时,将被放弃 (= 完成).
  cancel-event 类型能被用逗号分隔的多个事件列表.

 11,任务控制器:任务是用来收集用户输入的.任务控制器为用户接口应用程序提供流程变量的视图.
 任务控制器有2个责任:第一个, 从流程变量里提取信息. 从流程变量里提取的信息表示作为一个指定的参数的集合.参数用做来自用户接口表单的输入. 第二个责任是保存用户提交的参数到流程变量里.
 
 输入流程变量的二种方式:1)任务控制器在task元素中指定.
         例

java 代码
  1. task name="clean ceiling">   
  2.          <controller>   
  3.          <variable name="a" access="read" mapped-name="x" />   
  4.          <variable name="b" access="read,write,required" mapped-name="y" />   
  5.          <variable name="c" access="read,write" />   
  6.          </controller>   
  7.     </task>   

    name 属性引用流程变量的.  access 属性指明变量是否readable, writable and  或 required. 这个信息可以用于用户接口来产生正确的表单控制.  access 属性是任意的并且默认 access 是 read,write .mapped-name 是任意的并且表示用户接口的标签用于表示一个参数.

    2)你可以写你自己的 TaskControllerHandler 实现.
    例:

java 代码
  1. public interface TaskControllerHandler extends Serializable {   
  2.        List getTaskFormParameters(TaskInstance taskInstance);   
  3.        void submitParameters(Map parameters, TaskInstance taskInstance);   
  4.     }   
  5.     在jpdl:<task name="clean ceiling">   
  6.        <controller class="com.yourcom.CleanCeilingTaskControllerHandler">   
  7.          -- here goes your task controller handler configuration --   
  8.        </controller>   
  9.      </task>   

 12,身份组件:用户管理,组和权限管理一般都称做身份管理.

 

分享到:
评论

相关推荐

    jBPM3的学习心得

    jBPM3是一款开源的工作流管理系统,主要用于处理业务流程的自动化和管理。它提供了一套完整的解决方案,包括流程建模、执行和监控,旨在帮助企业提高工作效率,规范业务流程,并实现流程的灵活变更。在深入学习和...

    JAVA工作流的学习心得(转)

    在IT行业中,工作流...而"java开源工作流(workflow)---jBPM学习心得总结(原创)from1to6.htm"这个文件很可能是关于这一系列学习过程的详细记录,包含了作者从初学到精通的全阶段经验分享,值得仔细研读和借鉴。

    jBPM工作流应用开发指南目录和个人笔记

    这个压缩包包含了jBPM工作流应用开发的关键资源,包括安装配置指南、完整的开发指南目录以及工作流基础知识,还有个人的学习笔记,是深入理解并实践jBPM的好资料。 首先,我们来看"安装和配置jBPM4.pdf"。这个文件...

    jbpm4 学习笔记 心得

    jbpm是一款免费开源的工作流引擎,虽然现在还不完善,但是用起来还是不错的..... 我学习jbpm的一些笔记心得

    JBPM工作流开发指南

    开源工作流产品JBPM的开发指南,是本人在学习JPBM过程中一点心得体会,希望能给各位开发者在使用JBPM过程中带来帮助.

    jBPM的学习心得 希望对你有帮助

    jBPM,全称Java Business Process Management,是一个由JBoss组织开发的开源工作流管理系统,主要功能在于帮助企业或组织管理其业务流程。它提供了一套完整的工具链,包括流程建模、部署、执行、监控和管理。jBPM...

    jbpm配置心得体会(结合各种数据库)

    在本篇文章中,我们将深入探讨如何在特定环境下配置JBPM工作流引擎,并使其与多种数据库(MySQL、Oracle等)兼容。为了更好地理解配置过程,请确保您已经具备以下环境条件: - **操作系统**: Windows 或 Linux ...

    jbpm学习资料汇总

    jbpm,全称是Java Business Process Management,是一个开源的工作流管理系统,主要用于业务流程的建模、执行和管理。它提供了一种灵活的方式,使得开发人员和业务分析师能够协同工作,创建、部署和执行复杂的业务...

    JBPM4.3 学习笔记

    JBPM(Java Business Process Management)是一个开源的工作流管理系统,主要用于设计、执行和管理业务流程。JBPM4.3是JBPM的一个重要版本,它提供了强大的流程建模、执行和服务集成能力,是企业级应用中进行流程...

    jbpm中文开发指南+用户手册+demo源码+学习笔记等

    jbpm,全称为Java Business Process Management,是一款开源的工作流管理系统,用于实现业务流程自动化。它提供了从设计、部署到执行的全过程支持,是基于Java技术的企业级流程管理框架。jbpm不仅适合大型企业,也...

    JBPM的使用心得

    JBPM(JBoss Business Process Management)是Red Hat公司推出的一款开源的工作流管理系统,它提供了一套完整的业务流程管理解决方案,包括流程设计、执行、监控和优化。JBPM允许开发者和业务分析师通过图形化的方式...

    jbpm4.2开发文档

    - **定义与特点**:jbpm(Java Business Process Model)是一个开源的工作流引擎,用于自动化业务流程的执行。它提供了一种灵活的方式来定义复杂的业务流程,并通过Java API或图形化工具进行流程建模。jbpm4.2版本在...

    jbpm4.3 CHM 教程

    通过这个jbpm4.3 CHM教程,学习者可以系统地了解如何安装和配置jbpm环境,创建和执行第一个流程,使用工作流API进行编程,以及如何进行流程监控和优化。同时,教程可能还涵盖了与Drools的集成,以及如何利用jbpm的...

    jbpm例子.doc

    ### jBPM工作流系统概览与实践案例 #### 核心知识点解析: **jBPM**(Java Business Process Model)是一种开源的工作流管理系统,它提供了业务流程管理(BPM)的功能,允许开发者以图形化的方式设计流程,并通过...

    jbpm4.4 练习代码

    【jbpm4.4 练习代码】是一个与工作流管理系统相关的编程...总之,jbpm4.4练习代码是一个深入学习和实践工作流管理系统的宝贵资源,涵盖了流程设计、部署、执行和监控等多个方面,对于提升企业级应用开发能力大有裨益。

    javaeye热点阅读

    3. jbpm3与jbpm4实现对比:jbpm是一款流行的工作流管理系统,对比两个版本的实现,有助于开发者了解其演进和改进,选择适合项目的版本。 4. Java、PHPRPC、Hessian、Burlap、AMF3、XML序列化的效率对比:这些是不同...

Global site tag (gtag.js) - Google Analytics