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

( Não Solucionado )Spring FrameWork - HTTP Status 500 – Internal Server Error , Não indentifico o problema no servidor ?

Pessoal, se alguém entender o que acontece, segue a lista de problema do erro 500.

Alguém sabe o que acontece ?

nov 21, 2019 5:42:20 PM org.apache.catalina.core.ApplicationContext log
SEVERE: Servlet.init() for servlet [spring mvc] threw exception
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contaController' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\controller\ContaController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.contas.dao.ContaDAO]: : Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

Valeu ;)

13 respostas

Oi Marcio, você pode passar o código das classes contaController e contaDao? assim seria mais fácil identificar o problema.

Obrigado por Responder , Murilo !!!

Abaixo segue os codigos ContaController:

package br.com.caelum.contas.controller;

import java.util.List;

import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.caelum.contas.dao.ContaDAO;
import br.com.caelum.contas.modelo.Conta;

@Controller
public class ContaController {

    private ContaDAO dao;

    @Autowired
    public ContaController(ContaDAO dao) {
        this.dao = dao;
    }

    @RequestMapping("/form")
    public String formulario() {
        return "formulario";
    }

    @RequestMapping("/adicionaConta")
    public String adiciona(@Valid Conta conta, BindingResult result) {

        if(result.hasErrors()) {
            return "formulario";
        }

        System.out.println("Conta adicionada é: " + conta.getDescricao());
        this.dao.adiciona(conta);

        return "redirect:listaContas";
    }

    @RequestMapping("/listaContas")
    public ModelAndView lista() {
        List<Conta> contas = this.dao.lista();

        ModelAndView mv = new ModelAndView("conta/lista");
        mv.addObject("listaContas", contas);

        return mv;
    }

    @RequestMapping("/removeConta")
    public String removeConta(Conta conta) {
        this.dao.remove(conta);

        //return "forward:listaContas"; // redireciona no servidor e mantem a url = 1 requisição mantendo o mesmo objeto populado
        return "redirect:listaContas"; // redireciona no lado cliente e altera a url = 2 requisições com perca do objeto populado
    }

    @RequestMapping("/pagaConta")
    public void paga(Conta conta, HttpServletResponse response) {
        this.dao.paga(conta.getId());

        response.setStatus(200);
    }
}

Segue o Codigo da ContaDAO:

package br.com.caelum.contas.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;


import br.com.caelum.contas.modelo.Conta;
import br.com.caelum.contas.modelo.TipoDaConta;

@Repository
public class ContaDAO {
    private Connection connection;

