工作流中ServiceTask的各种方法

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

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

工作流配置:

serviceTaskExpression.bpmn20.xml

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <definitionsid="definitions"
  3. xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
  4. xmlns:activiti="http://activiti.org/bpmn"
  5. targetNamespace="Examples">
  6. <processid="serviceTaskProcess">
  7. <startEventid="start"/>
  8. <sequenceFlowid="flow1"sourceRef="start"targetRef="serviceTask"/>
  9. <!--调用委托类的依赖注入功能-->
  10. <serviceTaskid="serviceTask"name="Javaserviceinvocation"
  11. activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
  12. <extensionElements>
  13. <activiti:fieldname="text1">
  14. <activiti:expression>WelcometoBeijing</activiti:expression>
  15. </activiti:field>
  16. <activiti:fieldname="text2">
  17. <activiti:expression>HelloMr.Bai</activiti:expression>
  18. </activiti:field>
  19. </extensionElements>
  20. </serviceTask>
  21. <sequenceFlowid="flow2"sourceRef="serviceTask"targetRef="serviceTask1"/>
  22. <!--调用springbean中的相关的委托bean-->
  23. <serviceTaskid="serviceTask1"activiti:delegateExpression="${delegateExpressionBean}"/>
  24. <sequenceFlowid="flow3"sourceRef="serviceTask1"targetRef="servicetask2"/>
  25. <!--调用springbean中的方法-->
  26. <serviceTaskid="servicetask2"
  27. name="MyJavaServiceTask"
  28. activiti:expression="#{sentenceGenerator.getSentence()}"/>
  29. <sequenceFlowid="flow4"sourceRef="servicetask2"targetRef="servicetask3"/>
  30. <!--调用springbean中的相关的委托bean-->
  31. <serviceTaskid="servicetask3"
  32. name="Javaserviceinvocation"
  33. activiti:class="com.easyway.activiti.servicetask.ToUppercase">
  34. <extensionElements>
  35. <activiti:fieldname="text"stringValue="HelloWorld"/>
  36. </extensionElements>
  37. </serviceTask>
  38. <sequenceFlowid="flow5"sourceRef="servicetask3"targetRef="endEvent"/>
  39. <endEventid="endEvent"/>
  40. </process>
  41. </definitions>

工作流的实现:

Java代码 收藏代码
  1. packagecom.easyway.activiti.servicetask;
  2. importorg.activiti.engine.delegate.DelegateExecution;
  3. /**
  4. *从配置文件注入多个属性类型必须为Expression
  5. *@authorlonggangbai
  6. *
  7. *2011-12-20下午10:08:01
  8. */
  9. publicclassReverseStringsFieldInjectedimplementsJavaDelegate{
  10. privateExpressiontext1;
  11. privateExpressiontext2;
  12. publicvoidexecute(DelegateExecutionexecution){
  13. Stringvalue1=(String)text1.getValue(execution);
  14. execution.setVariable("var1",newStringBuffer(value1).reverse().toString());
  15. Stringvalue2=(String)text2.getValue(execution);
  16. execution.setVariable("var2",newStringBuffer(value2).reverse().toString());
  17. }
  18. }

Java代码 收藏代码
  1. packagecom.easyway.activiti.servicetask;
  2. importorg.activiti.engine.delegate.DelegateExecution;
  3. /**
  4. *从配置文件注入一个字符串用于变为写
  5. *@authorlonggangbai
  6. *
  7. *2011-12-20下午09:56:59
  8. */
  9. publicclassToUppercaseimplementsJavaDelegate{
  10. privateExpressiontext;
  11. publicvoidexecute(DelegateExecutionexecution)throwsException{
  12. Stringvalue1=(String)text.getValue(execution);
  13. execution.setVariable("input",value1);
  14. }
  15. }

