工作流Activiti的学习总结(十一)Activiti5.6和Spring3.03整合

时间:2024.4.1

工作流模拟程序员面试过程情景如下:
1.开发知识面试或者笔试
2.人事面试

流程图:

流程配置:

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  3. <process id="DeveloperWorkExam" name="DeveloperWorkExam">
  4. <startEvent id="startevent1" name="准备面试"></startEvent>
  5. <endEvent id="endevent1" name="面试通过"></endEvent>
  6. <receiveTask id="receivetask1" name="笔试以及面试通过">
  7. <extensionElements>
  8. <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener"></activiti:executionListener>
  9. </extensionElements>
  10. </receiveTask>
  11. <receiveTask id="receivetask2" name="人事面试">
  12. <extensionElements>
  13. <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.HumanResourceExamListener"></activiti:executionListener>
  14. </extensionElements>
  15. </receiveTask>
  16. <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="receivetask1"></sequenceFlow>
  17. <sequenceFlow id="flow2" name="" sourceRef="receivetask1" targetRef="receivetask2"></sequenceFlow>
  18. <sequenceFlow id="flow3" name="" sourceRef="receivetask2" targetRef="endevent1"></sequenceFlow>
  19. <sequenceFlow id="flow4" name="" sourceRef="receivetask1" targetRef="endevent1"></sequenceFlow>
  20. </process>
  21. </definitions>

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

<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">

  <process id="DeveloperWorkExam" name="DeveloperWorkExam">

    <startEvent id="startevent1" name="准备面试"></startEvent>

    <endEvent id="endevent1" name="面试通过"></endEvent>

    <receiveTask id="receivetask1" name="笔试以及面试通过">

      <extensionElements>

        <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener"></activiti:executionListener>

      </extensionElements>

    </receiveTask>

    <receiveTask id="receivetask2" name="人事面试">

      <extensionElements>

        <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.HumanResourceExamListener"></activiti:executionListener>

      </extensionElements>

    </receiveTask>

    <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="receivetask1"></sequenceFlow>

    <sequenceFlow id="flow2" name="" sourceRef="receivetask1" targetRef="receivetask2"></sequenceFlow>

    <sequenceFlow id="flow3" name="" sourceRef="receivetask2" targetRef="endevent1"></sequenceFlow>

    <sequenceFlow id="flow4" name="" sourceRef="receivetask1" targetRef="endevent1"></sequenceFlow>

  </process>

</definitions>

spring配置application-context-standalone.xml如下:

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  9. <!-- 创建数据源 -->
  10. <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  11. <property name="driverClass" value="org.h2.Driver" />
  12. <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
  13. <property name="username" value="sa" />
  14. <property name="password" value="" />
  15. </bean>
  16.  
  17. <!-- 创建事务管理器 -->
  18. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  19. <property name="dataSource" ref="dataSource" />
  20. </bean>
  21.  
  22. <!-- 创建流程引擎配置对象 -->
  23. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  24. <property name="dataSource" ref="dataSource" />
  25. <property name="transactionManager" ref="transactionManager" />
  26. <property name="databaseSchemaUpdate" value="true" />
  27. <property name="mailServerHost" value="localhost" />
  28. <property name="mailServerPort" value="5025" />
  29. <property name="jpaHandleTransaction" value="true" />
  30. <property name="jpaCloseEntityManager" value="true" />
  31. <property name="jobExecutorActivate" value="false" />
  32. </bean>
  33.  
  34. <!-- 创建流程引擎对象-->
  35. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  36. <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  37. </bean>
  38. <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
  39.  
  40. <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
  41.  
  42. <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  43. <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  44. <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  45. <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  46. <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  47.  
  48. </beans>

<?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="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="true" />

    <property name="mailServerHost" value="localhost" />

    <property name="mailServerPort" value="5025" />

    <property name="jpaHandleTransaction" value="true" />

    <property name="jpaCloseEntityManager" value="true" />

    <property name="jobExecutorActivate" value="false" />

  </bean>

 

  <!--  创建流程引擎对象-->

  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

    <property name="processEngineConfiguration" ref="processEngineConfiguration" />

  </bean>

   <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />

 

   <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />

 

  <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>

