Olá pessoal,
Eu estou criando um sistema que usa uma classe de conexao JDBC singleton para cada um dos tres bancos diferentes que a aplicação vai usar. Até aí, tudo funciona muito bem... O problema é que o sistema é WEB e pelo que eu sei, o tomcat funciona colocando cada requisição em uma thread, o que faz com que multiplos acessos ao mesmo tempo ocasione erro na conexao, etc...
Gostaria de saber o que voces poderiam recomendar para resolver estes problemas... Como posso usar o padrao singleton funcionando corretamente, para varias classes DAO?
A seguir, o codigo da minha classe de conexao:public class ConexaoSIE {
private Connection conexao;
private String url;
private String user;
private String senha;
private Statement st;
// varivel para utilizada para implementar padro singleton
private static ConexaoSIE instancia;
private ConexaoSIE() {
// this.url = "XXX";
this.url = "XXX";
this.user = "XXX";
this.senha = "XXX";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Driver nao encontrdao!");
}
try {
this.conexao = DriverManager.getConnection(this.url, this.user,
this.senha);
System.out.println("Conexão realizada com sucesso!");
} catch (SQLException e) {
System.err.println(e.getMessage());
}
}
// retorna a instancia da conexao ativa
public synchronized static ConexaoSIE getInstancia() {
if (instancia == null) {
instancia = new ConexaoSIE();
}
return instancia;
}
public Connection getConexao() {
return conexao;
}
// recebe a sql, executa a consulta e retorna um ResultSet
public synchronized ResultSet executa(String sql) {
try {
this.st = this.conexao.createStatement();
return st.executeQuery(sql);
} catch (Exception e) {
System.err.println(e.getMessage());
}
return null;
}
/**
* @return the st
*/
public Statement getSt() {
return st;
}
}
O problema, pelo que pude perceber, é que o método executa, retorna um resultset, e esse resultset é utilizado em várias classes DAO que usam esta classe de conexao, o que torna a variavel compartilhada por causa das threads do tomcat, aí, uma pode usar o resultado obtido pela outra e causar inconsistencias....
Conto com voces, e obrigado pela atenção
Bernardo
