2012-03-07 82 views
3

我正在開發使用了利用由Hibernate支持春天的數據JPA實現數據訪問層一個RCP應用基礎。註釋的域類在一個jar/bundle中,Spring存儲庫和spring配置實例化數據源,實體管理器和事務管理器在另一個bundle中。這些jar被其他非RCP應用程序在整個項目中使用。的hibernate 3.6.8 jar包和依賴包可以通過我自己的插件或OSGI包(jta,antlr,commons集合等)在目標平臺中打包和公開。我使用Eclipse Gemini Blueprint來管理RCP應用程序中的bundle spring上下文。Eclipse RCP的,spring,hibernate的類加載問題

當DAL bundle spring上下文被gemini擴展器初始化時,我得到了Hibernate相關的ClassDefNotFound異常,通常在org.hibernate.ejb.HibernatePersistence或javax.persistence.spi.Persistenceprovider上。我試過把所有的hibernate jar和依賴關係放在一個導出javax和hibernate包的插件中。我已經嘗試在我已經控制的插件的清單中設置Eclipse Buddy策略等。

我一直沒有找到任何解決方案,以加載彈簧和Hibernate之間的Eclipse RCP下使用雙子座。我已經完成了在RCP中通過hibernate DAO項目,將所有hibernate jar放在與我的域和DAO類相同的插件中,因此只有我的類被導出。

在這一點上,我不認爲移動到一個更友好的OSGI JPA提供商如OpenJPA或EclipseLink的是一個選項。

我找到了一個稍微相關的問題的答案,建議將所有的彈簧罐和依賴關係放入一個插件中,將hibernate罐和依賴關係放在另一個插件中,並設置好友策略。當涉及的大多數瓶子都是OSGi包時,這似乎很髒。

我想我可以創建包含DAL罐子,罐子冬眠和春季ORM罐子一個插件,所以它們都可以看到對方。

有沒有一種乾淨的方式來得到它的工作?

回答

0

,如果你擁有它的核心軟件包,添加所有的懷疑束爲註冊好友,並確保您有定義的包或束reuired否則有時哥們類加載行不通的。如果加載是從你發起的,捆綁eclipse好友策略應該級聯。其他選項則是修改導致問題的目標包中的manfiest文件。

+0

謝謝鄧肯。我採用了類似的方法來描述獲得JPA DAO解決方案與Hibernate一起工作的方法,但沒有Spring Data JPA,它將Hibernate jar和依賴項捆綁在一個插件中,並使用我的域模型插件和DAO插件進行好友加載。我不想修改任何第三方清單,因爲這不是一個好的維護選項。因此,由於類加載器問題,我在Eclipse RCP環境中使用Spring Data JPA放棄了底線。 – KWilson 2012-04-06 13:56:47