KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > joram > mom > util > MessageConverterModule


1 /*
2  * JORAM: Java(TM) Open Reliable Asynchronous Messaging
3  * Copyright (C) 2003 - 2004 ScalAgent Distributed Technologies
4  * Copyright (C) 2003 - Bull SA
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
19  * USA.
20  *
21  * Initial developer(s): Frederic Maistre (Bull SA)
22  * Contributor(s): Nicolas Tachker (Bull SA)
23  */

24 package org.objectweb.joram.mom.util;
25
26 import org.objectweb.joram.shared.messages.Message;
27 import org.objectweb.joram.shared.messages.MessageType;
28
29 import java.io.Serializable JavaDoc;
30 import java.util.Enumeration JavaDoc;
31 import java.util.Hashtable JavaDoc;
32 import java.util.HashMap JavaDoc;
33 import java.util.Map JavaDoc;
34 import java.util.Iterator JavaDoc;
35
36 import javax.jms.BytesMessage JavaDoc;
37 import javax.jms.IllegalStateException JavaDoc;
38 import javax.jms.MapMessage JavaDoc;
39 import javax.jms.MessageFormatException JavaDoc;
40 import javax.jms.ObjectMessage JavaDoc;
41 import javax.jms.StreamMessage JavaDoc;
42 import javax.jms.TextMessage JavaDoc;
43 import javax.jms.JMSException JavaDoc;
44
45
46 /**
47  * The <code>MessageConverterModule</code> is a utility class used for
48  * converting JORAM MOM messages into foreign JMS messages and foreign
49  * JMS messages into JORAM MOM messages.
50  */

