前言

在使用了官方提供的demo[activiti-app]后,可以考虑将官方的提供的activiti6的设计器集成到springboot项目中使用。网上大多数教程都是activiti6+activit5.22的设计器集成方案,而非activiti6+activiti6设计器。其原因还算因为activiti6设计器新增的新特性使用了新的数据表和新的持久层代码,而这部分新特性不属于官方维护,因此activiti-app中的表单引用、决策表等在纯activiti-engin是没有的,即使在activti7中也找不到这部分代码

区别

先说一下activiti5.22的设计器与activit6设计器的区别:

设计器版本/区别 activiti5.22 activiti6
模型保存数据表 act_re_model act_de_model
持久层实现方式 自己封装的持久层代码 使用jpa1.x保存
前端 可独立运行不需要登录认证 不可独立运行,需要登录权限认证

即使在activiti7中,默认保存模型也是在act_re_model表中,而activiti6的activiti-engin中提供的RepositoryService的保存模型方法也是在act_re_model表中,给人的感觉不是一拨人在维护这个代码,而实际上activiti6中的表单引用和决策表都需要将act_re_model进行扩展,于是就把act_re_model拓展成了act_de_model。所以一般都是使用的5.22的设计器,它集成起来更友好,方便,前端设计器拖进去就能直接使用,只需要实现几个操作模型的接口,并且不需要强行引入jpa作为持久层

集成需要做的事

  1. 将activiti-app中的jpa版本升级到2.x以上,因为jpa1.x中的findOne方法在2.x版本中被移除了,需要将所有jpa在2.x被移除的方法都修改过来(比如findOne),强行依赖上去会出现NoSuchMethodException
  2. 修改activiti6设计器中对登录权限这部分限制代码
  3. 汉化实际上是修改stencilset_bpmn.json文件的内容,将文件中对应titledescription 翻译过来,这个文件不可直接用5.22的设计器替代,因为新增了很多新特性,会导致显示不正常

集成步骤

  1. 升级JPA
    首先将activiti6的源码从gitlab上面拉到本地,进入modules/activiti-ui

    编辑activiti-ui-root的pom文件,指定jpa的版本:
      <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-jpa</artifactId><version>2.2.6.RELEASE</version></dependency><dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-commons</artifactId><version>2.2.6.RELEASE</version></dependency>

这个时候重新打包就会出现编译问题,因为升级过后findOne方法被移除了,需要一个一个的修改过来,比如:

修改完毕后将activiti-ui-root执行打包命令:mvn install -DskipTests
这个时候就能在自己的springboot项目中放肆的引用它了:

        <dependency><groupId>org.activiti</groupId><artifactId>activiti-app-rest</artifactId><version>6.0.1-SNAPSHOT</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></exclusion><exclusion><groupId>org.jadira.usertype</groupId><artifactId>usertype.core</artifactId></exclusion></exclusions></dependency>

注意:两个排除项都是必须的,不然会出现依赖冲突
2. 改造前端编辑器代码
进入/modules/actitivi-ui/activiti-app下:

全局删除angularJS中的权限处理代码,比如:

移除的字符串为:

resolve: {verify: authRouteResolver
}

替换完毕后,将整个webapp下的文件移动到自己项目resource/static下面,最后启动自己的项目,并访问:
http://localhost:8080/app/editor/index.html#/editor/d97598f8-86b1-484e-9c9a-479360f267d9,如果没有被跳转到登录页面,那就是成功了
3. 编写重定向控制层代码
由于编辑器默认就是修改操作,需要先创建已有数据才能进入,因此不能粗暴直接访问编辑器页面,需要新增如下控制层代码做重定向:

@RestController
@RequestMapping("/model")
public class ActivitiController {@Autowiredprivate ModelsResource modelsResource;@RequestMapping("/create")public void createModelNew(HttpServletRequest request, HttpServletResponse response){try{String modelName = "modelName"+ LocalDateTime.now();String modelKey = "modelKey"+ LocalDateTime.now();String description = "description";ModelRepresentation modelRepresentation = new ModelRepresentation();modelRepresentation.setName(modelName);modelRepresentation.setKey(modelKey);modelRepresentation.setDescription(description);modelRepresentation.setModelType(AbstractModel.MODEL_TYPE_BPMN);ModelRepresentation model = modelsResource.createModel(modelRepresentation);response.sendRedirect(request.getContextPath() + "/app/editor/index.html#/editor/" + model.getId());}catch (Exception e){}}
}

再将项目地址修改为/app,因为设计器所有请求都是app开头,然而activiti-app-rest的代码是以rest开头的,不加app会导致所有请求404,而他原来代码中通过springMVC的配置类,指定了不同请求的处理规则(org.activiti.app.servlet.WebConfigurer):

    /*** Initializes Spring and Spring MVC.*/private void initSpring(ServletContext servletContext, AnnotationConfigWebApplicationContext rootContext) {log.debug("Configuring Spring Web application context");AnnotationConfigWebApplicationContext appDispatcherServletConfiguration = new AnnotationConfigWebApplicationContext();appDispatcherServletConfiguration.setParent(rootContext);appDispatcherServletConfiguration.register(AppDispatcherServletConfiguration.class);log.debug("Registering Spring MVC Servlet");ServletRegistration.Dynamic appDispatcherServlet = servletContext.addServlet("appDispatcher", new DispatcherServlet(appDispatcherServletConfiguration));appDispatcherServlet.addMapping("/app/*");appDispatcherServlet.setLoadOnStartup(1);appDispatcherServlet.setAsyncSupported(true);log.debug("Registering Activiti public REST API");AnnotationConfigWebApplicationContext apiDispatcherServletConfiguration = new AnnotationConfigWebApplicationContext();apiDispatcherServletConfiguration.setParent(rootContext);apiDispatcherServletConfiguration.register(ApiDispatcherServletConfiguration.class);ServletRegistration.Dynamic apiDispatcherServlet = servletContext.addServlet("apiDispatcher",new DispatcherServlet(apiDispatcherServletConfiguration));apiDispatcherServlet.addMapping("/api/*");apiDispatcherServlet.setLoadOnStartup(1);apiDispatcherServlet.setAsyncSupported(true);}
  1. 汉化处理
    直接将stencilset_bpmn.json添加到resource目录即可

