关于侦听队列的Spring JDBC Extensions,Oracle AQ,ClassCastException

时间:2017-07-11 19:04:49

标签: oracle spring-data spring-jms

(我希望下面的内容有道理,我对格式化有点困难)。

我们有一个应用程序(目前正在从大约2005年的技术中刷新),其所有者需要使用Oracle AQ进行消息处理。

我们正在使用Spring JDBC扩展,当应用程序开始侦听队列时,它会得到一个ClassCastException,说" X不能转换为oracle.jdbc.internal.OracleConnection"。

当我们使用Wildfly中定义的数据源时,X是来自jboss的WrappedConnectionJDK7,例如

<bean id="dataSource-supsrep" 
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="...." />
<property name="password" value="...." />
</bean>
当我们像这样定义数据源时,

或X是来自commons.dbcp的PoolGuardConnectionWrapper:

<bean id="dataSource-supsrep" 
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="...." />
<property name="password" value="...." />
</bean>

Message Listener bean的定义如下:

<bean id="messageListener" class="xxx.report.dispatch.DispatchMDB" />

Message Listener容器bean是这样的:

<bean id="reportProcessorXslfoHigh" 
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="sessionTransacted" value="true" />
<property name="connectionFactory" ref="AQconnectionFactory" />
<property name="destinationName" value="Q1_XSLFO_HIGH" />
<property name="messageListener" ref="messageListener" />
<property name="transactionManager" ref="transactionManager" />
<property name="concurrentConsumers" value="1" />
<property name="maxConcurrentConsumers" value="1" />
<property name="receiveTimeout" value="30000" />
<property name="idleTaskExecutionLimit" value="30" />
<property name="idleConsumerLimit" value="1" />
</bean>

连接工厂是这样的:

<orcl:aq-jms-connection-factory id="AQconnectionFactory"
data-source="dataSource-supsrep" native-jdbc- extractor="oracleNativeJdbcExtractor" />

它使用Native JDBC Extractor:

<bean id="oracleNativeJdbcExtractor" 
class="org.springframework.jdbc.support
.nativejdbc.OracleJdbc4NativeJdbcExtractor" />

所以我的问题是 - 这可以通过Spring配置细节来克服 - 还是有另一种方式围绕它?显然需要基础连接,但经过3天的研究后,我看不出它是如何完成的。

感激地收到任何线索!

谢谢,     约翰

0 个答案:

没有答案