Ol\u00e1 Amigos,<\/p>\n
Hoje finalizaremos a inclus\u00e3o de Fila JMS no AcademicNet. Agora vamos incluir uma fila topic. Veja como ser\u00e1 o exemplo: \u2013 Cria\u00e7\u00e3o de componentes 3 MDBs para consumir as filas Nesta parte criaremos 3 MDBs que consumir\u00e3o a fila de Professores. Para cada mensagem inclu\u00edda na Fila do tipo TOPIC todos os MDBs que est\u00e3o configurando para consumir a fila receber\u00e3o a mesma mensagem.<\/p>\n Observe que o c\u00f3digo dos nossos MDBs s\u00e3o 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: Agora vamos criar o Servlet que ir\u00e1 gravar a mensagem na fila. Esta mensagem conter\u00e1 um objeto Professor.<\/p>\n Execu\u00e7\u00e3o do projeto Ol\u00e1 Amigos, Hoje finalizaremos a inclus\u00e3o de Fila JMS no AcademicNet. Agora vamos incluir uma fila topic. Se voc\u00ea n\u00e3o leu o artigo anterior acesse aqui. Nele s\u00e3o feitas as configura\u00e7\u00f5es iniciais. Veja como ser\u00e1 o exemplo:<\/p>\n","protected":false},"author":1,"featured_media":680,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[1,2,18],"tags":[],"yoast_head":"\n
\nSe voc\u00ea n\u00e3o leu o artigo anterior acesse aqui<\/a>. Nele s\u00e3o feitas as configura\u00e7\u00f5es iniciais.<\/p>\n
\n<\/a><\/p>\n
\nTarefas:<\/p>\n
\n\u2013 Cria\u00e7\u00e3o do Servlet que enviar\u00e1 uma mensagem para a fila<\/p>\nCria\u00e7\u00e3o dos consumidores MDB (Message Drive Bean)<\/H2><\/p>\n
\r\npackage br.com.feltex.academicnet.mdb;\r\n\r\nimport javax.ejb.ActivationConfigProperty;\r\nimport javax.ejb.MessageDriven;\r\nimport javax.jms.Message;\r\nimport javax.jms.MessageListener;\r\nimport javax.jms.ObjectMessage;\r\nimport javax.jms.TextMessage;\r\n\r\nimport br.com.feltex.academicnet.entidade.Professor;\r\n\r\n\/**\r\n * Message-Driven Bean implementation class for: ProfessorMDB\r\n *\/\r\n@MessageDriven(activationConfig = {\r\n\t\t@ActivationConfigProperty(propertyName = \"destinationType\", propertyValue = \"javax.jms.Topic\"),\r\n\t\t@ActivationConfigProperty(propertyName = \"destination\", propertyValue = \"java:\/topic\/professorTopic\") }, mappedName = \"java:\/topic\/professorTopic\")\r\npublic class ProfessorTopicMDB1 implements MessageListener {\r\n\r\n\tpublic ProfessorTopicMDB1() {\r\n\r\n\t}\r\n\r\n\tpublic void onMessage(Message message) {\r\n\t\tSystem.out.println(getClass() + \" Inicio\");\r\n\t\ttry {\r\n\r\n\t\t\tif (message instanceof TextMessage) {\r\n\t\t\t\tTextMessage mensagem = (TextMessage) message;\r\n\t\t\t\tSystem.out.println(\"Mensagem recebida: \" + mensagem.getText());\r\n\t\t\t} else if (message instanceof ObjectMessage) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tObjectMessage obj = (ObjectMessage) message;\r\n\t\t\t\t\tProfessor professor = (Professor) obj.getObject();\r\n\t\t\t\t\tSystem.out.println(\"Objeto Recebido: \" + professor);\r\n\t\t\t\t} catch (Exception e) {\r\n\t\t\t\t\te.printStackTrace();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\tSystem.out.println(getClass() + \" Fim\");\r\n\t}\r\n}\r\n<\/pre>\n
\r\npackage br.com.feltex.academicnet.mdb;\r\n\r\nimport javax.ejb.ActivationConfigProperty;\r\nimport javax.ejb.MessageDriven;\r\nimport javax.jms.Message;\r\nimport javax.jms.MessageListener;\r\nimport javax.jms.ObjectMessage;\r\nimport javax.jms.TextMessage;\r\n\r\nimport br.com.feltex.academicnet.entidade.Professor;\r\n\r\n\/**\r\n * Message-Driven Bean implementation class for: ProfessorMDB\r\n *\/\r\n@MessageDriven(activationConfig = {\r\n\t\t@ActivationConfigProperty(propertyName = \"destinationType\", propertyValue = \"javax.jms.Topic\"),\r\n\t\t@ActivationConfigProperty(propertyName = \"destination\", propertyValue = \"java:\/topic\/professorTopic\") }, mappedName = \"java:\/topic\/professorTopic\")\r\npublic class ProfessorTopicMDB2 implements MessageListener {\r\n\r\n\tpublic ProfessorTopicMDB2() {\r\n\r\n\t}\r\n\r\n\tpublic void onMessage(Message message) {\r\n\t\tSystem.out.println(getClass() + \" Inicio\");\r\n\t\ttry {\r\n\r\n\t\t\tif (message instanceof TextMessage) {\r\n\t\t\t\tTextMessage mensagem = (TextMessage) message;\r\n\t\t\t\tSystem.out.println(\"Mensagem recebida: \" + mensagem.getText());\r\n\t\t\t} else if (message instanceof ObjectMessage) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tObjectMessage obj = (ObjectMessage) message;\r\n\t\t\t\t\tProfessor professor = (Professor) obj.getObject();\r\n\t\t\t\t\tSystem.out.println(\"Objeto Recebido: \" + professor);\r\n\t\t\t\t} catch (Exception e) {\r\n\t\t\t\t\te.printStackTrace();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\tSystem.out.println(getClass() + \" Fim\");\r\n\t}\r\n}\r\n<\/pre>\n
\r\n\r\npackage br.com.feltex.academicnet.mdb;\r\n\r\nimport javax.ejb.ActivationConfigProperty;\r\nimport javax.ejb.MessageDriven;\r\nimport javax.jms.Message;\r\nimport javax.jms.MessageListener;\r\nimport javax.jms.ObjectMessage;\r\nimport javax.jms.TextMessage;\r\n\r\nimport br.com.feltex.academicnet.entidade.Professor;\r\n\r\n\/**\r\n * Message-Driven Bean implementation class for: ProfessorMDB\r\n *\/\r\n@MessageDriven(activationConfig = {\r\n\t\t@ActivationConfigProperty(propertyName = \"destinationType\", propertyValue = \"javax.jms.Topic\"),\r\n\t\t@ActivationConfigProperty(propertyName = \"destination\", propertyValue = \"java:\/topic\/professorTopic\") }, mappedName = \"java:\/topic\/professorTopic\")\r\npublic class ProfessorTopicMDB3 implements MessageListener {\r\n\r\n\tpublic ProfessorTopicMDB3() {\r\n\r\n\t}\r\n\r\n\tpublic void onMessage(Message message) {\r\n\t\tSystem.out.println(getClass() + \" Inicio\");\r\n\t\ttry {\r\n\r\n\t\t\tif (message instanceof TextMessage) {\r\n\t\t\t\tTextMessage mensagem = (TextMessage) message;\r\n\t\t\t\tSystem.out.println(\"Mensagem recebida: \" + mensagem.getText());\r\n\t\t\t} else if (message instanceof ObjectMessage) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tObjectMessage obj = (ObjectMessage) message;\r\n\t\t\t\t\tProfessor professor = (Professor) obj.getObject();\r\n\t\t\t\t\tSystem.out.println(\"Objeto Recebido: \" + professor);\r\n\t\t\t\t} catch (Exception e) {\r\n\t\t\t\t\te.printStackTrace();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} catch (Exception e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\tSystem.out.println(getClass() + \" Fim\");\r\n\t}\r\n}\r\n<\/pre>\n
\n enviar e-mail,
\n gravar em um Banco de Dados
\n chamar um servi\u00e7o externo passando o objeto Professor
\nEsta situa\u00e7\u00e3o seria atendida pelo nosso exemplo, pois a mesma mensagem gravada na fila<\/p>\n\r\n\r\npackage br.com.feltex.academicnet.servlet;\r\n\r\nimport java.io.IOException;\r\nimport java.io.PrintWriter;\r\n\r\nimport javax.annotation.Resource;\r\nimport javax.inject.Inject;\r\nimport javax.jms.JMSConnectionFactory;\r\nimport javax.jms.JMSContext;\r\nimport javax.jms.JMSException;\r\nimport javax.jms.ObjectMessage;\r\nimport javax.jms.Topic;\r\nimport javax.servlet.ServletException;\r\nimport javax.servlet.annotation.WebServlet;\r\nimport javax.servlet.http.HttpServlet;\r\nimport javax.servlet.http.HttpServletRequest;\r\nimport javax.servlet.http.HttpServletResponse;\r\n\r\nimport br.com.feltex.academicnet.entidade.Professor;\r\n\r\n@WebServlet(\"\/ProfessorServletJMS2\")\r\npublic class ProfessorServletJMS2 extends HttpServlet {\r\n\tprivate static final long serialVersionUID = 1L;\r\n\r\n\t@Resource(mappedName = \"java:\/topic\/professorTopic\")\r\n\tprivate Topic topic;\r\n\r\n\t@Inject\r\n\t@JMSConnectionFactory(\"java:\/ConnectionFactory\")\r\n\tprivate JMSContext context;\r\n\r\n\tprotected void doGet(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws ServletException, IOException {\r\n\t\tdoPost(request, response);\r\n\t}\r\n\r\n\tprotected void doPost(HttpServletRequest request,\r\n\t\t\tHttpServletResponse response) throws ServletException, IOException {\r\n\t\tSystem.out.println(getClass() + \"Inicio........\");\r\n\t\tProfessor professor = new Professor();\r\n\t\tprofessor.setMatricula(2221L);\r\n\t\tprofessor.setNome(\"Maria da Silva\");\r\n\t\tenviarObjetoForma1(professor);\r\n\t\tSystem.out.println(getClass() + \"Fim........\");\r\n\r\n\t\tPrintWriter out = response.getWriter();\r\n\t\tout.print(\"
Objeto enviado com sucesso! JMS TOPIC 2.0<\/H1>\");\r\n\t}\r\n\r\n\t\/**\r\n\t * Envia um objeto complexo para a fila JMS\r\n\t * \r\n\t * \r\n\t *\/\r\n\tpublic void enviarObjetoForma1(Professor professor) {\r\n\t\ttry {\r\n\t\t\tObjectMessage objMessage = context.createObjectMessage();\r\n\t\t\tobjMessage.setObject(professor);\r\n\t\t\tcontext.createProducer().send(topic, objMessage);\r\n\r\n\t\t} catch (JMSException ex) {\r\n\t\t\tex.printStackTrace();\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n
\nRode o projeto completo. Acesse o menu principal e escolha as op\u00e7\u00f5es de envio JMS
\n\u201cEnvio de Mensagem JMS 2.0 (Topic) – Professor\u201d<\/p>\nLinks relacionados<\/H2>
\nExemplo Completo (AcademicNetWebJMS.war)<\/a>
\nAbra\u00e7os e bons estudos.<\/p>\n","protected":false},"excerpt":{"rendered":"