1.下载activiti-7.1.0.M6的源码包

下载图中红框位置的jar包

2.打开方式

  • 把下载的jar包解压之后,进入activiti-engine-7.1.0.M6-sources\META-INF\maven\org.activiti\activiti-engine目录下将pom文件拷贝到activiti-engine-7.1.0.M6-sources下,与org文件夹同目录下,然后把META-INF文件夹和源码的jar包一并删除。然后用idea打开工程文件(activiti-engine-7.1.0.M6-sources)。

2.1首次打开需修改工程文件的modules

  • 按步骤依次点击,File->Project Structure,按照如下图中步骤依次执行。
    activiti2.png
点击红框中的×,清除

activiti3.png

点击红框中的+号,选择你这个工程文件根目录所在的位置

activiti4.png

这是最后配好的界面

3.修改部分源码(添加国产数据库类型)

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

protected static Properties databaseTypeMappings = getDefaultDatabaseTypeMappings();
 
  public static final String DATABASE_TYPE_H2 = "h2";
  public static final String DATABASE_TYPE_HSQL = "hsql";
  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_KINGBASE = "kingbase";//金仓

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

public static Properties getDefaultDatabaseTypeMappings() {
    Properties databaseTypeMappings = new Properties();
    databaseTypeMappings.setProperty("kingbase", DATABASE_TYPE_KINGBASE);//金仓
    databaseTypeMappings.setProperty("H2", DATABASE_TYPE_H2);
    databaseTypeMappings.setProperty("HSQL Database Engine", DATABASE_TYPE_HSQL);
    databaseTypeMappings.setProperty("MySQL", DATABASE_TYPE_MYSQL);
    databaseTypeMappings.setProperty("Oracle", DATABASE_TYPE_ORACLE);
    databaseTypeMappings.setProperty("PostgreSQL", DATABASE_TYPE_POSTGRES);
    databaseTypeMappings.setProperty("Microsoft SQL Server", DATABASE_TYPE_MSSQL);
    databaseTypeMappings.setProperty(DATABASE_TYPE_DB2, DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2",DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/NT", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/NT64", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2 UDP", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUX", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUX390", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUXX8664", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUXZ64", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUXPPC64",DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/LINUXPPC64LE",DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/400 SQL", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/6000", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2 UDB iSeries", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/AIX64", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/HPUX", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/HP64", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/SUN", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/SUN64", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/PTX", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2/2", DATABASE_TYPE_DB2);
    databaseTypeMappings.setProperty("DB2 UDB AS400", DATABASE_TYPE_DB2);
    return databaseTypeMappings;
  }

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

  protected void addOrder(String column, String sortOrder, NullHandlingOnOrder nullHandlingOnOrder) {
 
    if (orderBy == null) {
      orderBy = "";
    } else {
      orderBy = orderBy + ", ";
    }
 
    String defaultOrderByClause = column + " " + sortOrder;
 
    if (nullHandlingOnOrder != null) {
 
      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;
        }
 
      }
 
    } else {
      orderBy = orderBy + defaultOrderByClause;
    }
 
  }

4.在db.create文件夹下创建数据库表相关的文件

4.1在create文件夹下创建数据库表相关的文件activiti.kingbase.create.engine.sql

create table ACT_GE_PROPERTY
(
    NAME_  varchar(64),
    VALUE_ varchar(300),
    REV_   integer,
    primary key (NAME_)
);

insert into ACT_GE_PROPERTY
values ('schema.version', '7.1.0.M6', 1);

insert into ACT_GE_PROPERTY
values ('schema.history', 'create(7.1.0.M6)', 1);

insert into ACT_GE_PROPERTY
values ('next.dbid', '1', 1);

create table ACT_GE_BYTEARRAY
(
    ID_            varchar(64),
    REV_           integer,
    NAME_          varchar(255),
    DEPLOYMENT_ID_ varchar(64),
    BYTES_         bytea,
    GENERATED_     boolean,
    primary key (ID_)
);

create table ACT_RE_DEPLOYMENT
(
    ID_             varchar(64),
    NAME_           varchar(255),
    CATEGORY_       varchar(255),
    KEY_            varchar(255),
    TENANT_ID_      varchar(255) default '',
    DEPLOY_TIME_    timestamp,
    ENGINE_VERSION_ varchar(255),
    VERSION_ integer,
    PROJECT_RELEASE_VERSION_ varchar(255),
    primary key (ID_)
);

