У меня есть 3 простых пакета WebService, DataService и DataSource, развернутых в ESE-интерфейсе, каждый из которых построен с использованием плагина maven bundle с чертежом для компонентов проводки и регистрации. Пакет источника данных содержит сведения о соединении и регистрирует источник данных Oracle jdbc через JNDI. DataService использует OpenJPA и имеет DAO, объекты домена и реализацию интерфейса службы с одним методом, который запрашивает базу данных для объекта домена и возвращает строку. Интерфейс службы экспортируется с помощью Export-Package.Для пакета OSGI необходим драйвер jdbc при использовании служебного интерфейса из другого пакета
Веб-служба имеет ссылку на интерфейс службы, экспортированный из пакета DataService.
Я не могу заставить эту установку работать без пакета веб-сервисов, импортирующего драйвер 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();
}
}
который используется компанией We bService bundle
@WebService
class WebService {
private Service service;
@WebMethod
public String getString() {
return service.getString();
}
}
Источник данных экспортируется как служба osgi, я добавил некоторый пример кода. – blank
Итак, я заменил dbcp.BasicDataSource для OracleDataSource в пакете blueprint.xml DataSource, как в примере github, и мне больше не нужен импорт в веб-службе. Большое спасибо! – blank