/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq; import java.io.Serializable; import javax.jms.BytesMessage; import javax.jms.Destination; import javax.jms.IllegalStateException; import javax.jms.InvalidDestinationException; import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.ObjectMessage; import javax.jms.Queue; import javax.jms.QueueBrowser; import javax.jms.StreamMessage; import javax.jms.TemporaryQueue; import javax.jms.TemporaryTopic; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicPublisher; import javax.jms.TopicSession; import javax.jms.TopicSubscriber; /** * A TopicSession implementation that throws IllegalStateExceptions when Queue * operations are attempted but which delegates to another TopicSession for all * other operations. The ActiveMQSessions implement both Topic and Queue * Sessions methods but the spec states that TopicSession should throw * Exceptions if queue operations are attempted on it. * * */ public class ActiveMQTopicSession implements TopicSession { private final TopicSession next; public ActiveMQTopicSession(TopicSession next) { this.next = next; } /** * @throws JMSException */ public void close() throws JMSException { next.close(); } /** * @throws JMSException */ public void commit() throws JMSException { next.commit(); } /** * @param queue * @return * @throws JMSException */ public QueueBrowser createBrowser(Queue queue) throws JMSException { throw new IllegalStateException("Operation not supported by a TopicSession"); } /** * @param queue * @param messageSelector * @return * @throws JMSException */ public QueueBrowser createBrowser(Queue queue, String messageSelector) throws JMSException { throw new IllegalStateException("Operation not supported by a TopicSession"); } /** * @return * @throws JMSException */ public BytesMessage createBytesMessage() throws JMSException { return next.createBytesMessage(); } /** * @param destination * @return * @throws JMSException */ public MessageConsumer createConsumer(Destination destination) throws JMSException { if (destination instanceof Queue) { throw new InvalidDestinationException("Queues are not supported by a TopicSession"); } return next.createConsumer(destination); } /** * @param destination * @param messageSelector * @return * @throws JMSException */ public MessageConsumer createConsumer(Destination destination, String messageSelector) throws JMSException { if (destination instanceof Queue) { throw new InvalidDestinationException("Queues are not supported by a TopicSession"); } return next.createConsumer(destination, messageSelector); } /** * @param destination * @param messageSelector * @param noLocal * @return * @throws JMSException */ public MessageConsumer createConsumer(Destination destination, String messageSelector, boolean noLocal) throws JMSException { if (destination instanceof Queue) { throw new InvalidDestinationException("Queues are not supported by a TopicSession"); } return next.createConsumer(destination, messageSelector, noLocal); } /** * @param topic * @param name * @return * @throws JMSException */ public TopicSubscriber createDurableSubscriber(Topic topic, String name) throws JMSException { return next.createDurableSubscriber(topic, name); } /** * @param topic * @param name * @param messageSelector * @param noLocal * @return * @throws JMSException */ public TopicSubscriber createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException { return next.createDurableSubscriber(topic, name, messageSelector, noLocal); } /** * @return * @throws JMSException */ public MapMessage createMapMessage() throws JMSException { return next.createMapMessage(); } /** * @return * @throws JMSException */ public Message createMessage() throws JMSException { return next.createMessage(); } /** * @return * @throws JMSException */ public ObjectMessage createObjectMessage() throws JMSException { return next.createObjectMessage(); } /** * @param object * @return * @throws JMSException */ public ObjectMessage createObjectMessage(Serializable object) throws JMSException { return next.createObjectMessage(object); } /** * @param destination * @return * @throws JMSException */ public MessageProducer createProducer(Destination destination) throws JMSException { if (destination instanceof Queue) { throw new InvalidDestinationException("Queues are not supported by a TopicSession"); } return next.createProducer(destination); } /** * @param topic * @return * @throws JMSException */ public TopicPublisher createPublisher(Topic topic) throws JMSException { return next.createPublisher(topic); } /** * @param queueName * @return * @throws JMSException */ public Queue createQueue(String queueName) throws JMSException { throw new IllegalStateException("Operation not supported by a TopicSession"); } /** * @return * @throws JMSException */ public StreamMessage createStreamMessage() throws JMSException { return next.createStreamMessage(); } /** * @param topic * @return * @throws JMSException */ public TopicSubscriber createSubscriber(Topic topic) throws JMSException { return next.createSubscriber(topic); } /** * @param topic * @param messageSelector * @param noLocal * @return * @throws JMSException */ public TopicSubscriber createSubscriber(Topic topic, String messageSelector, boolean noLocal) throws JMSException { return next.createSubscriber(topic, messageSelector, noLocal); } /** * @return * @throws JMSException */ public TemporaryQueue createTemporaryQueue() throws JMSException { throw new IllegalStateException("Operation not supported by a TopicSession"); } /** * @return * @throws JMSException */ public TemporaryTopic createTemporaryTopic() throws JMSException { return next.createTemporaryTopic(); } /** * @return * @throws JMSException */ public TextMessage createTextMessage() throws JMSException { return next.createTextMessage(); } /** * @param text * @return * @throws JMSException */ public TextMessage createTextMessage(String text) throws JMSException { return next.createTextMessage(text); } /** * @param topicName * @return * @throws JMSException */ public Topic createTopic(String topicName) throws JMSException { return next.createTopic(topicName); } /* * (non-Javadoc) * * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object arg0) { if(this != arg0) { return next.equals(arg0); } return true; } /** * @return * @throws JMSException */ public int getAcknowledgeMode() throws JMSException { return next.getAcknowledgeMode(); } /** * @return * @throws JMSException */ public MessageListener getMessageListener() throws JMSException { return next.getMessageListener(); } /** * @return * @throws JMSException */ public boolean getTransacted() throws JMSException { return next.getTransacted(); } /* * (non-Javadoc) * * @see java.lang.Object#hashCode() */ public int hashCode() { return next.hashCode(); } /** * @throws JMSException */ public void recover() throws JMSException { next.recover(); } /** * @throws JMSException */ public void rollback() throws JMSException { next.rollback(); } /** * */ public void run() { next.run(); } /** * @param listener * @throws JMSException */ public void setMessageListener(MessageListener listener) throws JMSException { next.setMessageListener(listener); } /* * (non-Javadoc) * * @see java.lang.Object#toString() */ public String toString() { return next.toString(); } /** * @param name * @throws JMSException */ public void unsubscribe(String name) throws JMSException { next.unsubscribe(name); } public TopicSession getNext() { return next; } }