【问题标题】:com.mysql.jdbc.Driver not found by bundle in karaf在 karaf 中的 bundle 找不到 com.mysql.jdbc.Driver
【发布时间】:2015-06-23 13:30:16
【问题描述】:

我有一个使用 mySQL.jdbc.driver 的包,我在 pom 文件、import-packages 中给出了依赖关系,并在 lib、deploy 文件夹中复制了 mysql 连接器,使用 install wrap:mvn:mysql/mysql 安装了 mysql 驱动程序-connector-java/5.1.17, 我的意思是我尽我所能, 但我仍然收到如下错误消息,仅供参考,我正在使用 karaf-4.0.0.M2,请帮我解决它的路障,

errorMessage = JDBC driver name is missing or not valid, cause = java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found by portframeworkservice [this is my bundle name]

Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found by portframeworkservice [145]
    at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1556)
    at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:77)
    at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1993)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)

【问题讨论】:

  • 你能贴出你用来初始化mysql驱动的代码的sn-p吗?

标签: java osgi karaf


【解决方案1】:

OSGi 中的数据库驱动程序总是有点困难,因为在 OSGi 之外使用 DriverManager 的最常见方法并不真正适合 OSGi。

OSGi 中最好的方法是使用由 OSGi 联盟标准化的 DataSourceFactory。一些数据库驱动程序已经提供了这个。对于其他人,pax-jdbc 提供了一个适配器。对于mysql,第二种情况适用。

所以我的建议是像这样使用 pax-jdbc:

feature:repo-add pax-jdbc 0.6.0
feature:install pax-jdbc-mysql

如果你这样做了

karaf@root()> service:list DataSourceFactory
[org.osgi.service.jdbc.DataSourceFactory]
-----------------------------------------
 osgi.jdbc.driver.class = com.mysql.jdbc.Driver
 osgi.jdbc.driver.name = mysql
 service.bundleid = 52
 service.id = 110
 service.scope = singleton

因此,该功能为您提供了一个随时可用的 DataSourceFactory。您可以将其绑定为 OSGi 服务并从中创建 DataSource。 为了更方便,您还可以使用 pax-jdbc-configpax-jdbc-pool 创建一个随时可用的池化数据源即服务。

我有一个完整的tutorial for accessing databases in OSGi 展示了这种方法。

【讨论】:

  • 不幸的是,这些功能看起来并没有得到维护,例如,pax-jdbc-myql 项目正在使用 mysql 驱动程序,最近一次更新是 3 年前github.com/ops4j/org.ops4j.pax.jdbc/commit/…
  • pax-jdbc 支持大量数据库。人们通常在他们自己的项目需要新版本时更新驱动程序。如果您为新的 mysql 版本创建 PR,我可以帮助您将其放入代码中。
  • @ChristianSchneider:我根据您的描述创建了一个数据源,并在我的骆驼项目的 blueprint.xml 中将此 DS 的 放入。但是,当启动 Karaf 时,蓝图无法初始化,因为在蓝图初始化时 DS 不可用。如果我等待 Karaf 启动,我可以毫无问题地部署项目,但是当我尝试在启动期间自动启动我的包时,它总是会因上述异常而失败。你知道如何解决这个问题吗?
  • 当您的蓝图上下文启动时,DataSource 可能不存在是完全正常的。蓝图应等待数据源出现,然后继续启动您的蓝图。你能在 github 上展示你的项目吗?
猜你喜欢
  • 2018-04-02
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 2015-03-01
相关资源
最近更新 更多