OSGi 和 Hibernate - 不适合的驱动程序

Posted

技术标签:

【中文标题】OSGi 和 Hibernate - 不适合的驱动程序【英文标题】:OSGi and Hibernate - not suitable driver 【发布时间】:2012-10-28 19:28:52 【问题描述】:

我遇到了以下情况。 我使用Apache Felix 作为OSGi 服务实现和Apache Karaf 作为OSGi 容器。 karaf 中有一个捆绑包,它应该通过休眠将一些数据保存到数据库中,但我总是得到一个 SQLException: No Suitable Driver found. 我将mysql-connector-bundle 部署到karaf。 在我看来,问题是休眠是否导入mysql-driver-packages 或我应该映射的类。 但我不知道如何解决这个问题。我对 Eclipse rcp 很熟悉,其中 buddy-policy 修复了此类问题,felixkaraf 是否有针对此问题的最佳实践?

【问题讨论】:

您确定 mysql-connector-bundle 捆绑包正确安装到容器中吗? 是的,我使用了 mysql-connector-java,它被标记为活动的。 你看到那些解决方案***.com/questions/5982675/…了吗? 是的,但它们不适合。检查了我的 hibernate-cfg 两次,没有错误。 请附上 mysql-connector-bundle 的清单以及与 DB 通信的捆绑包。 【参考方案1】:

你使用什么版本的休眠?只有从 Hibernate 4 开始,hibernate 才知道 OSGi 类加载器,但它仍然没有完整的 OSGi 支持。参见例如https://hibernate.onjira.com/browse/HHH-7527,计划用于 Hibernate 4.2。

我们使用 Gemini JPA 和 eclipselink 作为 OSGi 中的 JPA 提供程序。

在 karaf 生态系统中,有 Aries JPA,主要用于 OpenJPA。见Which JPA providers are supported by Apache Aries Managed JPA?

【讨论】:

【参考方案2】:

Hibernate 无法访问来自其他捆绑软件的数据和类(至少在 3.x 版本中;我不知道版本 4)。只有当所有(使用休眠、pojos、映射文件、所有库的方法)都在同一个包中时,它才能轻松工作。它无法访问其他包中的资源。

另请参阅my answer in this thread。

【讨论】:

以上是关于OSGi 和 Hibernate - 不适合的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

您可以在不使用 JTA 的情况下在 OSGi 环境(如 Karaf)中使用 Hibernate 5.2 StatelessSession 吗?

如何让 Spring JPA、Hibernate 和 OSGi 发挥出色?

osgi 的好格式

具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包

使用 Hibernate Unmanaged JPA 在 Equinox OSGI 框架中获取 EntityManagerFactory

最适合的 OSGi 平台? [关闭]