0

我在 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>

此 Service 接口是从 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();
    }
}
4

1 回答 1

0

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

对于您的确切示例,这将有助于查看代码。

于 2013-06-03T15:18:18.377 回答