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 */
017package org.apache.activemq;
018
019import java.io.Serializable;
020
021import javax.jms.BytesMessage;
022import javax.jms.Destination;
023import javax.jms.IllegalStateException;
024import javax.jms.InvalidDestinationException;
025import javax.jms.JMSException;
026import javax.jms.MapMessage;
027import javax.jms.Message;
028import javax.jms.MessageConsumer;
029import javax.jms.MessageListener;
030import javax.jms.MessageProducer;
031import javax.jms.ObjectMessage;
032import javax.jms.Queue;
033import javax.jms.QueueBrowser;
034import javax.jms.StreamMessage;
035import javax.jms.TemporaryQueue;
036import javax.jms.TemporaryTopic;
037import javax.jms.TextMessage;
038import javax.jms.Topic;
039import javax.jms.TopicPublisher;
040import javax.jms.TopicSession;
041import javax.jms.TopicSubscriber;
042
043/**
044 * A TopicSession implementation that throws IllegalStateExceptions when Queue
045 * operations are attempted but which delegates to another TopicSession for all
046 * other operations. The ActiveMQSessions implement both Topic and Queue
047 * Sessions methods but the spec states that TopicSession should throw
048 * Exceptions if queue operations are attempted on it.
049 *
050 *
051 */
052public class ActiveMQTopicSession implements TopicSession {
053
054    private final TopicSession next;
055
056    public ActiveMQTopicSession(TopicSession next) {
057        this.next = next;
058    }
059
060    /**
061     * @throws JMSException
062     */
063    public void close() throws JMSException {
064        next.close();
065    }
066
067    /**
068     * @throws JMSException
069     */
070    public void commit() throws JMSException {
071        next.commit();
072    }
073
074    /**
075     * @param queue
076     * @return
077     * @throws JMSException
078     */
079    public QueueBrowser createBrowser(Queue queue) throws JMSException {
080        throw new IllegalStateException("Operation not supported by a TopicSession");
081    }
082
083    /**
084     * @param queue
085     * @param messageSelector
086     * @return
087     * @throws JMSException
088     */
089    public QueueBrowser createBrowser(Queue queue, String messageSelector) throws JMSException {
090        throw new IllegalStateException("Operation not supported by a TopicSession");
091    }
092
093    /**
094     * @return
095     * @throws JMSException
096     */
097    public BytesMessage createBytesMessage() throws JMSException {
098        return next.createBytesMessage();
099    }
100
101    /**
102     * @param destination
103     * @return
104     * @throws JMSException
105     */
106    public MessageConsumer createConsumer(Destination destination) throws JMSException {
107        if (destination instanceof Queue) {
108            throw new InvalidDestinationException("Queues are not supported by a TopicSession");
109        }
110        return next.createConsumer(destination);
111    }
112
113    /**
114     * @param destination
115     * @param messageSelector
116     * @return
117     * @throws JMSException
118     */
119    public MessageConsumer createConsumer(Destination destination, String messageSelector) throws JMSException {
120        if (destination instanceof Queue) {
121            throw new InvalidDestinationException("Queues are not supported by a TopicSession");
122        }
123        return next.createConsumer(destination, messageSelector);
124    }
125
126    /**
127     * @param destination
128     * @param messageSelector
129     * @param noLocal
130     * @return
131     * @throws JMSException
132     */
133    public MessageConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal) throws JMSException {
134        if (destination instanceof Queue) {
135            throw new InvalidDestinationException("Queues are not supported by a TopicSession");
136        }
137        return next.createConsumer(destination, messageSelector, noLocal);
138    }
139
140    /**
141     * @param topic
142     * @param name
143     * @return
144     * @throws JMSException
145     */
146    public TopicSubscriber createDurableSubscriber(Topic topic, String name) throws JMSException {
147        return next.createDurableSubscriber(topic, name);
148    }
149
150    /**
151     * @param topic
152     * @param name
153     * @param messageSelector
154     * @param noLocal
155     * @return
156     * @throws JMSException
157     */
158    public TopicSubscriber createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException {
159        return next.createDurableSubscriber(topic, name, messageSelector, noLocal);
160    }
161
162    /**
163     * @return
164     * @throws JMSException
165     */
166    public MapMessage createMapMessage() throws JMSException {
167        return next.createMapMessage();
168    }
169
170    /**
171     * @return
172     * @throws JMSException
173     */
174    public Message createMessage() throws JMSException {
175        return next.createMessage();
176    }
177
178    /**
179     * @return
180     * @throws JMSException
181     */
182    public ObjectMessage createObjectMessage() throws JMSException {
183        return next.createObjectMessage();
184    }
185
186    /**
187     * @param object
188     * @return
189     * @throws JMSException
190     */
191    public ObjectMessage createObjectMessage(Serializable object) throws JMSException {
192        return next.createObjectMessage(object);
193    }
194
195    /**
196     * @param destination
197     * @return
198     * @throws JMSException
199     */
200    public MessageProducer createProducer(Destination destination) throws JMSException {
201        if (destination instanceof Queue) {
202            throw new InvalidDestinationException("Queues are not supported by a TopicSession");
203        }
204        return next.createProducer(destination);
205    }
206
207    /**
208     * @param topic
209     * @return
210     * @throws JMSException
211     */
212    public TopicPublisher createPublisher(Topic topic) throws JMSException {
213        return next.createPublisher(topic);
214    }
215
216    /**
217     * @param queueName
218     * @return
219     * @throws JMSException
220     */
221    public Queue createQueue(String queueName) throws JMSException {
222        throw new IllegalStateException("Operation not supported by a TopicSession");
223    }
224
225    /**
226     * @return
227     * @throws JMSException
228     */
229    public StreamMessage createStreamMessage() throws JMSException {
230        return next.createStreamMessage();
231    }
232
233    /**
234     * @param topic
235     * @return
236     * @throws JMSException
237     */
238    public TopicSubscriber createSubscriber(Topic topic) throws JMSException {
239        return next.createSubscriber(topic);
240    }
241
242    /**
243     * @param topic
244     * @param messageSelector
245     * @param noLocal
246     * @return
247     * @throws JMSException
248     */
249    public TopicSubscriber createSubscriber(Topic topic, String messageSelector, boolean noLocal) throws JMSException {
250        return next.createSubscriber(topic, messageSelector, noLocal);
251    }
252
253    /**
254     * @return
255     * @throws JMSException
256     */
257    public TemporaryQueue createTemporaryQueue() throws JMSException {
258        throw new IllegalStateException("Operation not supported by a TopicSession");
259    }
260
261    /**
262     * @return
263     * @throws JMSException
264     */
265    public TemporaryTopic createTemporaryTopic() throws JMSException {
266        return next.createTemporaryTopic();
267    }
268
269    /**
270     * @return
271     * @throws JMSException
272     */
273    public TextMessage createTextMessage() throws JMSException {
274        return next.createTextMessage();
275    }
276
277    /**
278     * @param text
279     * @return
280     * @throws JMSException
281     */
282    public TextMessage createTextMessage(String text) throws JMSException {
283        return next.createTextMessage(text);
284    }
285
286    /**
287     * @param topicName
288     * @return
289     * @throws JMSException
290     */
291    public Topic createTopic(String topicName) throws JMSException {
292        return next.createTopic(topicName);
293    }
294
295    /*
296     * (non-Javadoc)
297     *
298     * @see java.lang.Object#equals(java.lang.Object)
299     */
300    public boolean equals(Object arg0) {
301        if(this != arg0) {
302            return next.equals(arg0);
303        }
304
305        return true;
306    }
307
308    /**
309     * @return
310     * @throws JMSException
311     */
312    public int getAcknowledgeMode() throws JMSException {
313        return next.getAcknowledgeMode();
314    }
315
316    /**
317     * @return
318     * @throws JMSException
319     */
320    public MessageListener getMessageListener() throws JMSException {
321        return next.getMessageListener();
322    }
323
324    /**
325     * @return
326     * @throws JMSException
327     */
328    public boolean getTransacted() throws JMSException {
329        return next.getTransacted();
330    }
331
332    /*
333     * (non-Javadoc)
334     *
335     * @see java.lang.Object#hashCode()
336     */
337    public int hashCode() {
338        return next.hashCode();
339    }
340
341    /**
342     * @throws JMSException
343     */
344    public void recover() throws JMSException {
345        next.recover();
346    }
347
348    /**
349     * @throws JMSException
350     */
351    public void rollback() throws JMSException {
352        next.rollback();
353    }
354
355    /**
356     *
357     */
358    public void run() {
359        next.run();
360    }
361
362    /**
363     * @param listener
364     * @throws JMSException
365     */
366    public void setMessageListener(MessageListener listener) throws JMSException {
367        next.setMessageListener(listener);
368    }
369
370    /*
371     * (non-Javadoc)
372     *
373     * @see java.lang.Object#toString()
374     */
375    public String toString() {
376        return next.toString();
377    }
378
379    /**
380     * @param name
381     * @throws JMSException
382     */
383    public void unsubscribe(String name) throws JMSException {
384        next.unsubscribe(name);
385    }
386
387    public TopicSession getNext() {
388        return next;
389    }
390}