DAO não está funcionando no Servlet

Seguinte,

Estou participando do fj21, estudando travei no seguinte problema:

Tenho um UsuarioDAO e um servlet AdicionarUsuario. Quando executo a servlet com o seguinte código,
ela funciona…

package br.com.fabrica.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.fabrica.dao.UsuarioDAO;
import br.com.fabrica.usuarios.TipoUsuario;
import br.com.fabrica.usuarios.Usuario;

public class AdicionarUsuario extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		/*
		Usuario usuario = new Usuario();

		usuario.setLogin("login");
		usuario.setSenha("senha");
		usuario.setNome("nome");
		usuario.setCpf("cpf");
		usuario.setTipo(TipoUsuario.ADMINISTRADOR);		
		
		try {
			UsuarioDAO dao = new UsuarioDAO();
			dao.adicionar(usuario);
		} catch (SQLException e) {
			//Realizando um wrapper da exceção antes de lançar
			throw new ServletException(e);
		}
		*/
		
		PrintWriter pw = response.getWriter();
		
		pw.println("<html>");
		pw.println("funciona " + request.getParameter("login"));
		pw.println("</html>");
		
		
	}
}

Isso prova que ela está registrada e mapeada bonitinho e pegou o parâmetro…
Mas com o seguinte já não funciona, estou criando um usuario com atributos qualquer…

package br.com.fabrica.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.fabrica.dao.UsuarioDAO;
import br.com.fabrica.usuarios.TipoUsuario;
import br.com.fabrica.usuarios.Usuario;

public class AdicionarUsuario extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		Usuario usuario = new Usuario();

		usuario.setLogin("login");
		usuario.setSenha("senha");
		usuario.setNome("nome");
		usuario.setCpf("cpf");
		usuario.setTipo(TipoUsuario.ADMINISTRADOR);		
		
		try {
			UsuarioDAO dao = new UsuarioDAO();
			dao.adicionar(usuario);
		} catch (SQLException e) {
			//Realizando um wrapper da exceção antes de lançar
			throw new ServletException(e);
		}
		
		/*
		PrintWriter pw = response.getWriter();
		
		pw.println("<html>");
		pw.println("funciona " + request.getParameter("login"));
		pw.println("</html>");
		*/
		
	}
	
}

O erro é o seguinte:

03/08/2008 21:27:42 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet AdicionarUsuario threw exception
java.sql.SQLException
at br.com.fabrica.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:24)
at br.com.fabrica.dao.UsuarioDAO.(UsuarioDAO.java:20)
at br.com.fabrica.servlet.AdicionarUsuario.service(AdicionarUsuario.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188 )
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528 )
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)

Bom, então o erro deveria estar no DAO, certo?
Fiz o seguinte teste, copiei a lógica para o main e funciona!

package br.com.fabrica.principal;

import java.sql.SQLException;

import javax.servlet.ServletException;

import br.com.fabrica.dao.UsuarioDAO;
import br.com.fabrica.usuarios.TipoUsuario;
import br.com.fabrica.usuarios.Usuario;

public class Principal {
	public static void main(String[] args) throws SQLException {
		
		Usuario usuario = new Usuario();

		usuario.setLogin("login");
		usuario.setSenha("senha");
		usuario.setNome("nome");
		usuario.setCpf("cpf");
		usuario.setTipo(TipoUsuario.ADMINISTRADOR);		
		
		UsuarioDAO dao = new UsuarioDAO();
		dao.adicionar(usuario);

	}
}

O problema parece estar em utilizar o DAO dentro da servlet, não consegui ver o motivo…
Que merda estou fazendo?

Bom este é meu primeiro post, ainda sou novato, mais o que estiver em meu alcance, pode contar comigo…
até.

Eu tenho um palpite para o que pode estar errado, mas pra ter certeza, preciso ver a stack completa da exceção. Tem como vc colocar aqui?

Desculpe minha ignorância, mais só consegui passar o que saiu no console. O stack completo deveria sair no Erro log do eclipse, certo? Mais não sai nada, estou procurando…

Seu driver JDBC esta nas bibliotecas de seu conteiner web?

Perfeito foi isso…copiei meu "mysql-connector-java-5.1.6-bin.jar" para WEB-INF->lib e adicionei no Path. Não me dei conta que é o servlet conteiner que vai instânciar a classe…É bom acontecer essas coisas, assim aprende.
Esse é um ponto importante, imagino os problemas que dever acontecer por detalhes como esse…

Valeu Alessandro, valeu lavh.