create table ACT_RE_MODEL
(
    ID_                           varchar(64) not null,
    REV_                          integer,
    NAME_                         varchar(255),
    KEY_                          varchar(255),
    CATEGORY_                     varchar(255),
    CREATE_TIME_                  timestamp,
    LAST_UPDATE_TIME_             timestamp,
    VERSION_                      integer,
    META_INFO_                    varchar(4000),
    DEPLOYMENT_ID_                varchar(64),
    EDITOR_SOURCE_VALUE_ID_       varchar(64),
    EDITOR_SOURCE_EXTRA_VALUE_ID_ varchar(64),
    TENANT_ID_                    varchar(255) default '',
    primary key (ID_)
);

create table ACT_RU_EXECUTION
(
    ID_                   varchar(64),
    REV_                  integer,
    PROC_INST_ID_         varchar(64),
    BUSINESS_KEY_         varchar(255),
    PARENT_ID_            varchar(64),
    PROC_DEF_ID_          varchar(64),
    SUPER_EXEC_           varchar(64),
    ROOT_PROC_INST_ID_    varchar(64),
    ACT_ID_               varchar(255),
    IS_ACTIVE_            boolean,
    IS_CONCURRENT_        boolean,
    IS_SCOPE_             boolean,
    IS_EVENT_SCOPE_       boolean,
    IS_MI_ROOT_           boolean,
    SUSPENSION_STATE_     integer,
    CACHED_ENT_STATE_     integer,
    TENANT_ID_            varchar(255) default '',
    NAME_                 varchar(255),
    START_TIME_           timestamp,
    START_USER_ID_        varchar(255),
    LOCK_TIME_            timestamp,
    IS_COUNT_ENABLED_     boolean,
    EVT_SUBSCR_COUNT_     integer,
    TASK_COUNT_           integer,
    JOB_COUNT_            integer,
    TIMER_JOB_COUNT_      integer,
    SUSP_JOB_COUNT_       integer,
    DEADLETTER_JOB_COUNT_ integer,
    VAR_COUNT_            integer,
    ID_LINK_COUNT_        integer,
    primary key (ID_)
);

create table ACT_RU_JOB
(
    ID_                  varchar(64)  NOT NULL,
    REV_                 integer,
    TYPE_                varchar(255) NOT NULL,
    LOCK_EXP_TIME_       timestamp,
    LOCK_OWNER_          varchar(255),
    EXCLUSIVE_           boolean,
    EXECUTION_ID_        varchar(64),
    PROCESS_INSTANCE_ID_ varchar(64),
    PROC_DEF_ID_         varchar(64),
    RETRIES_             integer,
    EXCEPTION_STACK_ID_  varchar(64),
    EXCEPTION_MSG_       varchar(4000),
    DUEDATE_             timestamp,
    REPEAT_              varchar(255),
    HANDLER_TYPE_        varchar(255),
    HANDLER_CFG_         varchar(4000),
    TENANT_ID_           varchar(255) default '',
    primary key (ID_)
);

create table ACT_RU_TIMER_JOB
(
    ID_                  varchar(64)  NOT NULL,
    REV_                 integer,
    TYPE_                varchar(255) NOT NULL,
    LOCK_EXP_TIME_       timestamp,
    LOCK_OWNER_          varchar(255),
    EXCLUSIVE_           boolean,
    EXECUTION_ID_        varchar(64),
    PROCESS_INSTANCE_ID_ varchar(64),
    PROC_DEF_ID_         varchar(64),
    RETRIES_             integer,
    EXCEPTION_STACK_ID_  varchar(64),
    EXCEPTION_MSG_       varchar(4000),
    DUEDATE_             timestamp,
    REPEAT_              varchar(255),
    HANDLER_TYPE_        varchar(255),
    HANDLER_CFG_         varchar(4000),
    TENANT_ID_           varchar(255) default '',
    primary key (ID_)
);

create table ACT_RU_SUSPENDED_JOB
(
    ID_                  varchar(64)  NOT NULL,
    REV_                 integer,
    TYPE_                varchar(255) NOT NULL,
    EXCLUSIVE_           boolean,
    EXECUTION_ID_        varchar(64),
    PROCESS_INSTANCE_ID_ varchar(64),
    PROC_DEF_ID_         varchar(64),
    RETRIES_             integer,
    EXCEPTION_STACK_ID_  varchar(64),
    EXCEPTION_MSG_       varchar(4000),
    DUEDATE_             timestamp,
    REPEAT_              varchar(255),
    HANDLER_TYPE_        varchar(255),
    HANDLER_CFG_         varchar(4000),
    TENANT_ID_           varchar(255) default '',
    primary key (ID_)
);

