【问题标题】:WAS 6.1, Hibernate, Spring and transaction managmement configurationWAS 6.1、Hibernate、Spring 和事务管理配置
【发布时间】:2010-11-13 04:30:41
【问题描述】:

我正在使用 Websphere Application Server Express v6.1,并且正在编写一个使用 Spring 2.0.7、Hibernate 3.5 的应用程序。我的数据源是 Oracle 10g。

我有两个问题

  1. 哪个是更好的事务管理器? Websphere 的还是 Hibernate 的?
  2. 如果 IBM 是答案,那么我应该如何在 spring config XML 中配置它?

这是我目前对 Hibernate 的声明

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="rmsSessionFactory" />
</bean>

Websphere 会是什么样子?

【问题讨论】:

    标签: hibernate spring web-applications transactions


    【解决方案1】:

    您可能应该通过 JTA 管道传输您的事务,即使您在幕后使用不同的实现。 (休眠、Webphere、Weblogic 等)。理想情况下,它应该如下所示:

    <bean id="transactionImpl" class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean"/>
    
    <bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager ref="transactionImpl"/>
    </bean>
    

    如果您想改用 Hibernate 的事务管理器,只需将 transactionImpl bean 的类替换为原始问题中的 hibernate 类即可。

    至于哪个经理更好,老实说,我想不出任何重要的理由来选择一个而不是另一个。我能想到的唯一一件事是,如果您拥有共享负载的集群应用程序服务器,而不是简单地进行故障转移,它可能会发挥作用。也许交易可以在他们之间共享?我不知道。如果有人能想到别的,欢迎指正。

    编辑:看起来 WebSphereTransactionManagerFactoryBean(我在上面使用的)不需要用于 WebSphere 6.0 及更高版本,根据WebSphere Transaction Manager Spring Docs,您应该使用WebSphereUowTransactionManager 作为直接替代JTA。因此,不要使用原始示例中的 Hibernate 事务管理器,只需使用 WebSphereUowTransactionManager 类。 Spring 从应用程序服务器的 JNDI 树中获取事务管理器,因此您可能必须设置一些属性来指定 JNDI 名称。

    据我所知,WebSphere 事务管理器使您能够进行事务暂停等。我个人会选择应用服务器的事务管理器,不管它是 WebSphere、Weblogic 还是 Glassfish 或其他什么。

    【讨论】:

    • 感谢您的回复。我现在有一个更好的想法需要做什么。我在文献中注意到 WebSphereUowTransactionManager 仅适用于 Spring 2.1RC1 及更高版本以及 WAS 6.0 及更高版本。不幸的是,我们使用的是 Spring 2.0.7。
    • 另请注意,WebSphereTransactionManagerFactoryBean 在 Spring 3.0 中已被删除
    【解决方案2】:

    我参与了一个大型 spring+hibernate+websphere 项目,而 WebsphereUowTransactionManager 是我们最终选择的。

    问题在于默认的 WebsphereTransactionManager 使用 API 的内部 websphere API。 UOW TxManager 运行良好,您可以获得更多功能(例如,我们确实使用了挂起功能)。

    至于jndi的问题,你不用担心设置,事务管理器为你处理。

    但是,我强烈建议您使用 UOW 事务管理器,请参阅开发人员作品article 的报价,该报价解决了 spring+hibernate+websphere 的问题。

    但是,Spring 的早期版本(早于 spring 2.5)使用内部 WebSphere 接口 这损害了 Web 和 EJB 容器管理资源的能力,并且不支持应用程序使用。这可能会使容器处于未知状态, 可能导致数据损坏。

    你可以升级你的 spring 版本,你不太可能会遇到任何问题,如果迫在眉睫,你可以将 org.springframework.transaction.jta.WebSphereUowTransactionManager 从 spring 2.5 中拉出并将其添加到你的应用。

    【讨论】:

      【解决方案3】:
      1. 定义“更好”。
      2. 这里是 WebSphere 事务管理器的 Spring docs。我相信您只是更改了事务管理器类。您可能还需要对工厂类做一些特别的事情。

      【讨论】:

      • 我已经阅读了很多文献。我正在寻找具有更具体经验或文献的人的答案。我也需要帮助更好地理解。也许 Websphere 事务服务器对于单个应用程序服务器应用程序来说太过分了?还是谢谢大家。
      • 我从未使用过 WebSphere,感谢上帝。你自己在那里。我的看法是最好使用为您的应用服务器编写的事务管理器。我使用 WebLogic 和 JBOSS,它们决定了我的 TX 管理器。
      猜你喜欢
      • 2017-07-30
      • 2011-07-05
      • 2016-12-02
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多