Meu projeto só acessa o banco uma vez

eu to fazendo um trabalho, fiz os daos, os beans, mais ele só faz uma conexao com o banco, se eu insiro uma vez ele funciona depois não funciona mais só se eu alterar alguma coisa no código e executar de novo. será que o motivo é eu não ter criado um pool de conexao??

como criar um pool de conexao via console admin no glassfish alguem tem algum tutorial???

Pergunta besta:

Após conectar com o Banco e fazer a primeira operação, você está dando um Clean e fechando a conexão?

Sugestão minha: Crie uma ConnectionFactory e utilize sua instância dentro dos seus DAOS. EM todo método do DAO que fizer uso da Connection, lembre de fechá-la ao final.

Creio que pode ser conexão aberta o problema…

Você poderia postar o código ?

eu tenho uma ConnectionFactory, e são muitos códigos mais vou postar o código de uma classe:

meu bean:

package dominio;

import java.util.ArrayList;
import java.util.List;


public class Cidade {
    private int idCidade;
    private String nomeCidade;
    private String estado;
    private List<Cliente>cli = new ArrayList<Cliente>();
    private List<Livro>liv = new ArrayList<Livro>();

    public int getIdCidade() {
        return idCidade;
    }
    public void setIdCidade(int idCidade){
        this.idCidade = idCidade;
    }

    public String getNomeCidade() {
        return nomeCidade;
    }

    public void setNomeCidade(String nomeCidade) {
        this.nomeCidade = nomeCidade;
    }

    public String getEstado() {
        return estado;
    }

    public void setEstado(String estado) {
        this.estado = estado;
    }

    public List<Cliente> getCli() {
        return cli;
    }

    public void setCli(List<Cliente> cli) {
        this.cli = cli;
    }

    public List<Livro> getLiv() {
        return liv;
    }

    public void setLiv(List<Livro> liv) {
        this.liv = liv;
    }
}

minha classe Dao

package dao;

import dominio.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class CidadeDao {
    
    private Connection con;
    
    public CidadeDao()throws SQLException{
        this.con = db.ConnectionFactory.getConnection();
    }
    
    public boolean adiciona(Cidade cidade)throws SQLException{
        try{
            PreparedStatement stmt = con.prepareStatement("insert into cidade(nomecidade, estado) values(?, ?)");
            stmt.setString(1, cidade.getNomeCidade());
            stmt.setString(2, cidade.getEstado());
            stmt.execute();
            stmt.close();
            con.close();
            return true;
        }catch(Exception e){
            return false;
        }
    }
    
    public void altera(Cidade cidade)throws SQLException{
        PreparedStatement stmt = con.prepareStatement("update cidade set nomecidade=?, estado=? where idcidade=?");
        stmt.setString(1,cidade.getNomeCidade());
        stmt.setString(1,cidade.getEstado());
        stmt.setInt(2, cidade.getIdCidade());
        stmt.execute();
        stmt.close();
        con.close();
    }
    
    public void remove(Cidade cidade)throws SQLException{
        PreparedStatement stmt = con.prepareStatement("delete from cidade where idcidade=?");
        stmt.setInt(1, cidade.getIdCidade());
        stmt.execute();
        stmt.close();
        con.close();
    }
    
    public Cidade getCidade(int id)throws SQLException{
        PreparedStatement stmt = con.prepareStatement("select * from cidade where idcidade=?");
        stmt.setLong(1, id);
        ResultSet rs = stmt.executeQuery();
        Cidade cidade = new Cidade();
        while(rs.next()){
            cidade.setIdCidade(rs.getInt("idcidade"));
            cidade.setNomeCidade(rs.getString("nomecidade"));
            cidade.setEstado(rs.getString("estado"));
        }
        stmt.close();
        rs.close();
        con.close();
        return cidade;
    }
    
    public List<Cidade>ListaCidade()throws SQLException{
        try{
        PreparedStatement stmt = con.prepareStatement("select * from cidade");
        ResultSet rs = stmt.executeQuery();
        List<Cidade>listaCidade = new ArrayList<Cidade>();
        
        while(rs.next()){
            Cidade cidade = new Cidade();
            cidade.setIdCidade(rs.getInt("idcidade"));
            cidade.setNomeCidade(rs.getString("nomecidade"));
            cidade.setEstado(rs.getString("estado"));
            listaCidade.add(cidade);
        }
        stmt.close();
        rs.close();
        con.close();
        return listaCidade;
        }catch(Exception e){
            Cidade c = new Cidade();
            c.setNomeCidade("erro");
            List<Cidade>la = new ArrayList();
            la.add(c);
            return la;
        }
    }
    
    public List<Livro>Livro(int id)throws SQLException{
        PreparedStatement stmt = con.prepareStatement("select * from livro where idcidade=?");
        stmt.setInt(1, id);
        ResultSet rs = stmt.executeQuery();
        List<Livro>listaLivro = new ArrayList<Livro>();
        Livro livro = new Livro();
        Cidade cidade = new Cidade();
        Categoria categoria = new Categoria();
        Editora editora = new Editora();
        while(rs.next()){
            livro.setIdLivro(rs.getInt("idlivro"));
            cidade.setIdCidade(rs.getInt("idcidade"));
            livro.setCidade(cidade);
            categoria.setIdCat(rs.getInt("idcategoria"));
            livro.setCategoria(categoria);
            editora.setIdEditora(rs.getInt("ideditora"));
            livro.setEditora(editora);
            livro.setAnoLivro(rs.getInt("anoLivro"));
            livro.setTitulo(rs.getString("titulo"));
            livro.setISBN(rs.getString("isbn"));
            livro.setResumo(rs.getString("resumo"));
            livro.setAssunto(rs.getString("assunto"));
            listaLivro.add(livro);
        }
        stmt.close();
        rs.close();
        con.close();
        return listaLivro;
    }
    
    public List<Cliente>ListaCliente(String cidade)throws SQLException{
        PreparedStatement stmt = con.prepareStatement("select p.idpessoa, p.nomepessoa, p.telefone, p.email, p.senha, c.endereco, c.nascimento, c.cep, c.cpf, c.bairro from cliente c, cidade cd, pessoa p where c.idpessoa = p.idpessoa and c.idcliente = cd.idcidade and cd.nomecidade =?");
        stmt.setString(1, cidade);
        ResultSet rs = stmt.executeQuery();
        List<Cliente>listaCliente = new ArrayList<Cliente>();
        Cliente cliente = new Cliente();
        while(rs.next()){
            cliente.setIdPessoa(rs.getInt("idpessoa"));
            cliente.setNomePessoa(rs.getString("nomepessoa"));
            cliente.setTelefone(rs.getString("telefone"));
            cliente.setEmail(rs.getString("email"));
            cliente.setSenha(rs.getString("senha"));
            cliente.setEndereco(rs.getString("endereco"));
            cliente.setNascimento(rs.getDate("nascimento"));
            cliente.setCep(rs.getString("cep"));
            cliente.setCpf(rs.getString("cpf"));
            cliente.setBairro(rs.getString("bairro"));
            listaCliente.add(cliente);
        }
        stmt.close();
        rs.close();
        con.close();
        return listaCliente;
    }

}

