Activiti环境配置、项目搭建、与Spring集成、简单示例

来源:互联网 发布:java 悲观锁 编辑:程序博客网 时间:2024/06/06 00:34
WFMS(工作流管理系统):http://baike.baidu.com/view/977667.htm

    WFMC(工作流管理联盟):http://baike.baidu.com/view/2497858.htm

示例项目下载

    http://pan.baidu.com/s/1gd3iNfH

环境搭建:

    FBI WARNING 两个视频,屏幕录像专家录制,非病毒,本站愿意承担责任,下载完文件请先核对MD5。

    1.Eclipse配置Tomcat和部署WEB应用.exe(MD5:81c1dfb994ff5b2094ce0dac244da598)

    http://pan.baidu.com/s/1kTgb8PL

    2.Activiti项目搭建与Spring集成配置.exe(MD5:3debeec0a00dc061c782ca0cdcc97f7d)

    http://pan.baidu.com/s/1sjyKCY5

项目搭建:

    Maven项目POM

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- Jar版本管理 -->  
  2.   
  3. <properties>  
  4.   
  5.     <springframework>4.0.2.RELEASE</springframework>  
  6.   
  7.     <hibernate>4.3.4.Final</hibernate>  
  8.   
  9.     <mysql.connector>5.1.29</mysql.connector>  
  10.   
  11.     <c3p0>0.9.1.2</c3p0>  
  12.   
  13.     <log4j>1.2.17</log4j>  
  14.   
  15.     <activiti>5.15.1</activiti>  
  16.   
  17.     <jstl>1.2</jstl>  
  18.   
  19. </properties>  
  20.   
  21.   
  22.   
  23.   
  24.   
  25. <dependencies>  
  26.   
  27.     <!-- Spring web mvc -->  
  28.   
  29.     <dependency>  
  30.   
  31.         <groupId>org.springframework</groupId>  
  32.   
  33.         <artifactId>spring-webmvc</artifactId>  
  34.   
  35.         <version>${springframework}</version>  
  36.   
  37.     </dependency>  
  38.   
  39.     <!-- Spring framework 4中的orm包已经单独拿出来了,所以要和hibernate集成,需要此包 -->  
  40.   
  41.     <dependency>  
  42.   
  43.         <groupId>org.springframework</groupId>  
  44.   
  45.         <artifactId>spring-orm</artifactId>  
  46.   
  47.         <version>${springframework}</version>  
  48.   
  49.     </dependency>  
  50.   
  51.     <!-- 提供JMS,Freemarker,Quartz集成服务 -->  
  52.   
  53.     <dependency>  
  54.   
  55.         <groupId>org.springframework</groupId>  
  56.   
  57.         <artifactId>spring-context-support</artifactId>  
  58.   
  59.         <version>${springframework}</version>  
  60.   
  61.     </dependency>  
  62.   
  63.     <!-- Hibernate -->  
  64.   
  65.     <dependency>  
  66.   
  67.         <groupId>org.hibernate</groupId>  
  68.   
  69.         <artifactId>hibernate-core</artifactId>  
  70.   
  71.         <version>${hibernate}</version>  
  72.   
  73.     </dependency>  
  74.   
  75.     <!-- MySQL驱动 -->  
  76.   
  77.     <dependency>  
  78.   
  79.         <groupId>mysql</groupId>  
  80.   
  81.         <artifactId>mysql-connector-java</artifactId>  
  82.   
  83.         <version>${mysql.connector}</version>  
  84.   
  85.     </dependency>  
  86.   
  87.     <!-- 连接池 -->  
  88.   
  89.     <dependency>  
  90.   
  91.         <groupId>c3p0</groupId>  
  92.   
  93.         <artifactId>c3p0</artifactId>  
  94.   
  95.         <version>${c3p0}</version>  
  96.   
  97.     </dependency>  
  98.   
  99.     <!-- log4j -->  
  100.   
  101.     <dependency>  
  102.   
  103.         <groupId>log4j</groupId>  
  104.   
  105.         <artifactId>log4j</artifactId>  
  106.   
  107.         <version>${log4j}</version>  
  108.   
  109.     </dependency>  
  110.   
  111.     <!-- jstl -->  
  112.   
  113.     <dependency>  
  114.   
  115.         <groupId>jstl</groupId>  
  116.   
  117.         <artifactId>jstl</artifactId>  
  118.   
  119.         <version>${jstl}</version>  
  120.   
  121.     </dependency>  
  122.   
  123.     <!-- activiti依赖 -->  
  124.   
  125.     <dependency>  
  126.   
  127.         <groupId>org.activiti</groupId>  
  128.   
  129.         <artifactId>activiti-engine</artifactId>  
  130.   
  131.         <version>${activiti}</version>  
  132.   
  133.     </dependency>  
  134.   
  135.     <!-- activiti 与 Spring 集成 -->  
  136.   
  137.     <dependency>  
  138.   
  139.         <groupId>org.activiti</groupId>  
  140.   
  141.         <artifactId>activiti-spring</artifactId>  
  142.   
  143.         <version>${activiti}</version>  
  144.   
  145.     </dependency>  
  146.   
  147.   
  148.   
  149.     <!-- junit -->  
  150.   
  151.     <dependency>  
  152.   
  153.         <groupId>junit</groupId>  
  154.   
  155.         <artifactId>junit</artifactId>  
  156.   
  157.         <version>3.8.1</version>  
  158.   
  159.         <scope>test</scope>  
  160.   
  161.     </dependency>  
  162.   
  163. </dependencies>  


