【问题标题】:OSGI bundle requires jdbc driver when using service interface from other bundleOSGI 捆绑包在使用来自其他捆绑包的服务接口时需要 jdbc 驱动程序
【发布时间】:2013-05-29 08:04:49
【问题描述】:

我在 Fuse ESB 中部署了 3 个简单的包 WebService、DataService 和 DataSource,每个包都使用 maven 包插件构建,带有用于连接 bean 和注册服务的蓝图。数据源包包含连接详细信息并通过 JNDI 注册 Oracle jdbc 数据源。 DataService 使用 OpenJPA 并具有 DAO、域实体和服务接口实现,其中一种方法可以在数据库中查询域实体并返回字符串。使用 Export-Package 导出服务接口。

Web 服务具有对从 DataService 包导出的服务接口的引用。

如果没有导入 oracle jdbc 驱动程序的 Web 服务包,我无法让此设置工作 - 我认为不需要。我得到一个

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver from bundle 430 (web-service-bundle)

除非我导入 oracle.jdbc.driver 包,否则例外。

DataSource 包将数据源作为服务导出到 blueprint.xml

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <!-- other properties go here -->
</bean>

<service ref="dataSource" interface="javax.sql.DataSource">
    <service-properties>
        <entry key="osgi.jndi.service.name" value="jdbc/dataSource" />
    </service-properties>
</service>

DataService 在它的 persistence.xml 中使用的内容

  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
  <jta-data-source>osgi:service/jdbc/dataSource</jta-data-source>

此服务接口是从 DataService 服务包中导出的

class SomeService implements Service {
    private Dao dao;
    public void String getString() {
        Entity entity = dao.getEntity();
        return entity.getString();
    }

}

WebService 包使用的

@WebService
class WebService {

    private Service service;

    @WebMethod
    public String getString() {
        return service.getString();
    }
}

【问题讨论】:

    标签: jdbc osgi blueprint-osgi


    【解决方案1】:

    您可以尝试将 DataSource 导出为 OSGi 服务吗?使用 aries jndi,您仍然可以通过 jndi 使用它。这应该可以在 web 服务包不知道 oracle 驱动程序的情况下工作。见http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access

    对于您的确切示例,查看代码会有所帮助。

    【讨论】:

    • 数据源导出为osgi服务,我添加了一些示例代码。
    • 所以 .. 我已经将 DataSource 包 blueprint.xml 中的 dbcp.BasicDataSource 换成了 OracleDataSource,就像在您的 github 示例中一样,我不再需要在 Web 服务中导入。非常感谢!
    猜你喜欢
    • 2016-03-26
    • 2011-05-29
    • 2021-02-26
    • 2012-06-29
    • 2014-05-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多