当前位置:Gxlcms > 数据库问题 > activiti搭建(一)初始化数据库

activiti搭建(一)初始化数据库

时间:2021-07-01 10:21:17 帮助过:2人阅读

dbSchemaCreate()方法开始:

  public void dbSchemaCreate() {
    if (isEngineTablePresent()) {
      String dbVersion = getDbVersion();
      if (!ProcessEngine.VERSION.equals(dbVersion)) {
        throw new ActivitiWrongDbException(ProcessEngine.VERSION, dbVersion);
      }
    } else {
      dbSchemaCreateEngine();
    }

    if (dbSqlSessionFactory.isDbHistoryUsed()) {
      dbSchemaCreateHistory();
    }

    if (dbSqlSessionFactory.isDbIdentityUsed()) {
      dbSchemaCreateIdentity();
    }
  }

  这段代码很清楚地展示了相关关系,先判断表是否存在,存在就验证版本号,不存在就创建engine,后面判断history和identity是否被使用(默认使用),使用了就创建相关的表。这里很明显就是isEngineTablePresent()返回了true才导致了这个问题,继续追踪到这个类中的isTablePresent()方法,其真正作用的是下面这段:

public static String[] JDBC_METADATA_TABLE_TYPES = {"TABLE"};


      try {
        tables = databaseMetaData.getTables(catalog, schema, tableName, JDBC_METADATA_TABLE_TYPES);
        return tables.next();
      } finally {
        try {
          tables.close();
        } catch (Exception e) {
          log.error("Error closing meta data tables", e);
        }
      }

  tables.next()返回了true,那么问题肯定是出在了databaseMetaData.getTables()这条语句上。断点发现前两个参数都是null,tableName就是验证的表act_ru_execution。最后一个上面以给出,就是字符串数组,里面只有一个“TABLE”字符串。这个方法具体出在第二个参数上面。具体的参数含义可以百度,这里提供一个链接(侵删):http://blog.sina.com.cn/s/blog_707a9f0601014y1a.html

  第二个参数对于oracle数据库来说比较重要,就像之前说的造成这个问题的两种可能的场景。如果出现了这个问题,就需要配置,使schema这个参数为大写的登陆用户名(必须大写,与oracle的机制有关)。这个参数的设置,不断向上查找源码,会发现只需要在配置文件中配置databaseSchema属性就可以了(value大写)。mysql数据库应该就没有太大问题了。

  最后简单介绍一下activiti数据库表的组成。之前看创建数据库的sql语句就很清楚,表分为必要的engine和非必要的history以及identity。其中act_hi_*这8张表就与history相关。act_id_*这4张与identity有关。剩余的全是engine必备的表,也可以简单的分下类:act_ru_*这6张表是runtime流程运行中相关的表。act_re_*这3张表是repository这个是管理部署和流程定义相关的表,基本不会改变,除非更改部署和流程定义。act_ge_property存放了数据库表版本的相关信息,只有在升级版本的时候会改变。act_ge_bytearray存放了一些字节流数据,一般是各种资源数据如流程定义的xml,流程图等。act_evt_log看名字就知道是事件日志的表,如何使用暂时不知。最后一张act_procdef_info表看名字也就是流程定义详情表。那些归类了得表具体作用看*,其后缀的名字,大概就知道其具体作用,如:task(任务)、variable(变量)等,这里就不一一介绍了。

activiti搭建(一)初始化数据库

标签:

人气教程排行