WAS 6.1,Hibernate,Spring和事务管理配置

时间:2009-07-22 21:13:22

标签: hibernate spring web-applications transactions

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

我有2个问题

  1. 哪个是更好的交易经理? Websphere或者Hibernate的?
  2. 如果IBM是答案,那么我应该如何在spring config XML中配置它?
  3. 这是我目前对Hibernate的声明

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

    Websphere的外观如何?

3 个答案:

答案 0 :(得分:3)

即使你在幕后使用不同的实现,你也应该通过JTA管道你的交易。 (Hibernate,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你应该使用{{3作为JTA的直接替代品。因此,只需使用WebSphereUowTransactionManager类,而不是原始示例中的Hibernate事务管理器。 Spring从应用程序服务器的JNDI树中获取事务管理器,因此您可能必须设置一些属性来指定JNDI名称。

据我所知,WebSphere事务管理器使您能够执行事务暂停等操作。就个人而言,我会选择应用服务器的事务管理器,无论是WebSphere,Weblogic还是Glassfish等等。

答案 1 :(得分:1)

我参加了一个大型的spring + hibernate + websphere项目,而我们最终使用的是WebsphereUowTransactionManager。

问题是默认的WebsphereTransactionManager使用API​​的内部websphere API。 UOW TxManager工作得很好,你可以获得更多功能(我们确实使用了暂停功能)。

至于jndi问题,您不必担心设置它,事务管理器会为您处理它。

但是,我强烈建议你去UOW事务管理器看看开发人员工作article的引用,它解决了spring + hibernate + websphere的问题。

  

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

你可以升级你的弹簧版本,你不太可能遇到任何问题,如果推进,你可以从春季2.5中拉出org.springframework.transaction.jta.WebSphereUowTransactionManager并将其添加到你的应用

答案 2 :(得分:0)

  1. 定义“更好”。
  2. 以下是WebSphere事务管理器的Spring docs。我相信你只需更改事务管理器类。您可能还需要对工厂类做一些特别的事情。