application-context.xml

Xml代码

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="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/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
  8. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  9. <!-- 创建数据源 -->
  10. <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  11. <property name="driverClass" value="org.h2.Driver" />
  12. <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
  13. <property name="username" value="sa" />
  14. <property name="password" value="" />
  15. </bean>
  16.  
  17. <!-- 创建事务管理器 -->
  18. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  19. <property name="dataSource" ref="dataSource" />
  20. </bean>
  21.  
  22. <!-- 创建流程引擎配置对象 -->
  23. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  24. <property name="dataSource" ref="dataSource" />
  25. <property name="transactionManager" ref="transactionManager" />
  26. <property name="databaseSchemaUpdate" value="true" />
  27. <property name="mailServerHost" value="localhost" />
  28. <property name="mailServerPort" value="5025" />
  29. <property name="jpaHandleTransaction" value="true" />
  30. <property name="jpaCloseEntityManager" value="true" />
  31. <property name="jobExecutorActivate" value="false" />
  32. <!-- 使用spring的自动资源加载部署方式部署 -->
  33. <property name="deploymentResources" value="classpath*:diagrams/*.bpmn20.xml" />
  34.  
  35. </bean>
  36.  
  37. <!-- 创建流程引擎对象-->
  38. <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  39. <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  40. </bean>
  41. <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
  42.  
  43. <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
  44.  
  45. <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
  46. <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
  47. <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
  48. <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
  49. <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
  50.  
  51. </beans>

<?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="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="true" />

    <property name="mailServerHost" value="localhost" />

    <property name="mailServerPort" value="5025" />

    <property name="jpaHandleTransaction" value="true" />

    <property name="jpaCloseEntityManager" value="true" />

    <property name="jobExecutorActivate" value="false" />

    <!-- 使用spring的自动资源加载部署方式部署 -->

    <property name="deploymentResources" value="classpath*:diagrams/*.bpmn20.xml" />

   

  </bean>

 

  <!--  创建流程引擎对象-->

  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">

    <property name="processEngineConfiguration" ref="processEngineConfiguration" />

  </bean>

   <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />

 

   <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />

 

  <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>

代码实现:

Java代码

  1. /**
  2. package com.easyway.workflow.activiti.exam;
  3.  
  4. import java.util.Map;
  5.  
  6. /**
  7. *
  8. * 工作流中配置如下:
  9. * <receiveTask id="receivetask1" name="笔试以及面试通过">
  10. <extensionElements>
  11. <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener"/>
  12. </extensionElements>
  13. </receiveTask>
  14.  
  15. * @author longgangbai
  16. *
  17. * 20##-12-18 上午12:38:24
  18. */
  19.  
  20. public class DeveloperKnowledgeExamListener implements JavaDelegate {
  21. private Logger logger=Logger.getLogger(DeveloperKnowledgeExamListener.class.getName());
  22. /* (non-Javadoc)
  23. * @see org.activiti.engine.delegate.JavaDelegate#execute(org.activiti.engine.delegate.DelegateExecution)
  24. */
  25. @Override
  26. public void execute(DelegateExecution execute) throws Exception {
  27. // TODO Auto-generated method stub
  28. logger.info("开始开发知识面试了....");
  29. Map<String,Object> variables= execute.getVariables();
  30. Set<Entry<String,Object>> infos=variables.entrySet();
  31. for (Entry<String, Object> entry : infos) {
  32. logger.info(entry.getKey()+" "+entry.getValue());
  33. }
  34. logger.info("开始开发知识面试了....");
  35. execute.setVariable("result", "该考生开发知识面试通过了....");
  36.  
  37. }
  38.  
  39. }

/**

package com.easyway.workflow.activiti.exam;

import java.util.Map;

/**

 *

 * 工作流中配置如下:

 *     <receiveTask id="receivetask1" name="笔试以及面试通过">

      <extensionElements>

         <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener"/>

      </extensionElements>

    </receiveTask>

   

 * @author longgangbai

 *

 * 20##-12-18  上午12:38:24

 */

