Java JMS 112使用spring ds的连接无效
我正在使用spring数据源,无法连接到Oracle AQ队列Java JMS 112使用spring ds的连接无效,java,spring,oracle,oracle-aq,Java,Spring,Oracle,Oracle Aq,我正在使用spring数据源,无法连接到Oracle AQ队列 Connection connection = null; AQSession aqSess = null; connection = ds.getConnection(); connection.setAutoCommit(false); DataSourceUtils
Connection connection = null;
AQSession aqSess = null;
connection = ds.getConnection();
connection.setAutoCommit(false);
DataSourceUtils.getTargetConnection(connection);
Class.forName("oracle.AQ.AQOracleDriver");
aqSess = AQDriverManager.createAQSession(connection);
aqSession = aqSess;
但仍然要了解:oracle.jms.aqjmsceception:jms-112:连接无效
任何提示都将不胜感激
<bean id="myId" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@myIpAddress:dev"/>
<property name="username" value="user"/>
<property name="password" value="pass"/>
<property name="removeAbandoned" value="true"/>
<property name="initialSize" value="2"/>
<property name="maxIdle" value="8"/>
<property name="maxActive" value="30"/>
<property name="maxWait" value="60000"/>
</bean>
AQException: oracle.AQ.AQException: JMS-112: Connection is invalid
at oracle.AQ.AQDriverManager.createAQSession(AQDriverManager.java:193)
AQException:oracle.AQ.AQException:JMS-112:连接无效
位于oracle.AQ.AQDriverManager.createAQSession(AQDriverManager.java:193)
我使用以下代码修复了问题:
OracleConnection oracleConnection = connection.unwrap(OracleConnection.class);
将其记录在此处作为答案,以防其他人在遇到类似问题时发现此问题。Oracle AQ与
BasicDataSource不匹配
改用OracleDataSource
但如果要使用BasicDataSource
:
在许多应用服务器环境中,JDBC连接是包装的
在特定于实现的类中,该类委托给基础
本机JDBC连接。Oracle的AQ连接工厂需要
本机Oracle连接,并将抛出“Oracle.jms.aqjmsceception:
JMS-112:连接无效“如果连接已包装,则出现异常
一个外国班。要解决此问题,可以指定
可用于打开连接的NativeJdbcExtractor。春天
提供了许多与应用程序服务器匹配的实现
环境下面是一个指定NativeJdbcExtractor的示例
<orcl:aq-jms-connection-factory id="connectionFactory"
use-local-data-source-transaction="true"
native-jdbc-extractor="dbcpNativeJdbcExtractor" 1
data-source="dataSource" />
<bean id="dbcpNativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>
<bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
您应该附加完整的堆栈跟踪,以便我们可以看到错误从何处开始(guessint是AQDriverManager,但可以肯定)。您的配置参数?这样做会在容器中产生连接泄漏。每次Oracle关闭连接时,数据源都不会考虑关闭。