Activiti5.22.0扩展支持达梦数据库
前言
目前国内部分公司做的项目要求去ioe使用国产的替代方案。数据从异构数据库中迁移到达梦,应用中使用Activiti工作流在替换了数据库驱动后启动过程报错如下:
nested exception is org.activiti.engine.ActivitiException: couldn't deduct database type from database product name 'DM DBMS'
原因是:activiti5.22.0内置的数据库类型不支持达梦数据库
解决方案
将activiti-engine-5.22.0相关源码拷贝到工程src下,保持包路径不变,并做相应修改以支持达梦数据库。
具体如下:
1. 在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,增加成员变量
public static final String DATABASE_TYPE_DM = "dm";
public static final String DATABASE_TYPE_H2 = "h2";
public static final String DATABASE_TYPE_HSQL = "hsql";
public static final String DATABASE_TYPE_MYSQL = "mysql";
public static final String DATABASE_TYPE_ORACLE = "oracle";
2. 在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,修改getDefaultDatabaseTypeMappings()
protected static Properties getDefaultDatabaseTypeMappings() {
Properties databaseTypeMappings = new Properties();
databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_DM);
databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2);
3. 在org.activiti.engine.impl.db.DbSqlSessionFactory,修改initBulkInsertEnabledMap(String databaseType)
if ("oracle".equals(databaseType) || "dm".equals(databaseType)) {
bulkInsertableMap.put(EventLogEntryEntity.class, Boolean.FALSE);
}
4. 在org.activiti.engine.impl.db.DbSqlSessionFactory,修改static{}
// dm
databaseSpecificLimitBeforeStatements.put("dm", "");
databaseSpecificLimitAfterStatements.put("dm", "LIMIT #{maxResults} OFFSET #{firstResult}");
databaseSpecificLimitBetweenStatements.put("dm", "");
databaseOuterJoinLimitBetweenStatements.put("dm", "");
databaseSpecificOrderByStatements.put("dm", defaultOrderBy); // h2
databaseSpecificLimitBeforeStatements.put("h2", "");
databaseSpecificLimitAfterStatements.put("h2", "LIMIT #{maxResults} OFFSET #{firstResult}");
databaseSpecificLimitBetweenStatements.put("h2", "");
databaseOuterJoinLimitBetweenStatements.put("h2", "");
databaseSpecificOrderByStatements.put("h2", defaultOrderBy);
5. 在 org.activiti.engine.impl.AbstractQuery,修改addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)
if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_FIRST)) {
if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
orderBy = orderBy + defaultOrderByClause + " NULLS FIRST";
} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
orderBy = orderBy + "isnull(" + column + ") desc," + defaultOrderByClause;
} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
orderBy = orderBy + "case when " + column + " is null then 0 else 1 end," + defaultOrderByClause;
} else {
orderBy = orderBy + defaultOrderByClause;
}
} else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {
if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_HSQL.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
orderBy = orderBy + column + " " + sortOrder + " NULLS LAST";
} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_MYSQL.equals(databaseType)) {
orderBy = orderBy + "isnull(" + column + ") asc," + defaultOrderByClause;
} else if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DB2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_MSSQL.equals(databaseType)) {
orderBy = orderBy + "case when " + column + " is null then 1 else 0 end," + defaultOrderByClause;
} else {
orderBy = orderBy + defaultOrderByClause;
}
}
完成以上修改,重新编译activiti-engine-5.22.0.jar启动即可。
maven引入的jar包:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.22.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
<exclusion>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
</exclusion>
</exclusions>
</dependency> <dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-jpa</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.3.0</version>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
</dependency>
修改后,支持达梦数据库的activiti-engine-5.22.0.jar以及涉及到的相关资料,下载地址:https://pan.baidu.com/s/1xzBbSTAbkfWRpG0-T-LeOg 提取码:9472
链接:https://pan.baidu.com/s/1-IITDKJCOhqY1oUbaiSczQ
提取码:1024
Activiti5.22.0扩展支持达梦数据库的更多相关文章
- 基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作
由于一个客户朋友的需求,需要我的Winform开发框架支持国产达梦数据库的操作,这个数据库很早就听过,但是真正一般项目用的很少,一般在一些特殊的项目可能需要用到.由于我的Winform开发框架,是基于 ...
- mybatis plus 支持达梦DM 数据库啦
最近由于公司项目需要使用DM数据库,现在就官方源码修改了,完美支持达梦数据库的代码生成器.官方说的v3.0.RELEASE版本支持达梦数据库,不知道说的支持包括支持代码生成器么? 怀着兴奋的心情,兴高 ...
- 国产达梦数据库的结合Enterprise Library的应用开发
在上篇<基于Enterprise Library的Winform开发框架实现支持国产达梦数据库的扩展操作>介绍了如何在Enterprise Library的数据访问层上支持这种神秘的国产数 ...
- 达梦数据库产品支持技术学习分享_Week1
本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考. 一.达梦数据库的体系架构 二.达梦数据库的安装 三.达梦数据库的数据类型 四.达梦数据库的DDL.DML. ...
- 达梦数据库产品支持技术学习分享_Week2
本周主要从以下几个方面进行本人对达梦数据库学习的分享,学习进度和学习情况因人而异,仅供参考. 一.文本命令行工具使用的方法(Disql和dmfldr) 二.数据库备份 三.定时作业功能 四.系统表和动 ...
- [转帖]达梦数据库(DM6)和ORACLE 10g的异同点
达梦数据库(DM6)和ORACLE 10g的异同点 https://bbs.aliyun.com/detail/351337.html 花花浪子 级别: 小白 发帖 0 云币 -41 加关注 ...
- 国产化之 .NET Core 操作达梦数据库DM8的两种方式
背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64.龙芯.飞腾.鲲鹏等.考虑到这些基础产品对.NET的支持,最终选择了.NET Core ...
- DB 查询分析器 6.03 如何灵活、快捷地操作国产达梦数据库
DB 查询分析器 6.03 如何灵活.快捷地操作国产达梦数据库 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 摘要 本文详细地介绍了"万能数据库查询分析器&qu ...
- .NETCore 访问国产达梦数据库
前言 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发.销售与服务,同时可为用户提供大数据平台架构咨询.数据技术方案规划.产品部署 ...
- [开源] .Net 使用 ORM 访问 达梦数据库
前言 武汉达梦数据库有限公司成立于2000年,为中国电子信息产业集团(CEC)旗下基础软件企业,专业从事数据库管理系统的研发.销售与服务,同时可为用户提供大数据平台架构咨询.数据技术方案规划.产品部署 ...
随机推荐
- 如何利用fooview实现钉钉自动打卡
我们平常遇到需要钉钉打卡的那种公司,经常要抢时间不敢晚起,有的公司还要扣钱,这样就很难受.本文教你一种行之有效的办法实现钉钉自动打卡. 有些人可能会用什么虚拟定位之类的工具,但是这种是很容易被钉钉发现 ...
- Windos下 java后台软件服务化(举例)-WinSW
WinSW-软件服务化 1.1 举例:ApiWintool可执行jar ApiWintool.exe ApiWintool.jar ApiWintool.xml install.cmd uninsta ...
- python之利用logging模块封装python日志类
利用python自带的logging模块封装一个日志类,便于单元测试时调用该模块打印日志 说明: 日志,即记录程序在运行过程中的操作记录和出现的问题 日志调试信息分类等级,由低到高分别为:DEBUG ...
- appium:报错Message: Message: Parameters were incorrect. We wanted {"required":["value"]}
python版本3.7.4,selenium版本4.0.0,Appium-Python-Client版本2.0.0,报错见标题 别人给出的建议:https://blog.csdn.net/liangs ...
- leecode70. 爬楼梯
70. 爬楼梯 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到 ...
- .NET CORE-通过内置IOC容器IServiceCollection进行服务注册
第一种方式: 在Startup中的ConfigureServices方法中注册服务: services.AddTransient<ITestServiceA, TestServiceA>( ...
- Apache和Nginx设置伪静态(URL Rewrite)的方法
在Apache中有两种方法配置,一是通过httpd.conf文件,二是通过.htaccess文件. 使用 httpd.conf 来配置 rewrite 策略. 要使用 httpd.conf 文件来设置 ...
- 一套 .NET开发的邮箱Mail开源库
今天给大家推荐一个基于.Net开发的邮箱开源库. 邮箱在我们日常工作中,可以说是非常常见了.个人邮箱一般都是免费的,但企业邮箱会收费,虽然一般情况下,市面邮箱已经够用了.但有些企业对内容安全要求比较严 ...
- Win10官方1909版本无法打开windows安全中心中病毒和威胁防护的实时保护解决方案。
进入手痒难耐,将电脑操作系统重新安装了win10 专业工作站版 1909版,但是装完软件激活后,发现windows安全中心的"病毒和威胁防护"中的所有项目都是关闭的,试着重新安装也 ...
- Quartz 2D CGGradient与CGShading实现渐变的绘制
Quartz 提供了两种不透明的数据类型来创建渐变CGShading 和 CGGradient,你可以使用其中任何一个来创建轴向或径向渐变. 轴向渐变:沿着一个轴方向线性渐变 径向渐变:一个点为原型, ...