public class DeveloperKnowledgeExamListener implements JavaDelegate {

   private Logger logger=Logger.getLogger(DeveloperKnowledgeExamListener.class.getName());

/* (non-Javadoc)

 * @see org.activiti.engine.delegate.JavaDelegate#execute(org.activiti.engine.delegate.DelegateExecution)

 */

@Override

public void execute(DelegateExecution execute) throws Exception {

  // TODO Auto-generated method stub

  logger.info("开始开发知识面试了....");

  Map<String,Object>  variables= execute.getVariables();

  Set<Entry<String,Object>>  infos=variables.entrySet();

  for (Entry<String, Object> entry : infos) {

   logger.info(entry.getKey()+" "+entry.getValue());

  }

  logger.info("开始开发知识面试了....");

  execute.setVariable("result", "该考生开发知识面试通过了....");

 

}

}

Java代码

  1. /**
  2. package com.easyway.workflow.activiti.exam;
  3.  
  4. import java.util.Map;
  5.  
  6. /**
  7. *
  8. *
  9. * 工作流中配置如下:
  10. *
  11. * <receiveTask id="receivetask2" name="人事面试">
  12. <extensionElements>
  13. <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.HumanResourceExamListener"/>
  14. </extensionElements>
  15. </receiveTask>
  16.  
  17. * @author longgangbai
  18. *
  19. * 20##-12-18 上午12:37:01
  20. */
  21. public class HumanResourceExamListener implements JavaDelegate {
  22. private Logger logger=Logger.getLogger(HumanResourceExamListener.class.getName());
  23.  
  24. /* (non-Javadoc)
  25. * @see org.activiti.engine.delegate.JavaDelegate#execute(org.activiti.engine.delegate.DelegateExecution)
  26. */
  27. @Override
  28. public void execute(DelegateExecution execute) throws Exception {
  29. // TODO Auto-generated method stub
  30. // TODO Auto-generated method stub
  31. logger.info("检查该考试是否通过开发知识考试....");
  32. Map<String,Object> variables= execute.getVariables();
  33. String reuslt=variables.get("result").toString();
  34. logger.info("开发知识面试结果"+reuslt);
  35. logger.info("开始人事面试了....");
  36. execute.setVariable("result", "该考生开发知识面试通过了....");
  37. logger.info("人事面试完毕....等候通知....");
  38. }
  39.  
  40. }

/**

package com.easyway.workflow.activiti.exam;

import java.util.Map;

/**

 *

 *

 * 工作流中配置如下:

 *

 *     <receiveTask id="receivetask2" name="人事面试">

            <extensionElements>

         <activiti:executionListener event="start" class="com.easyway.workflow.activiti.exam.HumanResourceExamListener"/>

      </extensionElements> 

    </receiveTask>

    

 * @author longgangbai

 *

 * 20##-12-18  上午12:37:01

 */

public class HumanResourceExamListener implements JavaDelegate {

  private Logger logger=Logger.getLogger(HumanResourceExamListener.class.getName());

/* (non-Javadoc)

 * @see org.activiti.engine.delegate.JavaDelegate#execute(org.activiti.engine.delegate.DelegateExecution)

 */

@Override

public void execute(DelegateExecution execute) throws Exception {

  // TODO Auto-generated method stub

  // TODO Auto-generated method stub

  logger.info("检查该考试是否通过开发知识考试....");

  Map<String,Object>  variables= execute.getVariables();

  String reuslt=variables.get("result").toString();

  logger.info("开发知识面试结果"+reuslt);

  logger.info("开始人事面试了....");

  execute.setVariable("result", "该考生开发知识面试通过了....");

  logger.info("人事面试完毕....等候通知....");

}

}

