apache servicemix 无法为 apache dbcp 加载 jdbc 驱动程序

apache servicemix cannot load jdbc driver for apache dbcp

我有一个 servicemix bundle 尝试 load jdbc driver 但失败并显示消息

Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

这是我的 pom.xml 文件

      <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.32</version>
    </dependency>

    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.4</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.4.2</version>
    </dependency>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <configuration>
                <instructions>
                    <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
                    <Import-Package>
                        com.mysql.jdbc,
                        *
                    </Import-Package>
                    <DynamicImport-Package>
                        *
                    </DynamicImport-Package>
                </instructions>
            </configuraiton>
        </plugin>

我的 features.xml 文件中提到了以下几行,这些行是使用 features:addurl 命令添加到 karaf 中的。

<bundle>wrap:mvn:mysql/mysql-connector-java/5.1.32</bundle>
<bundle>wrap:mvn:commons-dbcp/commons-dbcp/1.4</bundle>
<bundle>wrap:mvn:commons-pool/commons-pool/1.6</bundle>

你见过ClassNotFoundException: com.mysql.jdbc.Driver not found while using service mix吗?用户将以下内容添加到 Pom:

<osgi-import-package>
  org.apache.commons.dbcp
</osgi-import-package>

<dependency>
  <groupId>org.apache.servicemix.bundles</groupId>
  <artifactId>org.apache.servicemix.bundles.commons-dbcp</artifactId>
  <version>1.4_3</version>
</dependency>

并且还更改了

的路线
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

我通过添加 servicemix wrapper jar for dbcp @https://mvnrepository.com/artifact/org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-dbcp/1.4_3

解决了这个问题

生成的 pom 条目

    <dependency>
        <groupId>org.apache.servicemix.bundles</groupId>
        <artifactId>org.apache.servicemix.bundles.commons-dbcp</artifactId>
        <version>1.4_3</version>
    </dependency>

注意:在使用 karaf 或任何 OSGi 时,请始终注意 bundle/jar 文件的 META-INF/MANIFEST.MF 以查看它导入(Import-Package)和导出的内容(Export-Package)

如下图karaf-console dbcp bundle 的截图,com.mysql.jdbc pakage 是为servicemix dbcp 导入的

<bundle>wrap:mvn:commons-dbcp/commons-dbcp/1.4$Import-Package=com.mysql.jdbc</bundle> 应该会出现与屏幕截图中相同的导入,但徒劳无功。