create table ACT_RU_DEADLETTER_JOB
(
    ID_                  varchar(64)  NOT NULL,
    REV_                 integer,
    TYPE_                varchar(255) NOT NULL,
    EXCLUSIVE_           boolean,
    EXECUTION_ID_        varchar(64),
    PROCESS_INSTANCE_ID_ varchar(64),
    PROC_DEF_ID_         varchar(64),
    EXCEPTION_STACK_ID_  varchar(64),
    EXCEPTION_MSG_       varchar(4000),
    DUEDATE_             timestamp,
    REPEAT_              varchar(255),
    HANDLER_TYPE_        varchar(255),
    HANDLER_CFG_         varchar(4000),
    TENANT_ID_           varchar(255) default '',
    primary key (ID_)
);

create table ACT_RE_PROCDEF
(
    ID_                     varchar(64)  NOT NULL,
    REV_                    integer,
    CATEGORY_               varchar(255),
    NAME_                   varchar(255),
    KEY_                    varchar(255) NOT NULL,
    VERSION_                integer      NOT NULL,
    DEPLOYMENT_ID_          varchar(64),
    RESOURCE_NAME_          varchar(4000),
    DGRM_RESOURCE_NAME_     varchar(4000),
    DESCRIPTION_            varchar(4000),
    HAS_START_FORM_KEY_     boolean,
    HAS_GRAPHICAL_NOTATION_ boolean,
    SUSPENSION_STATE_       integer,
    TENANT_ID_              varchar(255) default '',
    ENGINE_VERSION_         varchar(255),
    APP_VERSION_ integer,
    primary key (ID_)
);

create table ACT_RU_TASK
(
    ID_               varchar(64),
    REV_              integer,
    EXECUTION_ID_     varchar(64),
    PROC_INST_ID_     varchar(64),
    PROC_DEF_ID_      varchar(64),
    NAME_             varchar(255),
    PARENT_TASK_ID_   varchar(64),
    DESCRIPTION_      varchar(4000),
    TASK_DEF_KEY_     varchar(255),
    OWNER_            varchar(255),
    ASSIGNEE_         varchar(255),
    DELEGATION_       varchar(64),
    PRIORITY_         integer,
    CREATE_TIME_      timestamp,
    DUE_DATE_         timestamp,
    CATEGORY_         varchar(255),
    SUSPENSION_STATE_ integer,
    TENANT_ID_        varchar(255) default '',
    FORM_KEY_         varchar(255),
    CLAIM_TIME_       timestamp,
    primary key (ID_)
);

create table ACT_RU_IDENTITYLINK
(
    ID_           varchar(64),
    REV_          integer,
    GROUP_ID_     varchar(255),
    TYPE_         varchar(255),
    USER_ID_      varchar(255),
    TASK_ID_      varchar(64),
    PROC_INST_ID_ varchar(64),
    PROC_DEF_ID_  varchar(64),
    primary key (ID_)
);

create table ACT_RU_VARIABLE
(
    ID_           varchar(64)  not null,
    REV_          integer,
    TYPE_         varchar(255) not null,
    NAME_         varchar(255) not null,
    EXECUTION_ID_ varchar(64),
    PROC_INST_ID_ varchar(64),
    TASK_ID_      varchar(64),
    BYTEARRAY_ID_ varchar(64),
    DOUBLE_       double precision,
    LONG_         bigint,
    TEXT_         varchar(4000),
    TEXT2_        varchar(4000),
    primary key (ID_)
);

create table ACT_RU_EVENT_SUBSCR
(
    ID_            varchar(64)  not null,
    REV_           integer,
    EVENT_TYPE_    varchar(255) not null,
    EVENT_NAME_    varchar(255),
    EXECUTION_ID_  varchar(64),
    PROC_INST_ID_  varchar(64),
    ACTIVITY_ID_   varchar(64),
    CONFIGURATION_ varchar(255),
    CREATED_       timestamp    not null,
    PROC_DEF_ID_   varchar(64),
    TENANT_ID_     varchar(255) default '',
    primary key (ID_)
);

create table ACT_EVT_LOG
(
    LOG_NR_       SERIAL PRIMARY KEY,
    TYPE_         varchar(64),
    PROC_DEF_ID_  varchar(64),
    PROC_INST_ID_ varchar(64),
    EXECUTION_ID_ varchar(64),
    TASK_ID_      varchar(64),
    TIME_STAMP_   timestamp not null,
    USER_ID_      varchar(255),
    DATA_         bytea,
    LOCK_OWNER_   varchar(255),
    LOCK_TIME_    timestamp null,
    IS_PROCESSED_ smallint default 0
);

