다중 스레드/다중 애플리케이션 환경에서 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가 올바르지 않고 같은 세션에 몇 가지 동시 작업이 있습니까? 다른 로그에는 전혀 이상한 것이 없었습니다.