2009-07-22 67 views
1

我正在使用Websphere Application Server Express v6.1,並且正在編寫一個使用Spring 2.0.7,Hibernate 3.5的應用程序。我的數據源是Oracle 10g。WAS 6.1,Hibernate,Spring和事務管理配置

我有2個問題

  1. 這是一個更好的事務管理器? Websphere的還是Hibernate的?
  2. 如果IBM是答案,那麼我應該如何在Spring配置XML中配置它?

這是我對Hibernate

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

將這個應該是什麼樣的WebSphere目前申報?

回答

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的事務管理器來代替,只需更換通過TransactionImp bean類轉換到休眠一個在你原來的問題。

至於哪位經理比較好,我實在想不出有什麼重要的理由可以選擇。我能想到的唯一情況是,如果您擁有共享負載的羣集應用程序服務器,而不僅僅是故障轉移,它可能會發揮作用。也許交易可以在他們之間共享?我不知道。如果有人能想到別的東西,請隨時糾正我。

編輯:看起來WebSphereTransactionManagerFactoryBean(就是我上面使用)並不需要使用的WebSphere 6.0及以上版本,並根據WebSphere Transaction Manager Spring Docs你應該使用WebSphereUowTransactionManager作爲直接替代JTA。因此,而不是原始示例中的Hibernate事務管理器,只需使用WebSphereUowTransactionManager類即可。 Spring將事務管理器從應用程序服務器的JNDI樹中抽取出來,因此您可能必須設置某個屬性來指定JNDI名稱。

從我所知道的情況來看,WebSphere事務管理器使您能夠執行事務掛起等操作。就我個人而言,我會去應用服務器的事務管理器,無論它是WebSphere還是Weblogic還是Glassfish或其他。

0
  1. 定義「更好」。
  2. 以下是用於WebSphere事務管理器的Spring docs。我相信你只是改變事務管理器類。您可能還必須對工廠類做一些特別的事情。
+0

我已經閱讀了很多文獻。我正在尋找具有更具體經驗或文獻的人的答案。我也需要更好的幫助。也許Websphere Transaction服務器對於單個應用程序服務器應用程序來說是矯枉過正的?謝謝你們一樣。 – 2009-07-23 13:04:37

+0

我從來沒有用過WebSphere,感謝上帝。你自己在那裏。我的看法是,最好使用爲您的應用服務器編寫的事務管理器。我使用WebLogic和JBOSS,這些決定了我的TX管理器。 – duffymo 2009-07-23 23:06:41

1

我在一個大型的spring + hibernate + websphere項目中,WebsphereUowTransactionManager是我們最終選擇的項目。

問題是默認的WebsphereTransactionManager使用API​​的內部websphere API。 UOW TxManager的效果非常好,並且您可以獲得更多功能(例如,我們使用暫停功能)。

至於jndi問題,您不必擔心設置它,事務管理器會爲您處理它。

但是,我強烈建議你去UOW事務管理器,看開發人員作品article的引用,它解決了spring + hibernate + websphere的問題。

但是,早期版本(比春季2.5)Spring使用了犧牲Web和EJB容器來管理資源,並且不支持由應用程序使用內部WebSphere接口 。這可能會導致容器處於未知狀態,可能導致數據損壞 。

你可以升級你的春季版本,這是不可能的,你不會有問題的,如果到了緊要關頭,你可以只拉那org.springframework.transaction.jta.WebSphereUowTransactionManager了Spring 2.5中添加它到你的應用程序。