2011-04-06 3 views
0

다중 스레드/다중 애플리케이션 환경에서 Oracle Streams AQ를 사용하여 하나의 스레드에서만 약 10 분이 지난 후에 AQOracleSQLException : Exhausted Resultset을 받았습니다. (스칼라)되는 팩토리 메소드 createAQSession 함께Oracle Streams AQ. session.getQueue throw AQOracleSQLException : Exhausted Resultset

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName" value="jdbc/MessageManagerDB"/> 
</bean> 

<bean id="aqSessionFactory" class="au.com.xxx.queue.AQSessionFactory"> 
    <constructor-arg ref="dataSource"/> 
</bean> 

<bean id="aqSessionTarget" factory-bean="aqSessionFactory" 
    factory-method="createAQSession" scope="prototype"/> 

<bean id="aqSessionPoolTargetSource" 
    class="org.springframework.aop.target.CommonsPoolTargetSource"> 
    <property name="targetBeanName" value="aqSessionTarget"/> 
    <property name="maxSize" value="25"/> 
</bean> 

<bean id="aqSession" class="org.springframework.aop.framework.ProxyFactoryBean"> 
    <property name="targetSource" ref="aqSessionPoolTargetSource"/> 
</bean> 

: 다음

oracle.AQ.AQOracleSQLException: Exhausted Resultset 
     at oracle.AQ.AQOracleSession.getQueue(AQOracleSession.java:751) 
     at au.com.xxx.queue.OracleQueue$$anonfun$2.apply(OracleQueue.scala:53) 

AQOracleSession 스프링 통해 저류

예외가 최종 라인으로부터 던져진
def createAQSession = { 
    val wasConnection = dataSource.getConnection.asInstanceOf[WSJdbcConnection] 
    val connection = WSCallHelper.getNativeConnection(wasConnection).asInstanceOf[Connection] 
    SessionWithConnection(AQDriverManager.createAQSession(connection), connection) 
    // SessionWithConnection is just a case class akin to 
    // Tuple2[AQOracleSession, Connection] 
} 

이 블록 :

분명히 을 AQOracleSession에 사용하는 것은 아닙니다.

I 오전 11 Session과 관련된 Connection를 사용,하지만 나중에 같은 방법까지하지 않고, 그래서 여기에 잘못 될 수 없습니다

val clob = CLOB.createTemporary(conn, true, CLOB.DURATION_SESSION) 

이 가능인가요 풀링 config가 올바르지 않고 같은 세션에 몇 가지 동시 작업이 있습니까? 다른 로그에는 전혀 이상한 것이 없었습니다.

답변

0

이것은 실수로 사용했던 v10 드라이버의 결함입니다. v11 RDBMS 드라이버에는이 문제가 없습니다.