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
- <!--Jar版本管理-->
- <properties>
- <springframework>4.0.2.RELEASE</springframework>
- <hibernate>4.3.4.Final</hibernate>
- <mysql.connector>5.1.29</mysql.connector>
- <c3p0>0.9.1.2</c3p0>
- <log4j>1.2.17</log4j>
- <activiti>5.15.1</activiti>
- <jstl>1.2</jstl>
- </properties>
- <dependencies>
- <!--Springwebmvc-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${springframework}</version>
- </dependency>
- <!--Springframework4中的orm包已经单独拿出来了,所以要和hibernate集成,需要此包-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>${springframework}</version>
- </dependency>
- <!--提供JMS,Freemarker,Quartz集成服务-->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>${springframework}</version>
- </dependency>
- <!--Hibernate-->
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-core</artifactId>
- <version>${hibernate}</version>
- </dependency>
- <!--MySQL驱动-->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql.connector}</version>
- </dependency>
- <!--连接池-->
- <dependency>
- <groupId>c3p0</groupId>
- <artifactId>c3p0</artifactId>
- <version>${c3p0}</version>
- </dependency>
- <!--log4j-->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j}</version>
- </dependency>
- <!--jstl-->
- <dependency>
- <groupId>jstl</groupId>
- <artifactId>jstl</artifactId>
- <version>${jstl}</version>
- </dependency>
- <!--activiti依赖-->
- <dependency>
- <groupId>org.activiti</groupId>
- <artifactId>activiti-engine</artifactId>
- <version>${activiti}</version>
- </dependency>
- <!--activiti与Spring集成-->
- <dependency>
- <groupId>org.activiti</groupId>
- <artifactId>activiti-spring</artifactId>
- <version>${activiti}</version>
- </dependency>
- <!--junit-->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>3.8.1</version>
- <scope>test</scope>
- </dependency>
- </dependencies>
与Spring集成:
activiti.cfg.xml
- <beansxmlns="http://www.springframework.org/schema/beans"
- 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">
- <!--Activiti处理引擎的配置,交由Spring管理-->
- <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">
- <!--配置数据源,和系统使用同一个数据源-->
- <propertyname="dataSource"ref="dataSource"/>
- <propertyname="databaseSchemaUpdate"value="true"/>
- <propertyname="jobExecutorActivate"value="false"/>
- <!--统一的事务管理-->
- <propertyname="transactionManager"ref="transactionManager"/>
- <propertyname="activityFontName"value="宋体"/>
- <propertyname="labelFontName"value="宋体"/>
- </bean>
- <beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">
- <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/>
- </bean>
- </beans>
activiti的API中,最终要的一个接口就是ProcessEngine,获取到ProcessEngine的实例,就获取了activiti体系中的所有api。重要的接口如下:
- ProcessEngineprocessEngine=ProcessEngines.getDefaultProcessEngine();
- RuntimeServiceruntimeService=processEngine.getRuntimeService();
- RepositoryServicerepositoryService=processEngine.getRepositoryService();
- TaskServicetaskService=processEngine.getTaskService();
- ManagementServicemanagementService=processEngine.getManagementService();
- IdentityServiceidentityService=processEngine.getIdentityService();
- HistoryServicehistoryService=processEngine.getHistoryService();
- FormServiceformService=processEngine.getFormService();
Activiti的服务框架如下
ActivitiController代码
- packageorg.xdemo.example.activiti.controller;
- importjava.awt.image.BufferedImage;
- importjava.io.IOException;
- importjava.io.InputStream;
- importjava.util.HashMap;
- importjava.util.List;
- importjava.util.Map;
- importjavax.annotation.Resource;
- importjavax.imageio.ImageIO;
- importjavax.servlet.http.HttpServletResponse;
- importorg.activiti.engine.ProcessEngine;
- importorg.activiti.engine.RepositoryService;
- importorg.activiti.engine.RuntimeService;
- importorg.activiti.engine.TaskService;
- importorg.activiti.engine.impl.cmd.GetDeploymentProcessDiagramCmd;
- importorg.activiti.engine.impl.interceptor.Command;
- importorg.activiti.engine.repository.ProcessDefinition;
- importorg.activiti.engine.runtime.ProcessInstance;
- importorg.activiti.engine.task.Task;
- importorg.springframework.stereotype.Controller;
- importorg.springframework.web.bind.annotation.RequestMapping;
- importorg.springframework.web.bind.annotation.RequestMethod;
- importorg.springframework.web.servlet.ModelAndView;
- @Controller
- @RequestMapping("/process")
- publicclassActivitiController{
- @Resource
- ProcessEngineengine;
- /**
- *列出所有流程模板
- */
- @RequestMapping(method=RequestMethod.GET)
- publicModelAndViewlist(ModelAndViewmav){
- mav.addObject("list",Util.list());
- mav.setViewName("process/template");
- returnmav;
- }
- /**
- *部署流程
- */
- @RequestMapping("deploy")
- publicModelAndViewdeploy(StringprocessName,ModelAndViewmav){
- RepositoryServiceservice=engine.getRepositoryService();
- if(null!=processName)
- service.createDeployment()
- .addClasspathResource("diagrams/"+processName).deploy();
- List<ProcessDefinition>list=service.createProcessDefinitionQuery()
- .list();
- mav.addObject("list",list);
- mav.setViewName("process/deployed");
- returnmav;
- }
- /**
- *已部署流程列表
- */
- @RequestMapping("deployed")
- publicModelAndViewdeployed(ModelAndViewmav){
- RepositoryServiceservice=engine.getRepositoryService();
- List<ProcessDefinition>list=service.createProcessDefinitionQuery()
- .list();
- mav.addObject("list",list);
- mav.setViewName("process/deployed");
- returnmav;
- }
- /**
- *启动一个流程实例
- */
- @SuppressWarnings("unchecked")
- @RequestMapping("start")
- publicModelAndViewstart(Stringid,ModelAndViewmav){
- RuntimeServiceservice=engine.getRuntimeService();
- service.startProcessInstanceById(id);
- List<ProcessInstance>list=service.createProcessInstanceQuery()
- .list();
- mav.addObject("list",list);
- mav.setViewName("process/started");
- returnmav;
- }
- /**
- *所有已启动流程实例
- */
- @RequestMapping("started")
- publicModelAndViewstarted(ModelAndViewmav){
- RuntimeServiceservice=engine.getRuntimeService();
- List<ProcessInstance>list=service.createProcessInstanceQuery()
- .list();
- mav.addObject("list",list);
- mav.setViewName("process/started");
- returnmav;
- }
- /**
- *进入任务列表
- */
- @RequestMapping("task")
- publicModelAndViewtask(ModelAndViewmav){
- TaskServiceservice=engine.getTaskService();
- List<Task>list=service.createTaskQuery().list();
- mav.addObject("list",list);
- mav.setViewName("process/task");
- returnmav;
- }
- /**
- *完成当前节点
- */
- @RequestMapping("complete")
- publicModelAndViewcomplete(ModelAndViewmav,Stringid){
- TaskServiceservice=engine.getTaskService();
- service.complete(id);
- returnnewModelAndView("redirect:task");
- }
- /**
- *所有已启动流程实例
- *
- *@throwsIOException
- */
- @RequestMapping("graphics")
- publicvoidgraphics(StringdefinitionId,StringinstanceId,
- StringtaskId,ModelAndViewmav,HttpServletResponseresponse)
- throwsIOException{
- response.setContentType("image/png");
- Command<InputStream>cmd=null;
- if(definitionId!=null){
- cmd=newGetDeploymentProcessDiagramCmd(definitionId);
- }
- if(instanceId!=null){
- cmd=newProcessInstanceDiagramCmd(instanceId);
- }
- if(taskId!=null){
- Tasktask=engine.getTaskService().createTaskQuery().taskId(taskId).singleResult();
- cmd=newProcessInstanceDiagramCmd(
- task.getProcessInstanceId());
- }
- if(cmd!=null){
- InputStreamis=engine.getManagementService().executeCommand(cmd);
- intlen=0;
- byte[]b=newbyte[1024];
- while((len=is.read(b,0,1024))!=-1){
- response.getOutputStream().write(b,0,len);
- }
- }
- }
- }
示例:
<转载请注明来源: http://www.xdemo.org/spring-activiti-integration/ >