JBoss 6.1의 JDBC 풀에서 매우 불쾌한 누수가 있음을 발견했습니다.JBoss에서 대체 JDBC 풀 구현을 사용하는 방법
이 오류는 close
메서드를 기반으로 한 기본 문을 닫을 때 발생합니다.
if (statements != null) {
for (Iterator
<Map.Entry<WrappedStatement, Throwable>> i=statements.entrySet().iterator();
i.hasNext();)
{
Map.Entry<WrappedStatement, Throwable> entry = i.next();
WrappedStatement ws= entry.getKey();
if (trackStatements==BaseWrapperManagedConnectionFactory.TRACK_STATEMENTS_TRUE_INT)
{
Throwable stackTrace = entry.getValue();
log.warn("Closing a statement you left open, please do your own housekeeping",
stackTrace);
}
try
{
ws.internalClose();
}
catch (Throwable t)
{
log.warn("Exception trying to close statement:", t);
}
}
}
이지도에서 문을 제거하고,지도가 성장하고, 성장하고, 그 문은 결과를 저장하십시오 WrappedConnection 그들을 닫습니다 않지만 this처럼
는, 코드가 보인다 (적어도 JDBC 드라이버에서) 사용하고 있습니다.
누군가 JBoss의 jdbc 풀을 이보다 더 강력한 대체 구현으로 바꾸 었는지 궁금합니다. 당신의 문에 보유하지 않는 경우 메모리 누수가 크지 않을 수 있지만이에 작은 부록으로
는 코드와 행동, 결과 세트 (기본적으로 복사 및 붙여 넣기)와 동일 어떤 길이의 시간 (디자인에 의해 수영장에 사는 연결과는 다른).
어떤 클래스와 버전입니까? 궁금해서. –
@ChinBoon org.jboss.resource.adapter.jdbc.WrappedConnection입니다. 그 버전 6.1.0 최종에서하지만, 적어도 다시 5.0.0로 돌아가는 동일한 것으로 나타났습니다 – Yishai
아마도 그것이 가능하지만 문서화 된 것 같지 않습니다. 그래서 JBoss 소스를 푸십시오;) –