2013-08-22 2 views
0

웹 응용 프로그램을 개발하고 Tomcat 연결 풀을 사용하여 Java 코드가 DB2 서버에 쿼리를 트리거하는 경우가 있습니다. 가끔씩 실행되어 결과가 반환되지만 때로는 반환됩니다. 쿼리가 끊임없이 실행됩니다. 그런 다음 문제를 해결하고 데이터베이스에서 성공한 데이터를 제공하는 Tomcat 서버를 다시 시작해야합니다. JNDI를 사용 중이며 Tomcat 서버 (6.x)의 server.xml에 매개 변수를 구성했습니다. 응용 프로그램의 WAR 파일의 web.xml에데이터베이스 쿼리가 Java 코드에서 Tomcat 연결 풀을 사용하여 응답하지 않음

구성 : - context.xml에 아파치 톰캣 서버에 <resource-ref> <description>DB Connection Pool </description> <res-ref-name>jdbc/abcd</res-ref-name> <res-type>javax.sql.DataSource </res-type> <res-auth>Container </res-auth> </resource-ref>

구성 : - server.xml의 <ResourceLink global="jdbc/abcd" name="jdbc/abcd" type="javax.sql.DataSource" />

구성 : - <Resource name="jdbc/abcd" auth="Container" type="javax.sql.DataSource" username="zzzzz" password="zzzzz" driverClassName="com.ibm.db2.jcc.DB2Driver" url="jdbc:db2://IP:50000/MYDB" />

minIdle, maxIdle, maxWait 및 maxActive와 같은 추가 매개 변수를 구성하지 않았습니다.

올바르게 연결을 처리하기 위해 어떤 매개 변수를 변경해야하는지에 대한 올바른 구성 절차에 대해 알려주십시오.

답변

0

"제대로 연결 처리"란 무엇을 의미하는지 모르겠습니다. commandTimeout 데이터 소스 속성을 설정하여 원하는 시간이 지난 후에 쿼리를 종료 할 수 있습니다. 그러나 문제는 데이터베이스 크기에 있다고 느낍니다. 예를 들어 잠금 충돌이 발생하고 데이터베이스의 locktimeout 매개 변수가 무한대로 설정되어 일부 연결이 영원히 대기하게됩니다. 아마도 DBA와상의해야 할 것입니다.

+0

고맙습니다. Mustaccio,하지만 데이터베이스에 문제가있는 경우 Tomcat을 다시 시작하면 문제가 해결됩니다. 문제는 연결 개체와 명령문 개체를 만든 후 stmt.executeQuery ("Query")에서 예외가 발생했습니다. 코드가 고장 나서 블록을 잡으러 간다. 불행히도 커넥션 객체 (con.close();)를 닫지 않았는데, 그 후에 애플리케이션이 데이터베이스에 연결하려고 시도하는 경우 두 번째 시간없이 기다린다. 블록을 잡으러 갈거야. – Ars

+0

다음과 같이 될 수 있습니다. 연결 A는 잠금을 유지합니다. 연결 B 잠금 된 레코드를 업데이트하고 영원히 기다립니다. Tomcat을 다시 시작합니다. 두 연결은 모두 종료되고 트랜잭션은 롤백되며 잠금은 해제됩니다. 다음 번에는 연결 B가 먼저 도착하고 잠금이 없으므로 레코드가 업데이트됩니다. – mustaccio

+0

감사합니다. mustaccio, 나는 내 DBA 팀에 연결하고 최대한 빨리 업데이트 할 것입니다 ... – Ars

관련 문제