Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Acesso a dados utilizando o Controller do curso

Boa tarde! Estou desenvolvendo um projeto pessoal a partir dos conceitos aprendidos na Carreira Java Web utilizando as premissas de MVC e acesso a dados com um Pool de conexões apresentadas nas aulas.

Porém, ao tentar trabalhar com banco de dados e essa estrutura de Controler do curso o projeto gera erro. Diz que a Classe está fazendo uso do Pooll não pode fazer cast para a classe Tarefa(Classe que o Controller usa).

Obs.: Fiz o teste do acesso a dados fora do ambiente java EE e tudo correu normal...

Alguém poderia me orientar como proceder quanto a isso?

11 respostas

Boa tarde, Bruno! Como vai?

Cole aqui o log do seu erro para que eu possa dar uma olhada e te ajudar!

Oi Gabriel! Antes de mais nada agradeço a atenção.

Segue o log do erro gerado no console do eclipse:

mar 11, 2018 10:08:03 PM com.mchange.v2.c3p0.DriverManagerDataSource 
ADVERTÊNCIA: Could not load driverClass com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.mchange.v2.c3p0.DriverManagerDataSource.ensureDriverLoaded(DriverManagerDataSource.java:143)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:173)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)

O que acho mais estranho que com a mesma classe que cria o pool de conexões e testando no java puro, sem servlets ele funcionou.

Boa noite, Bruno! Como vai?

O driver do MySQL não está sendo encontrado como está mostrando o erro:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Como vc disse que o código funciona sem servlets, então não vou perguntar se vc lembrou de adicionar o .JAR do driver ao classpath da sua aplicação. Se vc não tem certeza sobre isso, vale a pena verificar!

Em vez disso, tente fazer o seguinte antes de abrir suas conexões (vc deve ter um ConnectionFactory no seu projeto):

Class.forName("com.mysql.jdbc.Driver")

Veja aí se funciona e qualquer coisa me diz que eu continuo a te ajudar!

Grande abraço!

Oi! sobre os arquivos jar eu adicionei sim.

Agora quanto ao comando mencionado:

Class.forName("com.mysql.jdbc.Driver")

eu o coloquei na classe que cria a conexão, na verdade o Pool de conexões, conforme pode ser visto abaixo:

package cpp.jdbc;


import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class ConnectionPool {

    private ComboPooledDataSource dataSource;

    public ConnectionPool() throws Throwable {

        ComboPooledDataSource pool = new ComboPooledDataSource();
        pool.setDriverClass("com.mysql.jdbc.Driver");
        pool.setUser("root");
        pool.setPassword("******");
        pool.setJdbcUrl("jdbc:mysql://localhost:3306/cpp");
        pool.setUnreturnedConnectionTimeout(60);
        pool.setDebugUnreturnedConnectionStackTraces(false);
        pool.setMaxPoolSize(10);
        pool.setMinPoolSize(5);
        pool.setInitialPoolSize(5);
        pool.setMaxIdleTime(1800);
        pool.setMaxConnectionAge(1800);

        this.dataSource = pool;

    }

    public Connection getConnection() throws SQLException {
        Connection connection = this.dataSource.getConnection(); 
        return connection;

    }
}

Bruno, repare que o que eu pedi pra vc adicionar:

Class.forName("com.mysql.jdbc.Driver");

É diferente do que tem na sua classe que é:

pool.setDriverClass("com.mysql.jdbc.Driver");

Faça assim na sua classe:

public class ConnectionPool {

    private ComboPooledDataSource dataSource;

    public ConnectionPool() throws Throwable {

        Class.forName("com.mysql.jdbc.Driver");

        // restante do código...
    }
}

Fiz o que me orientou e apesar de não entender exatamente o propósito dessa linha:

Pois, de acordo com o javadoc o método retorna um objeto de acordo com a String passada mas eu particularmente não estou usando ela.

forName(String name, boolean initialize, ClassLoader loader)
Returns the Class object associated with the class or interface with the given string name, using the given class loader.

De qualquer forma essa linha de código resolveu esse problema específico mas ainda está dando problema relacionado ao com.mysql.jdbc.Driver conforme erro abaixo:

Valor da variável num_proc10011235520188220009
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    at java.lang.Class.forName0(Native Method)
Erro na classe RegistraEntradajava.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at java.lang.Class.forName(Unknown Source)

Esse erro já me persegue há alguns dias por isso aproveito sua atenção.

Bruno, o código que falei pra vc usar é utilizado quando o .JAR do driver foi adicionado ao classpath mas, por algum motivo, o .JAR não é carregado. Com o comando que te falei nós obrigamos o .JAR a ser carregado.

Isso tá estranho pq o erro "mudou de cara" mas continua sendo o mesmo!

Faz o seguinte: coloca o seu código no github e colar o link aqui para que eu possa dar uma olhada melhor no seu código.

Outra coisa, qual versão do Tomcat vc está utilizando?

solução!

Edit: Cara aparentemente descobri qual foi a mancada. Além de adicionar os arquivos *.jar da biblioteca c3p0(pool de conexão mysql) e o conector mysql na pasta lib do projeto, também precisava jogar na pasta lib do tomcat.(Sou iniciante de tudo em java então na tinha me ligado nisso)

E como eu criei o servidor pelo próprio eclipse ele pede pra indicar a pasta do tomcat e nela que preciso adicionar os arquivos *.jar.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Oi! Bom dia! Agradeço de verdade a ajuda prestada!

Sobre o github, já tenho o projeto hospedado lá, segue o link e se me passar o usuário eu te adiciono como colaborador tb.

https://github.com/brunus85/cpp.git

A versão do Tomcat usada é a 7, conforme o instrutor do alura orientou no curso de servlets. Mas caso ache melhor alguma outra eu altero aqui, afinal o objetivo é resolver rs.

Bruno, então o problema foi resolvido correto?

Foi sim Gabriel e agradeço muito sua atenção com o meu problema.

Por nada, Bruno!

Que bom que resolveu! Vou marcar a sua resposta como solução do tópico então!

Sempre que tiver qualquer dúvida é só procurar o pessoal aqui no fórum!

Grande abraço e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software