Problema com conexão JDBC

5 respostas
T

Pessoal, boa tarde.

Estou com um problema em minha aplicação. Por mais que eu feche a conexão, resultset e o statment depois do select, é lançada uma Exception no log:

12:56:36,717 INFO  [CachedConnectionManager] Closing a connection for you.  Please close them yourself: org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@64ce2f12
java.lang.Throwable: STACKTRACE
	at org.jboss.resource.connectionmanager.CachedConnectionManager.registerConnection(CachedConnectionManager.java:290)
	at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:423)
	at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:849)
	at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)

.
.
.

Apesar da exception lançada, a aplicação funciona normalmente, porém não posso deixar essa exceção sendo lançada o tempo todo.

Segue um dos métodos que realizam o select:

StringBuffer sql = "SELECT......";
ps = getConnectionBI().prepareStatement(sql.toString());
rs = ps.executeQuery();

try {
				
	List<Objeto> lista = new ArrayList<Objeto>();			
	
	while (rs.next()) {
		Objeto objeto= new Objeto();
		
		objeto.setParam...
		
		lista.add(objeto);
	}
	return lista;
	
} catch (Exception e) {
	e.printStackTrace();
} finally {
	rs.close();
	ps.close();
	getConnectionBI().close();
}

Alguém já passou por alguma situação parecida?
Qualquer informação adicional, estou a disposição.

5 Respostas

D

Estou com o mesmo problema, alguém conseguiu resolver?

N

Creio que esse trecho getConnectionBI().close(); possa estar pegando uma nova conexão e fechando logo em seguida.
A conexão utilizada para executar o SQL você pegou antes e não fechou.
O PreparedStatement consegue pegar a connection que está utilizando e fechá-la com ps.getConnection().close();.
Logo, substitua getConnectionBI().close(); por ps.getConnection().close(); no bloco finally.

D

Fiz a modificação, mas mesmo assim não adiantou.

Completando o problema: JBoss 4.2.3, ejb 2.1

N

dlrodrigues:
Fiz a modificação, mas mesmo assim não adiantou.

Completando o problema: JBoss 4.2.3, ejb 2.1


Poste seu código

D

Em um momento do meu código EJB, sera chamado esse método:

public static synchronized ResultSet getResultSet(String datasource, String sql) throws Exception {
        ResultSet rs = null;
        try {
            Statement stm = getConnection(datasource).createStatement();
            
            rs = stm.executeQuery(sql);
        } catch(Exception exc) {
            exc.printStackTrace();
        }
        return rs;
    }

Depois, será processado a informação do resultSet e no final será chamado esse método:

public static synchronized boolean liberaConexao(ResultSet rs) {
        boolean flag;
        try {
//        	if(rs != null && !rs.isClosed())
        		rs.close();
//            if(rs.getStatement() != null && !rs.getStatement().isClosed())
            	rs.getStatement().close();
//            if (rs.getStatement().getConnection() != null && !rs.getStatement().getConnection().isClosed())
            	rs.getStatement().getConnection().close();
            
            rs = null;
            
            flag = true;
        }
        catch(Exception e) {
            System.out.println("Erro ao fechar o rs do m\351todo liberaConexaoAlternativo.");
            flag = false;
        }
        return flag;
    }

public static synchronized Connection getConnection(String dataSource) throws Exception {
        try {
//            if(con == null || con.isClosed()) {
                if(ds == null) {
                    ctx = EJBHomeFactory.getContext();
                    ds = (DataSource)ctx.lookup(dataSource);
                }
//                con = ds.getConnection();
                return ds.getConnection();
//            }
        } catch(Exception exc) {
               exc.printStackTrace();
        }
    }

E é ai que dá o erro.

Criado 28 de maio de 2013
Ultima resposta 23 de jul. de 2013
Respostas 5
Participantes 3