열기 및 닫기 함수가 수동으로 결합되었지만 DataSource에서 연결을 열 때 GlassFish에서 최대 풀 크기 예외가 발생했습니다. 나는 모든 곳에서 구글을 찾을 수 있지만 대답은 없다! 누구도 도와 줄 수 있습니까?DataSource에서 연결을 닫을 수 없기 때문에 GlassFish에서 최대 풀 크기 예외가 발생했습니다.
(내 설정 초기 연결 풀 : 8, 최대 풀 크기 : 32, 유휴 시간 제한 : 300s, 최대 대기 시간 : 60) 통화 작업시 예외가되는 최대 풀 크기) 함수
public class BP{
@Resource(name="BP", type = javax.sql.DataSource.class)
private DataSource ds;
public void work(){
for(int i = 0; i < 50; i++){
doSomething();
}
}
public void doSomething(){
java.sql.Connection conn = null;
CallableStatement cs = null;
ResultSet rs = null;
try{
conn = ds.getConnection();
cs = conn.prepareCall("{ call get_bank(?,?) }");
cs.setString(1, "test");
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.execute();
rs = (ResultSet) cs.getObject(2);/
// do something
//...
} catch (Exception e) {
e.printStackTrace();
}finally{
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (cs != null) {
try {
cs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
OUPUT :
Internal Exception: java.sql.SQLException: Error in allocating a connection. Cause: In-use connections equal max-pool-size and expired max-wait-time. Cannot allocate more connections.
'e.printStackTrace()'는 work()를 호출 할 때 발생하는 오류보다 자세하게 표시해야합니다. 아마'ds.getConnection()'을 호출했을 것입니다. 코드에'ds '를 초기화하는 방법이 표시되지 않으므로 여기에 문제가있을 수 있습니다. –
감사의 말 Simo, 출력 : "내부 예외 : java.sql.SQLException : 연결 할당 오류 원인 : 사용중인 연결 수가 최대 풀 크기와 만료 된 최대 대기 시간이며 더 많은 연결을 할당 할 수 없습니다." ds 변수는 "@Resource (name ="BP ", type = javax.sql.DataSource.class)에 의해 풀에서 참조됩니다." –
모니터링 연결에서 32 개의 연결이 고갈 된 모니터링 웹 페이지의 연결 수가 표시됩니다. 아마도 글래스 피시는 connnection.close() 함수를 호출했지만 실제로 연결을 해제하지 않습니다! –