完整项目地址已上传到github:https://github.com/Siwash/activiti6-start

【activiti6】设计器的前后端集成与汉化相关推荐

  1. 解答网友提问 | 使用VS2022快速生成React/Angular/Vue.js + Web API前后端集成项目

    前言 上次发表了<一键生成Vue.js + Web API前后端集成项目>后,有多位网友来问,有不有其他的前后端集成模板: 实际上,VS2022没有提供前后端集成项目模板. 但是,使用VS ...

  2. 一键生成Vue.js + Web API前后端集成项目

    前言 默认情况下,Visual Studio提供了"基于Vue.js Web 应用程序"项目模板,可以生成Vue.js前端项目. 你需要另外创建Web API项目,调试时需要同时启 ...

  3. BAT大牛亲授从零起步基于ElasticSearch的搜房网(前后端集成)实战(介绍与整体目录)

    围绕"搜索"核心业务,构建 "房屋寻租"完整前后端 业务 分角色用户入口: 普通用户/管理员用户 完善的管理功能: 后台管理/权限管理 核心功能模块: 房源浏览 ...

  4. Spring Boot 前后端配合及接口化测试学习记录[3]

    前后端不分离 1.对静态资源的映射处理 2.模板引擎: 模板引擎(这里特指用于Web开发的模板引擎)是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,用于网站的模板引擎就会生成 ...

  5. Sublime Text 3118 集成插件汉化定制版——赵亮(碧海情天)

    2019独角兽企业重金招聘Python工程师标准>>> 不知何时,在我这里,OSCHINA的编辑器无法复制粘贴内容了,只能全部手打,所以写博客非常不方便. CSDN的博客,时间太久不 ...

  6. springboot集成activiti汉化

    activiti的modeler汉化. 汉化步骤: 将en.json(路径:editor-app/i18n/en.json)文件汉化,改名zh-CN.json,放在en.json同目录. 同时将汉化后 ...

  7. springboot jwt token前后端分离_为什么要 前后端分离 ?

    作 者:互扯程序 来 源:互扯程序 广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶.导致用户接受文章不及时.您可以打开订阅号,选择置顶(星标)公众号,重磅干货,第一时间送达! 本文知 ...

  8. 【Web】JavaWeb项目为什么我们要放弃jsp?为什么要前后端解耦?为什么要前后端分离?2.0版,为分布式架构打基础。 - CSDN博客

    前戏 前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦, 并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务 ...

  9. rsa前后端加密流程_不懂前后端分离?这篇就够了

    一 传统的开发模式 前后端分离前我们的开发协作模式一般是这样的: 前端写好静态的HTML页面交付给后端开发.静态页面可以本地开发,也无需考虑业务逻辑只需要实现View即可. 后端使用模板引擎去套模板, ...

  10. 前后端分离和不分离到底有什么区别

    前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多 ...

最新文章

  1. MySQL中exists与in的使用
  2. Flink从入门到精通100篇(二十一)-Flink 状态(State)管理在推荐场景中的应用
  3. Entity Framework Core 6.0 预览4 性能改进
  4. mysql特性举例_MySQL事务的四大特性和隔离级别
  5. 【UML】交互建模中交互图允许的消息类型
  6. Linux 不小心删除了 root,root目录不小心删除了怎么办……
  7. mysql索引别名_Mysql索引知识详谈
  8. 在modelarts上部署mask-rcnn模型
  9. js学习 字符串常用方法
  10. 软件测试--数据库基础知识
  11. 深度学习 + OpenCV,Python实现实时视频目标检测
  12. 构建一个可靠的分布式计数器--memcached之incr/decr操作实战分析
  13. python笔记——常用的内置函数
  14. Flash Builder4安装SVN插件
  15. PhotoShop简介
  16. 诱人的 TypeScript 视频教程(69 个视频)
  17. python中怎么定义二维数组_如何在Python中定义二维数组
  18. 山海经电子书古文/翻译白话文版发布,免费电子书。
  19. Mysql 索引存放位置
  20. linux mint运行速度,Linux Mint 19 Tara Cinnamon启动应用速度将会更快

热门文章

  1. 终端模拟器免ROOT安装Linux,【全机型通用】不用电脑,用终端模拟器刷入第三方Recovery...
  2. python下载bt文件_使用libtorrent-python下载Torrent
  3. word批量替换交叉引用格式
  4. 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )
  5. 企业如何从0到1搭建BI系统
  6. w ndoWs8pE模式下载,电脑店超级U盘启动盘制作工具V6.8(全能版)
  7. 【论文笔记】基于聚类特征深度LSTM的语音情感识别
  8. 乐max2 android 7.0,辣评烩:​乐Max 2即将升级EUI 6.0 基于安卓7.0!
  9. Keil芯片安装包下载
  10. 天涯明月刀服务器维护,天涯明月刀手游维护时间表一览,维护什么时候结束?[多图]...