编写osworkflow2.8+struts+hibernate的示例程序,遇到的持久化问题小解
2007-02-07 21:30
260 查看
最近使用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 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编写程序遇到的问题及解决方法
- cgic程序的编写遇到的问题
- C#编写WINNT服务,随便解决安卓开发遇到的5037被众多程序无节操占用的问题
- 在绘图程序编写过程中遇到的问题~
- C#程序编写遇到的问题
- 关于程序编写中遇到的细节问题
- [转]dev C++编写windows程序遇到问题
- cgic程序的编写遇到的问题
- 在绘图程序编写过程中遇到的问题~
- 解决Android客户端运行Cococs2dx编写的游戏程序遇到的意外游戏中断导致的游戏黑屏问题
- java编写程序遇到的各种乱码问题记录
- 编写MapReduce程序访问HBase 遇到的问题与解决方法
- 在64位机子调用vs编写的win32 c++程序遇到问题
- pl/sql程序编写中遇到的一些问题及解决办法
- 编写安卓程序遇到的问题
- 使用Myelipse编写hibernate遇到的各种问题
- 调试关于Hibernate的程序遇到的问题
- Hibernate程序从64位转移到32位机上运行遇到的问题
- 用C#编写积分程序时遇到的问题
- 关于编写android程序遇到的问题