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.
Estou com o mesmo problema, alguém conseguiu resolver?
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.
Fiz a modificação, mas mesmo assim não adiantou.
Completando o problema: JBoss 4.2.3, ejb 2.1
[quote=dlrodrigues]Fiz a modificação, mas mesmo assim não adiantou.
Completando o problema: JBoss 4.2.3, ejb 2.1[/quote]
Poste seu código
Em um momento do meu código EJB, sera chamado esse método:
[code]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;
}[/code]
Depois, será processado a informação do resultSet e no final será chamado esse método:
[code]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();
}
}[/code]
E é ai que dá o erro.