create table ACT_PROCDEF_INFO
(
    ID_           varchar(64) not null,
    PROC_DEF_ID_  varchar(64) not null,
    REV_          integer,
    INFO_JSON_ID_ varchar(64),
    primary key (ID_)
);

create table ACT_RU_INTEGRATION (
                                    ID_ varchar(64) not null,
                                    EXECUTION_ID_ varchar(64),
                                    PROCESS_INSTANCE_ID_ varchar(64),
                                    PROC_DEF_ID_ varchar(64),
                                    FLOW_NODE_ID_ varchar(64),
                                    CREATED_DATE_ timestamp,
                                    primary key (ID_)
);

create index ACT_IDX_EXEC_BUSKEY on ACT_RU_EXECUTION (BUSINESS_KEY_);
create index ACT_IDX_EXE_ROOT on ACT_RU_EXECUTION (ROOT_PROC_INST_ID_);
create index ACT_IDX_TASK_CREATE on ACT_RU_TASK (CREATE_TIME_);
create index ACT_IDX_IDENT_LNK_USER on ACT_RU_IDENTITYLINK (USER_ID_);
create index ACT_IDX_IDENT_LNK_GROUP on ACT_RU_IDENTITYLINK (GROUP_ID_);
create index ACT_IDX_EVENT_SUBSCR_CONFIG_ on ACT_RU_EVENT_SUBSCR (CONFIGURATION_);
create index ACT_IDX_VARIABLE_TASK_ID on ACT_RU_VARIABLE (TASK_ID_);

create index ACT_IDX_BYTEAR_DEPL on ACT_GE_BYTEARRAY (DEPLOYMENT_ID_);
alter table ACT_GE_BYTEARRAY
    add constraint ACT_FK_BYTEARR_DEPL
        foreign key (DEPLOYMENT_ID_)
            references ACT_RE_DEPLOYMENT (ID_);

alter table ACT_RE_PROCDEF
    add constraint ACT_UNIQ_PROCDEF
        unique (KEY_, VERSION_, TENANT_ID_);

