集成新版(5.17+)Activiti Modeler与Rest服务
声明:
- 此教程适合Activiti 5.17+版本。
- 本博客所涉及的内容均可在kft-activiti-demo中找到。
- 在线demo可以访问 http://demo.kafeitu.me:8080/kft-activiti-demo 菜单路径:管理模块 -> 流程管理 -> 模型工作区,可以『创建』或者『编辑』模型
1. 简介
上一篇介绍整合Activiti Modeler《整合Activiti Modeler到业务系统(或BPM平台)》已经有2年多时间了,自从Activiti 5.17版本发布以后该教程已经不适用了,很多网友也反馈不知道怎么把Activiti Modeler整合到自己的项目中去,为此抽时间为适配5.17+版本的集成方法整理成这篇博文,希望对有需求的网友有帮助。
最新版本的kft-activiti-demo已经使用了5.17+版本的Activiti,并且集成了最新的Activiti Modeler组件,可以下载最新源码:https://github.com/henryyan/kft-activiti-demo。
1.1 新版Activiti Modeler特性
先来欣赏一下新版的界面,相比上一版漂亮了许多,调性高了~~~
界面布局:上(工具区)、左(组件类目)、右(工作区)、右下(属性区)
Activiti Modeler内部的实现上还是以oryx为图形组件为内核,用angular.js作为界面基本元素的基础组件以及调度oryx的API。
2. 官方Activiti Explorer的集成方式
先从Github下载官方Activiti源码,地址:https://github.com/Activiti/Activiti。
2.1 Activiti Exploer的内部结构-Java
源码目录(如果是zip下载请先解压缩)中找到modules/activiti-webapp-explorer2/src/main子目录,结构如下:
├── assembly
├── java
│ └── org
│ └── activiti
├── resources
│ └── org
│ └── activiti
└── webapp├── META-INF├── VAADIN│ ├── themes│ └── widgetsets├── WEB-INF├── diagram-viewer│ ├── images│ └── js└── editor-app├── configuration├── css├── editor├── fonts├── i18n├── images├── libs├── partials├── popups└── stencilsets
我们需要关注的目录是webapp/editor-app,以及java/org/activiti,目录结构:
新版本的Activiti Explorer放弃了XML方式的配置方式,采用Bean Configuration的方式代替,上图中org/activiti/explorer/conf包中就是各种配置,在org/activiti/explorer/servlet/WebConfigurer类用Servlet 3.0方式配置Servlet映射关系,映射的路径为/service/*。
2.2 Activiti Exploer的内部结构-Web
新版本Activiti Modeler的Web资源不再像旧版那么散乱,新版本只需要关注:
- src/main/webapp/editor-app:目录中包含设计器里面所有的资源:angular.js、oryx.js以及配套的插件及css
- src/main/webapp/modeler.html:设计器的主页面,用来引入各种web资源
- src/main/resources/stencilset.json: bpmn标准里面各种组件的json定义,editor以import使用。
3. 整合到自己的项目中
了解过网友的需求不知道如何整合新版Activiti Modeler的原因有两个:
- 不知道怎么把注解的方式转换为XML方式
- editor-app目录的结构位置
- 和自己应用的整合参数配置
3.1 Activiti Rest接口与Spring MVC配置
3.1.1 Maven依赖
Activiti Modeler对后台服务的调用通过Spring MVC方式实现,所有的Rest资源统一使用注解RestController标注,所以在整合到自己项目的时候需要依赖Spring MVC,Modeler模块使用的后台服务都存放在activiti-modeler模块中,在自己的项目中添加依赖:
<dependency><groupId>org.activiti</groupId><artifactId>activiti-modeler</artifactId><version>5.19.0</version>
</dependency>
<dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId><version>5.19.0</version>
</dependency>
模块作用:
- activiti-modeler模块提供模型先关的操作:创建、保存、转换json与xml格式等
- activiti-diagram-rest模块用来处理流程图有关的功能:流程图布局(layout)、节点高亮等
3.1.2 准备基础服务类
复制文件(https://github.com/henryyan/kft-activiti-demo/tree/master/src/main/java/org/activiti/explorer) 里面的java文件到自己项目中。
3.1.3 Activiti Spring配置
创建文件src/main/resources/beans/beans-activiti.xml定义Activiti引擎的beans:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 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-4.1.xsd"><context:component-scanbase-package="org.activiti.conf,org.activiti.rest.editor"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/></context:component-scan><!-- 单例json对象 --><bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/><!-- 引擎内部提供的UUID生成器,依赖fastxml的java-uuid-generator模块 --><bean id="uuidGenerator" class="org.activiti.engine.impl.persistence.StrongUuidGenerator" /><!-- Activiti begin --><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="jobExecutorActivate" value="true"/></bean><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"><property name="processEngineConfiguration" ref="processEngineConfiguration"/></bean><!-- 7大接口 --><bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService"/><bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService"/><bean id="formService" factory-bean="processEngine" factory-method="getFormService"/><bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService"/><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>
在spring初始化的时候引入即可,例如在web.xml中使用通配符方式:
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/beans/beans-*.xml</param-value>
</context-param>
3.1.4 Spring MVC配置
创建文件WEB-INF/spring-mvc-modeler.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="org.activiti.rest.editor,org.activiti.rest.diagram"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><mvc:annotation-driven />
</beans>
上面XML中告知spring mvc扫描路径为**
3.1.5 web.xml中配置Servlet服务
在web.xml中配置下面的Servlet:
<servlet><servlet-name>ModelRestServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-modeler.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>ModelRestServlet</servlet-name><url-pattern>/service/*</url-pattern>
</servlet-mapping>
3.1.6 模型设计器的Web资源
直接从Activiti Explorer中复制文件modeler.html文件到src/main/webapp目录即可,该文件会引入定义基本的布局(div)、引入css以及js文件。
修改editor-app/app-cfg.js文件的contextRoot属性为自己的应用名称,例如/kft-activiti-demo/service
3.1.7 模型控制器
在《整合Activiti Modeler到业务系统(或BPM平台)》中已经介绍过ModelController类的作用了,这里需要在基础上稍微做一点调整:
- create方法中在创建完Model后跳转页面由service/editor?id=改为modeler.html?modelId=
- 当从模型列表编辑某一个模型时也需要把路径修改为modeler.html?modelId=
4. 整合Activiti Rest
有了Activiti Modeler的基础只需要依葫芦画瓢即可。
4.1 Maven依赖
<dependency><groupId>org.activiti</groupId><artifactId>activiti-rest</artifactId><version>5.19.0</version>
</dependency>
4.3 Activiti组件包扫描
文件src/main/resources/beans/beans-activiti.xmlcontext:component-scan标签的base-package属性中添加org.activiti.rest.service包,包里面包含了所有Rest API的接口Rest Controller。
4.4 添加Rest安全认证组件
package org.activiti.conf;import org.activiti.rest.security.BasicAuthenticationProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;@Configuration
@EnableWebSecurity
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {@Beanpublic AuthenticationProvider authenticationProvider() {return new BasicAuthenticationProvider();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authenticationProvider(authenticationProvider()).sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();}
}
4.5 spring mvc配置文件
创建文件WEB-INF/spring-mvc-rest.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd"><!-- 自动扫描且只扫描@Controller --><context:component-scan base-package="org.activiti.rest"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><mvc:annotation-driven />
</beans>
4.6 配置Servlet映射
<servlet><servlet-name>RestServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-rest.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>RestServlet</servlet-name><url-pattern>/rest/*</url-pattern>
</servlet-mapping>
4.7 访问Rest接口
现在启动应用可以访问 http://localhost:8080/your-app/rest/management/properties 以Rest方式查看引擎的属性列表,如果在网页中访问会提示输入用户名密码;也可以访问在线demo测试
转载于:https://www.cnblogs.com/telwanggs/p/7570695.html
集成新版(5.17+)Activiti Modeler与Rest服务相关推荐
- Spring 3.2.5 集成 Activiti Modeler 5.17.0
Activiti 5.17.0在Modeler上做了很大的变化,集成比以前貌似简单些,参考集成activiti 5.16.4中modeler,完成集成. 1.下载Activiti 5.17的源代码 2 ...
- Activiti 快速入门教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可视化
Activiti 快速入门教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可视化 7大服务与核心表 23张表概览 7大核心服务(重要) 加依赖 内部 ...
- springboot2.0集成activiti modeler
项目采用Springboot 2.0.3.RELEASE版本以及activiti 5.22.0版本 在acitiviti官网下载完整包https://github.com/Activiti/Activ ...
- Activiti集成Activiti Modeler
Activiti6.0.0及以上版本与activiti-modeler的maven引用有冲突,解决方法参考 Activiti6.0.0及以上版本集成Activiti Modeler 1.下载源文件 a ...
- 整合Activiti Modeler到业务系统(或BPM平台)
http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...
- Activiti Modeler发布以及教程
1.新版Activiti Modeler简介 在Activiti 5.6版本之前把Activiti Modeler作为压缩包的一部分,但是后来不再这么做而是需要开发人员自己根据Signavio打包Ac ...
- 浅谈Activiti Modeler 的扩展
为什么要扩展 最近项目打算用activiti工作流中activiti modeler来做模块的可视化订阅,但是原生的activiti任务节点,有一些不符合业务需要,比如 配置项多,属性暴露.比如ser ...
- 粗览Activiti Modeler操作和源代码
Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...
- php to es7,只需五步 集成新版 Elasticsearch7.9 中文搜索 到你的 Laravel7 项目
只需五步骤: 启动 集成 ik 中文分词插件的 Elasticsearch7.9 Docker 镜像 Laravel7 配置 Scout 配置 Model 模型 导入数据 搜索 PHP进阶30K资料, ...
最新文章
- 空气球+操作系统,海尔智能家居雄心何在?
- 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法
- SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】远程桌面 3389 Windows 2016
- 01-VMware-workstation14安装
- js在firefox中的问题
- 2018091-2博客作业
- [问题记录.VisualStudio]VS2013无法新增和打开项目
- python复合条件判断_Python的条件判断和循环
- Collections.sort的两个方法
- zend studio如何更改字符集
- GitHub 日收 7000 星,Windows 计算器项目开源即爆红!
- 利用XML实现通用WEB报表打印(参考)
- 阿里免费开放一切AI算力的背后是什么?
- linux添加环境变量并生效,linux(ubtuntu)添加环境变量,立即生效
- .NET开发资源站点和部分优秀.NET开源项目
- qt初步---Qt实现软件从Windows到Linux跨平台
- 1067 Sort with Swap(0, i) (25 分)思路
- 卷积神经网络原理与实现过程
- MySQL统计每月数量并计算同比增长率
- 图像处理之像素的修改
热门文章
- 服务器进入bios用u盘启动不了系统,用u盘装系统,进入bios后没有usb启动项怎么办...
- RDD和DataFrame和Dataset比较
- (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
- python爬取小说写入txt_Python BeautifulSoup 爬取笔趣阁所有的小说
- STM32 连续操作flash
- 将GPIO外设挂到Cortex_M3 AHB总线上详细流程扩展外设步骤总结
- java做类似于qq空间动态加载_实现类似微博、QQ空间等的动态加载
- 单一课和综合课的划分依据_缠论108课第105课:股票的操作中远离小聪明,保持机械性的操作...
- Mysql简介和Mysql优化查询的方法
- 内核同步 (来自chinaunix总结)