gpt4 book ai didi

Hibernate、JDBC 驱动程序和 OSGi 问题

转载 作者:行者123 更新时间:2023-12-04 16:41:54 25 4
gpt4 key购买 nike

我遇到了一个有点令人沮丧的问题。
我使用 Apache Felix 作为我的 OSGi 框架,我也使用 Hibernate 来解决持久性问题。

我使用 Hibernate 的“osgi-bundle”版本(com.springsource.org.hibernate-3.2.6.ga.jar)。据我所知,这是 Hibernate Core,在 META-INF/MANIFEST.mf 中安装了一些额外的 osgi-metdata。此信息(Package-Export 和 Package-Import)对于 osgi 系统至关重要。

我的问题是 Hibernate 包找不到我的 JDBC 驱动程序。在springsource Hibernate bundle中添加Import语句感觉很不对。必须有一些更好的方法来解决这个问题。

最佳答案

Hibernate 不是一个很好的 OSGi 公民,因为 Hibernate 对类可见性所做的许多假设在 OSGi 容器中不再正确。

使用 Class.forName(<jdbc class name>) 加载 JDBC 驱动程序的常用方法在 OSGi 中不起作用,因为在这种情况下,Hibernate 将尝试加载驱动程序但找不到它,因为 Hibernate 不会(也不应该)导入 JDBC 驱动程序包。

JDBC 驱动程序管理器还通过确定调用类的类加载器是否应该看到驱动程序来尝试变得聪明,这也与 OSGi 冲突。

如果你使用 Spring 来配置 Hibernate 那么我建议你使用 SimpleDriverDataSource类,因为这在 OSGi 中有效,Spring 允许您使用具体的数据源配置 Hibernate,而不是传递 Hibernate 需要实例化的类名。

一旦你解决了这个问题,你可能会遇到 Hibernate 没有看到你的域类的问题。我只有 XML 映射方法的经验,我认为在 OSGi 中更简单,因为我认为注释方式需要某种 AOP 编织,这是 OSGi 当前的另一个痛点。

目前,除非您使用 Spring 的 dm Server 之类的东西,否则您需要更加熟悉 Java 的类加载机制以及如何使用 OSGi 的服务方法来解决 vanilla Java 和 OSGi 世界之间的不兼容性。

具体来说,研究企业库如何使用上下文类加载器以及如何管理它。我使用 Spring dm 将遗留代码包装在 OSGi 服务中,因为这样可以轻松控制上下文类加载器。

关于Hibernate、JDBC 驱动程序和 OSGi 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com