    @Autowired
    public ContaDAO(DataSource dataSource) {
        try {
            this.connection = dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void adiciona(Conta conta) {
        String sql = "insert into contas (descricao, paga, valor, tipo) values (?,?,?,?)";
        PreparedStatement stmt;
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, conta.getDescricao());
            stmt.setBoolean(2, conta.isPaga());
            stmt.setDouble(3, conta.getValor());
            stmt.setString(4, conta.getTipo().name());
            stmt.execute();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }

    public void remove(Conta conta) {

        if (conta.getId() == null) {
            throw new IllegalStateException("Id da conta naoo deve ser nula.");
        }

        String sql = "delete from contas where id = ?";
        PreparedStatement stmt;
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setLong(1, conta.getId());
            stmt.execute();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void altera(Conta conta) {
        String sql = "update contas set descricao = ?, paga = ?, dataPagamento = ?, tipo = ?, valor = ? where id = ?";
        PreparedStatement stmt;
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setString(1, conta.getDescricao());
            stmt.setBoolean(2, conta.isPaga());
            stmt.setDate(3, conta.getDataPagamento() != null ? new Date(conta
                    .getDataPagamento().getTimeInMillis()) : null);
            stmt.setString(4, conta.getTipo().name());
            stmt.setDouble(5, conta.getValor());
            stmt.setLong(6, conta.getId());
            stmt.execute();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public List<Conta> lista() {
        try {
            List<Conta> contas = new ArrayList<Conta>();
            PreparedStatement stmt = this.connection
                    .prepareStatement("select * from contas");

            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                // adiciona a conta na lista
                contas.add(populaConta(rs));
            }

            rs.close();
            stmt.close();

            return contas;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public Conta buscaPorId(Long id) {


        if (id == null) {
            throw new IllegalStateException("Id da conta nao deve ser nula.");
        }

        try {
            PreparedStatement stmt = this.connection
                    .prepareStatement("select * from contas where id = ?");
            stmt.setLong(1, id);
            ResultSet rs = stmt.executeQuery();

            if (rs.next()) {
                return populaConta(rs);
            }

            rs.close();
            stmt.close();

            return null;
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    public void paga(Long id) {

        if (id == null) {
            throw new IllegalStateException("Id da conta nao deve ser nula.");
        }

        String sql = "update contas set paga = ?, dataPagamento = ? where id = ?";
        PreparedStatement stmt;
        try {
            stmt = connection.prepareStatement(sql);
            stmt.setBoolean(1, true);
            stmt.setDate(2, new Date(Calendar.getInstance().getTimeInMillis()));
            stmt.setLong(3, id);
            stmt.execute();

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    private Conta populaConta(ResultSet rs) throws SQLException {
        Conta conta = new Conta();

        conta.setId(rs.getLong("id"));
        conta.setDescricao(rs.getString("descricao"));
        conta.setPaga(rs.getBoolean("paga"));
        conta.setValor(rs.getDouble("valor"));

        Date data = rs.getDate("dataPagamento");
        if (data != null) {
            Calendar dataPagamento = Calendar.getInstance();
            dataPagamento.setTime(data);
            conta.setDataPagamento(dataPagamento);
        }

        conta.setTipo(Enum.valueOf(TipoDaConta.class, rs.getString("tipo")));

        return conta;
    }
}

Valeu ;)

Infelizmente não sei realmente a causa/raiz do problema. mas encontrei algumas divergências que podem resolver.

Na classe ContaController substitua as linhas:

private ContaDAO dao;

    @Autowired
    public ContaController(ContaDAO dao) {
        this.dao = dao;
    }

Por:

@Autowired
    private ContaDAO dao;

Note que removi o construtor pois não deveria ser necessário instanciá-lo usando um DAO, visto que ele cria o próprio DAO (A notação @AutoWired estava no lugar errado)

E na classe ContaDAO substitua o código:

   private Connection connection;

    @Autowired
    public ContaDAO(DataSource dataSource) {
        try {
            this.connection = dataSource.getConnection();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

Por

 @Autowired
   private Connection connection;

Fazendo basicamente o que fiz na anterior. No meu código uso JPA, e não JDBC e creio que talvez por isso minha resposta esteja errada. Portanto segue a minha interpretação do erro que talvez te ajude a corrigi-lo.

SPRING -> UnsatisfiedDependencyException: Error creating bean with name 'contaController'

Aqui ele falou que não conseguiu criar o Bean porque não conseguiu satisfazer as dependências da classe 'ContaController'

Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.contas.dao.ContaDAO]:

Aqui ele disse que ele teve um erro no construtor, justamente no argumento de index 0 (que é o único), que é o ContaDao passado no construtor.

Pelo que eu entendi o resto do erro é o StackTrace desse erro, então eu acho que o erro esta diretamente relacionado a essas classes, e mais especificamente aos construtores delas. Tente substituir um de cada vez, e anote os resultador obtidos, e poste aqui.

Se achou minha resposta inconclusiva, ou precisa continuar o curso, recomendo que crie novamente a pergunta e já inclua o código das classes, assim logo um instrutor ou moderador o responderá.

Obrigado.

Valeu Murilo !!!

A primeira mudança , eu consegui fazer da classe ContaController, fiz as substituições, e não acusou erro no codigo , já da classe ContaDAO ele não permitiu a alteração, então mantive como está. Quando subi o servidor ele monstra esse erro:

Root Cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contaController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private br.com.caelum.contas.dao.ContaDAO br.com.caelum.contas.controller.ContaController.dao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

Obrigado pelas dicas, vou tentando por aqui,

Valeu ;)

Já nessa saída não sei identificar o erro, quando resolvê-lo mande aqui pois assim eu também vou aprender.

Recomendo que você crie aquele outro tópico mesmo e em 24h sem resposta um instrutor entrará em contato.

Obrigado!

Boa tarde, Márcio.

Você consegue conectar no banco de dados por outra via? Qual banco de dados você está usando?

Boa Noite , Geovanny !!!

Estou usando o MySql , a connexão é via JDBC , não estou usando outro Banco de Dados , inclusive até instalei o MySQL da Oracle no meu computador, o Eclipse já plugin mysql-connector-java , os codigos não dão erro algum, é só quando eu levanto o tomcat 9 , ai ele joga esse error.

Fala Marcio, tudo bem?

Aparentemente sua aplicação está tendo algum problema na comunicação com o seu banco de dados. Você teria o stack completo do erro para mandar? Acredito que tenha mais detalhes que possam ajudar na identificação do problema. Pode ser a sua configuração de acesso ao banco de dados ou algo a nível de rede, como um firewall, por exemplo.

Posta aqui também a classe de configuração JDBC, por favor.

Boa Tarde, Otávio !!!

Vou colocar aqui a Stack, esse codigo é referente ao curso de Spring FrameWork MVC do professor Mauricio Aniche , eu acredito que ele sabe mais sobre a criação ao banco de dados, ele usa Forms para representar a validação de senha e login, todavia segue a Stack:

Fiz as configurações ao banco de dados do MySql mas mesmo assim , ele recusa a fazer a conexão.

Abaixo segue as Stacks !!!

Exception

javax.servlet.ServletException: Servlet.init() for servlet [spring mvc] threw exception

Root Cause

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'contaController' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\controller\ContaController.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.caelum.contas.dao.ContaDAO]: : Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES)); nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES))


Root Cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contaDAO' defined in file [C:\Users\Marcio\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\contas\WEB-INF\classes\br\com\caelum\contas\dao\ContaDAO.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES))

Root Cause

org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [br.com.caelum.contas.dao.ContaDAO]: Constructor threw exception; nested exception is java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES))
    org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164)
    org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:125)
    org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:270)

Root Cause

java.lang.RuntimeException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES))
    br.com.caelum.contas.dao.ContaDAO.<init>(ContaDAO.java:30)


Root Cause

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'master'@'localhost' (using password: YES))


Root Cause

java.sql.SQLException: Access denied for user 'master'@'localhost' (using password: YES)
solução!

Boa tarde, Márcio.

Desculpe a demora.

A stack que você postou parece indicar erro ao autenticar no MySQL (Access denied). Você já checou o nome de usuário e senha usados para a conexão?

Segue codigo ConnectionFactory JDBC

package br.com.caelum.contas;

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

public class ConnectionFactory {


    public Connection getConnection() throws SQLException {
        System.out.println("conectando ...");

        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            throw new SQLException(e);
        }

        return DriverManager.getConnection("jdbc:mysql://localhost/conta", "master", "master");
    }

}

Obrigado, vou tentando por aqui , Valeu ;)

Essa Pane que não compreendo !!!

java.sql.SQLException: Access denied for user 'master'@'localhost' (using password: YES)