Spring AQ JMS错误 - 无法将连接强制转换为oracle.jdbc.internal.OracleConnection

时间:2016-06-01 07:06:59

标签: java spring oracle jdbc apache-commons-dbcp

我使用Spring访问oracle AQ。

如果我在Tomcat / Webshpere服务器中使用基于JNDI的数据源,我在启动时会遇到以下错误。任何人都可以指导我如何解决这个问题吗?

Cause: Error creating the db_connection; nested exception is java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp2.PoolingDataSource$PoolGuardConnectionWrapper cannot be cast to oracle.jdbc.internal.OracleConnection

Websphere 服务器中,它会出现以下错误

[ERROR   ] Could not refresh JMS Connection for destination 'Q_AQ_EVENT' - retrying using FixedBackOff{interval=5000, currentAttempts=2, maxAttempts=unlimited}.
Cause: Error creating the db_connection; nested exception is java.lang.ClassCastException: com.ibm.ws.rsadapter.jdbc.WSJdbcConnection incompatible with oracle.jdbc.internal.OracleConnection

以下是我的配置 的 JNDI

<Resource name="jdbc/DB-ORA" auth="Container"
          type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@domain.com:1521:ORCL"
          username="XXXX" password="XXXX" maxTotal="20" maxIdle="10"
          maxWaitMillis="-1" accessToUnderlyingConnectionAllowed="true"/>

Spring(v 3.2.17&amp; 4.2.6)Bean定义

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/DB-ORA" />
</bean>

<bean id="dbcpNativeJdbcExtractor" 
    class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>

<orcl:aq-jms-connection-factory id="connectionFactory" native-jdbc-extractor="dbcpNativeJdbcExtractor"  data-source="dataSource" />

以下是其他相关依赖项

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-oracle</artifactId>
        <version>1.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>javax.jms</groupId>
        <artifactId>javax.jms-api</artifactId>
        <version>2.0.1</version>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>aqapi</artifactId>
        <version>11.2.0</version>
    </dependency>

如果我使用org.springframework.jdbc.datasource.DriverManagerDataSource OR oracle.jdbc.pool.OracleConnectionPoolDataSource数据源

,我的程序运行正常

我们的限制是我们想要使用基于JNDI的数据源。

P.S。与问题how to cast dbcp connection to oracle connection?相反,在此示例中我没有处理数据库连接。一切都在春天处理。在我的例子中,我没有任何可以获取Connection对象并手动转换它的地方。

0 个答案:

没有答案