Java代码

  1. /**
  2. package com.easyway.workflow.activiti.exam;
  3.  
  4. import java.util.logging.Logger;
  5. /**
  6. *
  7. * 工作流模拟程序员面试过程情景如下:
  8. * 1.开发知识面试或者笔试
  9. * 2.人事面试
  10. *
  11. * 在spring3.0.3和activiti5.6整合时候,建议采用activiti-spring-examples中的jar文件。
  12. * 如果么有完整 的jar文件,可以参考{activiti_home}/setup/files/dependencies/libs.spring.runtime.txt文件
  13. * 。(C:\mash_activiti-5.6\setup\files\dependencies)
  14. *
  15. * 之所以要采用封装的原因,spring配置文件和activiti的配置文件分开发布部署。
  16. *
  17. * @author longgangbai
  18. *
  19. * 20##-12-18 上午01:32:17
  20. */
  21. @ContextConfiguration("classpath:application-context-standalone.xml")
  22. public abstract class AbstractSpringTest extends AbstractTransactionalJUnit4SpringContextTests {
  23.  
  24. @SuppressWarnings("unused")
  25. private final Logger log = Logger.getLogger(AbstractSpringTest.class.getName());
  26.  
  27. @SuppressWarnings("unused")
  28. @Autowired
  29. private ProcessEngine processEngine;
  30. @Autowired
  31. protected RepositoryService repositoryService;
  32. @Autowired
  33. protected RuntimeService runtimeService;
  34. @Autowired
  35. protected TaskService taskService;
  36. @Autowired
  37. protected HistoryService historyService;
  38. @Autowired
  39. protected ManagementService managementService;
  40.  
  41. protected String deploymentId;
  42.  
  43. public AbstractSpringTest() {
  44. super();
  45. }
  46.  
  47. @Before
  48. public void initialize() throws Exception {
  49. beforeTest();
  50. }
  51.  
  52. @After
  53. public void clean() throws Exception {
  54. afterTest();
  55. }
  56.  
  57. protected abstract void beforeTest() throws Exception;
  58.  
  59. protected abstract void afterTest() throws Exception;
  60. }

/**

package com.easyway.workflow.activiti.exam;

import java.util.logging.Logger;

/**

 *

 * 工作流模拟程序员面试过程情景如下:

 *     1.开发知识面试或者笔试

 *     2.人事面试

 *

 * 在spring3.0.3和activiti5.6整合时候,建议采用activiti-spring-examples中的jar文件。

 * 如果么有完整 的jar文件,可以参考{activiti_home}/setup/files/dependencies/libs.spring.runtime.txt文件

 * 。(C:\mash_activiti-5.6\setup\files\dependencies)

 *

 * 之所以要采用封装的原因,spring配置文件和activiti的配置文件分开发布部署。

 *

 * @author longgangbai

 *

 * 20##-12-18  上午01:32:17

 */

@ContextConfiguration("classpath:application-context-standalone.xml")

public abstract class AbstractSpringTest extends AbstractTransactionalJUnit4SpringContextTests {

@SuppressWarnings("unused")

private final Logger log = Logger.getLogger(AbstractSpringTest.class.getName());

@SuppressWarnings("unused")

@Autowired

private ProcessEngine processEngine;

@Autowired

protected RepositoryService repositoryService;

@Autowired

protected RuntimeService runtimeService;

@Autowired

protected TaskService taskService;

@Autowired

protected HistoryService historyService;

@Autowired

protected ManagementService managementService;

protected String deploymentId;

public AbstractSpringTest() {

  super();

}

@Before

public void initialize() throws Exception {

  beforeTest();

}

@After

public void clean() throws Exception {

  afterTest();

}

protected abstract void beforeTest() throws Exception;

protected abstract void afterTest() throws Exception;

}

