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 修复了此类问题,felix
和 karaf
是否有针对此问题的最佳实践?
【问题讨论】:
您确定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 发挥出色?
具有运行时 pojos 的带有 Hibernate 的 OSGi 片段包
使用 Hibernate Unmanaged JPA 在 Equinox OSGI 框架中获取 EntityManagerFactory