2010-11-09 63 views
3

我有一個具有struts 1.1和EJB 2組合的應用程序,但現在我們正在用hibernate 3.2引入一個新的應用程序。 hibernate DAO與EJB 2會話bean DAO與純JDBC並行運行。在這種情況下,我擔心jdbc連接管理。由於EJB 2.0具有容器管理的連接和事務。但是在休眠的情況下,我們開始並提交一個hibernate事務,假設這個體系結構不會有任何問題是否安全。Struts應用程序中的EJB和Hibernate

需要一些分析幫助。

PM


我正在考慮對同一問題,如果正在使用的可能訪問現有的表休眠模塊JDBC DAO的,其交易是通過會話Bean管理。但這裏是我的方法:

  1. 我會調用EJB會話Bean,並因爲這個bean將負責管理事務的委託,我會創造我休眠DAO的從這個會話bean調用它們,我認爲這不會有任何問題。

  2. 此應用程序的hibernate會話工廠將使用hibernate插件實例化,hibernate插件將成爲struts config xml的一部分,並將作爲servlet上下文的一部分保存,然後操作類將通過此sessionfactory實例EJB會話bean委託給hibernate DAO。

  3. 我想這將是一個乾淨的方法,因爲事務將由部署到Websphere上的EJB會話bean管理。 JDBC連接池管理自從在websphere上配置並使用數據源訪問,hibernate不必擔心這一點。

請幫助我,如果我在正確的道路上與我的假設?

+0

Hibernate應該參與你的容器管理事務,你不應該需要一個平行設施。我認爲你應該擔心,因爲你描述的東西並不正確。 – 2010-11-09 16:43:28

回答

0

劃分工作的邏輯單位,因此是固有的孤立。但我想知道爲什麼你需要兩者的結合。如果您已經在使用EJB2 + JDBC,爲什麼不堅持這一點?

0

可以在CMT(或BMT)會話bean沒有任何問題的情況下使用Hibernate,與JDBC代碼共享連接池並參與相同的事務。

查看整個部分11.2. Database transaction demarcation並且特別是11.2.2. Using JTA

不清楚的是Hibernate模塊是否會與通過JDBC管理的實體「隔離」。如果你同時通過API來訪問相同的表,你就必須採取一些預防措施:

  • 不要指望在Hibernate中實體的圖形混合JDBC實體(反有可能雖然)。
  • 尊重和模仿Hibernate的樂觀併發策略通過JDBC
  • 更新行時繞過Hibernate的API將不會觸發任何緩存更新(如果你使用的二級高速緩存),在這種情況下你必須自己觸發它。
0

以下是可能的解決方案

一個共同的JNDI數據源,這將既EJB的和Hibernate使用的一個。

相關問題