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}