View Javadoc

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  }