MouseOver Studio

MouseOver Studio header image 2

Colocando mensagens no Webshpere MQ com JRuby

setembro 16th, 2008 por Diego Carrion · 2 comentários

Estava trabalhando com Websphere MQ e tinha um programinha em Java que colocava mensagens numa fila do servidor. Num dos momentos livres decidi brincar um pouco e portar o código para Ruby. O código ficou mais legal e foi um excelente exemplo do poder da combinação Ruby + Java que o JRuby oferece.

Quem for precisar mandar uma mensagem para um servidor WQM a partir de um script em Ruby tem aqui um exemplo que também é valido para qualquer programador Java, devido a que a sintaxe é bem fácil de seguir:

require "java"
require "com.ibm.mqjms.jar"

import com.ibm.mq.jms.MQQueueConnectionFactory
import com.ibm.mq.jms.JMSC
import javax.jms.Session

factory = MQQueueConnectionFactory.new
factory.setHostName "wmq1.mouseoverstudio.com"
factory.setPort 1414
factory.setTransportType JMSC::MQJMS_TP_CLIENT_MQ_TCPIP
factory.setQueueManager "mouseoverstudio.queue.manager"
factory.setChannel "channel1"

connection = factory.createConnection
connection.start

session = connection.createSession false, Session::AUTO_ACKNOWLEDGE

message = session.createTextMessage "calling WMQ from JRuby"

queue = session.createQueue "queue:///mouseoverstudio.queue"

sender = session.createProducer queue
sender.send message

sender.close
session.close
connection.close

Para executar o programa acima o arquivo com.ibm.mqjms.jar deve estar dentro do classpath, o qual pode ser indicado com a variável de ambiente CLASSPATH.

Para os programadores Java que forem traduzir o programa, em Ruby :: indica uma constante da classe, similar ao static do Java, pelo que Session::AUTO_ACKNOWLEDGE se traduziria em Java como Session.AUTO_ACKNOWLEDGE.

Para os que desejem uma implementação 100% Ruby também existe o RubyWMQ, porém não testei ele é não sei se é bou ou não.

Tags: java · jms · jruby · mq · ruby · websphere · wmq

2 respostas ate agora ↓

  • 1 Rubem Azenha // out 7, 2008 at 2:26 pm

    Por que não usou a API padrão do JMS?

  • 2 Diego Carrion // out 7, 2008 at 2:49 pm

    Oi Rubém, excelente pergunta :)

    Mas então, eu tentei migrar o código (que ja estava pronto desde faz um tempo) para utilizar as interfaces do JMS mas para isso ia precissar de um servidor JNDI do qual eu pudesse pegar a conexão.

    No momento a melhor opção foi deixar o código sem essa dependencia e ficou assim.

Deixar um comentário