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