2014-02-11 149 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找到很多这方面的例子。