As instruções abaixo descrevem como criar programas para publicar e receber mensagens utilizando o JMS. As mensagens serão publicadas com o tópico flightStatus e consistirão de strings contendo dados sobre o status de vôos partindo ou chegando ao aeroporto de Florianópolis.
Será utilizado o provedor JMS do servidor de aplicação GlassFish. Os programas serão criados utilizando o NetBeans, para facilitar o processo de compilação, empacotamento e implantação da aplicação.
Crie um projeto do tipo 'Cliente de Aplicação Corporativa' e adicione a classe JmsPublisher, listada a seguir, ao projeto. O código necessário para conectar ao provedor de mensagens está no construtor da classe. O método main() cria uma instância da classe e publica três mensagens com o tópico flightStatus, contendo dados sobre o status de vôos partindo ou chegando ao aeroporto de Florianópolis.
import javax.jms.JMSException; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; import javax.jms.TopicSession; import javax.jms.TopicPublisher; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException;
public class JmsPublisher { private TopicPublisher publisher; private TopicSession session; private TopicConnection connect;
public JmsPublisher(String factoryName, String topicName) throws JMSException, NamingException { Context jndiContext = new InitialContext(); TopicConnectionFactory factory = (TopicConnectionFactory) jndiContext.lookup(factoryName); Topic topic = (Topic) jndiContext.lookup(topicName); this.connect = factory.createTopicConnection(); this.session = connect.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); this.publisher = session.createPublisher(topic); }
public void publish(String message) throws JMSException { TextMessage textMsg = this.session.createTextMessage(); textMsg.setText(message); System.out.println("PUBLISHING MESSAGE: "+ message); this.publisher.publish(textMsg); }
public void close() throws JMSException { this.connect.close(); }
public static void main(String[] args) throws Exception { JmsPublisher publisher; if(args.length != 2) publisher = new JmsPublisher("ConnectionFactory", "topic/flightStatus"); else publisher = new JmsPublisher(args[0], args[1]); publisher.publish("30JUL08 1032 TAKEOFF JJ8011 FLN GRU"); Thread.sleep(5000); publisher.publish("30JUL08 1120 LANDING RG2541 FLN POA"); Thread.sleep(5000); publisher.publish("30JUL08 1155 TAKEOFF G94321 FLN CGH");
publisher.close(); System.exit(0); } }
Crie um novo projeto do tipo 'Cliente de Aplicação Corporativa' e adicione a classe JmsSubscriber, listada a seguir, ao projeto. O método main() cria uma instância da classe, que fica ouvindo mensagens com o tópico flightStatus. O método onMessage() será executado sempre que uma mensagem for recebida.
import javax.jms.Message; import javax.jms.TextMessage; import javax.jms.TopicConnectionFactory; import javax.jms.TopicConnection; import javax.jms.TopicSession; import javax.jms.Topic; import javax.jms.TopicSubscriber; import javax.jms.JMSException; import javax.naming.NamingException; import javax.naming.Context; import javax.naming.InitialContext; import javax.jms.Session; import javax.jms.MessageListener;
public class JmsSubscriber implements MessageListener { private TopicConnection connect;
public JmsSubscriber(String factoryName, String topicName) throws JMSException, NamingException { Context jndiContext = new InitialContext(); TopicConnectionFactory factory = (TopicConnectionFactory) jndiContext.lookup(factoryName); Topic topic = (Topic) jndiContext.lookup(topicName); this.connect = factory.createTopicConnection(); TopicSession session = connect.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); TopicSubscriber subscriber = session.createSubscriber(topic); subscriber.setMessageListener(this); connect.start(); }
public void onMessage(Message message) { try { TextMessage textMsg = (TextMessage) message; String text = textMsg.getText(); System.out.println(text); } catch (JMSException ex) { ex.printStackTrace(); } }
public static void main(String[] args) throws Exception { if(args.length != 2) new JmsSubscriber("ConnectionFactory", "topic/flightStatus"); else new JmsSubscriber(args[0], args[1]); } }
Primeiramente você deve configurar o provedor de mensagens. Para isso, inicie o GlassFish (na aba 'Serviços' do NetBeans, abra o nó 'Servidores', clique com o botão da direita sobre o GlassFish e selecione 'Iniciar') e entre na interface administrativa (clique aqui e faça o login como usuário 'admin' e com a senha de administrador, cujo valor padrão é 'adminadmin'). Selecione Resources > JMS Resources > Connection Factories e clique em 'New'. Em seguida, defina o nome JNDI como 'ConnectionFactory', selecione o tipo de recurso 'javax.jms.ConnectionFactory' e clique em 'OK'. A seguir, clique em Resources > JMS Resources > Destination Resources e clique em 'New'. Defina o nome JNDI como 'topic/flightStatus', o nome do destino físico 'flightStatus', selecione o tipo de recurso 'javax.jms.Topic' e clique em 'OK'.
Execute primeiramente o projeto contendo a classe JmsSubscriber. Em seguida, execute o projeto contendo a classe JmsPublisher.