前言
目前,一些国内公司被要求使用国内生产的IoE项目替代解决方案。数据从异构数据库迁移到OSCAR申通数据库,在更换应用程序中的数据库驱动程序后,使用Activiti工作流启动过程中发生错误
嵌套的异常是org.activiti。发动机ActivitiException:无法从数据库产品名称“OSCAR”生成数据库类型
原因是activiti6.0.0中内置的数据库类型不支持申通数据库
解决方案
将活动引擎6.0.0的相关源代码复制到项目src中,保持包路径不变,并进行相应的修改以支持大申通数据库
具体如下:
1.在org.activiti中添加成员变量。发动机impl。cfg。ProcessEngine配置Impl
公共静态最终字符串DATABASE_TYPE_OSCAR=“OSCAR”;
公共静态最终字符串DATABASE_TYPE_ H2=“H2”;
公共静态最终字符串DATABASE_TYPE_HSQL=“HSQL”;
公共静态最终字符串DATABASE_TYPE_MYSQL=“MYSQL”;
公共静态最终字符串DATABASE_TYPE_ORACLE=“ORACLE”;
2.在org.activiti。发动机impl。cfg。ProcessEngine Configuration Impl,modify
GetDefault数据库类型映射()
受保护的静态属性getDefultBaseTypeMapping(){
属性数据库类型映射=新属性();
数据库类型映射。setProperty(“OSCAR”,DATABASE-TYPE-OSCAR);
数据库类型映射。setProperty(“H2”,DATABASE-TYPE.H2);
3.在org.activiti。发动机impl。数据库。DbSqlSessionFactory,修改initBulkInsertEnabling映射(字符串
数据库类型
If(“oracle”.equals(databaseType)||“oscar”。等于(databaseType)){
BulkInsertableMap。put(EventLogEntryEntity.class,Boolean。FALSE);
4.创造一个新的奥斯卡奖。org.activiti路径中的属性。数据库。特性
LimitBefore=
LimitAfter=LIMITED#{maxResults}OFF SET#{firstResult}
5.在org.activiti中。发动机impl。AbstractQuery,修改addOrder(String列,String sortOrder,
NullHandlingOnOrder
如果(nullHandlingOnOrder.equals(nullHandlingOnOrder.NULLLS-FIRST)){
如果(ProcessEngine Configuration Impl.DATABASE-TYPE.H2。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_HSQL。等于(数据库类型)
||ProcessEngine Configuration Impl DATABASE_TYPE_POSTGRES。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_ORACLE。等于(数据库类型)
||ProcessEngine Configuration Impl DATABASE_TYPE_OSCAR。等于(数据库类型){
OrderBy=OrderBy+defaultOrderByClause+“NULLS FIRST”;
}否则,如果(ProcessEngine Configuration Impl.DATABASE-TYPE-MYSQL.equals(databaseType)){
OrderBy=OrderBy+“isull()+column+”)desc,“+defaultOrderByClause;
}否则,如果(ProcessEngine Configuration Impl.DATABASE-TYPE.DB2。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_MSSQL。等于(数据库类型){
OrderBy=OrderBy+“当”+column+“为null时大小写,然后0 else 1结束,”+defaultOrderByClause;
}Else{
OrderBy=OrderBy+defaultOrderByClause;
}
}Else if(nullHandlingOnOrder.equals(nullHandlingOnOrder.NULLLS-LAST)){
如果(ProcessEngine Configuration Impl.DATABASE-TYPE.H2。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_HSQL。等于(数据库类型)
||ProcessEngine Configuration Impl DATABASE_TYPE_POSTGRES。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_ORACLE。等于(数据库类型)
||ProcessEngine Configuration Impl DATABASE_TYPE_OSCAR。等于(数据库类型){
OrderBy=OrderBy+column+“”+sortOrder+“NULLS LAST”;
}否则,如果(ProcessEngine Configuration Impl.DATABASE-TYPE-MYSQL.equals(databaseType)){
OrderBy=OrderBy+isull()+column+asc,+defaultOrderByClause;
}否则,如果(ProcessEngine Configuration Impl.DATABASE-TYPE.DB2。等于(数据库类型)
||ProcessEngine配置实现DATABASE_TYPE_MSSQL。等于(数据库类型){
OrderBy=OrderBy+“如果”+column+“为null,则1 else 0结束,”+defaultOrderByClause;
}Else{
OrderBy=OrderBy+defaultOrderByClause;
}
}
完成以上修改,重新编译活动引擎6.0.0.jar即可启动。