`
sdbany
  • 浏览: 16958 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

编写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下成功运行。

分享到:
评论
7 楼 hiyachen 2007-03-14  
抛出异常的爱 写道
hiyachen 写道
osworkflow2.8+struts+hibernate
连不上数据库mysql4.0.27知道为什么吗?
email:chf@tsinghua.org.cn


你就不能动动脑子想想你是怎么失败的?
今天多想一次明天少想十次。。。。



瞧,这么可爱的家伙。说教式是解决不了问题的。
6 楼 hiyachen 2007-02-15  
我的osuser如下配置:
还是不行。
<opensymphony-user>

      <provider class="com.opensymphony.user.provider.jdbc.JDBCAccessProvider">

      <property name="user.table">os_user</property>

      <property name="group.table">os_group</property>

      <property name="membership.table">os_membership</property>

      <property name="user.name" >username</property>

      <property name="user.password">passwordhash</property>

      <property name="group.name">groupname</property>

      <property name="membership.userName" >username</property>

      <property name="membership.groupName">groupname</property>

      <property name="datasource">jdbc/DefaultDS</property>

<!--      <property name="datasource">java:comp/env/jdbc/DefaultDS</property>-->

     </provider>

        <provider class="com.opensymphony.user.provider.jdbc.JDBCCredentialsProvider">

      <property name="user.table">os_user</property>

      <property name="group.table">os_group</property>

      <property name="membership.table">os_membership</property>

      <property name="user.name" >username</property>

      <property name="user.password">passwordhash</property>

      <property name="group.name">groupname</property>

      <property name="membership.userName" >username</property>

      <property name="membership.groupName">groupname</property>

      <property name="datasource">jdbc/DefaultDS</property>

<!--      <property name="datasource">java:comp/env/jdbc/DefaultDS</property>-->

     </provider>

        <provider class="com.opensymphony.user.provider.jdbc.JDBCProfileProvider">

      <property name="user.table">os_user</property>

      <property name="group.table">os_group</property>

      <property name="membership.table">os_membership</property>

      <property name="user.name" >username</property>

      <property name="user.password">passwordhash</property>

      <property name="group.name">groupname</property>

      <property name="membership.userName" >username</property>

      <property name="membership.groupName">groupname</property>

      <property name="datasource">jdbc/DefaultDS</property>

<!--      <property name="datasource">java:comp/env/jdbc/DefaultDS</property>-->

     </provider>

    <!--

    <provider class="com.opensymphony.user.provider.memory.MemoryAccessProvider" />

    <provider class="com.opensymphony.user.provider.memory.MemoryCredentialsProvider" />

    <provider class="com.opensymphony.user.provider.memory.MemoryProfileProvider" />

    -->

    <!--

              Authenticators can take properties just like providers.




              This smart authenticator should work for 'most' cases - it dynamically looks up

              the most appropriate authenticator for the current server.

       -->

       <authenticator class="com.opensymphony.user.authenticator.SmartAuthenticator" />

</opensymphony-user>

5 楼 hiyachen 2007-02-14  
谢谢sdbany
我试一下:我的hibernate是3.0的。
回头给你联系。
4 楼 sdbany 2007-02-14  
hiyachen 写道
osworkflow2.8+struts+hibernate
连不上数据库mysql4.0.27知道为什么吗?
email:chf@tsinghua.org.cn


首先确认一下你的MySql能够正常访问,有的防火墙也会影响访问连接,用客户端测试一下

把MySql连接用的包拷进lib,我用的包是 mysql-connector-java-3.1.8-bin.jar

把hibernate的包拷进lib,要搞清楚是hibernate 2 还是 3

然后正确的配置好你的hibernate.cfg.xml,就行了。hibernate 2 和 3 的配置略有不同,主要是包结构不一样

我把hibernate的配置也贴上来:

hibernate 3 的配置:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- properties -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/osworkflow</property>
<property name="connection.username">sms_search</property>
<property name="connection.password">sms_search</property>

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>

<property name="hibernate.c3p0.max_size">2</property>
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.timeout">5000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.validate">true</property>
<property name="connection.pool_size">10</property>
<property name="statement_cache.size">25</property>

<mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateCurrentStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateHistoryStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate3/HibernateWorkflowEntry.hbm.xml"></mapping>
<mapping resource="com/opensymphony/module/propertyset/hibernate/PropertySetItemImpl.hbm.xml"></mapping>

</session-factory>
</hibernate-configuration>


hibernate 2 的配置:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
<!-- properties -->
<property name="connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/osworkflow</property>
<property name="connection.username">root</property>
<property name="connection.password">123</property>

<property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="use_outer_join">true</property>

<property name="net.sf.hibernate.c3p0.max_size">2</property>
<property name="net.sf.hibernate.c3p0.min_size">2</property>
<property name="net.sf.hibernate.c3p0.timeout">5000</property>
<property name="net.sf.hibernate.c3p0.max_statements">100</property>
<property name="net.sf.hibernate.c3p0.idle_test_period">3000</property>
<property name="net.sf.hibernate.c3p0.acquire_increment">2</property>
<property name="net.sf.hibernate.c3p0.validate">true</property>
<property name="net.sf.connection.pool_size">10</property>
<property name="net.sf.statement_cache.size">25</property>

<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateCurrentStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateHistoryStep.hbm.xml"></mapping>
<mapping resource="com/opensymphony/workflow/spi/hibernate/HibernateWorkflowEntry.hbm.xml"></mapping>
<mapping resource="com/opensymphony/module/propertyset/hibernate/PropertySetItemImpl.hbm.xml"></mapping>

</session-factory>
</hibernate-configuration>
3 楼 抛出异常的爱 2007-02-14  
hiyachen 写道
osworkflow2.8+struts+hibernate
连不上数据库mysql4.0.27知道为什么吗?
email:chf@tsinghua.org.cn


你就不能动动脑子想想你是怎么失败的?
今天多想一次明天少想十次。。。。
2 楼 抛出异常的爱 2007-02-14  
<br/>
<strong>sdbany 写道:</strong><br/>
<div class='quote_div'>
<p><font> 最近使用osworkflow2.8+struts+hibernate编写示例程序,遇到的持久化问题一些问题。使用hibernate 2 和 3 分别出现不同的异常,原因主要是在事务的处理上。</font></p>
<p><font>一、使用hibernate 3 时,不能对数据库进行操作。后改用hibernate 2 后,可以创建并初始化工作流。<br/>
总结原因:osworkflow的自带hibernate 3 组件,并没有对数据库事务进行封装提交。所以:<br/>
1、osworkflow中使用hibernate3,需要对其提供session,并需要外部进入事务封装;<br/>
2、osworkflow中使用hibernate2,则是提供sessionFactory,其事务osworkflow自己内部处理,所以外面不需要额外事务处理。</font></p>
<font>
<p><br/>
二、使用hibernate 2 时,虽然能创建和初始化工作流实例,但却其工作流的状态始终保持在创建状态(CREATED),并不能转换为激活状态(ACTIVATED)。调用其状态改变方法也不起作用<br/>
总结原因:osworkflow的hibernate 2的组件,并没有对状态改变方法函数进行事务提交,而hibernate 2 其他的方法函数(有关数据库添加删除修改)的方法都有事务的提交。可能是状态改变这个方法中漏了事务提交,修改osworkflow源码,在com.opensymphony.workflow.spi.hibernate.HibernateWorkflowStore.setEntryState()添加个事务提交代码,打包成jar,替换了原来的包,成功通过。</p>
<p>经过修改后,示例程序可以在内存数据库,hibernate 2 ,hibernate 3下成功运行。<br/>
</p>
</font></div>
<br/>
<br/>
<br/>
把猜想过程与失败过程<br/>
记录下来比光说<br/>
如何去办要重要的多<br/>
(授人以渔)<br/>
所谓的经验就是<br/>
可以选择失败的方式比较多<br/>
思路比结果更重要。。。
1 楼 hiyachen 2007-02-13  
osworkflow2.8+struts+hibernate
连不上数据库mysql4.0.27知道为什么吗?
email:chf@tsinghua.org.cn

相关推荐

    osworkflow2.8基于Spring+Hibernate

    《osworkflow2.8在Spring+Hibernate环境中的整合应用详解》 osworkflow是一款开源的工作流引擎,它提供了灵活的工作流程定义和执行管理功能。在Java应用中,osworkflow常常与Spring和Hibernate这两个主流的框架结合...

    流程引擎OSworkflow2.8资料(所有jar包,学习资料,api)

    OSWorkflow 是一个强大的开源工作流引擎,主要用于管理应用程序中的复杂业务流程。在2.8版本中,它提供了全面的功能和良好的可扩展性,是Java开发者处理流程自动化的重要工具。在这个压缩包中,你将找到一系列资源,...

    osworkflow2.8.jar_官方完全带example正式版

    **osworkflow2.8.jar** 是一个开源的工作流引擎,其官方正式版包含了完整的示例项目,方便开发者理解和使用。这个版本是2.8版,代表着该软件在发布时已经经过了多次迭代和优化,提供了稳定且功能丰富的服务。 **...

    osworkflow中文入门指南,osworkflow+hibernate+spring集成配置,osworkflow-2.8.0.jar

    在本入门指南中,我们将深入探讨如何使用osworkflow,并将其与流行的数据持久化框架Hibernate和依赖注入容器Spring进行集成。 **工作流管理系统** 是一种软件工具,它允许开发者定义、执行和管理业务流程。...

    OSWorkflow2.8 API文档

    OSWorkflow 2.8 API 文档

    Struts2+Spring+hibernate+OSworkflow framework

    这个框架的整合使得开发者能够利用Struts2处理用户请求,Spring进行依赖管理和事务控制,Hibernate管理数据持久化,而OSWorkflow则负责业务流程的控制。这样的组合在实际项目中,可以实现灵活的业务逻辑,同时保证了...

    osworkflow2.8.pdf

    ### OSWorkflow 2.8 知识点概览 #### 一、OSWorkflow 简介与特性 **OSWorkflow** 是一款灵活的工作流管理工具,适用于需要高度定制化流程的应用场景。它与大多数商用或开源工作流软件的不同之处在于其高度的灵活性...

    osworkflow2.8

    OSWorkflow 是一个开源的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"osworkflow2.8"版本是OSWorkflow的一个特定发行版,包含了一整套用于设计、执行和管理工作流程的工具和资源。下面我们将...

    OSWorkFlow2.8讲解PPT课件

    讲解JAVA开源工作流框架OSWorkFlow2.8的课件

    osworkflow eclipse+mysql 请假审批流程 完整示例

    《基于osworkflow与Eclipse的请假审批流程完整示例解析》 在IT行业中,工作流管理系统(Workflow Management System,简称WMS)是企业信息化建设的重要组成部分,它能够规范业务流程,提高工作效率。osworkflow是一...

    osworkflow + spring + hibernate 实例,可运行!!

    在IT行业中,工作流管理系统是实现企业业务流程自动化的重要工具,而`osworkflow`、`Spring`和`Hibernate`这三者结合的应用则为构建高效、灵活的工作流系统提供了强大的支持。`osworkflow`是一个开源的工作流引擎,...

    OSWorkflow2.8扩展源代码升级(修改)版

    OSWorkflow 是一个强大的工作流引擎,它允许开发者在应用程序中实现复杂的业务流程管理。这个"OSWorkflow2.8扩展源代码升级(修改)版"很可能包含对原版OSWorkflow 2.8的改进和增强,使得它更适合特定的项目需求或者...

    OSWorkflow中文手册 2.8

    ### OSWorkflow中文手册 2.8 #### 一、引言与基础知识 **OSWorkflow** 是一个开源的工作流引擎,用于实现业务流程自动化。它基于Java语言开发,并且支持多种数据库,具有高度的灵活性和扩展性。本手册旨在提供详细...

    osworkflow-2.8.0

    7. **示例项目**:"osworkflow-2.8.0-example.war" 是一个包含示例应用的战争文件,可以帮助开发者快速理解和学习如何使用 OSworkflow。 8. **构建配置**:"build.properties" 和 "osbuild.xml"、"build.xml" 文件...

    osworkflow+mysql例子(该例子有问题,请勿下载)

    总结一下,OSWorkflow 是一个强大的工作流管理工具,可以配合 MySQL 实现高效的数据持久化。然而,这个特定的示例由于存在未知问题,可能不适用于学习或开发。为了正确理解和使用 OSWorkflow,建议寻找官方文档或无...

    osworkflow+spring+jdbc实现

    标题 "osworkflow+spring+jdbc实现" 涉及到的是一个集成开源工作流引擎OSWorkflow(OpenSymphony Workflow)与Spring框架,并利用JDBC作为持久化存储的解决方案。这个集成使得开发者能够在Java应用中方便地引入工作...

    osworkflow在tomcat6下的持久化例子,用mysql

    在这个例子中,我们将探讨如何在Tomcat 6这样的Java应用服务器上配置并使用OSWorkflow,同时利用MySQL作为持久化存储。 首先,我们需要理解OSWorkflow的核心概念。它是基于Java的工作流管理系统,提供了一种声明式...

Global site tag (gtag.js) - Google Analytics