修改类org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl中添加
public static final String DATABASE_TYPE_DM = "dm";
public static final String DATABASE_TYPE_KINGBASE = "kingbase";
修改此类下的getDefaultDatabaseTypeMappings()方法 添加
databaseTypeMappings.setProperty("DM DBMS", "dm");
databaseTypeMappings.setProperty("KingbaseES", "kingbase");
修改类org.activiti.engine.impl.db.DbSqlSessionFactory中static块中:添加
databaseSpecificLimitBeforeStatements.put("kingbase", "");
databaseSpecificLimitAfterStatements.put("kingbase", "LIMIT #{maxResults} OFFSET #{firstResult}");
databaseSpecificLimitBetweenStatements.put("kingbase", "");
databaseOuterJoinLimitBetweenStatements.put("kingbase", "");
databaseSpecificOrderByStatements.put("kingbase", defaultOrderBy);
addDatabaseSpecificStatement("kingbase", "insertByteArray", "insertByteArray_postgres");
addDatabaseSpecificStatement("kingbase", "bulkInsertByteArray", "bulkInsertByteArray_postgres");
addDatabaseSpecificStatement("kingbase", "updateByteArray", "updateByteArray_postgres");
addDatabaseSpecificStatement("kingbase", "selectByteArray", "selectByteArray_postgres");
addDatabaseSpecificStatement("kingbase", "selectResourceByDeploymentIdAndResourceName", "selectResourceByDeploymentIdAndResourceName_postgres");
addDatabaseSpecificStatement("kingbase", "selectResourcesByDeploymentId", "selectResourcesByDeploymentId_postgres");
addDatabaseSpecificStatement("kingbase", "insertIdentityInfo", "insertIdentityInfo_postgres");
addDatabaseSpecificStatement("kingbase", "bulkInsertIdentityInfo", "bulkInsertIdentityInfo_postgres");
addDatabaseSpecificStatement("kingbase", "updateIdentityInfo", "updateIdentityInfo_postgres");
addDatabaseSpecificStatement("kingbase", "selectIdentityInfoById", "selectIdentityInfoById_postgres");
addDatabaseSpecificStatement("kingbase", "selectIdentityInfoByUserIdAndKey", "selectIdentityInfoByUserIdAndKey_postgres");
addDatabaseSpecificStatement("kingbase", "selectIdentityInfoByUserId", "selectIdentityInfoByUserId_postgres");
addDatabaseSpecificStatement("kingbase", "selectIdentityInfoDetails", "selectIdentityInfoDetails_postgres");
addDatabaseSpecificStatement("kingbase", "insertComment", "insertComment_postgres");
addDatabaseSpecificStatement("kingbase", "bulkInsertComment", "bulkInsertComment_postgres");
addDatabaseSpecificStatement("kingbase", "selectComment", "selectComment_postgres");
addDatabaseSpecificStatement("kingbase", "selectCommentsByTaskId", "selectCommentsByTaskId_postgres");
addDatabaseSpecificStatement("kingbase", "selectCommentsByProcessInstanceId", "selectCommentsByProcessInstanceId_postgres");
addDatabaseSpecificStatement("kingbase", "selectCommentsByProcessInstanceIdAndType", "selectCommentsByProcessInstanceIdAndType_postgres");
addDatabaseSpecificStatement("kingbase", "selectCommentsByType", "selectCommentsByType_postgres");
addDatabaseSpecificStatement("kingbase", "selectCommentsByTaskIdAndType", "selectCommentsByTaskIdAndType_postgres");
addDatabaseSpecificStatement("kingbase", "selectEventsByTaskId", "selectEventsByTaskId_postgres");
addDatabaseSpecificStatement("kingbase", "insertEventLogEntry", "insertEventLogEntry_postgres");
addDatabaseSpecificStatement("kingbase", "bulkInsertEventLogEntry", "bulkInsertEventLogEntry_postgres");
addDatabaseSpecificStatement("kingbase", "selectAllEventLogEntries", "selectAllEventLogEntries_postgres");
addDatabaseSpecificStatement("kingbase", "selectEventLogEntries", "selectEventLogEntries_postgres");
addDatabaseSpecificStatement("kingbase", "selectEventLogEntriesByProcessInstanceId", "selectEventLogEntriesByProcessInstanceId_postgres");
databaseSpecificLimitBeforeStatements.put("dm", "");
databaseSpecificLimitAfterStatements.put("dm", "LIMIT #{maxResults} OFFSET #{firstResult}");
databaseSpecificLimitBetweenStatements.put("dm", "");
databaseOuterJoinLimitBetweenStatements.put("dm", "");
databaseSpecificOrderByStatements.put("dm", defaultOrderBy);
addDatabaseSpecificStatement("dm", "selectExclusiveJobsToExecute", "selectExclusiveJobsToExecute_integerBoolean");
addDatabaseSpecificStatement("dm", "selectUnlockedTimersByDuedate", "selectUnlockedTimersByDuedate_oracle");
addDatabaseSpecificStatement("dm", "insertEventLogEntry", "insertEventLogEntry_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertVariableInstance", "bulkInsertVariableInstance_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertUser", "bulkInsertUser_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertTask", "bulkInsertTask_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertResource", "bulkInsertResource_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertProperty", "bulkInsertProperty_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertProcessDefinition", "bulkInsertProcessDefinition_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertModel", "bulkInsertModel_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertMembership", "bulkInsertMembership_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertTimer", "bulkInsertTimer_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertMessage", "bulkInsertMessage_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertIdentityInfo", "bulkInsertIdentityInfo_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertIdentityLink", "bulkInsertIdentityLink_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertMembership", "bulkInsertMembership_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertTimer", "bulkInsertTimer_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertMessage", "bulkInsertMessage_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricVariableInstance", "bulkInsertHistoricVariableInstance_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricTaskInstance", "bulkInsertHistoricTaskInstance_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricProcessInstance", "bulkInsertHistoricProcessInstance_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricIdentityLink", "bulkInsertHistoricIdentityLink_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricDetailVariableInstanceUpdate", "bulkInsertHistoricDetailVariableInstanceUpdate_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricFormProperty", "bulkInsertHistoricFormProperty_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertHistoricActivityInstance", "bulkInsertHistoricActivityInstance_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertGroup", "bulkInsertGroup_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertExecution", "bulkInsertExecution_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertMessageEventSubscription", "bulkInsertMessageEventSubscription_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertSignalEventSubscription", "bulkInsertSignalEventSubscription_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertCompensateEventSubscription", "bulkInsertCompensateEventSubscription_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertEventLogEntry", "bulkInsertEventLogEntry_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertDeployment", "bulkInsertDeployment_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertComment", "bulkInsertComment_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertByteArray", "bulkInsertByteArray_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertEventLogEntry", "bulkInsertEventLogEntry_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertDeployment", "bulkInsertDeployment_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertComment", "bulkInsertComment_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertByteArray", "bulkInsertByteArray_oracle");
addDatabaseSpecificStatement("dm", "bulkInsertAttachment", "bulkInsertAttachment_oracle");
修改org.activiti.engine.impl.db.DbSqlSessionFactory类中的initBulkInsertEnabledMap(String databaseType)方法
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)方法
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_KINGBASE.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_KINGBASE.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;
}
}
最后在在create文件件下追加创建数据库表相关的文件。