Java代码

  1. /**
  2. package com.easyway.workflow.activiti.exam;
  3.  
  4. import java.util.HashMap;
  5. /**
  6. * 我把Activiti 5.6默认工程中有关JPA的部分配置删除了,其实通过这个就可以初始化Activiti引擎实例。
  7. * 为了测试方便,将获取服务的实现抽象出来,同时使用Spring自带的与JUnit4集成的工具(
  8. * AbstractTransactionalJUnit4SpringContextTests)。
  9. *
  10. * 将classpath:activiti-context.xml在测试的时候进行加载,这样,在测试的子类中,只需要将其他的相
  11. * 关Spring配置单独加载即可,业务配置与流程配置分开,便于维护。
  12. * @author longgangbai
  13. *
  14. * 20##-12-18 上午01:37:14
  15. */
  16. @ContextConfiguration("classpath:application-context-standalone.xml")
  17. public class ActivitiWithSpringStandaloneTest extends AbstractSpringTest {
  18.  
  19. @Override
  20. protected void beforeTest() throws Exception {
  21. Deployment deployment = repositoryService
  22. .createDeployment()
  23. .addClasspathResource(
  24. "diagrams/SprintActiviti56.bpmn20.xml")
  25. .deploy();
  26. deploymentId = deployment.getId();
  27. }
  28.  
  29. @Override
  30. protected void afterTest() throws Exception {
  31. repositoryService.deleteDeployment(deploymentId, true);
  32. }
  33.  
  34. @Test
  35. public void triggerMyProcess() {
  36. // prepare data packet
  37. Map<String, Object> variables = new HashMap<String, Object>();
  38. variables.put("姓名", "程序员");
  39. variables.put("职务", "高级软件工程师");
  40. variables.put("语言", "Java/C#");
  41. variables.put("操作系统", "Window,Linux,unix,Aix");
  42. variables.put("工作地点","苏州高新技术软件园");
  43.  
  44. // start process instance
  45. ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeveloperWorkExam", variables);
  46. assert (pi!=null);
  47.  
  48. List<Execution> executions = runtimeService.createExecutionQuery().list();
  49. assert (executions.size()==1);
  50.  
  51. Execution execution = runtimeService.createExecutionQuery().singleResult();
  52. runtimeService.setVariable(execution.getId(), "type", "receiveTask");
  53. runtimeService.signal(execution.getId());
  54.  
  55. executions = runtimeService.createExecutionQuery().list();
  56. assert (executions.size()==1);
  57.  
  58. execution = executions.get(0);
  59. runtimeService.setVariable(execution.getId(), "oper", "录用此人....");
  60. runtimeService.signal(execution.getId());
  61. }
  62. }

/**

package com.easyway.workflow.activiti.exam;

import java.util.HashMap;

/**

 * 我把Activiti 5.6默认工程中有关JPA的部分配置删除了,其实通过这个就可以初始化Activiti引擎实例。

 * 为了测试方便,将获取服务的实现抽象出来,同时使用Spring自带的与JUnit4集成的工具(

 * AbstractTransactionalJUnit4SpringContextTests)。

 *

 * 将classpath:activiti-context.xml在测试的时候进行加载,这样,在测试的子类中,只需要将其他的相

 * 关Spring配置单独加载即可,业务配置与流程配置分开,便于维护。

 * @author longgangbai

 *

 * 20##-12-18  上午01:37:14

 */

@ContextConfiguration("classpath:application-context-standalone.xml")

public class ActivitiWithSpringStandaloneTest extends AbstractSpringTest {

  @Override

  protected void beforeTest() throws Exception {

    Deployment deployment = repositoryService

    .createDeployment()

    .addClasspathResource(

        "diagrams/SprintActiviti56.bpmn20.xml")

    .deploy(); 

    deploymentId = deployment.getId();

  }

  @Override

  protected void afterTest() throws Exception {

    repositoryService.deleteDeployment(deploymentId, true); 

  }

 

  @Test

  public void triggerMyProcess() {

    // prepare data packet

    Map<String, Object> variables = new HashMap<String, Object>();

    variables.put("姓名", "程序员");

    variables.put("职务", "高级软件工程师");

    variables.put("语言", "Java/C#");

    variables.put("操作系统", "Window,Linux,unix,Aix");

    variables.put("工作地点","苏州高新技术软件园");

   

    // start process instance

    ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeveloperWorkExam", variables);

    assert (pi!=null);

   

    List<Execution> executions = runtimeService.createExecutionQuery().list();

    assert (executions.size()==1);

   

    Execution execution = runtimeService.createExecutionQuery().singleResult();

    runtimeService.setVariable(execution.getId(), "type", "receiveTask");

    runtimeService.signal(execution.getId());

   

    executions = runtimeService.createExecutionQuery().list();

    assert (executions.size()==1);

   

    execution = executions.get(0);

    runtimeService.setVariable(execution.getId(), "oper", "录用此人....");

    runtimeService.signal(execution.getId());

  }

}

