ConnectionPoolError

Tô usando o c3p0, e vem a stack:

Tá todo mundo na LIB e no BuildPath do Eclipse certim, alguém já teve esse problema???

hum… tenta colocar no <tomcat_home>/common/lib

Cara, até pondo no common/lib dah ClassNotFoundException!!!
Pior q isso é problema do Tomcat… damn!Em standalone tah td funcionando!!!

Olha a stack:

[quote]
[Classe não foi encontrada!!!]
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1352)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1198)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at ageris.utils.Conexoes.getConnection(Conexoes.java:19)
at ageris.dao.MySQLDAOFactory.retornarConexao(MySQLDAOFactory.java:12)
at ageris.dao.MySQLUsuarioDAO.validaLogin(MySQLUsuarioDAO.java:191)
at Autenticador.service(Autenticador.java:24)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Unknown Source)[/quote]

Matei esse erro.O meu tomcat não está aceitando o jar mais recente do mysql.Tive q voltar para um antigo.Mas surgiu um erro aqui q tah me deixando com a pulga atrás da orelha… olhando meu log de saida do tomcat:

Tah ocorrendo de uma ação ser nula, até pq minha login action, não faz referência a um comando (“cmd”) do controlador, vejam:
O controlador:

[code]
public class Controlador extends HttpServlet {
private static final long serialVersionUID = 1L;

private HashMap paginas;
private String pagina_de_erro="erro.jsp";
//private String jspdir = "/jsp/aplicacao/";// diretório das páginas JSP

public void init() throws ServletException{
 iniciarComandos();		
}

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
	throws ServletException, IOException {
service(arg0, arg1);
}

protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
	throws ServletException, IOException {
service(arg0, arg1);
}

public void service(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {	
         String actionType = request.getParameter("cmd");//pega o comando referente a 
                System.out.println(actionType);          //action digitada
 Action acao = getAction(actionType);	 
   try {
	           acao.execute(request,response);
   }catch (ExcecaoAction e) {
	           e.printStackTrace();
   }		
}

private Action getAction(String chave){        
	try{	
		System.out.println("Chave " + chave);
		Action acao = (Action)paginas.get(chave);	
		if(acao == null){
			System.out.println("Acao nula");
			return	(Action)paginas.get("login");
		}
		else{
			System.out.println(((Action)paginas.get(chave)).getClass());
			return	(Action)paginas.get(chave);
		}
	}
	catch(Exception e){
		e.printStackTrace();
		return	(Action)paginas.get("login");
	}        
}//fim do método getAction


private void iniciarComandos(){
	paginas= new HashMap();
	paginas.put("index",new ageris.actions.ComandoNulo("index.jsp"));
	paginas.put("login",new LoginAction());
	/*paginas.put("inserir-mesmo",new ComandoInserirSinistro("cadastra-sinistro.jsp"));
	paginas.put("listar-clientes",new ComandoListarTodos("listar-sinistros.jsp"));
	paginas.put("listar-um-cliente",new ComandoListarSinistro("exibe-sinistro.jsp"));
	paginas.put("login",new LoginFilter()); //new LoginFilter("home.jsp")
	paginas.put("main",new ComandoPrincipal("start.jsp","index.jsp"));*/
}

}
[/code] e o login action:

[code]
public class LoginAction implements Action {
Usuario user=new Usuario();
boolean validado=false;
String target = “”;
MySQLUsuarioDAO login = new MySQLUsuarioDAO();
public void execute(HttpServletRequest request, HttpServletResponse response)
throws ExcecaoAction {
try {
String usuario = request.getParameter(“username”);
String senha = request.getParameter(“senha”);
user.setUsername(usuario);
user.setSenha(senha);
validado=login.validaLogin(usuario,senha);
if (request instanceof HttpServletRequest) {
HttpServletRequest hSR = (HttpServletRequest) request;
HttpSession session = hSR.getSession();
if (session != null && validado){
target = “/start.jsp”;
session.setAttribute(“usuario”,user);
System.out.println("O usuario “+user.getUsername()+” foi logado em: "+
new SimpleDateFormat(“dd/MM/yyyy HH:mm:ss”).format(Calendar.getInstance().getTime()));
}else{
target = “/index.jsp”;
}
request.getRequestDispatcher(target).forward(request,response);
}
} catch (Exception e) {
System.out.println("Ocorreu o seguinte erro " + e.getMessage());
}
}

}[/code]
O que me interessa saber é:
Por quê a ação está sendo executada 3 vezes???

Loguei o c3p0, e mostra que a Conexõa está sendo entregue 3 vezes junto com essa ação nula:

login
Chave login
class ageris.actions.LoginAction
log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).
log4j:WARN Please initialize the log4j system properly.
A conexao foi obtida com sucesso!!!
Usuario :Ageris
Usuario Valido no sistema
Usuario bd Ageris
O usuario Ageris foi logado em: 01/04/2006 01:54:55
null
Chave null
Acao nula
A conexao foi obtida com sucesso!!!
Ocorreu o seguinte erro null
null
Chave null
Acao nula
A conexao foi obtida com sucesso!!!
Ocorreu o seguinte erro null
null
Chave null
Acao nula
A conexao foi obtida com sucesso!!!
Ocorreu o seguinte erro null

