2013-06-03 2 views
0

У меня есть 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(); 
    } 
} 

ответ

0

Можете ли вы попробовать экспортировать DataSource в качестве службы OSGi? Используя aries jndi, вы можете использовать его через jndi. Это должно работать без пакета webservice, известного как драйвер oracle. См. http://www.liquid-reality.de/display/liquid/2012/01/13/Apache+Karaf+Tutorial+Part+6+-+Database+Access

Для вашего точного примера это поможет увидеть код.

+0

Источник данных экспортируется как служба osgi, я добавил некоторый пример кода. – blank

+0

Итак, я заменил dbcp.BasicDataSource для OracleDataSource в пакете blueprint.xml DataSource, как в примере github, и мне больше не нужен импорт в веб-службе. Большое спасибо! – blank