我在 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();
}
}