0

I am using Spring to access oracle AQ.

I am getting following errors on startup, if I use JNDI based datasource in Tomcat/Webshpere server. Can anyone please guide me how I can solve this issue?

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

Whereas in Websphere server, it gives following error

[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

Following are my configs 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 & 4.2.6) Bean definitions

<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" />

Following are other related dependencies

    <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>

My program works fine if I use org.springframework.jdbc.datasource.DriverManagerDataSource OR oracle.jdbc.pool.OracleConnectionPoolDataSource datasource

Our restriction is that we want to use JNDI based datasource.

P.S. Contrary to question how to cast dbcp connection to oracle connection?, I dont have handle on database connection in this example. Everything is being handled by the Spring. In my example, I don't have any place where I can get Connection object and manually cast it.

Community
  • 1
  • 1
amique
  • 2,176
  • 7
  • 34
  • 53

0 Answers0