Jbpm中进程实例的挂起与释放

         在Jbpm的processInstance与taskInstance都对外提供了挂起进程实例或工作实例的的接口,同时也提供了释放的接口。分别是:

1,processinstance

      processinstance.suspend();

      processInstance.resume();

2,taskInstance

    taskInstance.suspend();

    taskInstance.resume();

        同时processinstance与 taskInstance还提供了一个标志位,isSuspended与isOpen分别表示是挂起还是开放状态,如果标志位isSuspended=true&&isOpen=fasle,那么这个进程实例或任务实例在用户界面就不会被找出来,但在管理界面还是可以看到。如果isSuspended=false&&isOpen=true,结果就是正常情况了。

以上介绍了一下Jbpm中挂起与释放的功能,但它存在一个bug,在正常情况下当你调用这两个方法时,是会出错的。提示badsql 语法错误,经过跟踪才知道原来在Jbpm的查询语句里出现了错误。在这里简单介绍一下Jbpm的数据库查询方法,Jbpm的底层持久层采用的是Hiberante3.1,但是它的查询方法却是采用了很少人会用的外置命名查询(为什么采用这个方法,采用这个方法有什么好处,我也没有对它进行研究过。^_^),问题就出在,在调用挂起与释放这两个方法时,它主要做的是以下几个操作:

    suspendTimers();
    suspendMessages();
    suspendTaskInstances();

跟踪得到在挂起messages时出现了错误,文件就出在外置命名查询的sql语句上:

    原码:

             <query name="MessagingSession.suspendMessagesForToken">
                 <![CDATA[
                                    update org.jbpm.msg.Message 
                                    set isSuspended = true
                                    where token = :token
                   ]]>
             </query>

看到这里属性hibernate的人应该马上可以知道那里出了问题了,^_^!

在hibernate中条件查询一定要定义别名,如下就正常了!^_^!

            <query name="MessagingSession.suspendMessagesForToken">
                 <![CDATA[
                                   update org.jbpm.msg.Message me
                                   set me.isSuspended = true
                                   where me.token = :token
                ]]>
            </query>

总的来说Jbpm还是不错的一个工作流引擎,但是还是存在一定的局限,本人最近在研究Jbpm回退功能的实现,欢迎大家一起研究!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值