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>



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jonim/archive/2006/11/03/1364208.aspx

你可能感兴趣的:(sql,Hibernate,.net,Blog,jbpm)