我在Fuse ESB中部署了3个简单的捆绑WebService,DataService和DataSource,每个捆绑使用maven捆绑插件和蓝图连接bean并注册服务。数据源包包含连接详细信息,并通过JNDI注册Oracle jdbc数据源。 DataService使用OpenJPA并具有DAO,域实体和服务接口实现,其中一种方法在数据库中查询域实体并返回字符串。使用Export-Package导出服务接口。
Web服务引用了从DataService包导出的服务接口。
我无法在没有Web服务包导入oracle jdbc驱动程序的情况下使用此设置 - 我认为不需要它。我得到了
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();
}
}
答案 0 :(得分:0)
您可以尝试将DataSource导出为OSGi服务吗?使用aries jndi,你仍然可以通过jndi使用它。这应该可以在没有知道oracle驱动程序的webservice bundle的情况下工作。见http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access
对于您的确切示例,将有助于查看代码。