Inserir registro apostila caelum

Olá Pessoal,

Estou iniciando o curso de java web baseado na apostila da caelum, estava funcionando certinho até agora mas to tentando inserir um registro no banco e não dá certo.
Os códigos seguem abaixo, se alguém puder me dar uma luz sobre o que pode estar acontecendo eu agradeço muito.

Formulário html

<html>
    <body>
        <form action="AdicionaContatoServlet" method="post">
            Nome: <input type="text" name="nome" /><br />
            E-mail: <input type="text" name="email" /><br />
            Endereço: <input type="text" name="endereco" /><br />
            Data Nascimento: <input type="text" name="dataNascimento" /><br />
            <input type="submit" value="Gravar" />
        </form>
    </body>
</html>

Código da Servlet

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class AdicionaContatoServlet extends HttpServlet {

    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        PrintWriter out = response.getWriter();
// pegndo os parâmetros do request
        String nome = request.getParameter("nome");
        String endereco = request.getParameter("endereco");
        String email = request.getParameter("email");
        String dataEmTexto = request.getParameter("dataNascimento");
        Calendar dataNascimento = null;
// fazendo a conversão da data
        try {
            Date date = (Date) new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
            dataNascimento = Calendar.getInstance();
            dataNascimento.setTime(date);
        } catch (ParseException e) {
            out.println("Erro de conversão da data");
            return; //para a execução do método
        }
// monta um objeto contato
        Contato contato = new Contato();
        contato.setNome(nome);
        contato.setEndereco(endereco);
        contato.setEmail(email);
        contato.setDataNascimento(dataNascimento);
// salva o contato
        ContatoDao dao = new ContatoDao();
        try {
            dao.adiciona(contato);
        } catch (SQLException ex) {
            Logger.getLogger(AdicionaContatoServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
// imprime o nome do contato que foi adicionado
        out.println("<html>");
        out.println("<body>");
        out.println("Contato " + contato.getNome() + " adicionado com sucesso");
        out.println("</body>");
        out.println("</html>");
    }
}

Classe contato


import java.util.Calendar;

public class Contato {

    private Long id;
    private String nome;
    private String email;
    private String endereco;
    private Calendar dataNascimento;

// métodos get e set para id, nome, email, endereço e dataNascimento
    public String getNome() {
        return this.nome;
    }

    public void setNome(String novo) {
        this.nome = novo;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String novo) {
        this.email = novo;
    }

    public String getEndereco() {
        return this.endereco;
    }

    public void setEndereco(String novo) {
        this.endereco = novo;
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long novo) {
        this.id = novo;
    }

    public Calendar getDataNascimento() {
        return this.dataNascimento;
    }

    public void setDataNascimento(Calendar dataNascimento) {
        this.dataNascimento = dataNascimento;
    }
}

Classe ContatoDao


import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;

public class ContatoDao {

// a conexão com o banco de dados
    private Connection connection;

    public ContatoDao() {
        this.connection = new ConnectionFactory() {

            @Override
            public javax.jms.Connection createConnection() throws JMSException {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public javax.jms.Connection createConnection(String userName, String password) throws JMSException {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            private Connection getConnection() {
                throw new UnsupportedOperationException("Not yet implemented");
            }
        }.getConnection();
    }

    public void adiciona(Contato contato) throws SQLException {
        String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
        try {
// prepared statement para inserção
            PreparedStatement stmt = connection.prepareStatement(sql);
            // seta os valores
            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            stmt.setDate(4, new Date(contato.getDataNascimento().getTimeInMillis()));
// executa
            stmt.execute();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

Este é o erro que está me retornando:
HTTP Status 404 -
type Status report
message
description The requested resource () is not available.

Obrigado pela atenção

Isso no seu construtor:

    public ContatoDao() {
        this.connection = new ConnectionFactory() {

            @Override
            public javax.jms.Connection createConnection() throws JMSException {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            @Override
            public javax.jms.Connection createConnection(String userName, String password) throws JMSException {
                throw new UnsupportedOperationException("Not supported yet.");
            }

            private Connection getConnection() {
                throw new UnsupportedOperationException("Not yet implemented");
            }
        }.getConnection();
    }

Pq está usando JMS dentro do seu contrutor? Tira isso dai, acho que não deve ter isso no execicio da caelum.

Deixe seu construtor assim:

	public ContatoDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}	

E no seu AdicionaContatoServlet, troque o tipo de argumentos:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { ... } 

olá Romarcio

Esqueci de dizer que estou utilizando o netbeans e glassfish, alterei a classe ContatoDao mas o netbeans fica pedindo para implementar os métodos abstratos e mostra um erro, ou seja, se eu implementar estes métodos ficará como no código postado anteriormente.

Pode ser algum erro no web.xml? Neste ponto creio pode ter algum problema no mapeamento.

[quote=asandro1501]olá Romarcio

Esqueci de dizer que estou utilizando o netbeans e glassfish, alterei a classe ContatoDao mas o netbeans fica pedindo para implementar os métodos abstratos e mostra um erro, ou seja, se eu implementar estes métodos ficará como no código postado anteriormente.

Pode ser algum erro no web.xml? Neste ponto creio pode ter algum problema no mapeamento.[/quote]

É que vc importou essas classes

import javax.jms.ConnectionFactory; import javax.jms.JMSException;

Precisa retirar estes imports, dai vai deixar de pedir para implemantar os métodos.