1. 背景
在项目适配过程中,所使用的框架是Activiti5.17.0,在配置SUNDB数据库时,出现如下报错信息:

2. 解决思路
通过图片中的报错信息,我们可以很清楚的获取到2点内容。
- 识别不到SUNDB的数据库类型。
- 抛出的错误的文件在那里(……activiti.engine.……)
3. 解决办法:
1、下载源码包
2、对源码包进行相应的改写操作,通过上面报错的图片信息,我们只需要“activiti-engine”进行修改即可。
`变动文件1:
activiti-engine\src\main\java\org\activiti\engine\impl\cfg\ProcessEngineConfigurationImpl.java 添加如下内容:
public static final String DATABASE_TYPE_H2 = "h2";
public static final String DATABASE_TYPE_MYSQL = "mysql";
public static final String DATABASE_TYPE_ORACLE = "oracle";
public static final String DATABASE_TYPE_POSTGRES = "postgres";
public static final String DATABASE_TYPE_MSSQL = "mssql";
public static final String DATABASE_TYPE_DB2 = "db2";
public static final String DATABASE_TYPE_SUNDB = "sundb";` //新增部分
protected static Properties getDefaultDatabaseTypeMappings() {
Properties databaseTypeMappings = new Properties();
databaseTypeMappings.setProperty("SUNDB", DATABASE_TYPE_SUNDB); //新增
databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2);
添加完后,相关变动部分如下图:

变动文件2:
activiti-engine\src\main\java\org\activiti\engine\impl\db\DbSqlSessionFactory.java
在//oracle下面新增SUNDB相关部分
databaseSpecificLimitBeforeStatements.put("sundb", "");
databaseSpecificLimitAfterStatements.put("sundb", "LIMIT #{maxResults} OFFSET #{firstResult}");
databaseSpecificLimitBetweenStatements.put("sundb", "");
databaseOuterJoinLimitBetweenStatements.put("sundb", "");
databaseSpecificOrderByStatements.put("sundb", defaultOrderBy);
最终的效果如下图所示:
image
变动文件3:
activiti-engine\src\main\java\org\activiti\engine\impl\AbstractQuery.java
在protected void addOrder 相关部分,添加SUNDB相关(一定要和Oracle在一起),新增内容如下:
if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_SUNDB.equals(databaseType)){ //新增
…………………………
} else if (nullHandlingOnOrder.equals(NullHandlingOnOrder.NULLS_LAST)) {
if (ProcessEngineConfigurationImpl.DATABASE_TYPE_H2.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_POSTGRES.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_ORACLE.equals(databaseType)
|| ProcessEngineConfigurationImpl.DATABASE_TYPE_SUNDB.equals(databaseType)) { //新增
最终内容如下图所示:

在修改完上面的所有文件后,打包验证即可。
最后修改时间:2023-07-17 14:52:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




