blob: 8dc1c5c213487847cd15173fe3d9d7bd2ac669e5 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef _CMS_MESSAGEPRODUCER_H_
#define _CMS_MESSAGEPRODUCER_H_
#include <cms/Config.h>
#include <cms/Message.h>
#include <cms/Destination.h>
#include <cms/Closeable.h>
#include <cms/CMSException.h>
#include <cms/DeliveryMode.h>
namespace cms
{
/**
* A client uses a <code>MessageProducer</code> object to send messages to
* a destination. A <code>MessageProducer</code> object is created by
* passing a <code>Destination</code> object to a message-producer creation
* method supplied by a session.<br>
* <br>
* A client also has the option of creating a message producer without
* supplying a destination. In this case, a destination must be provided
* with every send operation. A typical use for this kind of message
* producer is to send replies to requests using the request's CMSReplyTo
* destination.<br>
* <br>
* A client can specify a default delivery mode, priority, and time to live
* for messages sent by a message producer. It can also specify the
* delivery mode, priority, and time to live for an individual message.<br>
* <br>
* A client can specify a time-to-live value in milliseconds for each
* message it sends. This value defines a message expiration time that is
* the sum of the message's time-to-live and the GMT when it is sent (for
* transacted sends, this is the time the client sends the message, not the
* time the transaction is committed).
*/
class CMS_API MessageProducer : public Closeable
{
public:
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
* The message to be sent.
* @throws CMSException
*/
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
* The message to be sent.
* @param deliveryMode
* 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
* The destination on which to send the message
* @param message
* the message to be sent.
* @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
* The destination on which to send the message
* @param message
* The message to be sent.
* @param deliveryMode
* 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
*/
virtual void setDeliveryMode( int mode ) = 0;
/**
* Gets the delivery mode for this Producer
*
* @return The DeliveryMode
*/
virtual int getDeliveryMode() const = 0;
/**
* Sets if Message Ids are disbled for this Producer
*
* @param value
* boolean indicating enable / disable (true / false)
*/
virtual void setDisableMessageID( bool value ) = 0;
/**
* Gets if Message Ids are disbled for this Producer
*
* @return boolean indicating enable / disable (true / false)
*/
virtual bool getDisableMessageID() const = 0;
/**
* Sets if Message Time Stamps are disbled for this Producer
* @param value - boolean indicating enable / disable (true / false)
*/
virtual void setDisableMessageTimeStamp( bool value ) = 0;
/**
* Gets if Message Time Stamps are disbled for this Producer
*
* @return boolean indicating enable / disable (true / false)
*/
virtual bool getDisableMessageTimeStamp() const = 0;
/**
* Sets the Priority that this Producers sends messages at
*
* @param priority
* int value for Priority level
*/
virtual void setPriority( int priority ) = 0;
/**
* Gets the Priority level that this producer sends messages at
*
* @return int based priority level
*/
virtual int getPriority() const = 0;
/**
* 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( long long time ) = 0;
/**
* Gets the Time to Live that this producer sends messages with
*
* @return Time to live value in milliseconds
*/
virtual long long getTimeToLive() const = 0;
};
}
#endif /*_CMS_MESSAGEPRODUCER_H_*/