自动部署测试:

Java代码

  1. /**
  2. package com.easyway.workflow.activiti.exam;
  3.  
  4.  
  5. import java.util.HashMap;
  6. /**
  7. *
  8. * Activiti 5.6与Spring3.0.3整合也比较简单,其基本思想就是,通过Spring的IOC容器来管理Activiti的流程引擎
  9. * 实例以及相关服务,可见,主要是基于Activiti在与Spring整合上努力上,做好配置即可。这里基于前面的
  10. * <receiveTask>的例子来进行.
  11. *
  12. *
  13. * 为了测试方便,将获取服务的实现抽象出来,同时使用Spring自带的与JUnit4集成的工具(
  14. * AbstractTransactionalJUnit4SpringContextTests)。我们的实现类为AbstractSpringTest,
  15. *
  16. *
  17. * 本文采用activiti和spring整合中自动部署资源的功能配置如下:
  18. * <!-- 创建流程引擎配置对象 -->
  19. <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  20. <property name="dataSource" ref="dataSource" />
  21. <property name="transactionManager" ref="transactionManager" />
  22. <property name="databaseSchemaUpdate" value="true" />
  23. <property name="mailServerHost" value="localhost" />
  24. <property name="mailServerPort" value="5025" />
  25. <property name="jpaHandleTransaction" value="true" />
  26. <property name="jpaCloseEntityManager" value="true" />
  27. <property name="jobExecutorActivate" value="false" />
  28. <!-- 使用spring的自动资源加载部署方式部署 -->
  29. <property name="deploymentResources" value="classpath*:diagrams/*.bpmn20.xml" />
  30.  
  31. </bean>
  32. * @author longgangbai
  33. *
  34. * 20##-12-18 上午12:58:31
  35. */
  36. @ContextConfiguration("classpath:application-context.xml")
  37. public class ActivitiWithSpringTest extends AbstractTransactionalJUnit4SpringContextTests{
  38.  
  39.  
  40. @Autowired
  41. private RuntimeService runtimeService;
  42.  
  43. @Autowired
  44. private TaskService taskService;
  45. @Autowired
  46. private ManagementService managerService;
  47. @Autowired
  48. private IdentityService identityService;
  49. @Autowired
  50. private FormService formService;
  51.  
  52.  
  53.  
  54. /**
  55. * 测试方法
  56. */
  57. @Test
  58. public void triggerMyProcess() {
  59. // 面试题目和答案
  60. Map<String, Object> variables = new HashMap<String, Object>();
  61. variables.put("姓名", "程序员");
  62. variables.put("职务", "高级软件工程师");
  63. variables.put("语言", "Java/C#");
  64. variables.put("操作系统", "Window,Linux,unix,Aix");
  65. variables.put("工作地点","苏州高新技术软件园");
  66.  
  67. // start process instance
  68. //获取创建一个实例
  69. ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeveloperWorkExam", variables);
  70. assert (pi!=null);
  71.  
  72. List<Execution> executions = runtimeService.createExecutionQuery().list();
  73. assert (executions.size()==1);
  74. //执行开发技术知识面试业务
  75. Execution execution = runtimeService.createExecutionQuery().singleResult();
  76. runtimeService.setVariable(execution.getId(), "type", "receiveTask");
  77. runtimeService.signal(execution.getId());
  78.  
  79. executions = runtimeService.createExecutionQuery().list();
  80. assert (executions.size()==1);
  81. //执行人事面试业务
  82. execution = executions.get(0);
  83. runtimeService.setVariable(execution.getId(), "oper", "录用此人....");
  84. runtimeService.signal(execution.getId());
  85. }
  86. }

