Java EE 웹 응용 프로그램에서 다음 메소드를 호출했습니다. JDBC를 SQL Server 2000에 무작위로 솔라리스 서버에서 재설정
public static void submitToPending()
{
Db db;
ResultSet rs;
try
{
db = new Db("Database.properties");
rs = db.issueQuery(getDescriptorList());
while (rs.next())
{
db.insertApplicationData(rs.getString("Id"));
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
db = null;
rs = null;
}
}
이
코드의 축약 된 조각은 내가 SQL Server 2000 데이터베이스에 대한 40,000 새로운 레코드를 삽입하는 실행하고있다. 이 코드는 프로덕션 환경의 Solaris 10 서버에서 호스트되는 JSP에서 실행됩니다. 올해 이전에이 코드는 약 18,000 개의 레코드 만 처리하면되므로 완벽하게 작동했습니다. 올해에는 몇 가지 업데이트가 있었으며 세부 사항을 보완하기 위해 약 4 만 건의 레코드가 처리됩니다.개발 중에 이클립스 내부에서 실행되는 Tomcat 서버의 Windows PC에서 프로덕션에서 사용 된 것과 동일한 데이터베이스 (레코드 세트가 충돌하지 않음)에서 테스트합니다. 모든 것이 올바르게 작동하고 40,000 건 정도의 모든 레코드가 데이터베이스에 저장됩니다. 내가 프로덕션 서버에 사이트를 설치하고 나는 것으로 나타났습니다 테스트를 실행
중간 과정을 통해 다음과 같은 예외 메시지와 함께, 실패 된 이상 :
com.microsoft.sqlserver.jdbc.SQLServerException : 연결이 닫힙니다. com.microsoft.sqlserver.jdbc.SQLServerStatement.checkClosed에서 com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed (알 소스)에 com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (알 소스)에 (알 소스)에 com.microsoft.sqlserver.jdbc.SQLServerResultSet.next com.microsoft.sqlserver.jdbc.SQLServerResultSet.checkClosed (알 소스) (알 소스)에 (ClassNameOmittedToProtectTheInnocent.java:74)에서
SQL Server는 무제한의 동시 연결, 무제한 시간 제한으로 설정됩니다. 내 코드가 클래스 Db 인 것으로 가정하면 (Windows 측면에서 작동하고 있으므로 데이터가 올라갈 때까지 Solaris 측에서는 성능이 뛰어나다) 체크 아웃을 시작하기위한 아이디어는 무엇입니까?
SQL Server를 추적하여 연결에 문제가 있는지 확인했지만 스택 추적이 기록 된 후에도 살아있는 것으로 보입니다.
추가 정보를 제공 할 수 있으면 알려 주시기 바랍니다. 내가 도울 수있는 최선을 다할 것입니다.
이러한 호출이 finally 블록에 있더라도? 이것은 db.insertApplicationData() 메소드 호출에서 실패합니다. – karlgrz
JDBC 객체의 비슷한 처리가 잘못된 다른 곳에서 실행되는 다른 코드가이 문제를 일으키고 있는지 또는이 문제에 대한 독점적 인 db 액세스 권한이 있습니까? – banjollity
@KG - 저의 요점은 당신이 자원을 적절히 닫거나 풀지 않아서 나중에 문제가 발생할 수 있다는 것입니다. –