activiti6.0.0 二次开发兼容达梦数据库(亲测有效)

一、 前因

最近公司做数据库国产化,数据从MySql数据库中迁移到达梦(DM8),在迁移过程中,当迁移工作流(Activiti6.0.0)时,提换达梦(DM8)数据库驱动后启动过程报错:

Caused by: org.activiti.engine.ActivitiException: couldn’t deduct database type from database product name ‘DM DBMS’

二、 错误分析

Activiti6.0.0源码并不兼容达梦数据库:

在这里插入图片描述
在activiti-engine-6.0.0.jar在org.activiti.db.create sql下也没得dm sql语句:

在这里插入图片描述

所以,当启动项目时报:Caused by: org.activiti.engine.ActivitiException: couldn’t deduct database type from database product name ‘DM DBMS’。

三、 解决方案

activiti8版本以上据说可以兼容达梦数据库,小编没升级,不知道是否兼容,有待验证,哈哈。言归正传,要让Activiti6.0.0兼容达梦数据库,需要修改对应的源码,我们需要再项目中找到activiti-engine-6.0.0.jar这个jar包,找到下面需要修改的这几个类:ProcessEngineConfigurationImpl、DbSqlSession、DbSqlSessionFactory和AbstractQuery这个四个类。在本地项目里写一个路径一样、类名也一样的类来代替源码中的类运行。

在这里插入图片描述

3.1 修改ProcessEngineConfigurationImpl类

1、在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl类,增加dm成员变量:

  • public static final String DATABASE_TYPE_DM = “dm”;

在这里插入图片描述
2、在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,修改getDefaultDatabaseTypeMappings():

  • databaseTypeMappings.setProperty(“dm”, DATABASE_TYPE_DM);
  • databaseTypeMappings.setProperty(“DM DBMS”,DATABAS E_TYPE_ORACLE);

在这里插入图片描述

3.2 修改DbSqlSessionFactory类

在org.activiti.engine.impl.db.DbSqlSessionFactory,修改initBulkInsertEnabledMap(String databaseType)添加:
“dm”.equals(databaseType)。

在这里插入图片描述

3.3 修改DbSqlSession类

在org.activiti.engine.impl.db.DbSqlSession类里,借用oracle的sql文件来执行sql语句,具体做法:

 // 当databaseType 为dm时,借用oracle的sql文件来代替执行
 if (ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
       databaseType = ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE;
 }

在这里插入图片描述

3.4 修改AbstractQuery类

在 org.activiti.engine.impl.AbstractQuery,修改addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)添加:

ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)

在这里插入图片描述

3.5 解决无法访问javax.persistence.EntityManagerFactory报错

当完成上面的操作,启动项目报错:
java: 无法访问javax.persistence.EntityManagerFactory
找不到javax.persistence.EntityManagerFactory的类文件

在这里插入图片描述
需要在pom.xml添加依赖:

<!--        2.2版本的persistence-->
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.6.7.Final</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-collections</groupId>
                    <artifactId>commons-collections</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

3.6 解决cannot be null when 'hibernate.dialect’报错

你以为完成上边的步骤就完事了?no,no,no,当你启动羡慕时报错:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set

在这里插入图片描述
需要再配置文件里面添加:

spring:
  jpa:
    properties:
      hibernate:
           dialect: org.hibernate.dialect.Oracle10gDialect
      show-sql: ture

然后再启动项目就不会报错了。。。亲测有效。有个改版的activiti-engine-6.0.0.jar直接替换用就行,嘻嘻嘻。

在这里插入图片描述

参考资料:https://blog.csdn.net/qq_42014561/article/details/128239874

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
是的,Activiti 5.2.2 可以兼容达梦数据库Activiti 是一个轻量级的开源工作流引擎,它支持与不同的关系型数据库进行集成。达梦数据库是一种关系型数据库管理系统,它拥有自己的特定规范和语法。 为了使 Activiti 兼容达梦数据库,您需要完成以下步骤: 1. 首先,您需要下载并安装适用于 Activiti 的达梦 JDBC 驱动程序。您可以在达梦官方网站上找到该驱动程序的下载链接。 2. 安装完驱动程序后,您需要在 Activiti 的配置文件中进行一些必要的更改。在 Activiti 的配置文件中,您需要指定使用达梦数据库和相应的连接信息,如数据库 URL、用户名和密码等。您还需要将达梦数据库的驱动类路径配置在 Activiti 的类路径中。 3. 此外,您还需要确保 Activiti 的版本与所使用的达梦 JDBC 驱动程序兼容。为了解决潜在的兼容性问题,您可以查阅 Activiti达梦数据库的官方文档,以获得更多关于版本兼容性的信息。 完成上述步骤后,您应该能够将 Activiti 集成到达梦数据库中,并使用其提供的工作流功能。请注意,在使用达梦数据库之前,您需要熟悉该数据库的语法和特性,以确保您的操作能够顺利进行。 总而言之,Activiti 5.2.2 可以兼容达梦数据库,但在集成和使用过程中可能需要注意一些细节,如安装适用于 Activiti 的达梦 JDBC 驱动程序、配置数据库连接信息等。通过正确完成这些步骤,您应该能够顺利地将 Activiti达梦数据库集成,并使用其提供的工作流引擎功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值