我正在開發Spring(2.5.6)+ Hibernate(3.2.6)Web應用程序以連接到自定義數據庫。爲此我定製了JDBC驅動程序和Hibernate方言。我確定這些自定義類可以工作(在我的單元測試中硬編碼的東西)。如何在初始化Hibernate的SessionFactory之前讓Spring加載JDBC驅動程序?
我想這個問題與Spring上加載事件的順序有關。 基本上是:
- 自定義數據庫初始化從web.xml中
- 彈簧負荷豆
- 彈簧負載ServletBeans(applicationContext.xml中)
- 休眠踢:顯示版本和所有屬性正確加載。
- Hibernate的HbmBinder運行(映射我的所有類)
- 的LocalSessionFactoryBean - 構建新的SessionFactory
- DriverManagerConnectionProvider - 使用驅動程序:MyCustomJDBCDriver在CustomDBURL
- 我得到的SQLException:發現CustomDBURL 沒有合適的驅動程序
- 休眠加載自定義語言
- 我的CustomJDBCDriver最終獲得DriverManager註冊(日誌消息)
- SettingsFactory運行
- 的SchemaExport運行(就是hbm2ddl)
- 我得到的SQLException:發現CustomDBURL沒有合適的驅動程序(一次?)
- 申請得到成功部署,但也有我的自定義數據庫沒有表。
的事情,我試過到目前爲止:
- 不同的技術傳遞休眠特性:嵌入'的sessionFactory bean實例,從hibernate.properties文件加載。沒有任何工作,但我沒有嘗試用hibernate.cfg.xml文件既沒有數據源bean。
- MyCustomJDBCDriver有一個靜態初始化程序塊,它可以用DriverManager自行註冊。
- 嘗試了Spring bean的延遲初始化(lazy-init =「true」)的不同組合,但沒有任何工作。
我的自定義JDBC驅動程序應該是第一個要加載的東西 - 不知道是否由Spring發佈,但是......!
任何人都可以給我一個解決方案,或者我可以嘗試什麼暗示?如果有幫助,我可以提供更多的細節(例如巨大的堆棧跟蹤)。
在此先感謝。
在其環境在你看到這個問題?春季情境感知單元測試? jboss部署? (這可能是一個類加載器的問題:你是否使用jboss分發包括在服務器/ ctxt/lib中的休眠和驅動程序庫在你的戰爭?) – Thierry 2010-05-11 15:53:09
嗨Thierry,我想部署應用程序在本地Jetty服務器進行測試。實際上,比這更復雜一點:Jetty運行在一個處理單元(PU)的容器內。因此,PU開始比創建並啓動Jetty容器。 Jetty完成剩下的工作(WebAppContext稍後在PU中註冊)。我如何跟蹤我的CustomJDBCDriver被加載的類加載器和Spring的類加載器? 謝謝! – 2010-05-12 09:21:39
最後,我的一位同事在工作中爲我找到了解決方案。正如@Thierry所說,這是一個類加載器問題。我正在用Spring庫部署我的應用程序,但處理單元已經加載了(Jetty的lib文件夾)。所以他們有衝突。我找到的解決方案是將我的CustomJDBCDriver.jar放在Spring jar(jetty lib文件夾或apps/WEB-INF/lib)所在的文件夾中,並確保只有一個。就是這樣!謝謝大家! – 2010-05-13 10:22:41