1.执行流程出现如下错误:

org.jbpm.pvm.internal.type.variable.UnpersistableVariable

出现错误的原因:

变量没有实现  Serializable 接口

解决办法:

变量需要实现   Serializable 接口。

 

2.java.lang.ClassCastException: $Proxy53 cannot be cast to oracle.sql.BLOB

出现错误原因:

我使用的是Hibernate 3.6版本。

解决办法:

在网上查到解决办法 使用 hibernate3.5.4替换3.6.

 

3.项目启动第一次访问,发布流程没问题。但是第二次启动项目,再发布一个新流程的时候报如下错误.

2010-10-14 19:51:58,234 ERROR [org.hibernate.util.JDBCExceptionReporter] - 流已被关闭

org.hibernate.exception.GenericJDBCException: could not initialize a collection: [org.jbpm.pvm.internal.repository.DeploymentImpl.resources#1]
出现错误的原因是:

hibernate自动创建数据库时,配置文件中某些字段被hibernate解析成long类型。

在生成表后手动将LONG类型修改为字符串类型。

 

4.在发布流程的时候 使用addResourceFromString方法发布流程,资源名称应该是 以 .jpdl.xml 结尾的。

如果不是发布会不成功。

 

5.流程定义文件读取乱码的问题。

使用PL/SQL直接在数据库中查看是乱码,以为是Hibernate的问题。发现其他的数据都是正常的。

java.io.InputStream ss = repositoryService.getResourceAsStream(deployment,"process.jpdl.xml");   

//在这里指定字符编码UTF-8。

BufferedReader in = new BufferedReader(new InputStreamReader(ss,"UTF-8"));

StringBuffer buffer = new StringBuffer();   

 while ((line = in.readLine()) != null){   

                buffer.append(line);   

 }   

 

6.取得我的任务和候选任务。

 

jbpm 中我是用hql获取自己的当前任务和候选任务,发现重复记录使用distinct出错,发现出错的原因是在JBPM4_TASK表中的字段为clob类型,我将其修改成nvarchar类型,再使用distinct查询问题解决了。

StringBuffer hqlSb = new StringBuffer();
   hqlSb.append("select  distinct  task from org.jbpm.pvm.internal.task.TaskImpl task left join task.participations pt where task.assignee=?");
   hqlSb.append(" or  task.assignee is null and  ((pt.type = 'candidate' and   pt.userId =? )  ");

        if (groups.length()> 0) {
          hqlSb.append(" or pt.groupId in (" +groups + ")");
        }
        hqlSb.append(")");
        hqlSb.append(" order by task.createTime desc");