Exemplo completo com JSF Primefaces + EJB + Hibernate + MySQL + JMS (Topic)
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380
Olá Amigos,
Hoje finalizaremos a inclusão de Fila JMS no AcademicNet. Agora vamos incluir uma fila topic.
Se você não leu o artigo anterior acesse aqui. Nele são feitas as configurações iniciais.
Tarefas:
– Criação de componentes 3 MDBs para consumir as filas
– Criação do Servlet que enviará uma mensagem para a fila
Criação dos consumidores MDB (Message Drive Bean)
Nesta parte criaremos 3 MDBs que consumirão a fila de Professores. Para cada mensagem incluída na Fila do tipo TOPIC todos os MDBs que estão configurando para consumir a fila receberão a mesma mensagem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package br.com.feltex.academicnet.mdb; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.TextMessage; import br.com.feltex.academicnet.entidade.Professor; /** * Message-Driven Bean implementation class for: ProfessorMDB */ @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/topic/professorTopic") }, mappedName = "java:/topic/professorTopic") public class ProfessorTopicMDB1 implements MessageListener { public ProfessorTopicMDB1() { } public void onMessage(Message message) { System.out.println(getClass() + " Inicio"); try { if (message instanceof TextMessage) { TextMessage mensagem = (TextMessage) message; System.out.println("Mensagem recebida: " + mensagem.getText()); } else if (message instanceof ObjectMessage) { try { ObjectMessage obj = (ObjectMessage) message; Professor professor = (Professor) obj.getObject(); System.out.println("Objeto Recebido: " + professor); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } System.out.println(getClass() + " Fim"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package br.com.feltex.academicnet.mdb; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.TextMessage; import br.com.feltex.academicnet.entidade.Professor; /** * Message-Driven Bean implementation class for: ProfessorMDB */ @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/topic/professorTopic") }, mappedName = "java:/topic/professorTopic") public class ProfessorTopicMDB2 implements MessageListener { public ProfessorTopicMDB2() { } public void onMessage(Message message) { System.out.println(getClass() + " Inicio"); try { if (message instanceof TextMessage) { TextMessage mensagem = (TextMessage) message; System.out.println("Mensagem recebida: " + mensagem.getText()); } else if (message instanceof ObjectMessage) { try { ObjectMessage obj = (ObjectMessage) message; Professor professor = (Professor) obj.getObject(); System.out.println("Objeto Recebido: " + professor); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } System.out.println(getClass() + " Fim"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package br.com.feltex.academicnet.mdb; import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.ObjectMessage; import javax.jms.TextMessage; import br.com.feltex.academicnet.entidade.Professor; /** * Message-Driven Bean implementation class for: ProfessorMDB */ @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"), @ActivationConfigProperty(propertyName = "destination", propertyValue = "java:/topic/professorTopic") }, mappedName = "java:/topic/professorTopic") public class ProfessorTopicMDB3 implements MessageListener { public ProfessorTopicMDB3() { } public void onMessage(Message message) { System.out.println(getClass() + " Inicio"); try { if (message instanceof TextMessage) { TextMessage mensagem = (TextMessage) message; System.out.println("Mensagem recebida: " + mensagem.getText()); } else if (message instanceof ObjectMessage) { try { ObjectMessage obj = (ObjectMessage) message; Professor professor = (Professor) obj.getObject(); System.out.println("Objeto Recebido: " + professor); } catch (Exception e) { e.printStackTrace(); } } } catch (Exception e) { e.printStackTrace(); } System.out.println(getClass() + " Fim"); } } |
Observe que o código dos nossos MDBs são iguais. Todos recebem um objeto professor e exibem os dados. Podemos determinar que cada um deles execute uma atividade diferente. Imagine que definimos 3 tarefas diferentes com a mensagem recebida:
enviar e-mail,
gravar em um Banco de Dados
chamar um serviço externo passando o objeto Professor
Esta situação seria atendida pelo nosso exemplo, pois a mesma mensagem gravada na fila
Agora vamos criar o Servlet que irá gravar a mensagem na fila. Esta mensagem conterá um objeto Professor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | package br.com.feltex.academicnet.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.annotation.Resource; import javax.inject.Inject; import javax.jms.JMSConnectionFactory; import javax.jms.JMSContext; import javax.jms.JMSException; import javax.jms.ObjectMessage; import javax.jms.Topic; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import br.com.feltex.academicnet.entidade.Professor; @WebServlet("/ProfessorServletJMS2") public class ProfessorServletJMS2 extends HttpServlet { private static final long serialVersionUID = 1L; @Resource(mappedName = "java:/topic/professorTopic") private Topic topic; @Inject @JMSConnectionFactory("java:/ConnectionFactory") private JMSContext context; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(getClass() + "Inicio........"); Professor professor = new Professor(); professor.setMatricula(2221L); professor.setNome("Maria da Silva"); enviarObjetoForma1(professor); System.out.println(getClass() + "Fim........"); PrintWriter out = response.getWriter(); out.print("<H1>Objeto enviado com sucesso! JMS TOPIC 2.0</H1>"); } /** * Envia um objeto complexo para a fila JMS * * */ public void enviarObjetoForma1(Professor professor) { try { ObjectMessage objMessage = context.createObjectMessage(); objMessage.setObject(professor); context.createProducer().send(topic, objMessage); } catch (JMSException ex) { ex.printStackTrace(); } } } |
Execução do projeto
Rode o projeto completo. Acesse o menu principal e escolha as opções de envio JMS
“Envio de Mensagem JMS 2.0 (Topic) – Professor”
Links relacionados
Exemplo Completo (AcademicNetWebJMS.war)
Abraços e bons estudos.
Deixe um comentário
Você precisa fazer o login para publicar um comentário.