o servlet que insere:

package servlets;

import dominio.Cidade;
import dao.CidadeDao;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ManterCidade extends HttpServlet {
    
    private boolean ProcessaAcao(Cidade cidade, String acao) {
        boolean retorno = true;
        if(acao.equalsIgnoreCase("Cadastrar")){
            try{
                CidadeDao cd = new CidadeDao();
                retorno = cd.adiciona(cidade);
            }catch(Exception e){
                retorno = false;
            }
        }else
        if(acao.equalsIgnoreCase("alterar")){
        
        }
        return retorno;
    }
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            Cidade cd = new Cidade();
            String cidade = request.getParameter("cidade");
            String estado = request.getParameter("estado");
            
            cd.setNomeCidade(cidade);
            cd.setEstado(estado);
            if(this.ProcessaAcao(cd, request.getParameter("acao"))){
                response.sendRedirect("sucesso/sucesso.jsp");
            }else{
                response.sendRedirect("sucesso/erro.jsp");
            }
        } finally { 
            out.close();
        }
    } 

    // <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">
    /** 
    * Handles the HTTP <code>GET</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    /** 
    * Handles the HTTP <code>POST</code> method.
    * @param request servlet request
    * @param response servlet response
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
    * Returns a short description of the servlet.
    */
    public String getServletInfo() {
        return "Short description";
    }
    // </editor-fold>
}

o servlet tá incompleto mais a incersão tá completa!

Bom, aparentemente está tudo certo.
Tenta colocar um Breakpoint e debugar.

Você disse que na primeira vez a inserção é efetuada corretamente e na segunda não.
Ponha um breakpoint logo antes dessa segunda inserção pra saber como a sua conexão está vindo, se o Bean está correto.
Dá algum erro?
Se der, poste o erro pra vermos.

Acho que não tem nada a ver com Pool de Conexão não. Isso tá parecendo um erro daqueles simples de corrigir e difíceis de serem encontrados.

carvalhomarcio, já que você não usa pool de conexão, cria uma classe com public static void main e testa seu DAO.

Se o DAO funcionar e pela descrição que você passou verifica se o seu servlet foi chamado mesmo, coloca um System.out.println ou se você estiver usando o Eclipse coloca um brakpoint.

Qual banco você usa?
Percebi que no insert você não adiciona o idcidade, acho que deve ser mysql e o campo seja um incremente!? Confirme se é isso mesmo.

[]s

eu uso o postgres e o net beans, eu criei uma classe main e dá certo sempre só pelo servlet que não dá!