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.
org.hibernate.exception.
出现错误的原因是:
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");