00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ACTIVEMQ_CMSUTIL_POOLEDSESSION_H_
00019 #define _ACTIVEMQ_CMSUTIL_POOLEDSESSION_H_
00020
00021 #include <cms/Session.h>
00022 #include <decaf/util/StlMap.h>
00023 #include <activemq/cmsutil/CachedProducer.h>
00024 #include <activemq/cmsutil/CachedConsumer.h>
00025 #include <activemq/util/Config.h>
00026
00027 namespace activemq {
00028 namespace cmsutil {
00029
00030
00031 class SessionPool;
00032
00037 class AMQCPP_API PooledSession : public cms::Session {
00038 private:
00039
00040 SessionPool* pool;
00041
00042 cms::Session* session;
00043
00044 decaf::util::StlMap<std::string, CachedProducer*> producerCache;
00045
00046 decaf::util::StlMap<std::string, CachedConsumer*> consumerCache;
00047
00048 private:
00049
00050 PooledSession(const PooledSession&);
00051 PooledSession& operator=(const PooledSession&);
00052
00053 public:
00054
00055 PooledSession(SessionPool* pool, cms::Session* session);
00056
00060 virtual ~PooledSession();
00061
00067 virtual cms::Session* getSession() {
00068 return session;
00069 }
00070
00076 virtual const cms::Session* getSession() const {
00077 return session;
00078 }
00079
00086 virtual void close();
00087
00088 virtual void start() {
00089 session->start();
00090 }
00091
00092 virtual void stop() {
00093 session->stop();
00094 }
00095
00096 virtual void commit() {
00097 session->commit();
00098 }
00099
00100 virtual void rollback() {
00101 session->rollback();
00102 }
00103
00104 virtual void recover() {
00105 session->recover();
00106 }
00107
00108 virtual cms::MessageConsumer* createConsumer(const cms::Destination* destination) {
00109 return session->createConsumer(destination);
00110 }
00111
00112 virtual cms::MessageConsumer* createConsumer(const cms::Destination* destination,
00113 const std::string& selector) {
00114 return session->createConsumer(destination, selector);
00115 }
00116
00117 virtual cms::MessageConsumer* createConsumer(const cms::Destination* destination,
00118 const std::string& selector,
00119 bool noLocal) {
00120 return session->createConsumer(destination, selector, noLocal);
00121 }
00122
00123 virtual cms::MessageConsumer* createDurableConsumer(const cms::Topic* destination,
00124 const std::string& name,
00125 const std::string& selector,
00126 bool noLocal = false) {
00127 return session->createDurableConsumer(destination, name, selector, noLocal);
00128 }
00129
00146 virtual cms::MessageConsumer* createCachedConsumer(const cms::Destination* destination,
00147 const std::string& selector, bool noLocal);
00148
00149 virtual cms::MessageProducer* createProducer(const cms::Destination* destination) {
00150 return session->createProducer(destination);
00151 }
00152
00165 virtual cms::MessageProducer* createCachedProducer(const cms::Destination* destination);
00166
00167 virtual cms::QueueBrowser* createBrowser(const cms::Queue* queue);
00168
00169 virtual cms::QueueBrowser* createBrowser(const cms::Queue* queue, const std::string& selector);
00170
00171 virtual cms::Queue* createQueue(const std::string& queueName) {
00172 return session->createQueue(queueName);
00173 }
00174
00175 virtual cms::Topic* createTopic(const std::string& topicName) {
00176 return session->createTopic(topicName);
00177 }
00178
00179 virtual cms::TemporaryQueue* createTemporaryQueue() {
00180 return session->createTemporaryQueue();
00181 }
00182
00183 virtual cms::TemporaryTopic* createTemporaryTopic() {
00184 return session->createTemporaryTopic();
00185 }
00186
00187 virtual cms::Message* createMessage() {
00188 return session->createMessage();
00189 }
00190
00191 virtual cms::BytesMessage* createBytesMessage() {
00192 return session->createBytesMessage();
00193 }
00194
00195 virtual cms::BytesMessage* createBytesMessage(const unsigned char* bytes, int bytesSize) {
00196 return session->createBytesMessage(bytes, bytesSize);
00197 }
00198
00199 virtual cms::StreamMessage* createStreamMessage() {
00200 return session->createStreamMessage();
00201 }
00202
00203 virtual cms::TextMessage* createTextMessage() {
00204 return session->createTextMessage();
00205 }
00206
00207 virtual cms::TextMessage* createTextMessage(const std::string& text) {
00208 return session->createTextMessage(text);
00209 }
00210
00211 virtual cms::MapMessage* createMapMessage() {
00212 return session->createMapMessage();
00213 }
00214
00215 virtual cms::Session::AcknowledgeMode getAcknowledgeMode() const {
00216 return session->getAcknowledgeMode();
00217 }
00218
00219 virtual bool isTransacted() const {
00220 return session->isTransacted();
00221 }
00222
00223 virtual void unsubscribe(const std::string& name) {
00224 session->unsubscribe(name);
00225 }
00226
00227 virtual void setMessageTransformer(cms::MessageTransformer* transformer) {
00228 session->setMessageTransformer(transformer);
00229 }
00230
00231 virtual cms::MessageTransformer* getMessageTransformer() const {
00232 return session->getMessageTransformer();
00233 }
00234
00235 private:
00236
00237 std::string getUniqueDestName(const cms::Destination* dest);
00238
00239 };
00240
00241 }}
00242
00243 #endif