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

Classe principal em TesteMensageria

Ao executar o comando para "java -cp activemq-all-5.12.2.jar:aula-jms.jar br.com.caelum.TesteMensageria consome" recebo o seguinte erro: "Erro: Não foi possível localizar nem carregar a classe principal br.com.caelum.TesteMensageria". Coloquei os jars do activemq-all-5.12.2.jar e aula-jms.jar na mesma pasta e executei o comando, meu OS é Windows10.

A class TesteMensageria foi data pelo professor disponível para o download na primeira aula

5 respostas

Olá Robson, tudo bem?

Pode postar sua classe TesteMensageria, para que eu possa tentar te ajudar?

Abraço!

Então, Otávio, como falei no post a class TesteMensageria está dentro do jar aula-jms.jar. Que e foi criada pelo professor. Por favor, utilize o jar que pode se obtido na primeira aula.

Segue o decompiler da class do professor, assim como a dependência do conector.


package br.com.caelum;

import java.io.PrintStream;

public class TesteMensageria { public TesteMensageria() {}

  public static void main(String[] args) { if (args.length == 0) {
      System.out.println("use \"envia\" ou \"consome\" como parametro");
      return;
    }


    ConectorJms conectorJms = new ConectorJms();

    switch (args[0]) {
    case "envia": 
      int max = parseMax(args);
      conectorJms.enviaMensagens(max);
      break;

    case "consome": 
      conectorJms.consomeMensagens();
    }


    conectorJms.close();
  }

  private static int parseMax(String[] args)
  {
    if ((args.length < 2) || (args[1] == null)) {
      return 1;
    }
    return Integer.parseInt(args[1]);
  }
}

import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.naming.InitialContext;
import javax.naming.NamingException;



public class ConectorJms
{
  private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SS");
  private final InitialContext context;
  private final Connection conexao;
  private final Destination fila;

  public ConectorJms() {
    try {
      context = createInitialContext();
      ConnectionFactory cf = (ConnectionFactory)context.lookup("ConnectionFactory");
      conexao = cf.createConnection();
      fila = ((Destination)context.lookup("financeiro"));
    } catch (NamingException|JMSException e) {
      throw new RuntimeException(e);
    }
  }

  public void enviaMensagens(int max)
  {
    try
    {
      Session sessao = conexao.createSession(false, 1);
      MessageProducer producer = sessao.createProducer(fila);

      System.out.println("Enviando " + max + " menagem(ns)");

      for (int i = 0; i < max; i++) {
        Message msg = sessao.createTextMessage("Mensagem " + (i + 1) + " (" + geraHora() + ")");
        producer.send(msg);
      }

      sessao.close();
    } catch (JMSException e) {
      throw new RuntimeException(e);
    }
  }

  private String geraHora() {
    return SDF.format(new Date());
  }

  public void close() {
    try {
      conexao.close();
      context.close();
    } catch (JMSException|NamingException e) {
      throw new RuntimeException(e);
    }
  }

  private InitialContext createInitialContext() throws NamingException {
    Properties props = new Properties();
    props.setProperty("java.naming.factory.initial", "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    props.setProperty("java.naming.provider.url", "tcp://localhost:61616");
    props.setProperty("queue.financeiro", "fila.financeiro");

    InitialContext ctx = new InitialContext(props);
    return ctx;
  }

  public void consomeMensagens() {
    try {
      Session sessao = conexao.createSession(false, 1);

      MessageConsumer consumer = sessao.createConsumer(fila);
      conexao.start();
      consumer.setMessageListener(new ConectorJms.1(this));












      aguardeEnter();
      sessao.close();
    } catch (JMSException e) {
      throw new RuntimeException(e);
    }
  }

  private void aguardeEnter() {
    System.out.println("Aperte enter para finalizar");
    Scanner s = new Scanner(System.in);
    s.nextLine();
    s.close();
  }
}
solução!

Otávio, obrigado!

O achei o comando certo para windows.

Bom dia, estou com o mesmo problema.

Qual comando você utilizou?

Obrigado

java -cp activemq-all-5.12.0.jar;aula-jms.jar br.com.caelum.TesteMensageria consome

copie e só altere a versão do activemq