2014-03-25 26 views
0

我正在開發一個應用程序,該應用程序使用OSGi,更具體的Equinox Server來使用Hibernate框架。因此,我已經生成了庫包和客戶端插件,用於編寫業務邏輯和數據庫之間的通信,利用前面提到的庫包。在項目中,我包的結構如下:找不到文件Hibernate OSGi包

/src 
    /com.cartif.manager 
    /com.cartif.hibernatemappings 

在經理包我負責與數據庫映射一個通信客戶端的這些類包含配置文件和Hibernate映射文件。然而,當我部署包,引用運作良好,但我得到一個異常如下:

Exception in thread "Thread-20" org.hibernate.HibernateException: could not find file: .\com\cartif\hibernatemappings\hibernate.cfg.xml 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2136) 
    at com.cartif.dwhconnector.manager.DatabaseCommunicator.createDBSession(DatabaseCommunicator.java:89) 
    at com.cartif.dwhconnector.manager.DWHManager.createDBSession(DWHManager.java:53) 
    at com.cartif.dwhconnector.osgi.DWH_Handler.<init>(DWH_Handler.java:65) 
    at com.cartif.dwhconnector.osgi.Activator.run(Activator.java:67) 
Caused by: java.io.FileNotFoundException: .\com\cartif\hibernatemappings\hibernateTUC.cfg.xml (El sistema no puede hallar la ruta especificada) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(Unknown Source) 
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2133) 

此例外是行拋出,我正在讀的cfg.xml文件:

configuration.configure(new File("./com/cartif/hibernatemappingshibernate.cfg.xml")); 

在manifest文件中,我建立了包的類路徑:

Bundle-ClassPath: . 

我也試圖讓束的位置,進入通道等thrugh捆上下文對象,但總是有同樣的例外。你知道我如何訪問配置文件嗎?

非常感謝您提前!

回答

0

它已經解決了!問題在於庫和代碼是分開的,這兩個庫必須在兩個包中生成一個循環依賴。因此,改變客戶端清單的配置,而不是導入包,它被引用到整個包(Require-Bundle)。然後,避免循環依賴,此外,服務器端可以導入放置Hibernate文件的包。

+0

何塞,請注意,Hibernate不是在開發OSGi時考慮到的。我們有太多的類加載問題,我們放棄了並轉到另一個JPA實現。 – Cristiano

+0

非常感謝您的評論。我可以問你在OSGi中使用JPA有用的框架嗎? –

+0

我知道有兩個選項:Gemini JPA和Aries JPA。 – Cristiano