码上焚香

Yahocen

Activiti7 国产达梦数据库兼容改造

66
2024-05-10

本文参考 《Activiti支持达梦数据库》 加以详细补充说明,阅读本文前请先阅读参考文章。不同的是我才用修改Activiti源码二次打包的方式适配。  

一、通过 githup 下载相应版本源码

我这里下载的是 7.1.0.M6 版本,下面就以这个版本为例子演示改造过程。
下载完源码后使用IDE工具打开,源码为Maven项目耐心等待项目初始化完成。  

二、修改相关代码

Ps:下面代码有很多省略部分,可以根据 搜索 DATABASE_TYPE_ORACLE 来快速定位到修改代码的位置,因为达梦数据库的接口大多是仿照Oracle的,所以基本上达梦的配置和Oracle保持一致  

在org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl,增加成员变量。  

...
public static final String DATABASE_TYPE_ORACLE = "oracle";
//Yahocen 适配达梦数据库,追加成员变量
public static final String DATABASE_TYPE_DM = "dm";
public static final String DATABASE_TYPE_POSTGRES = "postgres";
...

修改org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl 类的 getDefaultDatabaseTypeMappings()方法

public static Properties getDefaultDatabaseTypeMappings() {
    Properties databaseTypeMappings = new Properties();

    ...
    databaseTypeMappings.setProperty("Oracle", DATABASE_TYPE_ORACLE);
    //Yahocen 适配达梦数据库,追加修改
    databaseTypeMappings.setProperty("DM DBMS", DATABASE_TYPE_DM);
    databaseTypeMappings.setProperty("PostgreSQL", DATABASE_TYPE_POSTGRES);
    ...
    return databaseTypeMappings;
}

修改org.activiti.engine.impl.db.DbSqlSessionFactory 类的 initBulkInsertEnabledMap(String databaseType)方法

protected void initBulkInsertEnabledMap(String databaseType) {
    ...
    // Only Oracle is making a fuss in one specific case right now
    //Yahocen 适配达梦数据库,追加修改
    if ("oracle".equals(databaseType) || "dm".equals(databaseType)) {
        bulkInsertableMap.put(EventLogEntryEntityImpl.class, Boolean.FALSE);
    }
}

修改org.activiti.engine.impl.AbstractQuery 类的 addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder)方法

protected void addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder) {
    ...
    if (nullHandlingOnOrder != null) {
        if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_FIRST)) {
            if (...
                || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
                //Yahocen 适配达梦数据库,追加修改
                || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
                orderBy = orderBy + defaultOrderByClause + " NULLS FIRST";
            } ...
        } else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {
            if (...
                || ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
                //Yahocen 适配达梦数据库,追加修改
                || ProcessEngineConfigurationImpl.DATABASE_TYPE_DM.equals(databaseType)) {
                orderBy = orderBy + column + " " + sortOrder + " NULLS LAST";
            } ...
        }
    } ...
}

三、修改资源文件

资源文件位置

将 create、drop 所有关于Oracle的数据库文件都复制到原目录文件名中的oracle改为dm即可

我是新项目不需要从旧版本的Activiti升级,所以upgrade目录中的SQL没做改变。

如果你是从低版本的Activiti升级上来那么也和上面目录一样将upgrade目录中所有关于Oracle的SQL文件都复制一份

在properties目录下新建 dm.properties 文件,填写下方内容:

limitAfter=LIMIT #{maxResults} OFFSET #{firstResult}

至此所有的修改已经完成

使用Maven将其打包后引入项目即可