create index ACT_IDX_EXE_PROCINST on ACT_RU_EXECUTION (PROC_INST_ID_);
alter table ACT_RU_EXECUTION
    add constraint ACT_FK_EXE_PROCINST
        foreign key (PROC_INST_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_EXE_PARENT on ACT_RU_EXECUTION (PARENT_ID_);
alter table ACT_RU_EXECUTION
    add constraint ACT_FK_EXE_PARENT
        foreign key (PARENT_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_EXE_SUPER on ACT_RU_EXECUTION (SUPER_EXEC_);
alter table ACT_RU_EXECUTION
    add constraint ACT_FK_EXE_SUPER
        foreign key (SUPER_EXEC_)
            references ACT_RU_EXECUTION (ID_);


create index ACT_IDX_EXE_PROCDEF on ACT_RU_EXECUTION (PROC_DEF_ID_);
alter table ACT_RU_EXECUTION
    add constraint ACT_FK_EXE_PROCDEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);


create index ACT_IDX_TSKASS_TASK on ACT_RU_IDENTITYLINK (TASK_ID_);
alter table ACT_RU_IDENTITYLINK
    add constraint ACT_FK_TSKASS_TASK
        foreign key (TASK_ID_)
            references ACT_RU_TASK (ID_);

create index ACT_IDX_ATHRZ_PROCEDEF on ACT_RU_IDENTITYLINK (PROC_DEF_ID_);
alter table ACT_RU_IDENTITYLINK
    add constraint ACT_FK_ATHRZ_PROCEDEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_IDL_PROCINST on ACT_RU_IDENTITYLINK (PROC_INST_ID_);
alter table ACT_RU_IDENTITYLINK
    add constraint ACT_FK_IDL_PROCINST
        foreign key (PROC_INST_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_TASK_EXEC on ACT_RU_TASK (EXECUTION_ID_);
alter table ACT_RU_TASK
    add constraint ACT_FK_TASK_EXE
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_TASK_PROCINST on ACT_RU_TASK (PROC_INST_ID_);
alter table ACT_RU_TASK
    add constraint ACT_FK_TASK_PROCINST
        foreign key (PROC_INST_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_TASK_PROCDEF on ACT_RU_TASK (PROC_DEF_ID_);
alter table ACT_RU_TASK
    add constraint ACT_FK_TASK_PROCDEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_VAR_EXE on ACT_RU_VARIABLE (EXECUTION_ID_);
alter table ACT_RU_VARIABLE
    add constraint ACT_FK_VAR_EXE
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_VAR_PROCINST on ACT_RU_VARIABLE (PROC_INST_ID_);
alter table ACT_RU_VARIABLE
    add constraint ACT_FK_VAR_PROCINST
        foreign key (PROC_INST_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_VAR_BYTEARRAY on ACT_RU_VARIABLE (BYTEARRAY_ID_);
alter table ACT_RU_VARIABLE
    add constraint ACT_FK_VAR_BYTEARRAY
        foreign key (BYTEARRAY_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_JOB_EXECUTION_ID on ACT_RU_JOB (EXECUTION_ID_);
alter table ACT_RU_JOB
    add constraint ACT_FK_JOB_EXECUTION
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_JOB_PROCESS_INSTANCE_ID on ACT_RU_JOB (PROCESS_INSTANCE_ID_);
alter table ACT_RU_JOB
    add constraint ACT_FK_JOB_PROCESS_INSTANCE
        foreign key (PROCESS_INSTANCE_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_JOB_PROC_DEF_ID on ACT_RU_JOB (PROC_DEF_ID_);
alter table ACT_RU_JOB
    add constraint ACT_FK_JOB_PROC_DEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_JOB_EXCEPTION on ACT_RU_JOB (EXCEPTION_STACK_ID_);
alter table ACT_RU_JOB
    add constraint ACT_FK_JOB_EXCEPTION
        foreign key (EXCEPTION_STACK_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_TIMER_JOB_EXECUTION_ID on ACT_RU_TIMER_JOB (EXECUTION_ID_);
alter table ACT_RU_TIMER_JOB
    add constraint ACT_FK_TIMER_JOB_EXECUTION
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_TIMER_JOB_PROCESS_INSTANCE_ID on ACT_RU_TIMER_JOB (PROCESS_INSTANCE_ID_);
alter table ACT_RU_TIMER_JOB
    add constraint ACT_FK_TIMER_JOB_PROCESS_INSTANCE
        foreign key (PROCESS_INSTANCE_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_TIMER_JOB_PROC_DEF_ID on ACT_RU_TIMER_JOB (PROC_DEF_ID_);
alter table ACT_RU_TIMER_JOB
    add constraint ACT_FK_TIMER_JOB_PROC_DEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_TIMER_JOB_EXCEPTION on ACT_RU_TIMER_JOB (EXCEPTION_STACK_ID_);
alter table ACT_RU_TIMER_JOB
    add constraint ACT_FK_TIMER_JOB_EXCEPTION
        foreign key (EXCEPTION_STACK_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_SUSPENDED_JOB_EXECUTION_ID on ACT_RU_SUSPENDED_JOB (EXECUTION_ID_);
alter table ACT_RU_SUSPENDED_JOB
    add constraint ACT_FK_SUSPENDED_JOB_EXECUTION
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_SUSPENDED_JOB_PROCESS_INSTANCE_ID on ACT_RU_SUSPENDED_JOB (PROCESS_INSTANCE_ID_);
alter table ACT_RU_SUSPENDED_JOB
    add constraint ACT_FK_SUSPENDED_JOB_PROCESS_INSTANCE
        foreign key (PROCESS_INSTANCE_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_SUSPENDED_JOB_PROC_DEF_ID on ACT_RU_SUSPENDED_JOB (PROC_DEF_ID_);
alter table ACT_RU_SUSPENDED_JOB
    add constraint ACT_FK_SUSPENDED_JOB_PROC_DEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_SUSPENDED_JOB_EXCEPTION on ACT_RU_SUSPENDED_JOB (EXCEPTION_STACK_ID_);
alter table ACT_RU_SUSPENDED_JOB
    add constraint ACT_FK_SUSPENDED_JOB_EXCEPTION
        foreign key (EXCEPTION_STACK_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_DEADLETTER_JOB_EXECUTION_ID on ACT_RU_DEADLETTER_JOB (EXECUTION_ID_);
alter table ACT_RU_DEADLETTER_JOB
    add constraint ACT_FK_DEADLETTER_JOB_EXECUTION
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_DEADLETTER_JOB_PROCESS_INSTANCE_ID on ACT_RU_DEADLETTER_JOB (PROCESS_INSTANCE_ID_);
alter table ACT_RU_DEADLETTER_JOB
    add constraint ACT_FK_DEADLETTER_JOB_PROCESS_INSTANCE
        foreign key (PROCESS_INSTANCE_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_DEADLETTER_JOB_PROC_DEF_ID on ACT_RU_DEADLETTER_JOB (PROC_DEF_ID_);
alter table ACT_RU_DEADLETTER_JOB
    add constraint ACT_FK_DEADLETTER_JOB_PROC_DEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

create index ACT_IDX_DEADLETTER_JOB_EXCEPTION on ACT_RU_DEADLETTER_JOB (EXCEPTION_STACK_ID_);
alter table ACT_RU_DEADLETTER_JOB
    add constraint ACT_FK_DEADLETTER_JOB_EXCEPTION
        foreign key (EXCEPTION_STACK_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_EVENT_SUBSCR on ACT_RU_EVENT_SUBSCR (EXECUTION_ID_);
alter table ACT_RU_EVENT_SUBSCR
    add constraint ACT_FK_EVENT_EXEC
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_);

create index ACT_IDX_MODEL_SOURCE on ACT_RE_MODEL (EDITOR_SOURCE_VALUE_ID_);
alter table ACT_RE_MODEL
    add constraint ACT_FK_MODEL_SOURCE
        foreign key (EDITOR_SOURCE_VALUE_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_MODEL_SOURCE_EXTRA on ACT_RE_MODEL (EDITOR_SOURCE_EXTRA_VALUE_ID_);
alter table ACT_RE_MODEL
    add constraint ACT_FK_MODEL_SOURCE_EXTRA
        foreign key (EDITOR_SOURCE_EXTRA_VALUE_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_MODEL_DEPLOYMENT on ACT_RE_MODEL (DEPLOYMENT_ID_);
alter table ACT_RE_MODEL
    add constraint ACT_FK_MODEL_DEPLOYMENT
        foreign key (DEPLOYMENT_ID_)
            references ACT_RE_DEPLOYMENT (ID_);

create index ACT_IDX_PROCDEF_INFO_JSON on ACT_PROCDEF_INFO (INFO_JSON_ID_);
alter table ACT_PROCDEF_INFO
    add constraint ACT_FK_INFO_JSON_BA
        foreign key (INFO_JSON_ID_)
            references ACT_GE_BYTEARRAY (ID_);

create index ACT_IDX_PROCDEF_INFO_PROC on ACT_PROCDEF_INFO (PROC_DEF_ID_);
alter table ACT_PROCDEF_INFO
    add constraint ACT_FK_INFO_PROCDEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

alter table ACT_PROCDEF_INFO
    add constraint ACT_UNIQ_INFO_PROCDEF
        unique (PROC_DEF_ID_);

alter table ACT_RU_INTEGRATION
    add constraint ACT_FK_INT_EXECUTION
        foreign key (EXECUTION_ID_)
            references ACT_RU_EXECUTION (ID_)
            on delete cascade;

alter table ACT_RU_INTEGRATION
    add constraint ACT_FK_INT_PROC_INST
        foreign key (PROCESS_INSTANCE_ID_)
            references ACT_RU_EXECUTION (ID_);

alter table ACT_RU_INTEGRATION
    add constraint ACT_FK_INT_PROC_DEF
        foreign key (PROC_DEF_ID_)
            references ACT_RE_PROCDEF (ID_);

4.2在create文件夹下创建数据库表相关的文件activiti.kingbase.create.history.sql

create table ACT_HI_PROCINST (
    ID_ varchar(64) not null,
    PROC_INST_ID_ varchar(64) not null,
    BUSINESS_KEY_ varchar(255),
    PROC_DEF_ID_ varchar(64) not null,
    START_TIME_ timestamp not null,
    END_TIME_ timestamp,
    DURATION_ bigint,
    START_USER_ID_ varchar(255),
    START_ACT_ID_ varchar(255),
    END_ACT_ID_ varchar(255),
    SUPER_PROCESS_INSTANCE_ID_ varchar(64),
    DELETE_REASON_ varchar(4000),
    TENANT_ID_ varchar(255) default '',
    NAME_ varchar(255),
    primary key (ID_),
    unique (PROC_INST_ID_)
);
 
create table ACT_HI_ACTINST (
    ID_ varchar(64) not null,
    PROC_DEF_ID_ varchar(64) not null,
    PROC_INST_ID_ varchar(64) not null,
    EXECUTION_ID_ varchar(64) not null,
    ACT_ID_ varchar(255) not null,
    TASK_ID_ varchar(64),
    CALL_PROC_INST_ID_ varchar(64),
    ACT_NAME_ varchar(255),
    ACT_TYPE_ varchar(255) not null,
    ASSIGNEE_ varchar(255),
    START_TIME_ timestamp not null,
    END_TIME_ timestamp,
    DURATION_ bigint,
    DELETE_REASON_ varchar(4000),
    TENANT_ID_ varchar(255) default '',
    primary key (ID_)
);
 
create table ACT_HI_TASKINST (
    ID_ varchar(64) not null,
    PROC_DEF_ID_ varchar(64),
    TASK_DEF_KEY_ varchar(255),
    PROC_INST_ID_ varchar(64),
    EXECUTION_ID_ varchar(64),
    NAME_ varchar(255),
    PARENT_TASK_ID_ varchar(64),
    DESCRIPTION_ varchar(4000),
    OWNER_ varchar(255),
    ASSIGNEE_ varchar(255),
    START_TIME_ timestamp not null,
    CLAIM_TIME_ timestamp,
    END_TIME_ timestamp,
    DURATION_ bigint,
    DELETE_REASON_ varchar(4000),
    PRIORITY_ integer,
    DUE_DATE_ timestamp,
    FORM_KEY_ varchar(255),
    CATEGORY_ varchar(255),
    TENANT_ID_ varchar(255) default '',
    primary key (ID_)
);
 
create table ACT_HI_VARINST (
    ID_ varchar(64) not null,
    PROC_INST_ID_ varchar(64),
    EXECUTION_ID_ varchar(64),
    TASK_ID_ varchar(64),
    NAME_ varchar(255) not null,
    VAR_TYPE_ varchar(100),
    REV_ integer,
    BYTEARRAY_ID_ varchar(64),
    DOUBLE_ double precision,
    LONG_ bigint,
    TEXT_ varchar(4000),
    TEXT2_ varchar(4000),
    CREATE_TIME_ timestamp,
    LAST_UPDATED_TIME_ timestamp,
    primary key (ID_)
);
 
create table ACT_HI_DETAIL (
    ID_ varchar(64) not null,
    TYPE_ varchar(255) not null,
    PROC_INST_ID_ varchar(64),
    EXECUTION_ID_ varchar(64),
    TASK_ID_ varchar(64),
    ACT_INST_ID_ varchar(64),
    NAME_ varchar(255) not null,
    VAR_TYPE_ varchar(64),
    REV_ integer,
    TIME_ timestamp not null,
    BYTEARRAY_ID_ varchar(64),
    DOUBLE_ double precision,
    LONG_ bigint,
    TEXT_ varchar(4000),
    TEXT2_ varchar(4000),
    primary key (ID_)
);
 
create table ACT_HI_COMMENT (
    ID_ varchar(64) not null,
    TYPE_ varchar(255),
    TIME_ timestamp not null,
    USER_ID_ varchar(255),
    TASK_ID_ varchar(64),
    PROC_INST_ID_ varchar(64),
    ACTION_ varchar(255),
    MESSAGE_ varchar(4000),
    FULL_MSG_ bytea,
    primary key (ID_)
);
 
create table ACT_HI_ATTACHMENT (
    ID_ varchar(64) not null,
    REV_ integer,
    USER_ID_ varchar(255),
    NAME_ varchar(255),
    DESCRIPTION_ varchar(4000),
    TYPE_ varchar(255),
    TASK_ID_ varchar(64),
    PROC_INST_ID_ varchar(64),
    URL_ varchar(4000),
    CONTENT_ID_ varchar(64),
    TIME_ timestamp,
    primary key (ID_)
);
 
create table ACT_HI_IDENTITYLINK (
    ID_ varchar(64),
    GROUP_ID_ varchar(255),
    TYPE_ varchar(255),
    USER_ID_ varchar(255),
    TASK_ID_ varchar(64),
    PROC_INST_ID_ varchar(64),
    primary key (ID_)
);
 
 
create index ACT_IDX_HI_PRO_INST_END on ACT_HI_PROCINST(END_TIME_);
create index ACT_IDX_HI_PRO_I_BUSKEY on ACT_HI_PROCINST(BUSINESS_KEY_);
create index ACT_IDX_HI_ACT_INST_START on ACT_HI_ACTINST(START_TIME_);
create index ACT_IDX_HI_ACT_INST_END on ACT_HI_ACTINST(END_TIME_);
create index ACT_IDX_HI_DETAIL_PROC_INST on ACT_HI_DETAIL(PROC_INST_ID_);
create index ACT_IDX_HI_DETAIL_ACT_INST on ACT_HI_DETAIL(ACT_INST_ID_);
create index ACT_IDX_HI_DETAIL_TIME on ACT_HI_DETAIL(TIME_);
create index ACT_IDX_HI_DETAIL_NAME on ACT_HI_DETAIL(NAME_);
create index ACT_IDX_HI_DETAIL_TASK_ID on ACT_HI_DETAIL(TASK_ID_);
create index ACT_IDX_HI_PROCVAR_PROC_INST on ACT_HI_VARINST(PROC_INST_ID_);
create index ACT_IDX_HI_PROCVAR_NAME_TYPE on ACT_HI_VARINST(NAME_, VAR_TYPE_);
create index ACT_IDX_HI_PROCVAR_TASK_ID on ACT_HI_VARINST(TASK_ID_);
create index ACT_IDX_HI_ACT_INST_PROCINST on ACT_HI_ACTINST(PROC_INST_ID_, ACT_ID_);
create index ACT_IDX_HI_ACT_INST_EXEC on ACT_HI_ACTINST(EXECUTION_ID_, ACT_ID_);
create index ACT_IDX_HI_IDENT_LNK_USER on ACT_HI_IDENTITYLINK(USER_ID_);
create index ACT_IDX_HI_IDENT_LNK_TASK on ACT_HI_IDENTITYLINK(TASK_ID_);
create index ACT_IDX_HI_IDENT_LNK_PROCINST on ACT_HI_IDENTITYLINK(PROC_INST_ID_);
create index ACT_IDX_HI_TASK_INST_PROCINST on ACT_HI_TASKINST(PROC_INST_ID_);

5.在db.drop目录中创建删除数据库表的文件

5.1在drop目录中创建删除数据库表的文件 activiti.kingbase.drop.engine.sql

drop table if exists ACT_GE_PROPERTY cascade;
drop table if exists ACT_GE_BYTEARRAY cascade;
drop table if exists ACT_RE_DEPLOYMENT cascade;
drop table if exists ACT_RE_MODEL cascade;
drop table if exists ACT_RE_PROCDEF cascade;
drop table if exists ACT_RU_EXECUTION cascade;
drop table if exists ACT_RU_JOB cascade;
drop table if exists ACT_RU_TIMER_JOB cascade;
drop table if exists ACT_RU_SUSPENDED_JOB cascade;
drop table if exists ACT_RU_DEADLETTER_JOB cascade;
drop table if exists ACT_RU_TASK cascade;
drop table if exists ACT_RU_IDENTITYLINK cascade;
drop table if exists ACT_RU_INTEGRATION cascade;
drop table if exists ACT_RU_VARIABLE cascade;
drop table if exists ACT_RU_EVENT_SUBSCR cascade;
drop table if exists ACT_EVT_LOG cascade;
drop table if exists ACT_PROCDEF_INFO cascade;

5.2在drop目录中创建删除数据库表的文件 activiti.kingbase.drop.history.sql

drop table if exists ACT_HI_PROCINST cascade;
drop table if exists ACT_HI_ACTINST cascade;
drop table if exists ACT_HI_VARINST cascade;
drop table if exists ACT_HI_TASKINST cascade;
drop table if exists ACT_HI_DETAIL cascade;
drop table if exists ACT_HI_COMMENT cascade;
drop table if exists ACT_HI_ATTACHMENT cascade;
drop table if exists ACT_HI_IDENTITYLINK cascade;

6.在db.properties目录中追加数据库相关配置文件

6.1在properties目录中追加人大金仓数据库配置文件kingbase.properties

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

7.替换activiti-engine-7.1.0.M6.jar

7.1编译项目

activiti5.png

完成上述步骤之后,点击红框编译项目

7.2打包项目

activiti6.png

点击红框打包项目,打成可执行的jar包文件,路径在项目的target目录中

7.3把项目注进maven仓库中

  • 这里只介绍注进本地maven仓库中,如果你有maven私库,这一步请按照你自己的方法打进私库。
  • 进入命令行终端,cd到你项目的target目录下,执行下面的命令
mvn install:install-file -DgroupId=org.activiti -DartifactId=activiti-engine -Dversion=7.1.0.M6 -Dpackaging=jar -Dfile=activiti-engine-7.1.0.M6.jar