【问题标题】:Fuse 6.3 dbcp basic datasourceFuse 6.3 dbcp 基础数据源
【发布时间】:2017-11-15 16:09:35
【问题描述】:

我无法让 dbcp2 在 JBoss fuse 6.3 中工作。 下面给出的代码在 Fuse 容器中运行良好。

<bean id="oracleDSTest" class="oracle.jdbc.pool.OracleDataSource"
        destroy-method="close">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:XE" />
        <property name="username" value="hr" />
        <property name="password" value="hr" />
        <property name="maxIdle" value="5" />
        <property name="minIdle" value="1" />
        <property name="initialSize" value="1" />
    </bean>

    <service interface="javax.sql.DataSource" ref="oracleDSTest">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/oracleDSTest" />
            <entry key="datasource.name" value="oracleDSTest" />
        </service-properties>
    </service>

但如果我使用org.apache.commons.dbcp.BasicDataSource 而不是oracle.jdbc.pool.OracleDataSource 则会失败并出现以下错误:

执行命令出错:oracle.jdbc.driver.T4CConnection.isValid(I)Z

这个错误的原因可能是什么?

【问题讨论】:

  • 您使用的是哪个版本的 oracle jar?
  • ojdbc (11.2.0.0)
  • 我花了一些时间检查:在我的机器上一切正常。不过我使用的是稍微不同的版本。

标签: oracle datasource jbossfuse


【解决方案1】:

我正在使用ojdbc6-11.2.0.3.jar,驱动程序在这两种配置下都可以工作。

我使用来自 JBoss Fuse 控制台的查询对其进行了测试

jdbc:query jdbc/oracle 'select * from somewhere.sometable WHERE rownum < 5'

检查 JDBC 和 JNDI 是否安装

features:install jdbc
features:install jndi

您可以将包含以下内容的 XML 文件拖放到 deploy/ 以自动部署数据源。

Oracle 数据源

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <bean id="oracleDSTest" class="oracle.jdbc.pool.OracleDataSource"
          destroy-method="close">
        <property name="URL" value="jdbc:oracle:thin:@db.host:1521:SID" />
        <property name="user" value="UrName" />
        <property name="password" value="YourPasswrd" />
    </bean>

    <service interface="javax.sql.DataSource" ref="oracleDSTest">
        <service-properties>
            <entry key="osgi.jndi.service.name" value="jdbc/oracle" />
            <entry key="datasource.name" value="oracleDSTest" />
        </service-properties>
    </service>
</blueprint>

基本数据源

<bean id="oracleDSTest" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@db.host:1521:SID"/>
    <property name="username" value="UrName"/>
    <property name="password" value="YourPasswrd"/>
    <property name="maxIdle" value="5" />
    <property name="minIdle" value="1" />
    <property name="initialSize" value="1" />
</bean>

<service interface="javax.sql.DataSource" ref="oracleDSTest">
    <service-properties>
        <entry key="osgi.jndi.service.name" value="jdbc/oracle" />
        <entry key="datasource.name" value="oracleDSTest" />
    </service-properties>
</service>

类加载

请注意,此版本的 Oracle JDBC 驱动程序支持 OSGi。 要让所有东西在 OSGi 下工作,您可能需要从 系统包。
ojdbc6-11.2.0.3.jar(或您的版本)复制到JBoss Fuse 的lib/ 文件夹。
编辑 etc/config.properties 并将包添加到 org.osgi.framework.system.packages 属性

org.osgi.framework.system.packages= \
  other.packages.here, \
  oracle.jdbc;version="11.2.0.3", \
  oracle.jdbc.driver;version="11.2.0.3", \
  oracle.jdbc.pool;version="11.2.0.3", \
  some.other.stuff

重启并检查exports | grep oracle

JBossFuse:karaf@root> exports | grep oracle
     0 oracle.jdbc; version=11.2.0.3
     0 oracle.jdbc.driver; version=11.2.0.3
     0 oracle.jdbc.pool; version=11.2.0.3

【讨论】:

  • 谢谢,效果很好。我还需要将 dbcp 添加到 fuse 容器中。 osgi:install -s wrap:mvn:commons-dbcp/commons-dbcp/1.4
  • @muru 我正在使用mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-dbcp/1.4_3,与features:install camel-mybatis一起安装
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
相关资源
最近更新 更多