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.
2 respostas ate agora ↓
1 Rubem Azenha // Oct 7, 2008 at 2:26 pm
Por que não usou a API padrão do JMS?
2 Diego Carrion // Oct 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