Author: nmittler Date: Sun Nov 26 17:36:58 2006 New Revision: 479490 URL: http://svn.apache.org/viewvc?view=rev&rev=479490 Log: [AMQCPP-14] Added the proper handling of the CMS Message Expiration value
Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.h incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/MessageProducer.h Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp?view=diff&rev=479490&r1=479489&r2=479490 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.cpp Sun Nov 26 17:36:58 2006 @@ -18,12 +18,14 @@ #include <activemq/core/ActiveMQSession.h> #include <activemq/exceptions/NullPointerException.h> +#include <activemq/util/Date.h> using namespace std; using namespace activemq; using namespace activemq::core; using namespace activemq::connector; using namespace activemq::exceptions; +using namespace activemq::util; //////////////////////////////////////////////////////////////////////////////// ActiveMQProducer::ActiveMQProducer( connector::ProducerInfo* producerInfo, @@ -41,11 +43,11 @@ this->producerInfo = producerInfo; // Default the Delivery options - deliveryMode = cms::DeliveryMode::PERSISTANT; - disableMsgId = false; - disableTimestamps = false; - priority = 4; - timeToLive = 0; + defaultDeliveryMode = cms::DeliveryMode::PERSISTANT; + disableMsgId = false; + disableTimestamps = false; + defaultPriority = 4; + defaultTimeToLive = 0; } //////////////////////////////////////////////////////////////////////////////// @@ -73,19 +75,61 @@ } //////////////////////////////////////////////////////////////////////////////// +void ActiveMQProducer::send( cms::Message* message, int deliveryMode, + int priority, + long long timeToLive ) + throw ( cms::CMSException ) +{ + try + { + send( &producerInfo->getDestination(), message, deliveryMode, + priority, timeToLive ); + } + AMQ_CATCH_RETHROW( ActiveMQException ) + AMQ_CATCHALL_THROW( ActiveMQException ) +} + +//////////////////////////////////////////////////////////////////////////////// void ActiveMQProducer::send( const cms::Destination* destination, cms::Message* message) throw ( cms::CMSException ) { try { + send( destination, message, defaultDeliveryMode, + defaultPriority, defaultTimeToLive ); + } + AMQ_CATCH_RETHROW( ActiveMQException ) + AMQ_CATCHALL_THROW( ActiveMQException ) +} + +//////////////////////////////////////////////////////////////////////////////// +void ActiveMQProducer::send( const cms::Destination* destination, + cms::Message* message, int deliveryMode, + int priority, long long timeToLive) + throw ( cms::CMSException ) +{ + try + { // configure the message message->setCMSDestination( destination ); message->setCMSDeliveryMode( deliveryMode ); message->setCMSPriority( priority ); - message->setCMSExpiration( timeToLive ); + + long long expiration = 0LL; + + if( !disableTimestamps ) { + long long timeStamp = Date::getCurrentTimeMilliseconds(); + message->setCMSTimeStamp(timeStamp); + if( timeToLive > 0LL ) { + expiration = timeToLive + timeStamp; + } + } + + message->setCMSExpiration(expiration); session->send( message, this ); } AMQ_CATCH_RETHROW( ActiveMQException ) AMQ_CATCHALL_THROW( ActiveMQException ) } + Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.h?view=diff&rev=479490&r1=479489&r2=479490 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/core/ActiveMQProducer.h Sun Nov 26 17:36:58 2006 @@ -35,20 +35,20 @@ { private: - // Delivery Mode of this Producer - int deliveryMode; - // Disable the Message Id bool disableMsgId; // Disable sending timestamps bool disableTimestamps; + + // The default delivery Mode of this Producer + int defaultDeliveryMode; - // Priority Level to send at - int priority; + // The default priority Level to send at + int defaultPriority; - // Time to live setting for message - int timeToLive; + // The default time to live value for messages in milliseconds + long long defaultTimeToLive; // Session that this producer sends to. ActiveMQSession* session; @@ -64,7 +64,7 @@ ActiveMQProducer( connector::ProducerInfo* producerInfo, ActiveMQSession* session ); - virtual ~ActiveMQProducer(void); + virtual ~ActiveMQProducer(); /** * Sends the message to the default producer destination. @@ -74,6 +74,19 @@ virtual void send( cms::Message* message ) throw ( cms::CMSException ); /** + * Sends the message to the default producer destination, but does + * not take ownership of the message, caller must still destroy it. + * @param message - a Message Object Pointer + * @param deliverMode The delivery mode to be used. + * @param priority The priority for this message. + * @param timeToLive The time to live value for this message in + * milliseconds. + * @throws CMSException + */ + virtual void send( cms::Message* message, int deliveryMode, int priority, + long long timeToLive) throw ( cms::CMSException ); + + /** * Sends the message to the designated destination. * @param a Message Object Pointer * @throws CMSException @@ -81,20 +94,35 @@ virtual void send( const cms::Destination* destination, cms::Message* message ) throw ( cms::CMSException ); + /** + * Sends the message to the designated destination, but does + * not take ownership of the message, caller must still destroy it. + * @param destination - a Message Object Pointer + * @param message - a Message Object Pointer + * @param deliverMode The delivery mode to be used. + * @param priority The priority for this message. + * @param timeToLive The time to live value for this message in + * milliseconds. + * @throws CMSException + */ + virtual void send( const cms::Destination* destination, + cms::Message* message, int deliveryMode, int priority, + long long timeToLive) throw ( cms::CMSException ); + /** * Sets the delivery mode for this Producer * @param The DeliveryMode */ virtual void setDeliveryMode( int mode ) { - deliveryMode = mode; + defaultDeliveryMode = mode; } /** * Gets the delivery mode for this Producer * @return The DeliveryMode */ - virtual int getDeliveryMode(void) const { - return deliveryMode; + virtual int getDeliveryMode() const { + return defaultDeliveryMode; } /** @@ -109,7 +137,7 @@ * Sets if Message Ids are disbled for this Producer * @param boolean indicating enable / disable (true / false) */ - virtual bool getDisableMessageId(void) const { + virtual bool getDisableMessageId() const { return disableMsgId; } @@ -125,7 +153,7 @@ * Sets if Message Time Stamps are disbled for this Producer * @param boolean indicating enable / disable (true / false) */ - virtual bool getDisableMessageTimeStamp(void) const { + virtual bool getDisableMessageTimeStamp() const { return disableTimestamps; } @@ -134,31 +162,31 @@ * @param int value for Priority level */ virtual void setPriority( int priority ) { - this->priority = priority; + defaultPriority = priority; } /** * Gets the Priority level that this producer sends messages at * @return int based priority level */ - virtual int getPriority(void) const { - return priority; + virtual int getPriority() const { + return defaultPriority; } /** * Sets the Time to Live that this Producers sends messages with - * @param int value for time to live + * @param time The new default time to live value in milliseconds. */ - virtual void setTimeToLive( int time ) { - timeToLive = time; + virtual void setTimeToLive( long long time ) { + defaultTimeToLive = time; } /** * Gets the Time to Live that this producer sends messages with - * @return int based Time to Live + * @return The default time to live value in milliseconds. */ - virtual int getTimeToLive(void) const { - return timeToLive; + virtual long long getTimeToLive() const { + return defaultTimeToLive; } public: // ActiveMQSessionResource Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/MessageProducer.h URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/MessageProducer.h?view=diff&rev=479490&r1=479489&r2=479490 ============================================================================== --- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/MessageProducer.h (original) +++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/cms/MessageProducer.h Sun Nov 26 17:36:58 2006 @@ -34,26 +34,56 @@ { public: - virtual ~MessageProducer(void) {} + virtual ~MessageProducer() {} /** * Sends the message to the default producer destination, but does * not take ownership of the message, caller must still destroy it. + * Uses default values for deliveryMode, priority, and time to live. * @param message - a Message Object Pointer * @throws CMSException */ - virtual void send( Message* message ) throw ( CMSException ) = 0; - + virtual void send( Message* message ) throw ( CMSException ) = 0; + + /** + * Sends the message to the default producer destination, but does + * not take ownership of the message, caller must still destroy it. + * @param message - a Message Object Pointer + * @param deliverMode The delivery mode to be used. + * @param priority The priority for this message. + * @param timeToLive The time to live value for this message in + * milliseconds. + * @throws CMSException + */ + virtual void send( Message* message, int deliveryMode, int priority, + long long timeToLive) throw ( CMSException ) = 0; + /** * Sends the message to the designated destination, but does * not take ownership of the message, caller must still destroy it. + * Uses default values for deliveryMode, priority, and time to live. * @param destination - a Message Object Pointer * @param message - the message to send to the destination * @throws CMSException */ virtual void send( const Destination* destination, Message* message ) throw ( CMSException ) = 0; - + + /** + * Sends the message to the designated destination, but does + * not take ownership of the message, caller must still destroy it. + * @param destination - a Message Object Pointer + * @param message - a Message Object Pointer + * @param deliverMode The delivery mode to be used. + * @param priority The priority for this message. + * @param timeToLive The time to live value for this message in + * milliseconds. + * @throws CMSException + */ + virtual void send( const Destination* destination, + Message* message, int deliveryMode, int priority, + long long timeToLive) throw ( CMSException ) = 0; + /** * Sets the delivery mode for this Producer * @param mode - The DeliveryMode @@ -64,7 +94,7 @@ * Gets the delivery mode for this Producer * @return The DeliveryMode */ - virtual int getDeliveryMode(void) const = 0; + virtual int getDeliveryMode() const = 0; /** * Sets if Message Ids are disbled for this Producer @@ -76,7 +106,7 @@ * Gets if Message Ids are disbled for this Producer * @return boolean indicating enable / disable (true / false) */ - virtual bool getDisableMessageId(void) const = 0; + virtual bool getDisableMessageId() const = 0; /** * Sets if Message Time Stamps are disbled for this Producer @@ -88,7 +118,7 @@ * Gets if Message Time Stamps are disbled for this Producer * @return boolean indicating enable / disable (true / false) */ - virtual bool getDisableMessageTimeStamp(void) const = 0; + virtual bool getDisableMessageTimeStamp() const = 0; /** * Sets the Priority that this Producers sends messages at @@ -100,19 +130,21 @@ * Gets the Priority level that this producer sends messages at * @return int based priority level */ - virtual int getPriority(void) const = 0; + virtual int getPriority() const = 0; /** - * Sets the Time to Live that this Producers sends messages with - * @param time - int value for time to live + * Sets the Time to Live that this Producers sends messages with. This + * value will be used if the time to live is not specified via the + * send method. + * @param time - default time to live value in milliseconds */ - virtual void setTimeToLive( int time ) = 0; + virtual void setTimeToLive( long long time ) = 0; /** * Gets the Time to Live that this producer sends messages with - * @return int based Time to Live + * @return Time to live value in milliseconds */ - virtual int getTimeToLive(void) const = 0; + virtual long long getTimeToLive() const = 0; };