2014-02-11 143 views
2

我想在Apache Karaf中使用Oracle jdbc 6驅動程序購買我面臨一些困難。特別是,我試圖使用驅動程序通過Camel SQL組件訪問我的數據庫。在Karaf中使用Apache驅動程序和Apache 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驅動程序無法找到某些類。我有osgified使用apache-felix maven插件的oracle jar,但也許我做錯了什麼,並且MANIFEST.MF文件丟失了一些東西。

任何想法我可能會失蹤?

+0

你能解釋你做什麼來安裝你的藍圖。從一個新的karaf(哪個版本)開始。你肯定會以某種方式安裝oracle驅動程序。 –

+0

要安裝我的藍圖,我只需將xml和oracle驅動程序jar文件放入deploy目錄即可。 Karaf版本是2.3.3。 – hveiga

回答

2

我已經通過向MANIFEST.MF以下行解決了我的問題:

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

感謝所有幫助!

1

我不得不使用Maven將類似的Oracle驅動程序封裝到一個包中。這是我有可能幫助:

甲骨文捆綁:引用它剛剛Import-Package: *和Maven填寫其餘

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

其他包。

+0

感謝您的評論。我嘗試了,但我得到了:'org.osgi.framework.BundleException:捆綁中的未解決的約束oracle.ojdbc6 [131]:無法解析131.1:缺少需求[131.1] osgi.wiring.package; (osgi.wiring.package =!javax。*)' – hveiga

+0

你使用的是Maven bundle插件嗎?我預計它會在生成的清單中產生諸如「Ignore-Package:javax.sql」之類的設置。 – bgossit

+0

對於oracle jar文件,Manifest文件中沒有「Ignore-Package」。 – hveiga

2

你可能會喜歡我的karaf db tutorial

簡單地刪除數據庫驅動程序可能不起作用。我在那裏描述使用pax url的wrap:協議。這樣,驅動程序就與bnd和默認設置捆綁在一起。所以這可能已經給你一個工作系統。對於生產用途,最好使用像bgossit這樣的maven項目來捆綁驅動程序。你會在servicemix bundles找到很多這方面的例子。