声明

  1. 此教程适合Activiti 5.17+版本。
  2. 本博客所涉及的内容均可在kft-activiti-demo中找到。
  3. 在线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的原因有两个:

  1. 不知道怎么把注解的方式转换为XML方式
  2. editor-app目录的结构位置
  3. 和自己应用的整合参数配置

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

  1. 直接从Activiti Explorer中复制文件modeler.html文件到src/main/webapp目录即可,该文件会引入定义基本的布局(div)、引入css以及js文件。

  2. 修改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服务相关推荐

  1. Spring 3.2.5 集成 Activiti Modeler 5.17.0

    Activiti 5.17.0在Modeler上做了很大的变化,集成比以前貌似简单些,参考集成activiti 5.16.4中modeler,完成集成. 1.下载Activiti 5.17的源代码 2 ...

  2. Activiti 快速入门教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可视化

    Activiti 快速入门教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可视化 7大服务与核心表 23张表概览 7大核心服务(重要) 加依赖 内部 ...

  3. springboot2.0集成activiti modeler

    项目采用Springboot 2.0.3.RELEASE版本以及activiti 5.22.0版本 在acitiviti官网下载完整包https://github.com/Activiti/Activ ...

  4. Activiti集成Activiti Modeler

    Activiti6.0.0及以上版本与activiti-modeler的maven引用有冲突,解决方法参考 Activiti6.0.0及以上版本集成Activiti Modeler 1.下载源文件 a ...

  5. 整合Activiti Modeler到业务系统(或BPM平台)

    http://www.kafeitu.me/activiti/2013/03/10/integrate-activiti-modeler.html 1. 为什么要整合 Activiti 5.10版本把 ...

  6. Activiti Modeler发布以及教程

    1.新版Activiti Modeler简介 在Activiti 5.6版本之前把Activiti Modeler作为压缩包的一部分,但是后来不再这么做而是需要开发人员自己根据Signavio打包Ac ...

  7. 浅谈Activiti Modeler 的扩展

    为什么要扩展 最近项目打算用activiti工作流中activiti modeler来做模块的可视化订阅,但是原生的activiti任务节点,有一些不符合业务需要,比如 配置项多,属性暴露.比如ser ...

  8. 粗览Activiti Modeler操作和源代码

    Activiti Model Editor组件 我的 了解ActivitiExplorer及其Vaadin实现方式博文里提到ActivitiExplorer使用的是Vaadin架构,但是Activit ...

  9. php to es7,只需五步 集成新版 Elasticsearch7.9 中文搜索 到你的 Laravel7 项目

    只需五步骤: 启动 集成 ik 中文分词插件的 Elasticsearch7.9 Docker 镜像 Laravel7 配置 Scout 配置 Model 模型 导入数据 搜索 PHP进阶30K资料, ...

最新文章

  1. 空气球+操作系统,海尔智能家居雄心何在?
  2. 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法
  3. SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】远程桌面 3389 Windows 2016
  4. 01-VMware-workstation14安装
  5. js在firefox中的问题
  6. 2018091-2博客作业
  7. [问题记录.VisualStudio]VS2013无法新增和打开项目
  8. python复合条件判断_Python的条件判断和循环
  9. Collections.sort的两个方法
  10. zend studio如何更改字符集
  11. GitHub 日收 7000 星,Windows 计算器项目开源即爆红!
  12. 利用XML实现通用WEB报表打印(参考)
  13. 阿里免费开放一切AI算力的背后是什么?
  14. linux添加环境变量并生效,linux(ubtuntu)添加环境变量,立即生效
  15. .NET开发资源站点和部分优秀.NET开源项目
  16. qt初步---Qt实现软件从Windows到Linux跨平台
  17. 1067 Sort with Swap(0, i) (25 分)思路
  18. 卷积神经网络原理与实现过程
  19. MySQL统计每月数量并计算同比增长率
  20. 图像处理之像素的修改

热门文章

  1. 服务器进入bios用u盘启动不了系统,用u盘装系统,进入bios后没有usb启动项怎么办...
  2. RDD和DataFrame和Dataset比较
  3. (48)FPGA面试技能提升篇(数字采样、射频存储、频谱搬移)
  4. python爬取小说写入txt_Python BeautifulSoup 爬取笔趣阁所有的小说
  5. STM32 连续操作flash
  6. 将GPIO外设挂到Cortex_M3 AHB总线上详细流程扩展外设步骤总结
  7. java做类似于qq空间动态加载_实现类似微博、QQ空间等的动态加载
  8. 单一课和综合课的划分依据_缠论108课第105课:股票的操作中远离小聪明,保持机械性的操作...
  9. Mysql简介和Mysql优化查询的方法
  10. 内核同步 (来自chinaunix总结)