1 package com.diasparsoftware.javax.jms; 2 3 import java.util.Map; 4 5 import javax.jms.*; 6 import javax.naming.*; 7 8 import com.diasparsoftware.java.util.*; 9 10 public class JBossMapMessageSender implements MapMessageSender { 11 public static final String QUEUE_CONNECTION_FACTORY_JNDI_NAME = 12 "ConnectionFactory"; 13 14 public void sendMapMessage( 15 String destinationQueueName, 16 Map messageContent) { 17 18 try { 19 Context context = new InitialContext(); 20 QueueConnectionFactory queueConnectionFactory = 21 (QueueConnectionFactory) context.lookup( 22 QUEUE_CONNECTION_FACTORY_JNDI_NAME); 23 24 QueueConnection connection = 25 queueConnectionFactory.createQueueConnection(); 26 27 Queue submitOrderQueue = 28 (Queue) context.lookup(destinationQueueName); 29 30 QueueSession session = 31 connection.createQueueSession( 32 false, 33 QueueSession.AUTO_ACKNOWLEDGE); 34 35 connection.start(); 36 37 final MapMessage message = session.createMapMessage(); 38 39 addMessageContentToMessage(messageContent, message); 40 41 QueueSender sender = session.createSender(submitOrderQueue); 42 sender.send(message); 43 44 connection.stop(); 45 session.close(); 46 connection.close(); 47 } 48 catch (NamingException e) { 49 throw new MessagingException("Unable to send message", e); 50 } 51 catch (JMSException e) { 52 throw new MessagingException("Unable to send message", e); 53 } 54 } 55 56 private void addMessageContentToMessage( 57 Map messageContent, 58 final MapMessage message) { 59 60 CollectionUtil 61 .forEachDo(messageContent, new MapEntryClosure() { 62 public void eachMapEntry(Object key, Object value) { 63 try { 64 message.setObject((String) key, value); 65 } 66 catch (JMSException wrapped) { 67 IllegalArgumentException wrapper = 68 new IllegalArgumentException( 69 "Unable to set message property <" 70 + key 71 + "> with value <" 72 + value 73 + ">"); 74 wrapper.initCause(wrapped); 75 throw wrapper; 76 } 77 } 78 }); 79 } 80 }