编写osworkflow2.8+struts+hibernate的示例程序,遇到的持久化问题小解

 最近使用osworkflow2.8+struts+hibernate编写示例程序,遇到的持久化问题一些问题。使用hibernate 2 和 3 分别出现不同的异常,原因主要是在事务的处理上。

一、使用hibernate 3 时,不能对数据库进行操作。后改用hibernate 2 后,可以创建并初始化工作流。
总结原因:osworkflow的自带hibernate 3 组件,并没有对数据库事务进行封装提交。所以:
1、osworkflow中使用hibernate3,需要对其提供session,并需要外部进入事务封装;
2、osworkflow中使用hibernate2,则是提供sessionFactory,其事务osworkflow自己内部处理,所以外面不需要额外事务处理。


二、使用hibernate 2 时,虽然能创建和初始化工作流实例,但却其工作流的状态始终保持在创建状态(CREATED),并不能转换为激活状态(ACTIVATED)。调用其状态改变方法也不起作用
总结原因:osworkflow的hibernate 2的组件,并没有对状态改变方法函数进行事务提交,而hibernate 2 其他的方法函数(有关数据库添加删除修改)的方法都有事务的提交。可能是状态改变这个方法中漏了事务提交,修改osworkflow源码,在com.opensymphony.workflow.spi.hibernate.HibernateWorkflowStore.setEntryState()添加个事务提交代码,打包成jar,替换了原来的包,成功通过。

经过修改后,示例程序可以在内存数据库,hibernate 2 ,hibernate 3下成功运行。

你可能感兴趣的:(Hibernate,mysql,struts,jdbc,OS)