我使用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对象并手动转换它的地方。