51 public class MessageConverterModule
52 {
53   /**
54    * Converts a standard JMS message into an
55    * <code>org.objectweb.joram.mom.shared.messages.Message</code> instance.
56    *
57    * @exception javax.jms.MessageFormatException If a problem occurs while
58    * reading the JMS message or writing the MOM message.
59    */

60   public static Message convert(javax.jms.Message JavaDoc jmsMessage)
61                 throws MessageFormatException JavaDoc
62   {
63     if (jmsMessage == null) return null;
64
65     Message msg = Message.create();
66
67     try {
68       if (jmsMessage instanceof BytesMessage JavaDoc) {
69         // Building a Bytes message.
70
long length = ((BytesMessage JavaDoc) jmsMessage).getBodyLength();
71         byte[] bytes = new byte[(new Long JavaDoc(length)).intValue()];
72         ((BytesMessage JavaDoc) jmsMessage).readBytes(bytes);
73         msg.setBytes(bytes);
74       } else if (jmsMessage instanceof MapMessage JavaDoc) {
75         // Building a Map message.
76
String JavaDoc name;
77         HashMap JavaDoc map = new HashMap JavaDoc();
78         for (Enumeration JavaDoc names = ((MapMessage JavaDoc) jmsMessage).getMapNames();
79              names.hasMoreElements();) {
80           name = (String JavaDoc) names.nextElement();
81           map.put(name, ((MapMessage JavaDoc) jmsMessage).getObject(name));
82         }
83         msg.setMap(map);
84       } else if (jmsMessage instanceof ObjectMessage JavaDoc) {
85         // Building an Object message.
86
msg.setObject(((ObjectMessage JavaDoc) jmsMessage).getObject());
87       } else if (jmsMessage instanceof TextMessage JavaDoc) {
88         // Building a Text message.
89
msg.setText(((TextMessage JavaDoc) jmsMessage).getText());
90       } else if (jmsMessage instanceof StreamMessage JavaDoc) {
91         // Building a Stream message.
92
int length = 0;
93         try {
94           while (true) {
95             ((StreamMessage JavaDoc) jmsMessage).readByte();
96             length++;
97           }
98         } catch (Exception JavaDoc exc) {}
99         byte[] bytes = new byte[length];
100         ((StreamMessage JavaDoc) jmsMessage).readBytes(bytes);
101         msg.setStream(bytes);
102       }
103
104       // Setting the CorrelationID field.
105
msg.setCorrelationId(jmsMessage.getJMSCorrelationID());
106       // Setting the DeliveryMode field.
107
msg.setPersistent(jmsMessage.getJMSDeliveryMode() ==
108                         javax.jms.DeliveryMode.PERSISTENT);
109
110       // DF: comment this code because it is not
111
// compatible with typed destinations
112
// Setting the DestinationID field.
113
// javax.jms.Destination dest = jmsMessage.getJMSDestination();
114
// if (dest instanceof javax.jms.Queue)
115
// msg.setDestination(((javax.jms.Queue) dest).getQueueName(), true);
116
// else if (dest instanceof javax.jms.Topic)
117
// msg.setDestination(((javax.jms.Topic) dest).getTopicName(), false);
118

119
120
121       // Setting the Expiration field.
122
msg.setExpiration(jmsMessage.getJMSExpiration());
123       // Setting the MessageID field.
124
msg.setIdentifier(jmsMessage.getJMSMessageID());
125       // Setting the Priority field.
126
msg.setPriority(jmsMessage.getJMSPriority());
127
128       // DF: comment this code because it is not
129
// compatible with typed destinations
130
//
131
// Setting the ReplyTo field.
132
// dest = jmsMessage.getJMSReplyTo();
133
// if (dest != null && dest instanceof javax.jms.Queue)
134
// msg.setReplyTo(((javax.jms.Queue) dest).getQueueName(), true);
135
// else if (dest != null && dest instanceof javax.jms.Topic)
136
// msg.setReplyTo(((javax.jms.Topic) dest).getTopicName(), false);
137

138
139
140       // Setting the Timestamp field.
141
msg.setTimestamp(jmsMessage.getJMSTimestamp());
142       // Setting the Type field.
143
if (jmsMessage.getJMSType() != null)
144         msg.setOptionalHeader("JMSType", jmsMessage.getJMSType());
145   
146       // Setting the properties.
147
String JavaDoc name;
148       for (Enumeration JavaDoc names = jmsMessage.getPropertyNames();
149            names.hasMoreElements();) {
150         name = (String JavaDoc) names.nextElement();
151         msg.setObjectProperty(name, jmsMessage.getObjectProperty(name));
152       }
153     }
154     catch (JMSException JavaDoc exc) {
155       throw new MessageFormatException JavaDoc("Error while reading the foreign "
156                                        + "JMS message: " + exc);
157     }
158     catch (Exception JavaDoc exc) {
159       throw new MessageFormatException JavaDoc("Error while writing the MOM message: "
160                                        + exc);
161     }
162     return msg;
163   }
164
165   /**
166    * Converts a JORAM MOM message into a JMS message.
167    *
168    * @exception javax.jms.IllegalStateException If the module's JMS session
169    * state does not allow to create a JMS message.
170    * @exception javax.jms.MessageFormatException If an error occurs while
171    * constructing the foreign JMS message or reading the MOM
172    * message.
173    */

174   public static javax.jms.Message JavaDoc
175                 convert(javax.jms.Session JavaDoc jmsSession, Message momMessage)
176                 throws JMSException JavaDoc
177   {
178     javax.jms.Message JavaDoc jmsMessage = null;
179
180     try {
181       // Building a Bytes message.
182
if (momMessage.getType() == MessageType.BYTES)
183         jmsMessage = jmsSession.createBytesMessage();
184       // Building a Map message.
185
else if (momMessage.getType() == MessageType.MAP)
186         jmsMessage = jmsSession.createMapMessage();
187       // Building an Object message.
188
else if (momMessage.getType() == MessageType.OBJECT)
189         jmsMessage = jmsSession.createObjectMessage();
190       // Building a Text message.
191
else if (momMessage.getType() == MessageType.TEXT)
192         jmsMessage = jmsSession.createTextMessage();
193       // Building a Stream message.
194
else if (momMessage.getType() == MessageType.STREAM)
195         jmsMessage = jmsSession.createStreamMessage();
196     }
197     // Session is probably closed.
198
catch (Exception JavaDoc exc) {
199       throw new IllegalStateException JavaDoc("" + exc);
200     }
201
202     try {
203       // Filling in the Bytes message.
204
if (momMessage.getType() == MessageType.BYTES)
205         ((BytesMessage JavaDoc) jmsMessage).writeBytes(momMessage.getBytes());
206       // Filling in the Map message.
207
else if (momMessage.getType() == MessageType.MAP) {
208         Map JavaDoc map = momMessage.getMap();
209         String JavaDoc name;
210         if (map.keySet() != null) {
211           for (Iterator JavaDoc it = map.keySet().iterator(); it.hasNext(); ) {
212             name = (String JavaDoc) it.next();
213             ((MapMessage JavaDoc) jmsMessage).setObject(name, map.get(name));
214           }
215         }
216       }
217       // Filling in the Object message.
218
else if (momMessage.getType() == MessageType.OBJECT) {
219         Serializable JavaDoc obj = (Serializable JavaDoc) momMessage.getObject();
220         ((ObjectMessage JavaDoc) jmsMessage).setObject(obj);
221       }
222       // Filling in the Text message.
223
else if (momMessage.getType() == MessageType.TEXT)
224         ((TextMessage JavaDoc) jmsMessage).setText(momMessage.getText());
225       // Filling in the Stream message.
226
else if (momMessage.getType() == MessageType.STREAM)
227         ((StreamMessage JavaDoc) jmsMessage).writeBytes(momMessage.getStream());
228
229       // Setting the CorrelationID field.
230
jmsMessage.setJMSCorrelationID(momMessage.getCorrelationId());
231       // Setting the DeliveryMode field.
232
if (momMessage.getPersistent())
233         jmsMessage.setJMSDeliveryMode(javax.jms.DeliveryMode.PERSISTENT);
234       else
235         jmsMessage.setJMSDeliveryMode(javax.jms.DeliveryMode.NON_PERSISTENT);
236       // Setting the Expiration field.
237
jmsMessage.setJMSExpiration(momMessage.getExpiration());
238       // Setting the Priority field.
239
jmsMessage.setJMSPriority(momMessage.getPriority());
240
241
242       // DF: comment this code because it is not
243
// compatible with typed destinations
244
// Setting the ReplyTo field.
245
// String destId = momMessage.getReplyToId();
246
// if (destId != null) {
247
// if (momMessage.replyToQueue())
248
// jmsMessage.setJMSReplyTo(jmsSession.createQueue(destId));
249
// else
250
// jmsMessage.setJMSReplyTo(jmsSession.createTopic(destId));
251
// }
252

253
254
255       // Setting the Timestamp field.
256
jmsMessage.setJMSTimestamp(momMessage.getTimestamp());
257       // Setting the Type field.
258
if (momMessage.getOptionalHeader("JMSType") != null)
259         jmsMessage.setJMSType((String JavaDoc) momMessage.getOptionalHeader("JMSType"));
260
261       // Setting the properties.
262
String JavaDoc name;
263       for (Enumeration JavaDoc names = momMessage.getPropertyNames();
264            names.hasMoreElements();) {
265         name = (String JavaDoc) names.nextElement();
266         jmsMessage.setObjectProperty(name, momMessage.getObjectProperty(name));
267       }
268     }
269     catch (JMSException JavaDoc exc) {
270       throw new MessageFormatException JavaDoc("Error while writing the foreign "
271                                        + "JMS message: " + exc);
272     }
273     catch (Exception JavaDoc exc) {
274       throw new MessageFormatException JavaDoc("Error while reading the MOM message: "
275                                        + exc);
276     }
277     return jmsMessage;
278   }
279 }
280
Popular Tags