`
longgangbai
  • 浏览: 7371663 次
  • 性别: 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());
  }

}

 

分享到:
评论

相关推荐

    java实现工作流,有实例

    在IT行业中,工作流(Workflow)是一种用于自动化业务流程的技术,它可以帮助企业高效地管理和协调各种任务、审批和信息流转。Java作为一种广泛使用的编程语言,提供了丰富的库和框架来实现工作流。本篇将深入探讨...

    传智播客OA+工作流实战_工作流中的概念与JBPM相关API调用

    在本课程“传智播客OA+工作流实战_工作流中的概念与JBPM相关API调用”中,我们将深入探讨工作流管理系统的基石——工作流的概念,以及如何利用JBPM这一流行的工作流引擎进行API调用以实现业务流程自动化。...

    activiti6.0工作流配置(中文)

    1. Activiti架构:了解Activiti的核心组件,包括Process Engine、Repository Service、Runtime Service、Task Service、Form Service等,它们各自承担的工作职责,以及如何通过API调用来操作工作流。 2. BPMN 2.0...

    工作流Activiti的学习总结(十)Activiti手动执行的应用(UserTask)

    在本篇博文中,我们将深入探讨工作流引擎Activiti中手动执行任务(UserTask)的应用。Activiti是一款开源的工作流和业务流程管理(BPM)系统,它提供了强大的流程定义、执行和监控能力。在这个学习总结中,我们将专注于...

    4流实战_工作流中的概念与JBPM相关API调用

    在IT行业中,工作流是一个广泛使用的概念,尤其在企业级应用中,用于自动化业务过程的管理。本资源“4流实战_工作流中的概念与JBPM相关API调用”聚焦于这一主题,通过JBPM(Java Business Process Management)这一...

    工作流管理联盟规范

    2. **接口标准**:WFMC提出了工作流引擎与外部系统交互的接口标准,如External Task Interface (XTI) 和External Event Interface (XEI),允许工作流系统与其他应用集成,接收任务请求或事件触发。 3. **过程建模...

    疯狂Workflow讲义 基于Activiti的工作流应用开发 配套源码

    在本文中,我们将详细解析与标题和描述相关的知识点,并深入探讨如何利用Activiti进行工作流应用开发。 一、工作流(Workflow)概述 工作流是指在组织内完成一项任务的一系列有序步骤,涉及人员、系统和规则的协调...

    activiti工作流项目

    【标题】"activiti工作流项目"是一个基于Java技术栈实现的工作流管理系统示例,它集成了SpringMVC、Hibernate和Activiti等关键组件。这个项目旨在演示如何在实际应用中利用Activiti来构建动态表单和处理各种流程审批...

    activiti 工作流范例

    通过学习和分析这些示例,你可以更好地掌握如何在实际项目中使用 Activiti 和 Spring MVC 进行工作流管理。这些示例可能包括了流程定义文件(.bpmn 和 .png 图片)、Java 代码、Spring 配置文件以及相关的测试用例。...

    activity工作流介绍

    Activity引擎提供了七大Service接口,这些接口为开发者提供了与工作流相关的各种操作方法,可以通过`ProcessEngine`获取,并且支持链式API编程风格。这七大Service接口包括: 1. **RepositoryService**:用于管理...

    工作流activiti源码案例

    工作流Activiti是一个开源的工作流引擎,用于在Java应用程序中实现业务流程自动化。它提供了一套全面的工具和API,使开发人员能够轻松地设计、部署和管理业务流程。在这个"工作流activiti源码案例"中,我们可以深入...

    前后端分离项目中引入activiti工作流引擎步骤

    下面我们将详细探讨在前后端分离项目中如何引入和配置Activiti工作流引擎。 1. **了解Activiti** Activiti是基于BPMN 2.0标准的轻量级工作流引擎,它提供了一整套流程定义、执行、监控和管理的工具。通过Activiti...

    工作流引擎

    1. **实体**:工作流中的实体是指需要通过工作流进行处理的对象,比如采购申请单或公文。实体随着工作流的进展而流动。 2. **参与者**:参与流程的个体或实体,可以是人、职能团队甚至是自动化工具。 3. **流程...

    EditeTest_自定义Task工作流-等高线批量赋值_ae10.rar

    在本示例“EditeTest_自定义Task工作流-等高线批量赋值_ae10.rar”中,重点在于创建一个自定义的Task,该Task用于自动化处理等高线数据,实现批量赋值操作。Task工作流是一种图形化设计的工作执行流程,常用于GIS...

    李腾飞JBPM工作流引擎代码test01到test04

    4. **任务服务**:JBPM的任务服务(Task Service)处理流程中的任务分配和完成。开发者可以通过API获取当前用户可执行的任务,完成任务或者将任务委托给其他人。在test02到test04的代码中,我们可能会看到如何交互和...

    activiti工作流案例

    Activiti工作流是一个开源的业务流程管理(BPM)和工作流引擎,它为企业提供了一种灵活、可扩展的方式来管理其业务流程。这个压缩包文件包含的“activiti工作流案例”是帮助初学者快速理解和实践Activiti工作流的一...

    jBPM工作流应用开发指南

    《jBPM工作流应用开发指南》是一本面向初学者的文档,旨在帮助开发者快速掌握jBPM工作流系统的开发技巧。jBMP,全称Java Business Process Management,是开源组织JBoss提供的一款用于业务流程管理(BPM)的框架,它...

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

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

Global site tag (gtag.js) - Google Analytics