2010-03-31 30 views
0

我是在單個的Tomcat服務器上運行,並連接到與Hibernate同一個數據庫兩個Web應用程序。我擔心有兩個SessionFactory實例運行可能會導致一些問題。如何跨Web應用程序共享Hibernate SessionFactory?

而且,由於這兩個web應用有着許多相同的應用程序邏輯的,我認爲它會是一個好主意,集中儘可能多盡我所能。由於我使用Spring進行DI和Hibernate配置,因此只有一個ApplicationContext也是有意義的。

我怎麼會去這樣做這樣的事情?我是否需要部署一個無頭WAR來創建一個ApplicationContext,從而創建一個SessionFactory並允許每個應用程序訪問它?這是個好主意嗎?

回答

1

有可能通過JNDI來分享SessionFactory(理想情況下,你會在你的應用服務器作爲JMX服務Hibernate部署)。

但說實話,有2+ SessionFactory實例是不是一個真正的關注,沒有什麼真正擔心。這是一種非常常見的情況,即使對於單個應用程序(在集羣環境中)也是如此。

+0

JNDI是一個想法,但在這一點上可能無法實現。我會更深入地研究它。不過,你的第二點意義重大。謝謝! – Jeremy 2010-04-01 10:57:32

1

我擔心,有四處奔波 2種 SessionFactory的情況下可能會導致一些問題。

Web應用程序在專用ClassLoader中相互屏蔽。所以我不知道如何發生衝突,並且不會因此而煩惱。兩個SessionFactory應該沒問題。

1

可以把創建的會話,並且然而它訪問到共享的類加載器(通常是JAR中/共享)應用程序的邏輯 - 必須非常小心,這樣做,因爲它很容易產生奇怪的例外,除非你」重新熟悉你在做什麼。

這也是不可能的,你會看到一個很大的好處這(因爲你不必擔心同步web應用程序會話狀態等),除非你需要跨2種的webapps同步事務 - 在這種情況下,JTA或其他選擇可能仍然是更好的解決方案。

+0

同步處理是一個問題,因爲應用之一是客戶端應用程序的管理應用程序。感謝您的迴應。我同意將應用程序放入共享類加載器中可能不是一個好主意。 – Jeremy 2010-04-01 11:00:04

+0

是的,不幸的是,JNDI路由基本上要求與JDBC驅動程序相同。 – jayshao 2010-04-02 21:02:01

相關問題