JBPM调用CompleteTask异常以及在JBPM中使用Hibernate Session的方法

1、JBPM调用CompleteTask异常:
void completeTask(java.lang.String taskId)
Deletes this task, marks the related history task as completed.
void completeTask(java.lang.String taskId, java.util.Map<java.lang.String,?> variables)
Deletes this task and marks the related history task as completed.
void completeTask(java.lang.String taskId, java.lang.String outcome)
Deletes this task, marks the related history task as completed with the specified outcome.
void completeTask(java.lang.String taskId, java.lang.String outcome, java.util.Map<java.lang.String,?> variables)
Deletes this task, marks the related history task as completed with the specified outcome.
JBPM中completeTask有以上四种重载完成节点任务的方法,初学时调用该方法出错:No unnamed transitions were found for the task “**”;后来总结发现,当task中只有一个transition,而且没有name属性,则可以调用completeTask(java.lang.String taskId)和completeTask(java.lang.String taskId, java.util.Map<java.lang.String,?> variables)这两个方法,当有多个transition或者transition有name属性的时候调用完成任务的方法时则需要指定转向,即java.lang.String outcome参数,就是调用后面两个重载的方法,否则就会报上面这个异常;

2、JBPM中使用Hibernate Session的方法:
学习JBPM时,想将数据保存到自己的表中,不过不想使用jdbc,使用hibernate又不想独立再重新用,所以就考虑想用JBPM中的hibernate session,看到源码中sevice中都有session,不过没找到何处赋值的,后面还得多研究下,不过看到有用EnvironmentImpl.getCurrent().get(XXX.class)的方法,而且有个DbSession的类中有hibernate的session变量,所以尝试EnvironmentImpl.getCurrent().get(DbSession.class)获取,不过报错,EnvironmentImpl.getCurrent()是空值,之后发现下面的方法:

EnvironmentImpl environment = ((EnvironmentFactory) processEngine).openEnvironment(); //获取JBPM的环境
DbSession session = environment.get(DbSession.class);

此处注意需要自己处理事务,这个地方被困扰了好久,显示操作但是没有数据,需要手动的去控制事务。

有了这个environment之后同样可以用这个方法也可以获得其他的一些类的实例,这样可以在在JBPM中可以通过environment获得各种服务和接口。
如:   
IdentitySession identitySession = environment.get(IdentitySession.class);

你可能感兴趣的:(Hibernate,jbpm)