001/**
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package org.apache.activemq;
019
020import javax.jms.JMSException;
021import javax.jms.Message;
022import javax.jms.Queue;
023import javax.jms.QueueSender;
024
025import org.apache.activemq.command.ActiveMQDestination;
026
027/**
028 * A client uses a <CODE>QueueSender</CODE> object to send messages to a
029 * queue. <p/>
030 * <P>
031 * Normally, the <CODE>Queue</CODE> is specified when a <CODE>QueueSender
032 * </CODE>
033 * is created. In this case, an attempt to use the <CODE>send</CODE> methods
034 * for an unidentified <CODE>QueueSender</CODE> will throw a <CODE>
035 * java.lang.UnsupportedOperationException</CODE>.
036 * <p/>
037 * <P>
038 * If the <CODE>QueueSender</CODE> is created with an unidentified <CODE>
039 * Queue</CODE>,
040 * an attempt to use the <CODE>send</CODE> methods that assume that the
041 * <CODE>Queue</CODE> has been identified will throw a <CODE>
042 * java.lang.UnsupportedOperationException</CODE>.
043 * <p/>
044 * <P>
045 * During the execution of its <CODE>send</CODE> method, a message must not be
046 * changed by other threads within the client. If the message is modified, the
047 * result of the <CODE>send</CODE> is undefined. <p/>
048 * <P>
049 * After sending a message, a client may retain and modify it without affecting
050 * the message that has been sent. The same message object may be sent multiple
051 * times. <p/>
052 * <P>
053 * The following message headers are set as part of sending a message:
054 * <code>JMSDestination</code>, <code>JMSDeliveryMode</code>,<code>JMSExpiration</code>,<code>JMSPriority</code>,
055 * <code>JMSMessageID</code> and <code>JMSTimeStamp</code>. When the
056 * message is sent, the values of these headers are ignored. After the
057 * completion of the <CODE>send</CODE>, the headers hold the values specified
058 * by the method sending the message. It is possible for the <code>send</code>
059 * method not to set <code>JMSMessageID</code> and <code>JMSTimeStamp</code>
060 * if the setting of these headers is explicitly disabled by the
061 * <code>MessageProducer.setDisableMessageID</code> or
062 * <code>MessageProducer.setDisableMessageTimestamp</code> method. <p/>
063 * <P>
064 * Creating a <CODE>MessageProducer</CODE> provides the same features as
065 * creating a <CODE>QueueSender</CODE>. A <CODE>MessageProducer</CODE>
066 * object is recommended when creating new code. The <CODE>QueueSender</CODE>
067 * is provided to support existing code.
068 * 
069 * @see javax.jms.MessageProducer
070 * @see javax.jms.QueueSession#createSender(Queue)
071 */
072
073public class ActiveMQQueueSender extends ActiveMQMessageProducer implements QueueSender {
074
075    protected ActiveMQQueueSender(ActiveMQSession session, ActiveMQDestination destination,int sendTimeout)
076        throws JMSException {
077        super(session, session.getNextProducerId(), destination,sendTimeout);
078    }
079
080    /**
081     * Gets the queue associated with this <CODE>QueueSender</CODE>.
082     * 
083     * @return this sender's queue
084     * @throws JMSException if the JMS provider fails to get the queue for this
085     *                 <CODE>QueueSender</CODE> due to some internal error.
086     */
087
088    public Queue getQueue() throws JMSException {
089        return (Queue)super.getDestination();
090    }
091
092    /**
093     * Sends a message to a queue for an unidentified message producer. Uses the
094     * <CODE>QueueSender</CODE>'s default delivery mode, priority, and time
095     * to live. <p/>
096     * <P>
097     * Typically, a message producer is assigned a queue at creation time;
098     * however, the JMS API also supports unidentified message producers, which
099     * require that the queue be supplied every time a message is sent.
100     * 
101     * @param queue the queue to send this message to
102     * @param message the message to send
103     * @throws JMSException if the JMS provider fails to send the message due to
104     *                 some internal error.
105     * @see javax.jms.MessageProducer#getDeliveryMode()
106     * @see javax.jms.MessageProducer#getTimeToLive()
107     * @see javax.jms.MessageProducer#getPriority()
108     */
109
110    public void send(Queue queue, Message message) throws JMSException {
111        super.send(queue, message);
112    }
113
114    /**
115     * Sends a message to a queue for an unidentified message producer,
116     * specifying delivery mode, priority and time to live. <p/>
117     * <P>
118     * Typically, a message producer is assigned a queue at creation time;
119     * however, the JMS API also supports unidentified message producers, which
120     * require that the queue be supplied every time a message is sent.
121     * 
122     * @param queue the queue to send this message to
123     * @param message the message to send
124     * @param deliveryMode the delivery mode to use
125     * @param priority the priority for this message
126     * @param timeToLive the message's lifetime (in milliseconds)
127     * @throws JMSException if the JMS provider fails to send the message due to
128     *                 some internal error.
129     */
130
131    public void send(Queue queue, Message message, int deliveryMode, int priority, long timeToLive)
132        throws JMSException {
133        super.send(queue, message, deliveryMode, priority, timeToLive);
134    }
135}