我们经常在搭建jbpm环境的时候遇到莫名其妙的问题。比如:message.hbm.xml not found,如这样的问题就很容易让人想起在导入jbpm jar包的问题,怀疑是否包的完整性。逐步排查可以将这种类似的问题解决。
昨天在将流程定义部署到数据中遇见了一个问题,
ERROR - *** ERROR: line 3:47: unexpected token: executeNodeJob hql.PARSER (ErrorCounter.java:35)[main] 2008-07-28 17:44:26,453
ERROR - *** ERROR: line 4:47: unexpected token: t hql.PARSER (ErrorCounter.java:35)[main] 2008-07-28 17:44:26,468
ERROR - *** ERROR: line 3:36: unexpected token: job hql.PARSER (ErrorCounter.java:35)[main] 2008-07-28 17:44:26,484
ERROR - *** ERROR: line 3:38: unexpected token: timer hql.PARSER (ErrorCounter.java:35)[main] 2008-07-28 17:44:26,484
ERROR - *** ERROR: line 3:31: expecting "set", found 'job' hql.PARSER (ErrorCounter.java:35)[main] 2008-07-28 17:44:26,484
ERROR - Error in named query: GraphSession.deleteJobsForProcessInstance impl.SessionFactoryImpl (SessionFactoryImpl.java:300)[main] 2008-07-28
找了好久,在山穷水尽疑无路的时候,找到这个问题的原因,是jbpm提供的jar有问题。具体修改方法如下
将jbpm-3.1.2/jbpm-3.1.2/org/jbpm/db/hibernate.queries.hbm.xml修改其对应的部分
修改成如下形式
<query name="SchedulerSession.deleteTimersForProcessInstance">
<![CDATA[
delete from org.jbpm.scheduler.exe.Timer
where processInstance = :processInstance
]]>
</query>
<query name="SchedulerSession.suspendTimersForToken">
<![CDATA[
update org.jbpm.scheduler.exe.Timer
set isSuspended = true
where token = :token
]]>
</query>
<query name="SchedulerSession.resumeTimersForToken">
<![CDATA[
update org.jbpm.scheduler.exe.Timer
set isSuspended = false
where token = :token
]]>
</query>
然后,就ok了。为遇到同样问题的朋友,提供解决问题的捷径