Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JMS 112使用spring ds的连接无效_Java_Spring_Oracle_Oracle Aq - Fatal编程技术网

Java JMS 112使用spring ds的连接无效

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

我正在使用spring数据源,无法连接到Oracle AQ队列

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关闭连接时,数据源都不会考虑关闭。