2
respostas

Não consigo acessar o Banco de Dados

22:55:16.804 [Camel (camel-1) thread #0 - timer://negociacoes] ERROR org.apache.camel.processor.DefaultErrorHandler - Failed delivery for (MessageId: MEUID on ExchangeId: MEUID). Exhausted after delivery attempt: 1 caught: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
2 respostas

Meu código está assim:

package br.com.desafio.camunda;

import java.text.SimpleDateFormat; import org.apache.camel.CamelContext; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.dataformat.xstream.XStreamDataFormat; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.SimpleRegistry; import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource; import com.thoughtworks.xstream.XStream;

public class DesafioCamunda {

private static MysqlConnectionPoolDataSource criaDataSource() {
    MysqlConnectionPoolDataSource mysqlDs = new MysqlConnectionPoolDataSource();
    mysqlDs.setDatabaseName("camel");
    mysqlDs.setServerName("localhost");
    mysqlDs.setPort(3306);
    mysqlDs.setUser("admin");
    mysqlDs.setPassword("");
    return mysqlDs;
}

public static void main(String[] args) throws Exception {


    SimpleRegistry registro = new SimpleRegistry();
    registro.put("mysql", criaDataSource());

    final XStream xstream = new XStream();
    xstream.alias("negociacao", Negociacao.class);
    CamelContext context = new DefaultCamelContext(registro);

    context.addRoutes(new RouteBuilder() {

        @Override
        public void configure() throws Exception{
            from("timer://negociacoes?fixedRate=true&delay=3s&period=360s").
            to("http4://argentumws.caelum.com.br/negociacoes").
              convertBodyTo(String.class).
              unmarshal(new XStreamDataFormat(xstream)).
              split(body()).
              process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    Negociacao negociacao = exchange.getIn().getBody(Negociacao.class);
                    exchange.setProperty("preco", negociacao.getPreco());
                    exchange.setProperty("quantidade", negociacao.getQuantidade());
                    String data = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss").format(negociacao.getData().getTime());
                    exchange.setProperty("data", data);
                }
              }).
              setBody(simple("insert into negociacao(preco, quantidade, data) values (${property.preco}, ${property.quantidade}, '${property.data}')")).
              log("${body}").
              delay(1000).
        to("jdbc:mysql");
        }
    });

    context.start();
    Thread.sleep(20000);
    context.stop();
}

}

Olá Gustavo, tudo bem?

Pela mensagem de erro, não foi possível criar uma conexão com o servidor de banco de dados MySQL.

O MySQL está em execução na sua máquina? Tente conectar nele usando o MySQL Workbench para garantir antes de tentar conectar pela aplicação Java.

Outra possível causa é a falta do driver MySQL no seu classpath (mysql-connector-java). Certifique-se de ter o JAR correspondente a essa biblioteca no classpath do seu projeto.

Poder haver algum firewall ou configuração de rede que esteja bloqueando a conexão com o servidor de banco de dados também. Certifique-se de que você possa se conectar ao servidor de banco de dados a partir do computador onde o código está sendo executado.

Tente essas dicas e qualquer coisa volte a postar aqui :)

Abraço