Ola pessoal,
Estou tendo um problema com o pool de conexões do Jakarta que ja vem com o TomCat, o esquema eh o seguinte: Ja estar tudo configurado tanto no arquivo server.xml como no web.xml, ja estou conseguindo conectar com o banco só que de vez enquando aparece o danado do erro “connection is closed”. Dai comecei a monitorar o banco e fazer alguns testes, com isso notei que quando faço mais de uma requisição simutâneas o danado do pool libera as mesmas conexões para as duas requisições e quando uma termina e lebera a conexão a outra requisição dar este danado erro.
Se alguem ja possou por isso ou sabe qual o problema e poder ajudar ficarei muito grato.
Ate mais…
nos properties do dbcp, tem uma opcao que eh “test on burrow” ou algo assim. coloque true ai, deve resolver.
eh que alguns banco de dados invalidam a conexao depois de um X tempo ocioso. alias, isso eh configuravel, e alguns servidores deixam esse X em termos de segundos, para evitar que o pessoal faca connection pool para aplicacoes pequenas
cancao
Outubro 9, 2003, 4:38pm
#3
Vale uma lida em JNDI Datasource HOW-TO na parte “Preventing dB connection pool leaks”.
Até.
bmcneto
Outubro 14, 2003, 3:26pm
#4
Caras não tive sucesso ainda com isso, vou tentar passar um pouco do que tenho aqui, no server.xml tenho as seguintes configurações:
No web.xml tenho o sequinte:
E a minha classe eh a seguinte:
public class ConnectionBD implements servicos.comunicacao.Connection {
private static DataSource ds;
private java.sql.Connection con;
private Statement statement;
private String driver;
private String url;
private String user;
private String password;
private String user;
private String password;
private PrintStream logWriter;
/** Faz a conexão com o banco.
* Para chamar este método faz-se necessário
* os seguites atributos ja terem sidos atribuidos:<br>
* <pre>
* <i>driver</i> setDriver(String),
* <i>url</i> setUrl(String),
* <i>usuario</i> setUsuario(String) e
* <i>senha</i> setSenha(String).
* </pre>
* @throws SQLException
*/
public synchronized void connect() throws java.sql.SQLException {
try{
if (!this.isConnected()){
this.showOperation("Efetuando conexão com o banco...");
this.statement = null;
this.preparedStatement = null;
this.lastComandPrepared = null;
if (this.ds == null){
Context ctx = new InitialContext();
this.ds = (DataSource)ctx.lookup("java:comp/env/jdbc/gerencial");
}
this.con = this.ds.getConnection();
System.out.println("Conexão: " + this.con);
}
this.showOperation("Ok.");
}catch(Exception e){
throw this.makeSQLException(e, null);
}
}
/** Fecha a conexão com o banco
* @return Retorna se a conexao foi fechada com sucesso ou não.
*/
public synchronized boolean disConnect() {
try{
if (this.isConnected()){
this.showOperation("Efetuando desconexão...");
if (this.statement != null){
this.statement.close();
this.statement = null;
}
if (this.preparedStatement != null){
this.preparedStatement.close();
this.preparedStatement = null;
}
this.lastComandPrepared = null;
this.con.close();
this.showOperation("Ok.");
System.out.println("Desconexão: " + this.con);
return true;
}else
return false;
}catch(Exception e){
this.showOperation(e.toString());
return false;
}
}
/** Retorna verdadeiro se a conexão esta aberta,
* caso contrário retorna falso
* @throws SQLException
* @return Retorna se a conexao com o banco estar aberta ou não.
*/
public boolean isConnected() throws java.sql.SQLException {
try{
this.showOperation("Verificando conexão...");
boolean conectado;
if (con == null){
conectado = false;
}else{
conectado = ! con.isClosed();
}
this.showOperation("Ok.");
return conectado;
}catch(Exception e){
throw this.makeSQLException(e, null);
}
}
/** Executa a instrução SQL:
* INSERT, UPDATE,... com exceção do SELECT,
* e retorna o número de registros afetados,
* @param sql O camando sql a ser executado
* @throws SQLException
* @return O número de registros afetados
*/
public int executeUpdate(String sql) throws java.sql.SQLException {
try{
this.showOperation("Executando o comando sql: [" + sql + "]...");
if (this.statement == null)
this.statement = con.createStatement();
this.showOperation("Ok.");
return this.statement.executeUpdate(sql);
}catch(Exception e){
throw this.makeSQLException(e, sql);
}
}
/** Executa uma consulta SQL e retorna um
* ResultSet com o resultado da consulta
* @param sql O select sql
* @throws SQLException
* @return O resultset contendo o resultado da consulta
*/
public ResultSet executeQuery(String sql) throws java.sql.SQLException {
try{
this.showOperation("Executando consulta: [" + sql + "]...");
if (this.statement == null)
this.statement = con.createStatement();
this.showOperation("Ok.");
return this.statement.executeQuery(sql);
}catch(Exception e){
throw this.makeSQLException(e, sql);
}
}
}
Eh isso ai caras tentei passar o que tenho aqui, e se vcs poderem dar uma ajuda…
Ate mais.