`
longgangbai
  • 浏览: 7253207 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

工作流中ServiceTask的各种方法

 
阅读更多

      在工作流中的activiti的serviceTask几种方法:

 

模拟自动执行任务工作流的流程图:

 

 

 

 

工作流配置:

serviceTaskExpression.bpmn20.xml

<?xml version="1.0" encoding="UTF-8"?>

<definitions id="definitions" 
  xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  xmlns:activiti="http://activiti.org/bpmn"
  targetNamespace="Examples">
  
  <process id="serviceTaskProcess">
  <startEvent id="start"  />
   <sequenceFlow id="flow1" sourceRef="start" targetRef="serviceTask" />
   
   <!-- 调用委托类的依赖注入功能 -->
    <serviceTask id="serviceTask" name="Java service invocation"  
	  activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected"> 
		  <extensionElements> 
		    <activiti:field name="text1"> 
		      <activiti:expression>Welcome to Beijing</activiti:expression> 
		    </activiti:field> 
		    <activiti:field name="text2"> 
		       <activiti:expression>Hello Mr. Bai</activiti:expression> 
		    </activiti:field> 
		  </extensionElements> 
	</serviceTask>
  
    <sequenceFlow id="flow2" sourceRef="serviceTask" targetRef="serviceTask1" />
    
    <!-- 调用spring bean中的相关的委托bean -->
    <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
    
    
    
     <sequenceFlow id="flow3" sourceRef="serviceTask1" targetRef="servicetask2" />
     
     
     <!-- 调用spring bean中的方法 -->
    <serviceTask id="servicetask2"  
             name="My Java Service Task"  
             activiti:expression="#{sentenceGenerator.getSentence()}" />
 
    <sequenceFlow id="flow4" sourceRef="servicetask2" targetRef="servicetask3" />
    
  <!-- 调用spring bean中的相关的委托bean -->
    <serviceTask id="servicetask3"  
         name="Java service invocation"  
         activiti:class="com.easyway.activiti.servicetask.ToUppercase"> 
	    <extensionElements> 
	      <activiti:field name="text" stringValue="Hello World" /> 
	    </extensionElements>            
    </serviceTask>     

    <sequenceFlow id="flow5" sourceRef="servicetask3" targetRef="endEvent" />
    <endEvent id="endEvent" />
  </process>

</definitions>

 

工作流的实现:

package com.easyway.activiti.servicetask;

import org.activiti.engine.delegate.DelegateExecution;

/**
 * 从配置文件注入多个属性类型必须为Expression
 * @author longgangbai
 * 
 * 2011-12-20  下午10:08:01
 */
public class ReverseStringsFieldInjected implements JavaDelegate { 
	 
	  private Expression text1; 
	  private Expression text2; 
	 
	  public void execute(DelegateExecution execution) { 
	    String value1 = (String) text1.getValue(execution); 
	    execution.setVariable("var1", new StringBuffer(value1).reverse().toString()); 
	 
	    String value2 = (String) text2.getValue(execution); 
	    execution.setVariable("var2", new StringBuffer(value2).reverse().toString()); 
	  } 
	}

 

 

package com.easyway.activiti.servicetask;

import org.activiti.engine.delegate.DelegateExecution;

/**
 *  从配置文件注入一个字符串用于变为写
 * @author longgangbai
 * 
 * 2011-12-20  下午09:56:59
 */
public class ToUppercase implements JavaDelegate { 
	  private Expression text; 
	  public void execute(DelegateExecution execution) throws Exception { 
		  String value1 = (String) text.getValue(execution); 
		   execution.setVariable("input", value1); 
	  } 
	   
	}

 

 

servicetaskSpringTest-context.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                           http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

  <bean id="sentenceGenerator" class="com.easyway.activiti.servicetask.SentenceGenerator" />
  
  <bean id="delegateExpressionBean" class="com.easyway.activiti.servicetask.DelegateExpressionBean">
    <property name="sentenceGenerator"  ref="sentenceGenerator" />
  </bean>
  
  <bean id="sentenceToUpperCaseBean" class="com.easyway.activiti.servicetask.SentenceToUpperCaseBean">
    <property name="sentenceGenerator" ref="sentenceGenerator" />
  </bean>
  
  <bean id="myExecutionListenerBean" class="com.easyway.activiti.servicetask.ActivitiExecutionListenerBean" />
  <bean id="myTaskListener" class="com.easyway.activiti.servicetask.ActivitiTaskListener" />
  
  <bean id="myTaskListenerBean" class="com.easyway.activiti.servicetask.ActivitiTaskListenerBean" />

  <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    <property name="driverClass" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
    <property name="username" value="sa" />
    <property name="password" value="" />
  </bean>

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
  </bean>
  
  <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseSchemaUpdate" value="create-drop" />
    <property name="jobExecutorActivate" value="false" />
  </bean>
  
  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>
  
  <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />

</beans>

 

 

测试类:

package com.easyway.activiti.servicetask;

import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.activiti.spring.impl.test.SpringActivitiTestCase;
import org.springframework.test.context.ContextConfiguration;

/**
 * 工作流中ServiceTask的各种方法
 * 1.通过activiti:class使用相关的javaDelegate的子类。
 *    <serviceTask id="serviceTask" name="Java service invocation"  
	  activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected"> 
		  <extensionElements> 
		    <activiti:field name="text1"> 
		      <activiti:expression>Welcome to Beijing</activiti:expression> 
		    </activiti:field> 
		    <activiti:field name="text2"> 
		       <activiti:expression>Hello Mr. Bai</activiti:expression> 
		    </activiti:field> 
		  </extensionElements> 
	</serviceTask>
	2.通过spring的使用委派表达式实现
	  <serviceTask id="serviceTask1" activiti:delegateExpression="${delegateExpressionBean}" />
    3.通过表达式将实现
        <serviceTask id="servicetask2"  
             name="My Java Service Task"  
             activiti:expression="#{sentenceGenerator.getSentence()}" />
    
    4.通过activiti:class注入相关的属性
        <serviceTask id="servicetask3"  
         name="Java service invocation"  
         activiti:class="com.easyway.activiti.servicetask.ToUppercase"> 
	    <extensionElements> 
	      <activiti:field name="text" stringValue="Hello World" /> 
	    </extensionElements>            
    </serviceTask>    
 * @author longgangbai
 * 
 * 2011-12-20  下午09:29:23
 */
@ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
public class ServiceTaskExpressionTest extends SpringActivitiTestCase {
  
  @Deployment(resources={"diagrams/serviceTaskExpression.bpmn20.xml"})
  public void testDelegateExpression() {
    ProcessInstance procInst = runtimeService.startProcessInstanceByKey("serviceTaskProcess");
    assertEquals(true,procInst.isEnded());
  }

}

 

分享到:
评论

相关推荐

    JBPM4工作流应用开始指南.rar

    第一篇 jBPM工作流开发基础 1 第1章 工作流基础 2 1.1 工作流概念 2 1.1.1 工作流管理思想之于企业现代化管理 2 1.1.2 工作流技术在企业中的应用 5 1.1.3 如何从一个开发者的角度看工作流技术 6 1.2 工作流管理系统...

    MyFlowEngine_spring_工作流引擎_

    支持以下类型事件:启动事件、结束事件网关:并行网关、排它网关、包容网关顺序流:有条件顺序流、无条件顺序流任务:ServiceTask任务

    bpmn-server:用于Node.js的BPMN 2.0服务器,为工作流提供建模,执行,持久性和监视。 以及示例用户界面。 旨在成为BPMN 2.0的开发人员工作台

    bpmn-server提供BPMN 2.0建模,执行和持久性,作为Node.js的开源工作流服务器 该软件包是专门为Node.js设计的,并且完全使用TypeScript开发 WebApp通过建模和开发工作流提供UI 目录 文献资料 流程建模者 基于包括一...

    Flowable-6.3.1

    Flowable是Activiti原班主创人员从Activiti分离出来的一套工作流引擎,是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理员。其核心是超快速、稳定的BPMN2流程引擎,易于与 Spring集成使用。 Flowable...

    Activiti6.0教程例子下载

    4. TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、...

    Flowable从入门到精通

    最终结合Springboot搭建一套工作流系统,囊括一般项目中所需要的知识点,理论结合实际,让真正入门到熟练。 1 简介 2 学习指南 2.1 Flowable初体验 2.1.1 Flowable是什么? 2.1.2 Flowable 和 Activiti 2.1.3 构建...

    SmartEngine:SmartEngine是轻型业务编排引擎

    智能引擎 SmartEngine是一个轻量级... 支持基本的BPMN符号:StartEvent,EndEvent,SequenceFlow,ExclusiveGateway,ServiceTask,ReceiveTask。 在某些简单的过程场景中,提供一种简单的方法来提高性能并降低存储成

    002_activiti学习总结.zip

    这是我根据教学视频以及网上的资料学习总结的activiti的案例。包括流程定义 流程实例、流程变量、网关、个人任务与组任务、监听、servicetask等,后续会继续更新

    durabletasksamples:DurableTask 框架的示例以展示其功能

    持久任务框架示例 提供此示例以显示 Durable Task Framework 的各种功能,为: : 连接字符串 此示例要求你提供 ServiceBus 和... 工作流并行启动 3 个任务(PerformAddressCheckAsync、PerformCreditCheckAsync、Perfo

    Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf

    5.3.2 使用xaml声明工作流 264 5.4 小结 265 第6章 异常处理和调试 267 6.1 visual studio 2010 team system的新增内容:历史调试 267 6.2 与visual basic 6兼容的注意事项 268 6.3 .net中的异常处理 268 ...

    JBPM4.4用户手册.doc

    JBPM4.4工作流用户手册(适合于初始学JBPM4的人),本用户下还有JBPM4.4开发指南(适合于有点经验的人),2011-03-28参考自http://www.family168.com/tutorial/jbpm4.0/html/index.html,可直接浏览网站, ...

    spring security3.2.0

    在身份验证层面,Spring Security广泛支持各种身份验证模式,这些验证模型绝大多数都由第三方提供,或则正在开发的有关标准机构提供的,例如 Internet Engineering Task Force.作为补充,Spring Security 也提供了...

    新版Android开发教程.rar

    � 现有应用完善度不太够,需要的开发工作量较大。----------------------------------- Android 编程基础 6 � 基于 QEMU 开发的模拟器调试手段不十分丰富,只支持通话、SMS等,速度慢。 � 暂不具备 Push Mail ...

    网管教程 从入门到精通软件篇.txt

    DSW:Microsoft Developer Studio工作区文件 DTA:World Bank(世界银行)的STARS数据文件 DTD:SGML文档类型定义(DTD)文件 DTED:地面高度数字数据(图形的数据格式)文件 DTF:Symantec Q&A相关的数据库数据...

    外文翻译 stus MVC

    • Customers of the service should be able to create pages to meet their specific needs. • The page designer isn't able to have direct involvement in page development. • ...

    单点登录源码

    服务网关,对外暴露统一规范的接口和包装响应结果,包括各个子系统的交互接口、对外开放接口、开发加密接口、接口文档等服务,可在该模块支持验签、鉴权、路由、限流、监控、容错、日志等功能。示例图: ![API网关]...

Global site tag (gtag.js) - Google Analytics