O pool:

[code]
public class PoolDeConexoes {
static Logger log = Logger.getLogger(PoolDeConexoes.class);
private static ComboPooledDataSource cpds;

private PoolDeConexoes() {
	//Porra,Singleton é feio pacas
}

public static synchronized Connection getConnection() throws PropertyVetoException, SQLException  {
	if (cpds == null) {
        cpds = new ComboPooledDataSource();
        cpds.setDriverClass("com.mysql.jdbc.Driver");
        cpds.setJdbcUrl("jdbc:mysql://localhost:3306/ageris");
        cpds.setUser("root");
        cpds.setPassword("");
        cpds.setMinPoolSize(2); 
        cpds.setAcquireIncrement(5); 
        cpds.setMaxPoolSize(50);
        cpds.setAcquireRetryAttempts(3);
        //cpds.setMaxIdleTime(60);
    }
	System.out.println("A conexao foi obtida com sucesso!!!");
    log.info("O Pool forneceu conexão.");
    return cpds.getConnection();
}

public static synchronized void closeConnection(DataSource ds)throws SQLException {
	if ( ds instanceof PooledDataSource) { 
		PooledDataSource pds = (PooledDataSource) ds; 
		pds.close();                     } 
	else System.err.println("Não é uma c3p0 PooledDataSource!"); 
}

}[/code]
Em MySQLUsuario dao há uma única chamada do tipow :
conn = MySQLDAOFactory.retornarConexao(); em validaLogin() sendo fechada após o seu uso.
Aonde está esse looping mardito??? :roll:

Meu MySQLUsuarioDAO(Só a parte validaLogin()):

[code]
public boolean validaLogin(String nome,String senha){
conn = MySQLDAOFactory.retornarConexao();
pstmt = null;
String sql = “SELECT USERNAME FROM USUARIO WHERE USERNAME = ? AND SENHA = ?”;
System.out.println(“Usuario :” + nome.trim());
try{
pstmt=conn.prepareStatement(sql);
pstmt.setString(1, nome.trim());
pstmt.setString(2, senha.trim());
ResultSet rs = pstmt.executeQuery();

	 if(rs.next()){
		 System.out.println("Usuario Valido no sistema");
 		 System.out.println("Usuario bd " + rs.getString("username"));	 		 
 			return true;
	 }
	 else{
 			System.out.println("Usuario Invalido");
 			return false;
 	     }
	}catch(SQLException sqlex){
		sqlex.printStackTrace();
	}finally{
		if (pstmt != null) try { MySQLDAOFactory.closePreparedStatement(pstmt); }
		                  catch(Exception e){e.printStackTrace();}
	}
	return false;
}	[/code]

Analisando os logs dah para observar claramente que após a validação o corre esse looping(3 vezes).Achei q fosse falta de sincronismo, mas não é, todos os métodos referentes a conexão são sincronizados.Ainda não consigo entender pq repete 3 vezes a ação e a conexão! :roll: