JMS com Spring
Eu estava viajando, então estive ausente do PC por alguns dias ![]()
De volta agora é hora de colocar o assunto em dia.
Em dois posts anteriores eu falei algo sobre JMS. Um que tratava da integração do Oracle com Java e outro da comunicação do Websphere MQ via JMS. Então para completar o assunto vou mostrar na prática como enviar e receber mensagens usando JMS e Spring.
Provavelmente esse post vai ser melhor aproveitado por quem já conhece ou utiliza o Spring, mas como é um framework popular é fácil encontrar referencias sobre suas configurações na web.
Connection Factory:
Nosso objetivo é enviar mensagens via JMS para o Websphere MQ (MQSeries), dando seqüencia ao post Websphere MQ e JMS. Para isso vamos usar o Connection Factory da IBM com.ibm.mq.jms.MQQueueConnectionFactory para gerenciar a conexão. Segue abaixo o trecho de configuração disso no Spring (arquivo applicationContext.xml):
<bean id="jmsQueueConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> <property name="hostName"> <value>${mq.hostName}</value> </property> <property name="queueManager"> <value>${mq.queueManager}</value> </property> <property name="channel"> <value>${mq.channel}</value> </property> <property name="port"> <value>${mq.port}</value> </property> <property name="transportType"> <value>1</value> </property> </bean> |
Esse transportType é referente ao tipo de comunicação utilizado. O valor 1 é referente a constante com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP que diz que a comunicação é via TCP IP.
Configuração:
As demais configurações do Spring para JMS são simples, e similares a isso:
<bean id="jmsSpringConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory102"> <property name="targetConnectionFactory"> <ref local="jmsQueueConnectionFactory" /> </property> </bean> <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate102"> <property name="connectionFactory" ref="jmsSpringConnectionFactory"/> <property name="pubSubDomain" value="false"/> <!-- false seta para queue (point to point) --> <property name="receiveTimeout" value="500"/> </bean> |
Utilização:
Para usar é muito simples, basta instanciar o Spring e depois enviar e receber mensagem com praticamente uma linha de código.
Instanciando o Spring:
BeanFactoryLocator bfs = SingletonBeanFactoryLocator.getInstance("applicationContext.xml"); BeanFactoryReference bf = bfs.useBeanFactory("mqSpring"); |
O Spring irá instanciar as classes configuradas nos beans, e a partir dai é só usar.
Enviando mensagem:
JmsTemplate jmsTemplate = (JmsTemplate) bf.getFactory().getBean("jmsQueueTemplate"); jmsTemplate.convertAndSend("fila", "mensagem"); |
Recebendo mensagem:
JmsTemplate jmsTemplate = (JmsTemplate) bf.getFactory().getBean("jmsQueueTemplate"); TextMessage textMessage = (TextMessage) jmsTemplate.receive("fila"); |
Listener:
Uma outra opção para receber mensagens do MQ é criar um listener que fica escutando uma determinada fila e irá receber automaticamente novas mensagens.
<bean id="messageListener" class="br.com.globalvalue.exemplomq.ExemploListener" /> <bean id="jmsListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="connectionFactory" ref="jmsSpringConnectionFactory"/> <property name="messageListener" ref="messageListener" /> <property name="destinationName"><value>${mq.queue.inbox}</value></property> </bean> |
public class ExemploListener implements MessageListener { public void onMessage(Message message) { if (message instanceof TextMessage) { try { System.out.println(((TextMessage) message).getText()); } catch (JMSException ex) { throw new RuntimeException(ex); } } else { throw new IllegalArgumentException("Message must be of type TextMessage"); } } } |
Para executar o código é necessário os jar`s do Spring (e dependencias) e os jar`s da IBM para o Websphere MQ. Espero que o nível de detalhes tenha sido suficientes. Vimos que se o projeto utiliza Spring é fácil enviar e receber mensagens utilizando JMS, mesmo com classes (Factory) de terceiros como no caso do nosso exemplo para Websphere MQ.
Subscribe to this blog's RSS feed
Websphere MQ e JMS
Existem várias formas de realizar comunicação entre aplicações. Entre elas estão: troca de arquivos, compartilhamento de banco de dados, chamada de métodos remotos (RMI, SOAP) e mensageria.
O MQ (Message Queue) é um padrão para mensageria adotado por várias empresas, entre elas a IBM que possui o produto Websphere MQ (antigamente chamado de MQSeries).
Um dos pontos [...]
Oracle vs Java
Atualmente estou atuando em um projeto onde é necessário a integração do Oracle com Java. Ou seja: é necessário executar código Java dentro do Oracle para uma determinada funcionalidade.
Esse projeto faz parte de um treinamento/consultoria sobre Websphere MQ (antigamente chamado de MQSeries) para um cliente, e vai ser o primeiro tema / “puxão de orelha” [...]
Blog reformulado
Não sei exatamente quem costuma ler este site / blog, mas a partir de hoje quero tentar dar novos rumos para ele. Uma sacudida mesmo =)
Até o momento eu estava um pouco ausente e postando somente uma ou outra notícia (lançamentos do spider, palestras, etc…). Nunca postei muitas coisas técnicas…, um pouco por falta de [...]
J2EE Spider 1.0.0-M3
Bom o projeto está indo bem, a cada dia novas melhorias. Está dando muiiito trabalho, mas está ficando bacana.
O curioso é que o país onde as pessoas mais interagem e sugerem as coisas é a Índia =) O pessoal lá parece ser muito ligado na área de desenvolvimento mesmo.
Fora um ou outro bug a versão [...]
Palestra SPIDER em evento M$…
Parece estranho mas sábado dia 26 vou pegar carona em um evento do pessoal de .Net (Microsoft) e fechá-lo com uma palestra Java sobre o projeto J2EE Spider.
Como o povo do MG-JUG está um pouco parado em relação a palestras, vai ser uma oportunidade de ter algo sobre Java por aqui.
O evento vai ser [...]
Nova versão do J2EE Spider
Ontem lancei a versão 1.0.0-M1 do J2EE Spider.
Temos muitas novidades. Agora já está disponível a criação de projetos com CRUD, o layout do plugin foi revisto, tem funcionalidades novas como mapeamento e muitas outras coisas…
Deu muito trabalho, mas está ficando bacana. Para ver você mesmo assista o vídeo abaixo:
- versão windows (auto-executável)
- versão multiplataforma [...]
Palestras J2EE Spider
Em agosto foi publicado no Jornal da Universidade FUMEC (na qual fiz graduação) a seguinte notícia:
fonte: http://www.fumec.br/jornal/?p=306
Além disso fui convidado e estarei realizando uma palestra sobre o projeto amanhã dia 24 a noite e dia 25 de manhã na FUMEC.
E aproveitando o embalo, dia 26 estarei na UFOP apresentando uma palestra sobre o mesmo assunto [...]
POT IBM sobre SOA no Rio
Agora em julho eu estive na IBM do Rio pela GlobalValue, e fui participar de um POT (Proof of Technology) sobre SOA.
O POT é uma espécie de mini-curso voltado para apresentação de tecnologias e ferramentas. Neste caso eles deram uma visão rapida de SOA e partiram para a apresentação das ferramentas IBM nesta área (que [...]
Outra plaquinha :)
Agora em julho no segundo Townmeeting (encontro corporativo) de 2007 recebi mais um reconhecimento bacana na GlobalValue (empresa da IBM em que trabalho). Segue a imagem abaixo:
O reconhecimento são por projetos que eu estou fazendo. Entre eles o PortalGVS (http://www.globalvalue.com.br) que é em Websphere Portal e o GlobalSafe que é um projeto interno bem bacana [...]