001 /** 002 * 003 * Copyright 2004 Protique Ltd 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * 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 **/ 018 package org.activemq.ra.jms; 019 020 import org.activemq.ra.SessionAndProducer; 021 import org.activemq.ra.SessionAndProducerHelper; 022 023 import javax.jms.*; 024 import java.io.Serializable; 025 026 /** 027 * A {@link Session} implementation which can be used with the ActiveMQ JCA 028 * Resource Adapter to publish messages using the same JMS session that is used to dispatch 029 * messages. 030 * 031 * @version $Revision: 1.1.1.1 $ 032 */ 033 public class SessionProxy implements Session, QueueSession, TopicSession { 034 035 private SessionAndProducer sessionAndProducer; 036 037 public Session getSession() throws JMSException { 038 return getSessionAndProducer().getSession(); 039 } 040 041 public QueueSession getQueueSession() throws JMSException { 042 Session session = getSession(); 043 if (session instanceof QueueSession) { 044 return (QueueSession) session; 045 } 046 else { 047 throw new JMSException("The underlying JMS Session does not support QueueSession semantics: " + session); 048 } 049 } 050 051 public TopicSession getTopicSession() throws JMSException { 052 Session session = getSession(); 053 if (session instanceof TopicSession) { 054 return (TopicSession) session; 055 } 056 else { 057 throw new JMSException("The underlying JMS Session does not support TopicSession semantics: " + session); 058 } 059 } 060 061 public SessionAndProducer getSessionAndProducer() throws JMSException { 062 if( sessionAndProducer==null ) { 063 sessionAndProducer = SessionAndProducerHelper.getActiveSessionAndProducer(); 064 if (sessionAndProducer == null) { 065 throw new JMSException("No currently active Session. This JMS provider cannot be used outside a MessageListener.onMessage() invocation"); 066 } 067 } 068 return sessionAndProducer; 069 } 070 071 public MessageProducer createProducer(Destination destination) throws JMSException { 072 return new MessageProducerProxy(getSessionAndProducer().getMessageProducer(), destination); 073 } 074 075 public void close() throws JMSException { 076 // we don't allow users to close this session 077 // as its used by the JCA container 078 } 079 080 public void commit() throws JMSException { 081 // the JCA container will handle transactions 082 } 083 084 public void rollback() throws JMSException { 085 // the JCA container will handle transactions 086 } 087 088 public void recover() throws JMSException { 089 // the JCA container will handle recovery 090 } 091 092 public void run() { 093 try { 094 getSession().run(); 095 } 096 catch (JMSException e) { 097 throw new RuntimeException("Failed to run() on session due to: " + e, e); 098 } 099 } 100 101 // Straightforward delegation methods 102 //------------------------------------------------------------------------- 103 104 public QueueBrowser createBrowser(Queue queue) throws JMSException { 105 return getSession().createBrowser(queue); 106 } 107 108 public QueueBrowser createBrowser(Queue queue, String s) throws JMSException { 109 return getSession().createBrowser(queue, s); 110 } 111 112 public BytesMessage createBytesMessage() throws JMSException { 113 return getSession().createBytesMessage(); 114 } 115 116 public MessageConsumer createConsumer(Destination destination) throws JMSException { 117 return getSession().createConsumer(destination); 118 } 119 120 public MessageConsumer createConsumer(Destination destination, String s) throws JMSException { 121 return getSession().createConsumer(destination, s); 122 } 123 124 public MessageConsumer createConsumer(Destination destination, String s, boolean b) throws JMSException { 125 return getSession().createConsumer(destination, s, b); 126 } 127 128 public TopicSubscriber createDurableSubscriber(Topic topic, String s) throws JMSException { 129 return getSession().createDurableSubscriber(topic, s); 130 } 131 132 public TopicSubscriber createDurableSubscriber(Topic topic, String s, String s1, boolean b) throws JMSException { 133 return getSession().createDurableSubscriber(topic, s, s1, b); 134 } 135 136 public MapMessage createMapMessage() throws JMSException { 137 return getSession().createMapMessage(); 138 } 139 140 public Message createMessage() throws JMSException { 141 return getSession().createMessage(); 142 } 143 144 public ObjectMessage createObjectMessage() throws JMSException { 145 return getSession().createObjectMessage(); 146 } 147 148 public ObjectMessage createObjectMessage(Serializable serializable) throws JMSException { 149 return getSession().createObjectMessage(serializable); 150 } 151 152 public Queue createQueue(String s) throws JMSException { 153 return getSession().createQueue(s); 154 } 155 156 public StreamMessage createStreamMessage() throws JMSException { 157 return getSession().createStreamMessage(); 158 } 159 160 public TemporaryQueue createTemporaryQueue() throws JMSException { 161 return getSession().createTemporaryQueue(); 162 } 163 164 public TemporaryTopic createTemporaryTopic() throws JMSException { 165 return getSession().createTemporaryTopic(); 166 } 167 168 public TextMessage createTextMessage() throws JMSException { 169 return getSession().createTextMessage(); 170 } 171 172 public TextMessage createTextMessage(String s) throws JMSException { 173 return getSession().createTextMessage(s); 174 } 175 176 public Topic createTopic(String s) throws JMSException { 177 return getSession().createTopic(s); 178 } 179 180 public int getAcknowledgeMode() throws JMSException { 181 return getSession().getAcknowledgeMode(); 182 } 183 184 public MessageListener getMessageListener() throws JMSException { 185 return getSession().getMessageListener(); 186 } 187 188 public boolean getTransacted() throws JMSException { 189 return getSession().getTransacted(); 190 } 191 192 public void setMessageListener(MessageListener messageListener) throws JMSException { 193 getSession().setMessageListener(messageListener); 194 } 195 196 public void unsubscribe(String s) throws JMSException { 197 getSession().unsubscribe(s); 198 } 199 200 public QueueReceiver createReceiver(Queue queue) throws JMSException { 201 return getQueueSession().createReceiver(queue); 202 } 203 204 public QueueReceiver createReceiver(Queue queue, String s) throws JMSException { 205 return getQueueSession().createReceiver(queue, s); 206 } 207 208 public QueueSender createSender(Queue queue) throws JMSException { 209 return new MessageProducerProxy(getSessionAndProducer().getMessageProducer(), queue); 210 } 211 212 public TopicSubscriber createSubscriber(Topic topic) throws JMSException { 213 return getTopicSession().createSubscriber(topic); 214 } 215 216 public TopicSubscriber createSubscriber(Topic topic, String s, boolean b) throws JMSException { 217 return getTopicSession().createSubscriber(topic, s, b); 218 } 219 220 public TopicPublisher createPublisher(Topic topic) throws JMSException { 221 return getTopicSession().createPublisher(topic); 222 } 223 }