Fechando a conexão quando expira a sessão!

7 respostas
J

Dae galera… eu estou desenvolvimento um sistema em que será aberto uma conexão para cada sessão…
Só que eu queria que quando a sessão expirasse ou o usuário fechasse o browser, ele fechasse essa conexão… como vou conseguir fechar uma conexão quando o cara vai e fecha o browser?? Alguma idéia?
Abraço!!

7 Respostas

A

Amigo vc esta utilizando algum framework de persistencia, por exemplo hibernate?

nbluis

Conexão por Sessão ??
Utilize um pool e reuse as conexões…

Não invente a roda, ainda mais uma quadrada.

J

Já me falaram pra utilizar um pool de conexão… só que eu vou ter varias bases de dados diferentes… dependendo do usuário vou para uma base diferente… já vasculhei a net e não consegui achar nada disso… na verdade até achei algo… mas eu teria que criar para cada usuário um getConnection diferente… aí seria bem trabalhoso… se alguém tiver alguma ideia… e mesmo assim continua a pergunta… como fechar a conexão quando o usuário fecha o browser ou a sessão expira?
Valeu pelas respostas…
Abraço!!

J

Ah… não estou usando nenhum framework de persistencia… é JDBC mesmo!! heehh
Abraço!!

nbluis

Utilize um pool em cada banco…
Acredito ser muito mais simples do que está pensando.

Se está utilizando o TOMCAT por exemplo, pode deixar o tomcat gerenciar as conexões para vc com o dbcp.
Então só busca as conexões do pool dele na hora que precisar.

Se utiliza um container javaee é mais fácil ainda…

J

Teria algum exemplo?? Ja baixei o dbcp.. fiz alguns testes e tal... teria alguma ideia de como fazer isso??
Tipo.. quando o cara se loga no sistema... essa base de dados será comum para todos, pois é a partir dela que eu vou pegar a base de dados para cada usuário.. então o usuário x se conectou na base x, dae como fazer isso??

O exemplo que achei foi esse:

public class ConnectionFactory{ 
   private DataSource ds; 

   private static ConnectionFactory instance = new ConnectionFactory(); 

   public ConnectionFactory(){ 
      BasicDataSource bds = new BasicDataSource(); 
      bds.setDriverClassName("com. mysql.jdbc.Driver"); 
      bds.setUsername("root"); 
      bds.setPassword("1234"); 
      bds.setUrl("jdbc:mysql://localhost/meu_banco"); 
      ds = bds; 
   }      

   public static ConnectionFactory getInstance(){ 
      return instance; 
   } 

   public Connection getConnection(){ 
       return ds.getConnection(); 
   } 
}

public class MinhaApp{ 
   public static void main(String[] args){ 
      Connection con = ConnectionFactory.getInstance().getConnection(); 
      PreparedStatement stmt = con.prepareStatement("SELECT * FROM tabela"); 
      ResultSet res = stmt.executeQuery(); 

      //restante 
   } 
}
Terei que ter uma classe para cada usuário?? Como minha classe vai ter uma instancia estatica.. sinceramente não estou conseguindo visualizar como fazer para dependendo do usuário ele ir para uma base diferente. ou seja.. alterar o
public ConnectionFactory(){ 
      BasicDataSource bds = new BasicDataSource(); 
      bds.setDriverClassName("com. mysql.jdbc.Driver"); 
      bds.setUsername("root"); 
      bds.setPassword("1234"); 
      bds.setUrl("jdbc:mysql://localhost/meu_banco"); 
      ds = bds; 
   }

Se vc puder me ajudar ou dando uma dica descritiva mesmo.. ja ajudaria.... estou nesse impasse faz dois dias... Abraço e valeu pela resposta!!

B

Cara tenta utilizar um framework…Acho que ficaria um pouco mais facil…eu utilizo o mentawai que te permite um bom controle de sessões e suporte ao dbcp e c3po… flw []'s

Criado 13 de dezembro de 2007
Ultima resposta 14 de dez. de 2007
Respostas 7
Participantes 4