Использование драйвера Oracle в Karaf с компонентом Apache Camel SQL

Я пытаюсь использовать драйвер Oracle jdbc 6 в Apache Karaf, но сталкиваюсь с некоторыми трудностями. В частности, я пытаюсь использовать драйвер для доступа к моей базе данных через компонент Camel SQL.

Мой файл чертежа выглядит так:

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close">
        <property name="dataSourceName" value="XXXXX" />
        <property name="TNSEntryName" value="XXXXX" />
        <property name="DriverType" value="XXXXX" />
        <property name="user" value="XXXXX" />
        <property name="password" value="XXXXX" />
    </bean>

    <!-- configure the Camel SQL component to use the JDBC data source -->
    <bean id="sql" class="org.apache.camel.component.sql.SqlComponent">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent">
        <property name="location" value="file:${karaf.home}/etc/sqlStatements.properties" />
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route id="metis123">
            <from uri="timer:foo?period=5000" />
            <to uri="sql:{{sql.check_rwos_update}}" id="sqlCheckRwosUpdate" />
            <to uri="log:com.hveiga?showAll=true" />
        </route>
    </camelContext> 
</blueprint>

Когда я помещаю свой файл в каталог deploy в Karaf, я получаю следующее исключение:

org.osgi.service.blueprint.container.ComponentDefinitionException: Unable to instantiate components
...
Caused by: java.lang.NoClassDefFoundError: javax/sql/DataSource
...
Caused by: java.lang.ClassNotFoundException: javax.sql.DataSource not found by oracle.ojdbc6 [131]

Таким образом, кажется, что проблема заключается в том, что драйвер оракула не может найти какой-либо класс. Я osgified oracle jar с помощью подключаемого модуля apache-felix maven, но, возможно, я делаю что-то не так, и в файле MANIFEST.MF чего-то не хватает.

Любая идея, что я мог пропустить?


person hveiga    schedule 11.02.2014    source источник
comment
Можете ли вы объяснить, что вы делаете, чтобы установить свой план. Начиная со свежего карафа (какая версия). Вы наверняка каким-то образом устанавливаете драйвер оракула.   -  person Christian Schneider    schedule 11.02.2014
comment
Чтобы установить мой проект, я просто помещаю файлы xml и jar-файлы драйвера оракула в каталог развертывания. Версия Карафа 2.3.3.   -  person hveiga    schedule 11.02.2014


Ответы (3)


Вас может заинтересовать мой руководство по базе данных karaf.

Простое удаление драйвера db, вероятно, не сработает. Я описываю там использование протокола wrap: URL-адреса pax. Таким образом, драйверы объединяются с bnd и настройками по умолчанию на лету. Так что это может уже дать вам работающую систему. Для производственного использования лучше связать драйверы с помощью проекта maven, подобного описанному bgossit. Вы найдете множество примеров для этого в наборах servicemix. .

person Christian Schneider    schedule 11.02.2014

Я решил свою проблему, добавив в MANIFEST.MF следующую строку:

Import-Package: javax.sql, javax.naming, javax.management, org.ietf.jgss

Спасибо за помощь!

person hveiga    schedule 13.02.2014

Мне пришлось сделать аналогичную упаковку драйвера Oracle в пакет с использованием Maven. Вот что у меня было, может поможет:

Пакет Oracle:

Export-Package: oracle.jdbc, oracle.jdbc.driver
Import-Package: !javax.*, !oracle.*

В других пакетах, которые ссылаются на него, просто было Import-Package: *, а Maven заполнил остальное.

person bgossit    schedule 11.02.2014
comment
Спасибо за ваш комментарий. Я пытался, но у меня получилось: org.osgi.framework.BundleException: Unresolved constraint in bundle oracle.ojdbc6 [131]: Unable to resolve 131.1: missing requirement [131.1] osgi.wiring.package; (osgi.wiring.package=!javax.*) - person hveiga; 11.02.2014
comment
Вы используете плагин пакета maven? Я ожидал, что это приведет к таким настройкам, как Ignore-Package: javax.sql в сгенерированном манифесте. - person bgossit; 12.02.2014
comment
В файле манифеста для файла jar оракула нет Ignore-Package. - person hveiga; 12.02.2014
comment
Хорошо, это интересно. Вы можете попробовать поместить их как записи Ignore-Package вместо записей Import-Package с восклицательным знаком или отказаться от этой идеи, если хотите, я не был уверен, что это сработает и для вас, но подумал, что стоит попробовать... - person bgossit; 12.02.2014
comment
Я попробую и спасибо за вашу помощь. Сегодня вечером я продолжу расследование по этому поводу и опубликую решение, если найду его. Спасибо еще раз. - person hveiga; 12.02.2014