Pessoal,
Implementei o pool de conexões na minha aplicação, que hoje roda no JBoss 4.0.2. A princípio desenvolvi sem fechar as conexões, pois achava que o jboss iria gerenciar isso pra mim. Mas após um tempo que aplicação está no ar, recebo a exceção:
java.sql.SQLException: Closed Connection
Bom, resolvi fechar então as conexões. Estou alterando a aplicação para que ela use e "devolva" o pool, mas não estou conseguindo. Eu conecto uma vez e depois não consigo mais, recebo a exceção:
java.sql.SQLException: Connection handle has been closed and is unusable
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class Conexao {
private static Connection con = null;
public String vMsgInteracao;
public Connection conectaDB() throws NamingException{
if(con == null){
try{
Context initContext = new InitialContext();
DataSource ds = (DataSource)initContext.lookup("java:/OracleDS");
con = ds.getConnection();
return con;
}
catch(Exception e){
vMsgInteracao = "Erro ao conectar no banco: " + e;
return null;
}
}
else{
return con;
}
}
}
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
public class Contrato {
private Connection con;
private PreparedStatement ps;
public ResultSet rs;
private String vSql;
public String vMsgInteracao;
public String getNomeResponsavelContrato(int contrato) throws SQLException{
try{
Conexao c = new Conexao();
con = c.conectaDB();
vSql = " SELECT nome FROM contrato WHERE cd_contrato=?";
ps = con.prepareStatement(vSql);
ps.setInt(1, contrato);
rs = ps.executeQuery();
if(rs.next()){
return rs.getString("nome");
}else{
return null;
}
}
catch (Exception e){
System.out.println("Erro "+ e);
}
finally{
if (rs != null) {
try { rs.close(); } catch (SQLException e) { ; }
rs = null;
}
if (ps != null) {
try { ps.close(); } catch (SQLException e) { ; }
ps = null;
}
if (con != null) {
try { con.close(); } catch (SQLException e) { ; }
con = null;
}
}
}
}
Bom pessoal, gostaria de saber se realmente é necessário fechar as conexões e se sim, oque estou fazendo errado?