【问题标题】:OSGI with Hibernate: "No suitable driver found"OSGI with Hibernate:“找不到合适的驱动程序”
【发布时间】:2011-12-22 05:29:13
【问题描述】:

我得到了心爱的错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/acme

我了解通常会出现此错误的许多原因:

  • 无效的 URL: 该 URL 似乎没有任何错误,并且在 SQL Workbench 中运行良好。
  • Driver Not on ClassPath:已成功导入(org.postgresql.Driver),可以直接实例化,也可以使用 Class.forName("org.postgresql.Driver") 实例化。

Hibernate SessionFactory 加载从 Spring-Bean 启动,但在运行时使用以下属性执行:

hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class = org.postgresql.Driver
hibernate.connection.url = jdbc:postgresql://localhost:5432/acme
hibernate.connection.username = user
hibernate.connection.password = pass

我了解 Java DriverManager 在 OSGi 中不起作用,因此使用 DriverManager 注册驱动程序或实例化它以强制其注册无效。

有谁知道我该如何解决这个问题?有没有通用的解决方案?

提前致谢!


解决方案

正如 Andres Olarte 所指出的,我犯了一个错误,将驱动程序添加到 implementation bundle 中,但将其排除在 Hibernate 的类和依赖项所在的 Hibernate bundle 之外居住。

【问题讨论】:

    标签: hibernate postgresql jdbc osgi equinox


    【解决方案1】:

    你是如何打包的?如果将 Hibernate 和 Postgresql JDBC jar 放在同一个 OSGi 包中,它应该可以工作。这就是 BIRT 加载其 jdbc 驱动程序的原因。

    【讨论】:

    • 它们在两个单独的包中,但引用它们或实例化它们没有问题,所以我看不出这是问题...?
    • 你可以在 Hibernate 包中添加代码来访问 PostgreSQL 包中的类吗?您可能能够从第三个包访问 Hibernate 和 PostgreSQL 包中的类,但这并不意味着 Hibernate 包将能够访问 PostgreSQL 包中的类。如果 Hibernate 包知道它,它将能够访问 PostgreSQL 中的类。有意义吗?
    • 这很可能是问题所在,因为我不记得自从添加 PostgreSQL 驱动程序后对 Hibernate 包进行了任何更改,并且正如您所猜测的那样,我的 Hibernate SessionFactory 位于第三个包中!我会在星期一看看这个并回复你。
    • 谢谢安德烈斯,这正是问题所在!不敢相信我错过了这么小的东西,这确实是 OSGi 的陡峭学习曲线。您是否也可以更新您的答案以反映这一点。再次感谢。
    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 2012-12-09
    • 2017-09-20
    • 2011-10-21
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多