00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ACTIVEMQ_CORE_KERNELS_ACTIVEMQPRODUCERKERNEL_H_
00019 #define _ACTIVEMQ_CORE_KERNELS_ACTIVEMQPRODUCERKERNEL_H_
00020
00021 #include <cms/MessageProducer.h>
00022 #include <cms/Message.h>
00023 #include <cms/Destination.h>
00024 #include <cms/DeliveryMode.h>
00025 #include <cms/MessageTransformer.h>
00026
00027 #include <activemq/util/Config.h>
00028 #include <activemq/util/MemoryUsage.h>
00029 #include <activemq/util/LongSequenceGenerator.h>
00030 #include <activemq/commands/ProducerInfo.h>
00031 #include <activemq/commands/ProducerAck.h>
00032 #include <activemq/exceptions/ActiveMQException.h>
00033
00034 #include <memory>
00035
00036 namespace activemq {
00037 namespace core {
00038 namespace kernels {
00039
00040 using decaf::lang::Pointer;
00041
00042 class ActiveMQSessionKernel;
00043
00044 class AMQCPP_API ActiveMQProducerKernel : public cms::MessageProducer {
00045 private:
00046
00047
00048 bool disableTimestamps;
00049
00050
00051 bool disableMessageId;
00052
00053
00054 int defaultDeliveryMode;
00055
00056
00057 int defaultPriority;
00058
00059
00060 long long defaultTimeToLive;
00061
00062
00063 long long sendTimeout;
00064
00065
00066 ActiveMQSessionKernel* session;
00067
00068
00069 Pointer<commands::ProducerInfo> producerInfo;
00070
00071
00072 bool closed;
00073
00074
00075 std::auto_ptr<util::MemoryUsage> memoryUsage;
00076
00077
00078 Pointer<cms::Destination> destination;
00079
00080
00081 util::LongSequenceGenerator messageSequence;
00082
00083
00084 cms::MessageTransformer* transformer;
00085
00086 private:
00087
00088 ActiveMQProducerKernel(const ActiveMQProducerKernel&);
00089 ActiveMQProducerKernel& operator=(const ActiveMQProducerKernel&);
00090
00091 public:
00092
00108 ActiveMQProducerKernel(ActiveMQSessionKernel* session,
00109 const Pointer<commands::ProducerId>& producerId,
00110 const Pointer<commands::ActiveMQDestination>& destination,
00111 long long sendTimeout);
00112
00113 virtual ~ActiveMQProducerKernel();
00114
00115 public:
00116
00117 virtual void close();
00118
00119 virtual void send(cms::Message* message);
00120
00121 virtual void send(cms::Message* message, cms::AsyncCallback* callback);
00122
00123 virtual void send(cms::Message* message, int deliveryMode, int priority, long long timeToLive);
00124
00125 virtual void send(cms::Message* message, int deliveryMode, int priority, long long timeToLive, cms::AsyncCallback* callback);
00126
00127 virtual void send(const cms::Destination* destination, cms::Message* message);
00128
00129 virtual void send(const cms::Destination* destination, cms::Message* message, cms::AsyncCallback* callback);
00130
00131 virtual void send(const cms::Destination* destination, cms::Message* message,
00132 int deliveryMode, int priority, long long timeToLive);
00133
00134 virtual void send(const cms::Destination* destination, cms::Message* message,
00135 int deliveryMode, int priority, long long timeToLive, cms::AsyncCallback* callback);
00136
00144 virtual void setMessageTransformer(cms::MessageTransformer* transformer) {
00145 this->transformer = transformer;
00146 }
00147
00153 virtual cms::MessageTransformer* getMessageTransformer() const {
00154 return this->transformer;
00155 }
00156
00161 virtual void setDeliveryMode(int mode) {
00162 this->defaultDeliveryMode = mode;
00163 }
00164
00169 virtual int getDeliveryMode() const {
00170 return this->defaultDeliveryMode;
00171 }
00172
00177 virtual void setDisableMessageID(bool value) {
00178 this->disableMessageId = value;
00179 }
00180
00185 virtual bool getDisableMessageID() const {
00186 return this->disableMessageId;
00187 }
00188
00193 virtual void setDisableMessageTimeStamp(bool value) {
00194 this->disableTimestamps = value;
00195 }
00196
00201 virtual bool getDisableMessageTimeStamp() const {
00202 return this->disableTimestamps;
00203 }
00204
00209 virtual void setPriority(int priority) {
00210 this->defaultPriority = priority;
00211 }
00212
00217 virtual int getPriority() const {
00218 return this->defaultPriority;
00219 }
00220
00225 virtual void setTimeToLive(long long time) {
00226 this->defaultTimeToLive = time;
00227 }
00228
00233 virtual long long getTimeToLive() const {
00234 return this->defaultTimeToLive;
00235 }
00236
00241 virtual void setSendTimeout(long long time) {
00242 this->sendTimeout = time;
00243 }
00244
00249 virtual long long getSendTimeout() const {
00250 return this->sendTimeout;
00251 }
00252
00256 bool isClosed() const {
00257 return this->closed;
00258 }
00259
00264 const Pointer<commands::ProducerInfo>& getProducerInfo() const {
00265 this->checkClosed();
00266 return this->producerInfo;
00267 }
00268
00273 const Pointer<commands::ProducerId>& getProducerId() const {
00274 this->checkClosed();
00275 return this->producerInfo->getProducerId();
00276 }
00277
00282 virtual void onProducerAck(const commands::ProducerAck& ack);
00283
00290 void dispose();
00291
00295 long long getNextMessageSequence() {
00296 return this->messageSequence.getNextSequenceId();
00297 }
00298
00299 private:
00300
00301
00302 void checkClosed() const;
00303
00304 };
00305
00306 }}}
00307
00308 #endif