今天按照汤阳光老师的OA视频,配置jbpm4.4时,遇到了个奇葩问题。首先说明一下,我的MySQL6.0版本的,执行jbpm.mysql.create.sql时,报如下错误:

    You have an error in your SQL syntax; checkthe manual that corresponds to your MySQL server version for the right syntaxto use near 'TYPE=INNODB' at line 6

根据网上的经验来谈,mysql5.5后默认使用InnoDB引擎,所以要修改jbpm.mysql.create.sql文件中所有'TYPE=INNODB'改为'Engine=INNODB'当然这个问题比较容易解决,谈不上奇葩,但是下面的问题,就让人匪夷所思了。改完之后,然后继续执行jbpm.mysql.create.sql,报出下面的错误:

Specified key was too long; max key length is 767bytes

就是执行创建表JBMP4_EXECUTION(第3张表)时不成功,还有另外一张表JBMP_PROPERTY(第15张表)也是如此错误没有创建成功。其他16张表都成功创建没问题。如果JBMP4_EXECUTION表创建不好就运行jbpmjava程序,一般会报如下错误:

jBPM4.4 no jBPMDB schema: no JBPM4_EXECUTION table.   Run the create.jbpm.schema targetfirst in the install tool

所以呢,jbmp要用到的表必须要创建好才能运行java程序。

首先根据上面的错误提示,应该是某个字段太长了,于是我将JBMP4_EXECUTION表中一些字段值由255改为100,创建成功。后来又排出了一些其他字段的定义,将其中一些字段值修改回255,后来经过反复试验,最终定位到JBPM4_EXECUTION表中,ID_ varchar(255) unique,这一行有问题,将其改为了ID_varchar(100) unique,创建表成功。另外一张表JBMP_PROPERTY(第15张表)将KEY_ varchar(255) not null行改为KEY_ varchar(100)not null ,然后成功创建。

后来我又单独地拿jbpm.mysql.create.sql中这JBPM4_EXECUTION(第3张表)和JBMP_PROPERTY(第15张表)在一个新建的数据库尝试创建,奇怪的是都创建成功了。然后再执行jbpm.mysql.create.sql中剩下的sql语句都没出问题。

不知道是不是数据库版本的原因,因为我的是MySQL6.0,而汤老师用的是MySQL5.6。也不知道其他人有没有出现和我一样的问题,反正我最后解决办法要么把JBMP4_EXECUTION(第3张表)表的创建语句中ID_ varchar(255) unique改为ID_ varchar(100)uniqueJBMP_PROPERTY(第15张表)表的创建语句中KEY_ varchar(255) not null改为KEY_ varchar(100)not null 。要么把先执行创建那两张表,然后再执行jbpm.mysql.create.sql其他的sql语句。