2013-07-07 2 views
3

OracleDataSource 연결을 두 번 이상 사용하려고합니다. 클래스, 나는 10에 cacheProperty을 설정 한 :OracleDataSource 연결을 사용하면 null입니다. 4 번

cacheProps.setProperty("MaxLimit", "10"); 

연결이 모두 통화가 동시에 이루어지고되지 않도록 반환 값을 기다리고 호출하는 클래스입니다. 연결을 사용하는 클래스는 클래스의 임의의 위치에서 연결 변수와 함께 null 포인터를 얻습니다. 그것은 항상 다섯 번째 요청에서 발생합니다. 내가 인식하지 못하는 속성이 있습니까? 연결 풀을 4 번만 사용할 수 있다는 의미입니까? 세 번째에 때때로 두 번째 줄에 일반적으로

int threadNo = 2; 
Connection conn = OraConnODS.getConnection("env " + threadNo); 
conn.setAutoCommit(false); 
Statement stm = conn.createStatement(); 

, 그리고 :

는 널 포인터가 발생하는 코드이다. > (10)가 다음 전체 코드를 게시해야하는 경우 카운트가> 10 인 경우

답변

1

오라클

SELECT 
    'Currently, ' 
    || (SELECT COUNT(*) FROM V$SESSION) 
    || ' out of ' 
    || VP.VALUE 
    || ' connections are used.' AS USAGE_MESSAGE 
FROM 
    V$PARAMETER VP 
WHERE VP.NAME = 'sessions' 

을 실제로 열려있는 얼마나 많은 연결을 확인하고 볼이 쿼리를 시도/XML은 우리가 가질 수 있도록 봐.

+0

개발자와의 연결이 작동하지 않아 근본적인 원인으로 생각됩니다. –

+0

@SylviaGraham : Sql 클라이언트에서도 연결할 수 없다면 데이터베이스에 중간 계층과 아무런 관련이 없습니다. – Lokesh

+0

나는 정말 어리 석다. 실제로 데이터베이스는 요청에 응답하지 않았습니다. 마지막으로 응답했을 때, 나는 다섯 번째 연결을 요청하기 전에 내가 사용하고 있던 연결 (1-4)을 닫지 않는다는 것을 발견했습니다. 도와 주셔서 감사합니다! –

0

먼저 데이터 소스를 직접 사용하는 대신 C3P0과 같은 DB 연결 풀을 사용해보십시오. 이렇게하면 더 많은 것을 제어 할 수 있습니다.

어쨌든 문제는 연결 누수와 관련이있는 것으로 보입니다. 일부 연결이 끊어져 더 많은 연결을 만들 수 없습니다. 그래서 다음 단계는 얼마나 많은 conections가 열려 있는지 확인하는 것입니다 [그것에 대한 satya의 답변을보십시오]. 그런데 다음 문제는 오래된 연결을 제거하는 것입니다. 힘들 것입니다. 그래서 다시 DB 연결 풀을 제안 할 것입니다.

편집 : 좋아, 내가 당신이 연결 풀을 사용하는 다음 총 액티브 연결을 인쇄하려고하면 볼 수있는 루트 문제를 도달 할 수있을 것입니다. 연결 누수로 인해 같은 문제가 발생했고 일반적인 해결 방법은 무차별 대입으로 연결을 정리하는 것이 었습니다 [일반적으로 연결 풀에서 이러한 API를 제공하며 적어도 at C3P0은 않습니다]. 연결 풀 로그를 가져 오면 근본 원인을 알 수 있습니다.

관련 문제