我正在开发一个应用程序,它将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位置,入口路径等,但始终是相同的异常。你知道我怎么能访问配置文件吗?
非常感谢你!
答案 0 :(得分:0)
它已经解决了!问题是当库和代码分离时,必须在两个包中引用库,这会产生循环依赖。因此,更改客户端上清单的配置,而不是导入包,它将被引用到整个包(Require-Bundle)。然后,避免了循环依赖,此外,服务器端可以导入放置Hibernate文件的包。