与Spring集成:

    activiti.cfg.xml   

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <beans xmlns="http://www.springframework.org/schema/beans"   
  2.   
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.   
  5.        xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">  
  6.   
  7. <!-- Activiti处理引擎的配置,交由Spring管理 -->  
  8.   
  9.   <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">  
  10.   
  11.           <!-- 配置数据源,和系统使用同一个数据源 -->  
  12.   
  13.           <property name="dataSource" ref="dataSource" />  
  14.   
  15.           <property name="databaseSchemaUpdate" value="true" />  
  16.   
  17.           <property name="jobExecutorActivate" value="false" />  
  18.   
  19.           <!-- 统一的事务管理 -->  
  20.   
  21.           <property name="transactionManager" ref="transactionManager" />  
  22.   
  23.           <property name="activityFontName"  value="宋体" />  
  24.   
  25.           <property name="labelFontName"  value="宋体" />  
  26.   
  27.   </bean>  
  28.   
  29.   <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">  
  30.   
  31.       <property name="processEngineConfiguration" ref="processEngineConfiguration" />  
  32.   
  33.   </bean>  
  34.   
  35.    
  36.   
  37. </beans>  

activiti的API中,最终要的一个接口就是ProcessEngine,获取到ProcessEngine的实例,就获取了activiti体系中的所有api。重要的接口如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();  
  2.   
  3.    
  4.   
  5. RuntimeService runtimeService = processEngine.getRuntimeService();  
  6.   
  7. RepositoryService repositoryService = processEngine.getRepositoryService();  
  8.   
  9. TaskService taskService = processEngine.getTaskService();  
  10.   
  11. ManagementService managementService = processEngine.getManagementService();  
  12.   
  13. IdentityService identityService = processEngine.getIdentityService();  
  14.   
  15. HistoryService historyService = processEngine.getHistoryService();  
  16.   
  17. FormService formService = processEngine.getFormService();  

    Activiti的服务框架如下

    

    ActivitiController代码

    

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package org.xdemo.example.activiti.controller;  
  2.   
  3.    
  4.   
  5. import java.awt.image.BufferedImage;  
  6.   
  7. import java.io.IOException;  
  8.   
  9. import java.io.InputStream;  
  10.   
  11. import java.util.HashMap;  
  12.   
  13. import java.util.List;  
  14.   
  15. import java.util.Map;  
  16.   
  17.    
  18.   
  19. import javax.annotation.Resource;  
  20.   
  21. import javax.imageio.ImageIO;  
  22.   
  23. import javax.servlet.http.HttpServletResponse;  
  24.   
  25.    
  26.   
  27. import org.activiti.engine.ProcessEngine;  
  28.   
  29. import org.activiti.engine.RepositoryService;  
  30.   
  31. import org.activiti.engine.RuntimeService;  
  32.   
  33. import org.activiti.engine.TaskService;  
  34.   
  35. import org.activiti.engine.impl.cmd.GetDeploymentProcessDiagramCmd;  
  36.   
  37. import org.activiti.engine.impl.interceptor.Command;  
  38.   
  39. import org.activiti.engine.repository.ProcessDefinition;  
  40.   
  41. import org.activiti.engine.runtime.ProcessInstance;  
  42.   
  43. import org.activiti.engine.task.Task;  
  44.   
  45. import org.springframework.stereotype.Controller;  
  46.   
  47. import org.springframework.web.bind.annotation.RequestMapping;  
  48.   
  49. import org.springframework.web.bind.annotation.RequestMethod;  
  50.   
  51. import org.springframework.web.servlet.ModelAndView;  
  52.   
  53.    
  54.   
  55. @Controller  
  56.   
  57. @RequestMapping("/process")  
  58.   
  59. public class ActivitiController {  
  60.   
  61.    
  62.   
  63.     @Resource  
  64.   
  65.     ProcessEngine engine;  
  66.   
  67.    
  68.   
  69.     /** 
  70.  
  71.      * 列出所有流程模板 
  72.  
  73.      */  
  74.   
  75.     @RequestMapping(method = RequestMethod.GET)  
  76.   
  77.     public ModelAndView list(ModelAndView mav) {  
  78.   
  79.         mav.addObject("list", Util.list());  
  80.   
  81.         mav.setViewName("process/template");  
  82.   
  83.         return mav;  
  84.   
  85.     }  
  86.   
  87.    
  88.   
  89.     /** 
  90.  
  91.      * 部署流程 
  92.  
  93.      */  
  94.   
  95.     @RequestMapping("deploy")  
  96.   
  97.     public ModelAndView deploy(String processName, ModelAndView mav) {  
  98.   
  99.    
  100.   
  101.         RepositoryService service = engine.getRepositoryService();  
  102.   
  103.    
  104.   
  105.         if (null != processName)  
  106.   
  107.             service.createDeployment()  
  108.   
  109.                     .addClasspathResource("diagrams/" + processName).deploy();  
  110.   
  111.    
  112.   
  113.         List<ProcessDefinition> list = service.createProcessDefinitionQuery()  
  114.   
  115.                 .list();  
  116.   
  117.    
  118.   
  119.         mav.addObject("list", list);  
  120.   
  121.         mav.setViewName("process/deployed");  
  122.   
  123.         return mav;  
  124.   
  125.     }  
  126.   
  127.    
  128.   
  129.     /** 
  130.  
  131.      * 已部署流程列表 
  132.  
  133.      */  
  134.   
  135.     @RequestMapping("deployed")  
  136.   
  137.     public ModelAndView deployed(ModelAndView mav) {  
  138.   
  139.    
  140.   
  141.         RepositoryService service = engine.getRepositoryService();  
  142.   
  143.    
  144.   
  145.         List<ProcessDefinition> list = service.createProcessDefinitionQuery()  
  146.   
  147.                 .list();  
  148.   
  149.    
  150.   
  151.         mav.addObject("list", list);  
  152.   
  153.         mav.setViewName("process/deployed");  
  154.   
  155.    
  156.   
  157.         return mav;  
  158.   
  159.     }  
  160.   
  161.    
  162.   
  163.     /** 
  164.  
  165.      * 启动一个流程实例 
  166.  
  167.      */  
  168.   
  169.     @SuppressWarnings("unchecked")  
  170.   
  171.     @RequestMapping("start")  
  172.   
  173.     public ModelAndView start(String id, ModelAndView mav) {  
  174.   
  175.    
  176.   
  177.         RuntimeService service = engine.getRuntimeService();  
  178.   
  179.    
  180.   
  181.         service.startProcessInstanceById(id);  
  182.   
  183.    
  184.   
  185.         List<ProcessInstance> list = service.createProcessInstanceQuery()  
  186.   
  187.                 .list();  
  188.   
  189.    
  190.   
  191.         mav.addObject("list", list);  
  192.   
  193.         mav.setViewName("process/started");  
  194.   
  195.    
  196.   
  197.         return mav;  
  198.   
  199.     }  
  200.   
  201.    
  202.   
  203.     /** 
  204.  
  205.      * 所有已启动流程实例 
  206.  
  207.      */  
  208.   
  209.     @RequestMapping("started")  
  210.   
  211.     public ModelAndView started(ModelAndView mav) {  
  212.   
  213.    
  214.   
  215.         RuntimeService service = engine.getRuntimeService();  
  216.   
  217.    
  218.   
  219.         List<ProcessInstance> list = service.createProcessInstanceQuery()  
  220.   
  221.                 .list();  
  222.   
  223.    
  224.   
  225.         mav.addObject("list", list);  
  226.   
  227.         mav.setViewName("process/started");  
  228.   
  229.    
  230.   
  231.         return mav;  
  232.   
  233.     }  
  234.   
  235.        
  236.   
  237.     /** 
  238.  
  239.      * 进入任务列表  
  240.  
  241.      */  
  242.   
  243.     @RequestMapping("task")  
  244.   
  245.     public ModelAndView task(ModelAndView mav){  
  246.   
  247.         TaskService service=engine.getTaskService();  
  248.   
  249.         List<Task> list=service.createTaskQuery().list();  
  250.   
  251.         mav.addObject("list", list);  
  252.   
  253.         mav.setViewName("process/task");  
  254.   
  255.         return mav;  
  256.   
  257.     }  
  258.   
  259.        
  260.   
  261.     /** 
  262.  
  263.      *完成当前节点  
  264.  
  265.      */  
  266.   
  267.     @RequestMapping("complete")  
  268.   
  269.     public ModelAndView complete(ModelAndView mav,String id){  
  270.   
  271.            
  272.   
  273.         TaskService service=engine.getTaskService();  
  274.   
  275.            
  276.   
  277.         service.complete(id);  
  278.   
  279.            
  280.   
  281.         return new ModelAndView("redirect:task");  
  282.   
  283.     }  
  284.   
  285.    
  286.   
  287.     /** 
  288.  
  289.      * 所有已启动流程实例 
  290.  
  291.      *  
  292.  
  293.      * @throws IOException 
  294.  
  295.      */  
  296.   
  297.     @RequestMapping("graphics")  
  298.   
  299.     public void graphics(String definitionId, String instanceId,  
  300.   
  301.             String taskId, ModelAndView mav, HttpServletResponse response)  
  302.   
  303.             throws IOException {  
  304.   
  305.            
  306.   
  307.         response.setContentType("image/png");  
  308.   
  309.         Command<InputStream> cmd = null;  
  310.   
  311.    
  312.   
  313.         if (definitionId != null) {  
  314.   
  315.             cmd = new GetDeploymentProcessDiagramCmd(definitionId);  
  316.   
  317.         }  
  318.   
  319.    
  320.   
  321.         if (instanceId != null) {  
  322.   
  323.             cmd = new ProcessInstanceDiagramCmd(instanceId);  
  324.   
  325.         }  
  326.   
  327.    
  328.   
  329.         if (taskId != null) {  
  330.   
  331.             Task task = engine.getTaskService().createTaskQuery().taskId(taskId).singleResult();  
  332.   
  333.             cmd = new ProcessInstanceDiagramCmd(  
  334.   
  335.                     task.getProcessInstanceId());  
  336.   
  337.         }  
  338.   
  339.    
  340.   
  341.         if (cmd != null) {  
  342.   
  343.             InputStream is = engine.getManagementService().executeCommand(cmd);  
  344.   
  345.             int len = 0;  
  346.   
  347.             byte[] b = new byte[1024];  
  348.   
  349.             while ((len = is.read(b, 01024)) != -1) {  
  350.   
  351.                 response.getOutputStream().write(b, 0, len);  
  352.   
  353.             }  
  354.   
  355.         }  
  356.   
  357.     }  
  358.   
  359. }  

示例:

    


<转载请注明来源: http://www.xdemo.org/spring-activiti-integration/ >

0 0
原创粉丝点击