ConnectionPoolError

5 respostas
Ironlynx

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???

5 Respostas

thiago.correa

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

Ironlynx

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

Olha a stack:

<blockquote>

[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)</blockquote>
Ironlynx
Pior q isso é problema do Tomcat.. damn!Em standalone tah td funcionando!!!
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:
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. Usuario :Ageris Usuario Valido no sistema Usuario bd Ageris O usuario Ageris foi logado em: 30/03/2006 17:50:13 null Chave null Acao nula Ocorreu o seguinte erro null null Chave null Acao nula Ocorreu o seguinte erro null null Chave null Acao nula Ocorreu o seguinte erro null
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:
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"));*/
	}
}
e o login action:
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());
 		}		
	}

}
O que me interessa saber é: Por quê a ação está sendo executada 3 vezes???
Ironlynx
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:
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!"); 
    }

}
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:
Ironlynx
Meu MySQLUsuarioDAO(Só a parte validaLogin()):
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;
	}
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:
Criado 28 de março de 2006
Ultima resposta 2 de abr. de 2006
Respostas 5
Participantes 2