SpringMVC整合Activiti

分享知识 传递快乐


这里是把Activiti5.22.0整合到Spring项目里。


1、下载源码

官方下载Activiti 源代码: https://github.com/Activiti/Activiti,可以直接用Git克隆,也可以下载zip格式的压缩包。


下载好后并解压会看到以下目录:


database:activiti数据库,所支持的数据库:db2,h2,hsql,sql-server(mssql),mysql,oracle,postgresSQL
docs文档目录
libs:使用activiti所需要的jar包

wars:demo包

打开database目录,结构如下图所示:
create:数据库、表视图、索引的创建脚本。
drop:数据库、表视图、索引的删除脚本。(删除引擎最好这种方式删除的比较干净)
upgrade:数据库、表视图、索引的升级脚本。

create:创建数据库的意思,那对应的肯定有drop、upgrade标示符,操作的时候选择对应的即可。
最后一个标示符history,因为sql创建表的时候分为三个大的sql脚本。
engine:核心的创建表语句、主要是ru*表等。
history:主要创建工作流的hi*表。

identity:主要创建工作流的用户表、id*以及用户信息表。


2、进入wars文件目录

解压activiti-explorer.war,进入activiti-explorer目录,把diagram-viewer、editor-app、modeler.html等文件复制到webapp下,我的放到了webapp/activiti目录下了。


并修改editor-app/app-cfg.js,把 'contextRoot' : '/activiti-explorer/service'  中的 activiti-explorer 改为你的项目名称。

进入wars\activiti-explorer\WEB-INF\classes目录下把stencilset.json复制到resources项目的配置文件里面,这里配置了activiti所用到的信息。


3、添加pom.xml依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.xh.activiti</groupId>
	<artifactId>spring-activiti</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-activiti Maven Webapp</name>
	<url>http://maven.apache.org</url>


	<properties>
		<project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
		<spring.version>4.3.13.RELEASE</spring.version>
		<mysql.version>5.1.40</mysql.version>
		<druid.version>1.0.27</druid.version>
		<junit.version>4.12</junit.version>
		<fastjson.version>1.2.46</fastjson.version>
		<log4j.version>1.2.17</log4j.version>
		<slf4j.version>1.7.25</slf4j.version>
		<mybatis.version>3.4.5</mybatis.version>
		<mybatis.spring.version>1.3.1</mybatis.spring.version>
		<servlet.version>3.1.0</servlet.version>
		<activiti.version>5.22.0</activiti.version>
		<jackson.version>2.9.0</jackson.version>
	</properties>

	<dependencies>
		<!-- activiti -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-modeler</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-bpmn-model</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-bpmn-layout</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-bpmn-converter</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-process-validation</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-image-generator</artifactId>
			<version>${activiti.version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-json-converter</artifactId>
			<version>${activiti.version}</version>
		</dependency>


		<!-- 通用包 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.6</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>

		<!-- spring -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- mysql驱动包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.version}</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>${druid.version}</version>
		</dependency>

		<!-- junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<!-- fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>${fastjson.version}</version>
		</dependency>


		<!--日志 start -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>${log4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${slf4j.version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${slf4j.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>${slf4j.version}</version>
			<scope>test</scope>
		</dependency>

		<!--Mybatis核心包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>

		<!--Mybatis与spring整合包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${mybatis.spring.version}</version>
		</dependency>

		<!-- servlet 如果用不到jsp个人认为没必要引用 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet.version}</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- jackson begin -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-annotations</artifactId>
			<version>${jackson.version}</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>${jackson.version}</version>
		</dependency>

	</dependencies>

	<build>
		<finalName>spring-activiti</finalName>
	</build>
</project>


在maven仓库里找到activiti-modeler-5.22.0-sources.jar,把这两个文件夹下的文件复制到项目指定的包中(可以放到一个包中)




4、编写控制器

package com.xh.activiti.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.activiti.editor.constants.ModelDataJsonConstants;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.Model;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * 
 * @author H.Yang
 * @QQ 1033542070
 * @date 2018年3月10日
 */
@Controller
@Scope("prototype")
@RequestMapping("/user")
public class TestController {

	@RequestMapping(value = "index", method = RequestMethod.GET)
	public ModelAndView goTest(String name, String password) {
		ModelAndView mov = new ModelAndView();
		mov.setViewName("/index");
		return mov;
	}

	/**
	 * 创建模型
	 */
	@RequestMapping("create")
	public void create(HttpServletRequest request, HttpServletResponse response) {
		try {
			ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

			RepositoryService repositoryService = processEngine.getRepositoryService();

			ObjectMapper objectMapper = new ObjectMapper();
			ObjectNode editorNode = objectMapper.createObjectNode();
			editorNode.put("id", "canvas");
			editorNode.put("resourceId", "canvas");
			ObjectNode stencilSetNode = objectMapper.createObjectNode();
			stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
			editorNode.put("stencilset", stencilSetNode);
			Model modelData = repositoryService.newModel();

			ObjectNode modelObjectNode = objectMapper.createObjectNode();
			modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, "lutiannan");
			modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
			String description = "lutiannan---";
			modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);
			modelData.setMetaInfo(modelObjectNode.toString());
			modelData.setName("lutiannan");
			modelData.setKey("12313123");

			// 保存模型
			repositoryService.saveModel(modelData);
			repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));
			
			System.out.println(request.getContextPath() + "/activiti/modeler.html?modelId=" + modelData.getId());
			response.sendRedirect(request.getContextPath() + "/activiti/modeler.html?modelId=" + modelData.getId());
		} catch (Exception e) {
			System.out.println("创建模型失败:");
		}
	}

	public static void main(String[] args) {
		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

		RepositoryService repositoryService = processEngine.getRepositoryService();
	}
}

有关spring的配置在这里就不做过多说明了.



整合时出现的问题:

整合时出现的问题:
(1)访问网址 http://localhost:8080/spring-activiti/modeler.html?modelId=5501,只有框架,没有内容。可能是没有加载stencilset.json文件,
解决方案:查看浏览器控制台,请求路径是否有错误等


(2)创建模型时为空,ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine() 为null。这可能是xml文件没有扫描到以下类:


解决方案:检查spring-mvc.xml的配置文件或spring-activiti.xml是否有context:component-scan base-package扫描的包:




(3)如果项目报java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener 或 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

问题解析:

Maven项目中所有依赖(jdk/jar/classes)关系都被其管理。所以如果确定项目中确实存在该包或文件(org.springframework.web.util.Log4jConfigListener),那必定是项目没有添加maven依赖所致。


解决方案: 

右击项目,选择properties->Deployment Assembly->Add->Java Build Path Entries->Maven Dependencies


Project->Clear!
在集成SpringMVCActiviti的过程中,可以通过添加相应的依赖来实现。以一个已经集成了SpringMVCSpring iBatis的Maven工程为基础,可以继续集成Activiti和Web Editor。为了添加Activiti的依赖,需要在项目的pom.xml文件中添加相应的依赖项。具体的依赖项可以在Activiti的官方文档中找到。一旦添加了这些依赖项,就可以在项目中使用Activiti的相关功能了。 在集成Activiti的过程中,可能还需要按照项目的需求对Activiti进行一些配置。可以通过修改项目的配置文件来实现这一点。例如,可以配置数据库连接、设置流程引擎的属性等。具体的配置步骤可以参考Activiti的官方文档。 至于集成Activiti Web Editor,可以通过添加相应的依赖来实现。这个依赖位于Activiti的模块中,具体路径为activiti-5.22.0\modules\activiti-modeler\src\main\java\org\activiti\rest\editor。只需将这个依赖项添加到项目的pom.xml文件中,然后重新构建项目,就可以在Web应用程序中使用Activiti Web Editor了。 总之,集成SpringMVCActiviti可以通过添加相应的依赖和配置来实现。只需按照相关文档的指导进行操作,即可成功集成这两个框架。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [[Activity] springMVC集成Activiti WebEditor 在线流程设计器](https://blog.csdn.net/weixin_42754896/article/details/124380457)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旷野历程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值