在工作流中的activiti的serviceTask几种方法:
模拟自动执行任务工作流的流程图:
工作流配置:
serviceTaskExpression.bpmn20.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <definitionsid="definitions"
- xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:activiti="http://activiti.org/bpmn"
- targetNamespace="Examples">
- <processid="serviceTaskProcess">
- <startEventid="start"/>
- <sequenceFlowid="flow1"sourceRef="start"targetRef="serviceTask"/>
- <!--调用委托类的依赖注入功能-->
- <serviceTaskid="serviceTask"name="Javaserviceinvocation"
- activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
- <extensionElements>
- <activiti:fieldname="text1">
- <activiti:expression>WelcometoBeijing</activiti:expression>
- </activiti:field>
- <activiti:fieldname="text2">
- <activiti:expression>HelloMr.Bai</activiti:expression>
- </activiti:field>
- </extensionElements>
- </serviceTask>
- <sequenceFlowid="flow2"sourceRef="serviceTask"targetRef="serviceTask1"/>
- <!--调用springbean中的相关的委托bean-->
- <serviceTaskid="serviceTask1"activiti:delegateExpression="${delegateExpressionBean}"/>
- <sequenceFlowid="flow3"sourceRef="serviceTask1"targetRef="servicetask2"/>
- <!--调用springbean中的方法-->
- <serviceTaskid="servicetask2"
- name="MyJavaServiceTask"
- activiti:expression="#{sentenceGenerator.getSentence()}"/>
- <sequenceFlowid="flow4"sourceRef="servicetask2"targetRef="servicetask3"/>
- <!--调用springbean中的相关的委托bean-->
- <serviceTaskid="servicetask3"
- name="Javaserviceinvocation"
- activiti:class="com.easyway.activiti.servicetask.ToUppercase">
- <extensionElements>
- <activiti:fieldname="text"stringValue="HelloWorld"/>
- </extensionElements>
- </serviceTask>
- <sequenceFlowid="flow5"sourceRef="servicetask3"targetRef="endEvent"/>
- <endEventid="endEvent"/>
- </process>
- </definitions>
工作流的实现:
- packagecom.easyway.activiti.servicetask;
- importorg.activiti.engine.delegate.DelegateExecution;
- /**
- *从配置文件注入多个属性类型必须为Expression
- *@authorlonggangbai
- *
- *2011-12-20下午10:08:01
- */
- publicclassReverseStringsFieldInjectedimplementsJavaDelegate{
- privateExpressiontext1;
- privateExpressiontext2;
- publicvoidexecute(DelegateExecutionexecution){
- Stringvalue1=(String)text1.getValue(execution);
- execution.setVariable("var1",newStringBuffer(value1).reverse().toString());
- Stringvalue2=(String)text2.getValue(execution);
- execution.setVariable("var2",newStringBuffer(value2).reverse().toString());
- }
- }
- packagecom.easyway.activiti.servicetask;
- importorg.activiti.engine.delegate.DelegateExecution;
- /**
- *从配置文件注入一个字符串用于变为写
- *@authorlonggangbai
- *
- *2011-12-20下午09:56:59
- */
- publicclassToUppercaseimplementsJavaDelegate{
- privateExpressiontext;
- publicvoidexecute(DelegateExecutionexecution)throwsException{
- Stringvalue1=(String)text.getValue(execution);
- execution.setVariable("input",value1);
- }
- }
servicetaskSpringTest-context.xml
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beansxmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
- http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
- <beanid="sentenceGenerator"class="com.easyway.activiti.servicetask.SentenceGenerator"/>
- <beanid="delegateExpressionBean"class="com.easyway.activiti.servicetask.DelegateExpressionBean">
- <propertyname="sentenceGenerator"ref="sentenceGenerator"/>
- </bean>
- <beanid="sentenceToUpperCaseBean"class="com.easyway.activiti.servicetask.SentenceToUpperCaseBean">
- <propertyname="sentenceGenerator"ref="sentenceGenerator"/>
- </bean>
- <beanid="myExecutionListenerBean"class="com.easyway.activiti.servicetask.ActivitiExecutionListenerBean"/>
- <beanid="myTaskListener"class="com.easyway.activiti.servicetask.ActivitiTaskListener"/>
- <beanid="myTaskListenerBean"class="com.easyway.activiti.servicetask.ActivitiTaskListenerBean"/>
- <beanid="dataSource"class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
- <propertyname="driverClass"value="org.h2.Driver"/>
- <propertyname="url"value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"/>
- <propertyname="username"value="sa"/>
- <propertyname="password"value=""/>
- </bean>
- <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <propertyname="dataSource"ref="dataSource"/>
- </bean>
- <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
- <propertyname="dataSource"ref="dataSource"/>
- <propertyname="transactionManager"ref="transactionManager"/>
- <propertyname="databaseSchemaUpdate"value="create-drop"/>
- <propertyname="jobExecutorActivate"value="false"/>
- </bean>
- <beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">
- <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/>
- </bean>
- <beanid="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/>
- <beanid="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/>
- <beanid="taskService"factory-bean="processEngine"factory-method="getTaskService"/>
- <beanid="historyService"factory-bean="processEngine"factory-method="getHistoryService"/>
- <beanid="managementService"factory-bean="processEngine"factory-method="getManagementService"/>
- </beans>
测试类:
- packagecom.easyway.activiti.servicetask;
- importorg.activiti.engine.runtime.ProcessInstance;
- importorg.activiti.engine.test.Deployment;
- importorg.activiti.spring.impl.test.SpringActivitiTestCase;
- importorg.springframework.test.context.ContextConfiguration;
- /**
- *工作流中ServiceTask的各种方法
- *1.通过activiti:class使用相关的javaDelegate的子类。
- *<serviceTaskid="serviceTask"name="Javaserviceinvocation"
- activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
- <extensionElements>
- <activiti:fieldname="text1">
- <activiti:expression>WelcometoBeijing</activiti:expression>
- </activiti:field>
- <activiti:fieldname="text2">
- <activiti:expression>HelloMr.Bai</activiti:expression>
- </activiti:field>
- </extensionElements>
- </serviceTask>
- 2.通过spring的使用委派表达式实现
- <serviceTaskid="serviceTask1"activiti:delegateExpression="${delegateExpressionBean}"/>
- 3.通过表达式将实现
- <serviceTaskid="servicetask2"
- name="MyJavaServiceTask"
- activiti:expression="#{sentenceGenerator.getSentence()}"/>
- 4.通过activiti:class注入相关的属性
- <serviceTaskid="servicetask3"
- name="Javaserviceinvocation"
- activiti:class="com.easyway.activiti.servicetask.ToUppercase">
- <extensionElements>
- <activiti:fieldname="text"stringValue="HelloWorld"/>
- </extensionElements>
- </serviceTask>
- *@authorlonggangbai
- *
- *2011-12-20下午09:29:23
- */
- @ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
- publicclassServiceTaskExpressionTestextendsSpringActivitiTestCase{
- @Deployment(resources={"diagrams/serviceTaskExpression.bpmn20.xml"})
- publicvoidtestDelegateExpression(){
- ProcessInstanceprocInst=runtimeService.startProcessInstanceByKey("serviceTaskProcess");
- assertEquals(true,procInst.isEnded());
- }
- }
原文地址:http://topmanopensource.iteye.com/blog/1319380