/**

package com.easyway.workflow.activiti.exam;

import java.util.HashMap;

/**

 *

 * Activiti 5.6与Spring3.0.3整合也比较简单,其基本思想就是,通过Spring的IOC容器来管理Activiti的流程引擎

 * 实例以及相关服务,可见,主要是基于Activiti在与Spring整合上努力上,做好配置即可。这里基于前面的

 * <receiveTask>的例子来进行.

 *

 *

 * 为了测试方便,将获取服务的实现抽象出来,同时使用Spring自带的与JUnit4集成的工具(

 * AbstractTransactionalJUnit4SpringContextTests)。我们的实现类为AbstractSpringTest,

 *

 *

 * 本文采用activiti和spring整合中自动部署资源的功能配置如下:

 * <!-- 创建流程引擎配置对象 -->

 <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">

    <property name="dataSource" ref="dataSource" />

    <property name="transactionManager" ref="transactionManager" />

    <property name="databaseSchemaUpdate" value="true" />

    <property name="mailServerHost" value="localhost" />

    <property name="mailServerPort" value="5025" />

    <property name="jpaHandleTransaction" value="true" />

    <property name="jpaCloseEntityManager" value="true" />

    <property name="jobExecutorActivate" value="false" />

    <!-- 使用spring的自动资源加载部署方式部署 -->

    <property name="deploymentResources" value="classpath*:diagrams/*.bpmn20.xml" />

   

  </bean>

 * @author longgangbai

 *

 * 20##-12-18  上午12:58:31

 */

@ContextConfiguration("classpath:application-context.xml")

public class ActivitiWithSpringTest extends  AbstractTransactionalJUnit4SpringContextTests{

   

        @Autowired

    private RuntimeService runtimeService;

 

        @Autowired

    private TaskService taskService;

        @Autowired

    private ManagementService managerService;

        @Autowired

    private IdentityService identityService;

        @Autowired

    private FormService formService;

       

       

       

        /**

         * 测试方法

         */

    @Test

    public void triggerMyProcess() {

      // 面试题目和答案

      Map<String, Object> variables = new HashMap<String, Object>();

      variables.put("姓名", "程序员");

      variables.put("职务", "高级软件工程师");

      variables.put("语言", "Java/C#");

      variables.put("操作系统", "Window,Linux,unix,Aix");

      variables.put("工作地点","苏州高新技术软件园");

     

      // start process instance

      //获取创建一个实例

      ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeveloperWorkExam", variables);

      assert (pi!=null);

     

      List<Execution> executions = runtimeService.createExecutionQuery().list();

      assert (executions.size()==1);

      //执行开发技术知识面试业务

      Execution execution = runtimeService.createExecutionQuery().singleResult();

      runtimeService.setVariable(execution.getId(), "type", "receiveTask");

      runtimeService.signal(execution.getId());

     

      executions = runtimeService.createExecutionQuery().list();

      assert (executions.size()==1);

      //执行人事面试业务

      execution = executions.get(0);

      runtimeService.setVariable(execution.getId(), "oper", "录用此人....");

      runtimeService.signal(execution.getId());

    }

}

运行结果:

Java代码

  1. 20##-12-18 13:30:01 org.activiti.engine.impl.db.DbSqlSession executeSchemaResource
  2. 信息: performing create on engine with resource org/activiti/db/create/activiti.h2.create.engine.sql
  3. 20##-12-18 13:30:01 org.activiti.engine.impl.db.DbSqlSession executeSchemaResource
  4. 信息: performing create on history with resource org/activiti/db/create/activiti.h2.create.history.sql
  5. 20##-12-18 13:30:01 org.activiti.engine.impl.db.DbSqlSession executeSchemaResource
  6. 信息: performing create on identity with resource org/activiti/db/create/activiti.h2.create.identity.sql
  7. 20##-12-18 13:30:02 org.activiti.engine.impl.ProcessEngineImpl <init>
  8. 信息: ProcessEngine default created
  9. 20##-12-18 13:30:02 org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deploy
  10. 信息: Processing resource diagrams/SprintActiviti56.bpmn20.xml
  11. 20##-12-18 13:30:02 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes
  12. 信息: XMLSchema currently not supported as typeLanguage
  13. 20##-12-18 13:30:02 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes
  14. 信息: XPath currently not supported as expressionLanguage
  15. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  16. 信息: 开始开发知识面试了....
  17. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  18. 信息: 姓名 程序员
  19. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  20. 信息: 语言 Java/C#
  21. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  22. 信息: 职务 高级软件工程师
  23. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  24. 信息: 工作地点 苏州高新技术软件园
  25. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  26. 信息: 操作系统 Window,Linux,unix,Aix
  27. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.DeveloperKnowledgeExamListener execute
  28. 信息: 开始开发知识面试了....
  29. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.HumanResourceExamListener execute
  30. 信息: 检查该考试是否通过开发知识考试....
  31. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.HumanResourceExamListener execute
  32. 信息: 开发知识面试结果该考生开发知识面试通过了....
  33. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.HumanResourceExamListener execute
  34. 信息: 开始人事面试了....
  35. 20##-12-18 13:30:02 com.easyway.workflow.activiti.exam.HumanResourceExamListener execute
  36. 信息: 人事面试完毕....等候通知....

