Използване на драйвер на 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]

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

Някаква идея какво може да ми липсва?


person hveiga    schedule 11.02.2014    source източник
comment
Можете ли да обясните какво правите, за да инсталирате вашия план. Започвайки от пресен караф (коя версия). Със сигурност инсталирате драйвера на oracle по някакъв начин.   -  person Christian Schneider    schedule 11.02.2014
comment
За да инсталирам своя план, просто пускам xml и jar файловете на драйвера на oracle в директорията за разгръщане. Версията на Karaf е 2.3.3.   -  person hveiga    schedule 11.02.2014


Отговори (3)


Може да се интересувате от моята урок за karaf db.

Простото премахване на db драйвера вероятно не работи. Описвам там как да използвам wrap: протокола на pax url. По този начин драйверите са пакетирани с 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 bundle? Очаквах, че ще доведе до настройки като Ignore-Package: javax.sql в генерирания манифест. - person bgossit; 12.02.2014
comment
Няма Ignore-Package във файла на манифеста за файла oracle jar. - person hveiga; 12.02.2014
comment
Добре, това е интересно. Можете да опитате да ги поставите като Ignore-Package записи вместо Import-Package записи с удивителен знак или да се откажете от тази идея, ако желаете, не бях сигурен, че ще работи и за вас, но реших, че си струва да опитате... - person bgossit; 12.02.2014
comment
Ще го пробвам и ви благодаря за помощта. Тази вечер ще продължа да разследвам това и ще публикувам решението, ако го намеря. Благодаря отново. - person hveiga; 12.02.2014