2014-02-06 42 views
0

我有一個使用Hibernate實體(帶註釋)的Java Web應用程序,並且在beans.xml文件中還包含Hibernate的配置(例如方言和映射實體列表)。Hibernate - 如何從另一個Web應用程序項目讀取配置?

我想寫一個新的簡單的Java應用程序(不是一個Web應用程序),將使用相同的Hibernate實體和配置,除了連接屬性(URL,用戶,密碼)。

我需要以某種方式從web-app讀取配置,並且只在運行時更改連接屬性(應用程序期望獲得連接屬性作爲輸入)。
我也希望應用程序能夠與該配置同時連接到多個數據庫。

我該怎麼做?

回答

0

你應該在你的上下文中定義一個DataSource,讓Hibernate使用它,而不是直接給Hibernate指定連接參數。 Tomcat的例子有here。接下來的想法是讓persistence.xml使用來自Tomcat的數據源。

我真的不知道它如何處理具有相同數據源名稱的兩個不同上下文,但如果它不起作用,則可以在persistence.xml中有兩個持久性單元,每個指向一個數據源。然後,在您的應用程序中,使用@PersistenceContext註釋加載您的EntityManager,並指定參數"unitName"

+0

事情是,連接參數是應用程序輸入的一部分。我不能讓它們在XML中預定義。這是我的要求,這對於普通JDBC很容易實現。 –

+0

我看到了兩個解決方案:首先,通過JMX與容器進行交互,即時更改DataSource連接參數,或者擁有「配置器」bean,但是,您必須自己管理Hibernate。配置程序可以使用Hibernate的配置API:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-programmatic。雖然不確定「多個數據庫同時」。 – jpkrohling

+0

我檢查了你之前提供的鏈接,並且假設我使用了一個hibernate.cfg.xml文件,我不這樣做(正如我所說的,我在web-app中有一個beans.xml文件) 。也許我可以創建自己的cfg文件,它將從beans.xml中導入bean。關於多個連接,我想我只需要每個連接的會話工廠。 –

相關問題