<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[利剑之辉的博客]]></title> 
<link>http://www.cnljh.com/index.php</link> 
<description><![CDATA[世事如棋 乾坤莫测 笑尽英雄－－利剑之辉的个人站点，该站点记录了站长日常生活、学习和工作中的经历，同由于站长是个霹雳布袋戏爱好者，所以收集了很多的布袋戏剧情和资料发布在blog，供各位戏迷过瘾，同时欢迎各位同仁光临本站点]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[利剑之辉的博客]]></copyright>
<item>
<link>http://www.cnljh.com/read.php/.htm</link>
<title><![CDATA[SSH＋jbpm集成过程中DbPersistenceService- hibernate commit failed 的解决方法]]></title> 
<author>ljh &lt;ljhjqk@126.com&gt;</author>
<category><![CDATA[jbpm]]></category>
<pubDate>Mon, 13 Apr 2009 01:14:28 +0000</pubDate> 
<guid>http://www.cnljh.com/read.php/.htm</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;在集成SSH＋jbpm的过程中，遇到了错误，“ERROR org.jbpm.persistence.db.DbPersistenceService&nbsp;&nbsp;- hibernate commit failed”，在网上搜了很多资料没有找到解决方法，没有办法只能自己调试程序试着找原因了，最终发现了问题所在。特记录如下：<br/>&nbsp;&nbsp;&nbsp;&nbsp;我在集成过程中，部署流程已经成功，但是在使用spring自动生成的jbpmTemplate bean来保存流程实例ProcessInstance时却报错，调试跟踪错误是出在了“jbpmContext.close()”这里。原因是这样的：<br/>&nbsp;&nbsp;&nbsp;&nbsp;springmodules提供的“org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean”类来创建ProcessDefinition流程定义实例，并且注入到JbpmTemplate实例中，而在创建ProcessDefinition流程实例时只是从xml读取流程实例，并不是从数据库中找到流程定义的最后版本，所以导致创建的流程定义的id是0，也就是没有进行持久化，所以我们使用该流程定义创建了流程实例后，又要对该流程实例保存时，流程实例和流程定义有外键关系，导致提交失败。<br/>&nbsp;&nbsp;&nbsp;&nbsp;错误出现在“jbpmContext.close()”，是因为在这句才结束事务，实际提交数据，也就出现了hibernate commit failed的错误。<br/>&nbsp;&nbsp;&nbsp;&nbsp;解决方法：<br/><br/><div class="code">&nbsp;&nbsp;JbpmContext jbpmContext = jbpmTemplate.getJbpmConfiguration().createJbpmContext();<br/>&nbsp;&nbsp;try&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;GraphSession graphSession = jbpmContext.getGraphSession();<br/>&nbsp;&nbsp;&nbsp;&nbsp;//获取流程实例，这样是从数据库中解析流程实例的最后版本<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition definition = graphSession.findLatestProcessDefinition(&quot;simple&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//这里注释掉的是原来使用的代码，这样的话用的是spring生成的流程定义对象，是从xml解析来的<br/>//&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance pi = new ProcessInstance(jbpmTemplate.getProcessDefinition());<br/>&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance pi = definition.createProcessInstance();<br/>&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.save(pi);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;finally&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;jbpmContext.close();<br/>&nbsp;&nbsp;&#125;</div><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如果哪里还没有明白，可以去参考下org.springmodules.workflow.jbpm31.definition.ProcessDefinitionFactoryBean的源代码，就明白为什么spring获取的流程定义对象不能创建能保存到数据库的流程实例了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;最后再说明下，spring自己创建的流程对象如果当次部署过的话是可以创建流程实例并保存到数据库的，这是因为部署流程后流程定义就有id了，也就是持久化过了，这关系到jbpm和SSH的集成的方法，这方面的资料网上可以找到一些，大家就参考下网上其他的资料吧。<br/>Tags - <a href="http://www.cnljh.com/go.php/tags/jbpm/" rel="tag">jbpm</a> , <a href="http://www.cnljh.com/go.php/tags/java/" rel="tag">java</a>
]]>
</description>
</item><item>
<link>http://www.cnljh.com/read.php/.htm#blogcomment</link>
<title><![CDATA[[评论] SSH＋jbpm集成过程中DbPersistenceService- hibernate commit failed 的解决方法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.cnljh.com/read.php/.htm#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>