Aplicação java com conexão ao banco trava

Pessoal, tenho uma aplicação java para desktop que faz uma conexão ao banco de dados de 1 em 1 segundo e recolhe informações do mesmo. O problema é que do nada essa conexão congela. As vezes volta, as vezes precisa fechar e tentar conectar novamente. Coloquei o último conector java (5.1.24) para mysql mas ainda sim trava.

O Código da classe que acessa ao banco:

[code]
public ArrayList dados_cliente (String agente, String ip) {

  try{   
     String str_conn = "jdbc:mysql://" + ip + ":3306/" + banco; //URL de conexão 
     Class.forName(driver);
     Connection conn = DriverManager.getConnection(str_conn, usuario, senha);
     java.sql.Statement stmt = conn.createStatement();
     sql = "SELECT id_cliente_crm, destino, cliente, id_preditivo, envio_virtua  FROM active_calls where status= 'Up' and campanha != 'Chamada_Discador_Ypy' and agente = '" + agente + "'";
     ResultSet rs = stmt.executeQuery(sql);
     String id=null, cliente=null, destino=null, id_preditivo=null, envio_virtua=null; //uniqueid=null;
     if (rs.next()){
        id = rs.getString("id_cliente_crm");
        destino = rs.getString("destino");
           if (destino.length() == 12){
              destino = destino.substring(2);
           }   
        cliente = rs.getString("cliente");
        id_preditivo = rs.getString("id_preditivo");
        envio_virtua = rs.getString("envio_virtua");
        //uniqueid= rs.getString("uniquueid");
     }
     retorna = new ArrayList<String>();
     retorna.add(id);
     retorna.add(destino);
     retorna.add(cliente);
     retorna.add(id_preditivo);
     retorna.add(envio_virtua);
     //retorna.add(uniqueid);
     conn.close();
     stmt.close();
     rs.close();
     return retorna;
  }  
  catch (ClassNotFoundException ex){
     System.out.println("Não foi possível carregar o driver.");
     ex.printStackTrace();
     return null;
  }
  catch (SQLException ex){
     System.out.println("Problema com o SQL");
     JOptionPane.showMessageDialog(null, "Problema na consulta CLIENTE","", JOptionPane.ERROR_MESSAGE);
     ex.printStackTrace();
     return null;
  }

} [/code]

Você verificou a quntidade de conexões com o banco e tempo de resposta cada chamada?

De 1 em 1 seg. pode ficar lento (eu acho) dependendo da consulta.

Necessaritamente tem que reconectar ? Não dá pra pensar em conectar uma só vez e a cada ciclo de tempo apenas executar a consulta e retornar o resultado ?

De fato, para esse tipo de aplicação (em que você faz uma consulta periódica), o ideal é você manter uma conexão sempre aberta. Se, por algum motivo (digamos que alguém tenha reiniciado a máquina do banco de dados), a conexão cair, você espera um pouco e reabre a conexão.

[quote=ToBack]Você verificou a quntidade de conexões com o banco e tempo de resposta cada chamada?

De 1 em 1 seg. pode ficar lento (eu acho) dependendo da consulta.
[/quote]

Sim, depende da quantidade de pessoas usando a aplicação, em média 20 pessoas usando o banco fica o tempo todo com uma média de 10 conexões.

Não. No caso seria uma conexão constante pra cada host que utilizar a aplicação, correto? Não sei como fazer.

Ninguém mais?