1 /*
2 * @(#)QueueSenderImpl.java
3 *
4 * JFoxMQ the opensource JMS MOM.
5 *
6 * Corpyright 2002-2003 Huihoo Power, Inc. All Rights Reserved. This software
7 * is licensed under LGPL license.
8 *
9 * For more information, please visit: http://www.huihoo.org
10 */
11
12 package org.huihoo.jfox.ms.jms.queue;
13
14 import javax.jms.DeliveryMode;
15 import javax.jms.JMSException;
16 import javax.jms.Message;
17 import javax.jms.Queue;
18 import javax.jms.QueueSender;
19
20 import org.huihoo.jfox.ms.jms.base.MessageProducerImpl;
21 import org.huihoo.jfox.ms.jms.message.MessageID;
22
23 /***
24 * <p>
25 * This class implements the JMS queue sender. A client uses a QueueSender
26 * object to send messages to a queue.
27 * </p>
28 *
29 * <p>
30 * <b>Modifications:</b>
31 * <ul>
32 * <li>2003-05-20 - Original code completed.
33 * <li>2003-06-14 - implement createQueue(String queueName) implement
34 * send(Message message) implement send(Message message, int deliveryMode, int
35 * priority, long timeToLive) implement send(Queue queue, Message message)
36 * implement send(Queue queue, Message message, int deliveryMode, int priority,
37 * long timeToLive)
38 *
39 * </ul>
40 * </p>
41 *
42 * @author <a href="mailto:founder_chen@yahoo.com.cn">Yong.Cheng</a>
43 * @version 0.1.1 2003-06-14 20:59:05
44 * @since 0.1 2003-05-20 21:37:30
45 */
46
47 public class QueueSenderImpl
48 extends MessageProducerImpl
49 implements QueueSender {
50
51 private Queue queue;
52
53 /***
54 * @param queueSession
55 * @param queue
56 */
57 public QueueSenderImpl(QueueSessionImpl queueSession, Queue queue) {
58 super(queueSession);
59 this.queue = queue;
60 }
61
62 /***
63 * Retrieve a reference of queue destionation.
64 *
65 * @return Queue
66 * @throws JMSException
67 */
68 public Queue getQueue() throws JMSException {
69 if (isClosed()) {
70 throw new javax.jms.IllegalStateException(
71 "The queue sender is closed.");
72 }
73 return queue;
74 }
75
76 /***
77 * Send message to server.
78 *
79 * @param message
80 * @throws JMSException
81 */
82 public void send(Message message) throws JMSException {
83 if (isClosed()) {
84 throw new javax.jms.IllegalStateException(
85 "The queue sender is closed.");
86 }
87 send(
88 queue,
89 message,
90 defaultDeliveryMode,
91 defaultPriority,
92 defaultTimeToLive);
93 }
94
95 /***
96 * Send message to server.
97 *
98 * @param message
99 * @param deliveryMode
100 * @param priority
101 * @param timeToLive
102 * @throws JMSException
103 */
104 public void send(
105 Message message,
106 int deliveryMode,
107 int priority,
108 long timeToLive)
109 throws JMSException {
110 if (isClosed()) {
111 throw new javax.jms.IllegalStateException(
112 "The queue sender is closed.");
113 }
114 send(queue, message, deliveryMode, priority, timeToLive);
115 }
116
117 /***
118 * Send message to server.
119 *
120 * @param queue
121 * @param message
122 * @throws JMSException
123 */
124 public void send(Queue queue, Message message) throws JMSException {
125 if (isClosed()) {
126 throw new javax.jms.IllegalStateException(
127 "The queue sender is closed.");
128 }
129 send(
130 queue,
131 message,
132 defaultDeliveryMode,
133 defaultPriority,
134 defaultTimeToLive);
135 }
136
137 /***
138 * Send mesage to server.
139 *
140 * @param queue
141 * @param message
142 * @param deliveryMode
143 * @param priority
144 * @param timeToLive
145 * @throws JMSException
146 */
147 public void send(
148 Queue queue,
149 Message message,
150 int deliveryMode,
151 int priority,
152 long timeToLive)
153 throws JMSException {
154 if (isClosed()) {
155 throw new javax.jms.IllegalStateException(
156 "The queue sender is closed.");
157 }
158
159 if (queue == null) {
160 throw new JMSException("Queue is null.");
161 }
162
163 if (message == null) {
164 throw new JMSException("Cannot send null message.");
165 }
166
167 if (queue instanceof TemporaryQueueImpl) {
168 message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
169 } else {
170 message.setJMSDeliveryMode(deliveryMode);
171 }
172
173 message.setJMSDestination(queue);
174 message.setJMSDeliveryMode(deliveryMode);
175 message.setJMSPriority(priority);
176
177 if (disableMessageID) {
178 message.setJMSMessageID(null);
179 } else {
180 MessageID messageID = new MessageID(message.getJMSDeliveryMode());
181 message.setJMSMessageID(messageID.getMessageID());
182 }
183
184 if (disableMessageTimestamp) {
185 message.setJMSExpiration(0);
186 message.setJMSTimestamp(0);
187 } else {
188 message.setJMSTimestamp(System.currentTimeMillis());
189 if (timeToLive == 0) {
190 message.setJMSExpiration(0);
191 } else {
192 message.setJMSExpiration(
193 System.currentTimeMillis() + timeToLive);
194 }
195 }
196 super.sendMessage(message);
197 }
198
199 /***
200 * Closes the queue sender.
201 *
202 * <p>
203 * Since a provider may allocate some resources on behalf of a
204 * MessageProducer outside the Java virtual machine, clients should close
205 * them when they are not needed. Relying on garbage collection to
206 * eventually reclaim these resources may not be timely enough.
207 */
208 public void close() throws JMSException {
209 super.close();
210 }
211 }
This page was automatically generated by Maven