更多相关推荐:
工作流Activiti的学习总结(十二) activiti官方十分钟快速学习

根据activiti官方提供的编写1财务部门填写月财务报告2股东审核月财务审计报告流程图流程配置ltxmlversionquot10quotencodingquotUTF8quotgtltdefinitions...

工作流Activiti的学习总结(三) activit数据库限制和数据库相关的配置

工作流Activiti的学习总结三activit数据库限制和数据库相关的配置数据库相关的配置在activiti中的持久化框架采用Ibatis3实现有两种方式定义activiti的数据库1通过jdbcproper...

工作流Activiti的学习总结(五) activiti的API和虚拟工作流测试

工作流Activiti的学习总结五activiti的API和虚拟工作流测试activiti的API在activiti引擎中你可以通过多种方式获取ProcessEngine对象从ProcessEngine中获取各...

工作流Activiti的学习总结(八)Activiti自动执行的应用

工作流activiti自动执行任务的开发应用工作流模拟某公司请假流程情景如下1开发人员请假流程如果开发人员请假如果请假天数小于3天组长批准人事批准即可请假2如果请假大约三天需要项目经理或者产品经理批准并且项目总...

工作流Activiti的学习总结(六)Antiviti的安装详细过程

工作流Activiti的学习总结六Antiviti的安装详细过程activiti56的安装项目中采用最新的Activiti版本为56GA的activitiREST方式访问相关的RESTWebService服务a...

工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解

工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解Spring和Activiti的整合:在Spring和Activiti的整合中ProcessEngineFactoryBean成…

工作流Activiti的学习总结(二)activiti中ProcessEngine的创建和数据库表命名规则

工作流Activiti的学习总结(二)activiti中ProcessEngine的创建和数据库表命名规则数据库表命名规则:Activiti工作流引擎的数据库表中的表名称都是以ACT_.第二部分两个字母表示表的…

开源工作流activiti使用手册

开源工作流ACTIVITI使用手册阿凡提集团信息部第1页共8页目录开源工作流ACTIVITI1使用手册1第一章ACTIVITI5安装步骤211ACTIVITI安装先决条件312ACTIVITI安装步骤3121解...

activiti学习笔记:Activiti工作流教程 Activiti5 流程实例

activiti学习笔记Activiti工作流教程Activiti5流程实例觉得activiti设计得简单而强大尝试翻译一下他的10分钟入门指南10分钟入门指南通过一个非常简单的业务流程介绍一些基本的Activ...

activiti入门教程-基于Activiti5工作流实战企业协同OA办公系统

基于Activiti5工作流实战企业协同OA办公系统springdatajpauur前台组件一本课程是怎么样的一门课程全面介绍11课程的背景该课程的需求和设计来源于协同公司的OA办公系统从OA系统的需求分析数据...

用activiti 工作流 实现简单的请假 附带源码

用activiti工作流实现简单的请假附带源码用activiti工作流实现简单的请假附带源码新建一个Maven项目项目结构pomxmlhtmlviewplaincopy1ltspangtprojectxmlns...

Activiti工作流引擎数据库表结构

Activiti工作流引擎数据库表结构数据库表的命名Acitiviti数据库中表的命名都是以ACT开头的第二部分是一个两个字符用例表的标识此用例大体与服务API是匹配的1ACTRERE表示repository带...

工作流activiti的学习总结(15篇)