2014-03-25 28 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