servicetaskSpringTest-context.xml

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <beansxmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
  8. http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  9. <beanid="sentenceGenerator"class="com.easyway.activiti.servicetask.SentenceGenerator"/>
  10. <beanid="delegateExpressionBean"class="com.easyway.activiti.servicetask.DelegateExpressionBean">
  11. <propertyname="sentenceGenerator"ref="sentenceGenerator"/>
  12. </bean>
  13. <beanid="sentenceToUpperCaseBean"class="com.easyway.activiti.servicetask.SentenceToUpperCaseBean">
  14. <propertyname="sentenceGenerator"ref="sentenceGenerator"/>
  15. </bean>
  16. <beanid="myExecutionListenerBean"class="com.easyway.activiti.servicetask.ActivitiExecutionListenerBean"/>
  17. <beanid="myTaskListener"class="com.easyway.activiti.servicetask.ActivitiTaskListener"/>
  18. <beanid="myTaskListenerBean"class="com.easyway.activiti.servicetask.ActivitiTaskListenerBean"/>
  19. <beanid="dataSource"class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  20. <propertyname="driverClass"value="org.h2.Driver"/>
  21. <propertyname="url"value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"/>
  22. <propertyname="username"value="sa"/>
  23. <propertyname="password"value=""/>
  24. </bean>
  25. <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  26. <propertyname="dataSource"ref="dataSource"/>
  27. </bean>
  28. <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
  29. <propertyname="dataSource"ref="dataSource"/>
  30. <propertyname="transactionManager"ref="transactionManager"/>
  31. <propertyname="databaseSchemaUpdate"value="create-drop"/>
  32. <propertyname="jobExecutorActivate"value="false"/>
  33. </bean>
  34. <beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">
  35. <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/>
  36. </bean>
  37. <beanid="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/>
  38. <beanid="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/>
  39. <beanid="taskService"factory-bean="processEngine"factory-method="getTaskService"/>
  40. <beanid="historyService"factory-bean="processEngine"factory-method="getHistoryService"/>
  41. <beanid="managementService"factory-bean="processEngine"factory-method="getManagementService"/>
  42. </beans>

测试类:

Java代码 收藏代码
  1. packagecom.easyway.activiti.servicetask;
  2. importorg.activiti.engine.runtime.ProcessInstance;
  3. importorg.activiti.engine.test.Deployment;
  4. importorg.activiti.spring.impl.test.SpringActivitiTestCase;
  5. importorg.springframework.test.context.ContextConfiguration;
  6. /**
  7. *工作流中ServiceTask的各种方法
  8. *1.通过activiti:class使用相关的javaDelegate的子类。
  9. *<serviceTaskid="serviceTask"name="Javaserviceinvocation"
  10. activiti:class="com.easyway.activiti.servicetask.ReverseStringsFieldInjected">
  11. <extensionElements>
  12. <activiti:fieldname="text1">
  13. <activiti:expression>WelcometoBeijing</activiti:expression>
  14. </activiti:field>
  15. <activiti:fieldname="text2">
  16. <activiti:expression>HelloMr.Bai</activiti:expression>
  17. </activiti:field>
  18. </extensionElements>
  19. </serviceTask>
  20. 2.通过spring的使用委派表达式实现
  21. <serviceTaskid="serviceTask1"activiti:delegateExpression="${delegateExpressionBean}"/>
  22. 3.通过表达式将实现
  23. <serviceTaskid="servicetask2"
  24. name="MyJavaServiceTask"
  25. activiti:expression="#{sentenceGenerator.getSentence()}"/>
  26. 4.通过activiti:class注入相关的属性
  27. <serviceTaskid="servicetask3"
  28. name="Javaserviceinvocation"
  29. activiti:class="com.easyway.activiti.servicetask.ToUppercase">
  30. <extensionElements>
  31. <activiti:fieldname="text"stringValue="HelloWorld"/>
  32. </extensionElements>
  33. </serviceTask>
  34. *@authorlonggangbai
  35. *
  36. *2011-12-20下午09:29:23
  37. */
  38. @ContextConfiguration("classpath:servicetaskSpringTest-context.xml")
  39. publicclassServiceTaskExpressionTestextendsSpringActivitiTestCase{
  40. @Deployment(resources={"diagrams/serviceTaskExpression.bpmn20.xml"})
  41. publicvoidtestDelegateExpression(){
  42. ProcessInstanceprocInst=runtimeService.startProcessInstanceByKey("serviceTaskProcess");
  43. assertEquals(true,procInst.isEnded());
  44. }
  45. }

原文地址:http://topmanopensource.iteye.com/blog/1319380

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值