Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
11
respostas

Onde estou errando?

Olá. Estou tentando acessar minha aplicação em Spring pelo EC2 a primeira vez que tentei e só aparecia parte da aplicação e quando ia fazer o login estourava o erro:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.persistence.EntityManagerFactory]: Factory method 'entityManagerFactory' threw exception; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

minha aplicação tinha as seguintes informações:

jdbc.user = root
jdbc.pass = root
jdbc.url = jdbc:mysql://localhost:3306/contas

depois de configurar e alterar os dados para :

jdbc.user = root
jdbc.pass = ******
jdbc.url = jdbc:mysql://mysql-clipboard.cseewscw4mmo.us-east-1.rds.amazonaws.com:3306/contas

não consigo mais acessar a aplicação e nada aparece e continua o mesmo erro, onde estou errando nesse caso?

11 respostas

Oi Clerman, o hibernate quando sobe tenta acessar o banco de dados e inferir as informações necessárias para a execução da aplicação.. descobrir qual dialeto ele deve aplicar por exmeplo...

A exception que ele soltando é justamente relacionada a isso.. ele ta tentando acessar o banco e não está conseguindo. Pega esses dados de acesso que você ta testando e cria uma aplicação com main básica para acessar ele.. só para ver se funciona de boa.

solução!

Olá Alberto criei a classe para testar a conexão com a base de dados:

package br.com.clipboard.financeiro.web.controller;

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

public class ClasseTeste {

    public static void main(String[] args) {

        String sql;

        String user = "root";
        String passwd = "********";

        String url = "jdbc:mysql://mysql-clipboard.cseewscw4mmo.us-east-1.rds.amazonaws.com:3306/contas";

        try {
            Connection con = DriverManager.getConnection(url, user, passwd);

            Statement stmt = con.createStatement();
             sql = "CREATE TABLE `Demo` ("
                        + "`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,"
                        + "`titulo` VARCHAR(80) NOT NULL,"
                        + "`ano` INT UNSIGNED,"
                        + "`diretor` VARCHAR(80),"
                        + "PRIMARY KEY (`id`))"
                        + "CHARACTER SET utf8";
             stmt.executeUpdate(sql);

             System.out.println(sql);
             System.out.println("Conesão estabelecida com sucesso!");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

ao efetuar o run pela primeira vez me retorna:

CREATE TABLE Demo (id INT UNSIGNED NOT NULL AUTO_INCREMENT,titulo VARCHAR(80) NOT NULL,ano INT UNSIGNED,diretor VARCHAR(80),PRIMARY KEY (id))CHARACTER SET utf8 Conesão estabelecida com sucesso!

na segunda:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'Demo' already exists    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)    at java.lang.reflect.Constructor.newInstance(Unknown Source)    at com.mysql.jdbc.Util.handleNewInstance(Util.java:389)
    at com.mysql.jdbc.Util.getInstance(Util.java:372)    at om.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3835)    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3771)    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2531)    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1618)    at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1549)    at br.com.clipboard.financeiro.web.controller.ClasseTeste.main(ClasseTeste.java:30)

Deixando a evidência clara que houve a conexão e a criação de uma tabela. Agora pela aplicação, quando tento acessar via navegador não retorna erro mas a mensagem: A conexão expirou! E o erro pelo console do prompt via comando como pode ver na abertura do tópico!

é porque na segunda você ta pedindo para criar a tabela de novo :).

claro! Vc pode me dar uma luz nessa situação?

Em relação a aplicação no heroku, você precisa olhar mais os logs para ver o real motivo da falha de conexão... a informação deve estar lá. Pelo menos é o que eu faria :).

Não é o no Heroku, é no Amazon o erro no console é esse:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.persistence.EntityManagerFactory]: Factory method 'entityManagerFactory' threw exception; nested exception is org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

Por vezes eu consigo acessar a base de dados por linha de comando por outras vezes não!

Alberto no meu caso, se fosse deixar a minha aplicação para usar variáveis de ambiente como as usadas no exemplo do curso Amazon EC2 - loja .war, como posso criar essas variáveis de ambiente na minha aplicação conforme as configs que enviei acima, para que fique mais parecida com o exemplo e aumente a probabilidade de acertos !

Não sei qual o tipo de aplicação apresentada no curso, mas se for usando springboot, acho que você pode usar a sintaxe do ${var} para acessar variáveis disponíveis no ambiente. Mesmo sendo na amazon, você ainda não postou aqui a exception completa.. você está postando apenas a mensagem de erro.

30-Aug-2017 00:03:15.079 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:03:15.295 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext 30-Aug-2017 00:03:24.001 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Initializing Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:08:48.564 INFO [localhost-startStop-3] org.apache.catalina.core.A pplicationContext.log Destroying Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:08:48.594 INFO [localhost-startStop-3] org.apache.catalina.core.A pplicationContext.log Closing Spring root WebApplicationContext 30-Aug-2017 00:08:54.909 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:08:55.219 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext 30-Aug-2017 00:09:05.707 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:14:36.552 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Destroying Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:14:36.584 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Closing Spring root WebApplicationContext 30-Aug-2017 00:16:00.742 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:16:01.055 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext

30-Aug-2017 00:14:36.584 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Closing Spring root WebApplicationContext 30-Aug-2017 00:16:00.742 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:16:01.055 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext 30-Aug-2017 00:16:12.044 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:20:51.716 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Destroying Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:20:51.756 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Closing Spring root WebApplicationContext 30-Aug-2017 00:21:08.811 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:21:09.275 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext 30-Aug-2017 00:21:20.592 INFO [localhost-startStop-1] org.apache.catalina.core.A pplicationContext.log Initializing Spring FrameworkServlet 'dispacher' 30-Aug-2017 00:40:06.794 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log 2 Spring WebApplicationInitializers detected on classpath 30-Aug-2017 00:40:07.042 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Initializing Spring root WebApplicationContext 30-Aug-2017 00:40:16.169 INFO [localhost-startStop-2] org.apache.catalina.core.A pplicationContext.log Initializing Spring FrameworkServlet 'dispacher'

Esse erro ocorre quando tento fazer o login ou tento criar um novo usuário...