找不到文件Hibernate OSGi包

时间:2014-03-25 11:43:09

标签: hibernate osgi

我正在开发一个应用程序,它将Hibernate框架用于OSGi,更具体的Equinox Server。因此,我已经生成了库bundle和客户端插件,我正在编写业务逻辑和数据库之间的通信,利用前面提到的库bundle。在我的项目中,我有一个以下的包结构:

/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"));

在清单文件中,我将包的类路径建立为:

Bundle-ClassPath: .

我还尝试通过bundle上下文对象获取bundle位置,入口路径等,但始终是相同的异常。你知道我怎么能访问配置文件吗?

非常感谢你!

1 个答案:

答案 0 :(得分:0)

它已经解决了!问题是当库和代码分离时,必须在两个包中引用库,这会产生循环依赖。因此,更改客户端上清单的配置,而不是导入包,它将被引用到整个包(Require-Bundle)。然后,避免了循环依赖,此外,服务器端可以导入放置Hibernate文件的包。