【问题标题】:could not find file Hibernate OSGi bundle找不到文件休眠 OSGi 包
【发布时间】:2014-05-03 05:38:28
【问题描述】:

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

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

在管理器包中,我有那些负责客户端与数据库通信的类,其中一个包含配置文件和休眠映射文件。尽管如此,当我部署捆绑包时,引用运行良好,但我得到一个异常如下:

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: .

我也尝试通过捆绑上下文对象获取捆绑位置、入口路径等,但总是相同的异常。你知道我如何访问配置文件吗?

非常感谢您!

【问题讨论】:

    标签: hibernate osgi


    【解决方案1】:

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

    【讨论】:

    • 何塞,请注意,Hibernate 开发时并未考虑到 OSGi。我们有太多的类加载问题,我们放弃了并转移到另一个 JPA 实现。
    • 非常感谢您的评论。请问OSGi中JPA有用的框架吗???
    • 我知道有两个选项:Gemini JPA 和 Aries JPA。
    猜你喜欢
    • 2010-10-14
    • 2012-04-16
    • 2016-04-08
    • 2020-11-18
    • 1970-01-01
    • 2014-05-24
    • 2014-11-28
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多