com.mysql.jdbc.Driver在karaf中找不到bundle

时间:2015-06-23 13:30:17

标签: java osgi karaf

我有一个使用mySQL.jdbc.driver的bundle,我已经在pom文件,import-packages和lib中复制mysql连接器,deploy文件夹,使用install wrap安装了mysql驱动程序:mvn:mysql / mysql - 连接器的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)

1 个答案:

答案 0 :(得分:3)

OSGi中的数据库驱动程序总是有点困难,因为使用DriverManager的OSGi之外最常用的方法并不适合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来展示这种方法。