blob: 7a3b6299025241b7cd446ae75564f42765e25567 [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.
*/
package org.apache.qpid.jms.message.facade;
import java.util.Set;
import javax.jms.JMSException;
import org.apache.qpid.jms.JmsDestination;
import org.apache.qpid.jms.tracing.TraceableMessage;
/**
* The Message Facade interface defines the required mapping between a Provider's
* own Message type and the JMS Message types. A Provider can implement the Facade
* interface and offer direct access to its message types without the need to
* copy to / from a more generic JMS message instance.
*/
public interface JmsMessageFacade extends TraceableMessage {
/**
* Returns the property names for this Message instance. The Set returned may be
* manipulated by the receiver without impacting the facade, and an empty set
* will be returned if there are no matching properties.
*
* @return a set containing the property names of this Message
*
* @throws JMSException if an error occurs while accessing the Message properties.
*/
public Set<String> getPropertyNames() throws JMSException;
/**
* @param key
* The property name that is being searched for.
*
* @return true if the given property exists within the message.
*
* @throws JMSException if an error occurs while accessing the Message properties.
*/
boolean propertyExists(String key) throws JMSException;
/**
* Returns the property stored in the message accessed via the given key/
*
* @param key
* the key used to access the given property.
*
* @return the object that is stored under the given key or null if none found.
*
* @throws JMSException if an error occurs while accessing the Message properties.
*/
Object getProperty(String key) throws JMSException;
/**
* Sets the message property value using the supplied key to identify the value
* that should be set or updated.
*
* @param key
* the key that identifies the message property.
* @param value
* the value that is to be stored in the message.
*
* @throws JMSException if an error occurs while accessing the Message properties.
*/
void setProperty(String key, Object value) throws JMSException;
/**
* Called before a message is sent to allow a Message instance to move the
* contents from a logical data structure to a binary form for transmission, or
* other processing such as setting proper message headers etc.
*
* The method allows for passing through producer configuration details not
* explicitly mapped into the JMS Message allowing the facade to create the
* most correct and compact message on the wire.
*
* @param producerTtl
* the time to live value configured on the producer when sent.
*
* @throws JMSException if an error occurs while preparing the message for send.
*/
void onSend(long producerTtl) throws JMSException;
/**
* Called before a message is dispatched to its intended consumer to allow for
* any necessary processing of message data such as setting read-only state etc.
*
* @throws JMSException if an error occurs while preparing the message for dispatch.
*/
void onDispatch() throws JMSException;
/**
* Clears the contents of this Message.
*/
void clearBody();
/**
* Clears any Message properties that exist for this Message instance.
*
* @throws JMSException if an error occurs while accessing the message properties.
*/
void clearProperties() throws JMSException;
/**
* Create a new instance and perform a deep copy of this object's
* contents.
*
* @return a copy of this JmsMessageFacade instance.
*
* @throws JMSException if an error occurs while copying the message.
*/
JmsMessageFacade copy() throws JMSException;
/**
* Gets the time stamp assigned to the message when it was sent.
*
* @return the message time stamp value.
*/
long getTimestamp();
/**
* Sets the time stamp value of this message.
*
* @param timestamp
* the time that the message was sent by the provider.
*/
void setTimestamp(long timestamp);
/**
* Returns the correlation ID set on this message if one exists, null otherwise.
* The returned value will include the JMS mandated 'ID:' prefix if the value
* represents a JMSMessageID rather than an application-specific string.
*
* @return the set correlation ID or null if not set.
*/
String getCorrelationId();
/**
* Sets the correlation ID for this message.
*
* @param correlationId
* The correlation ID to set on this message, or null to clear.
*
* @throws JMSException if an error occurs while setting the correlation ID.
*/
void setCorrelationId(String correlationId) throws JMSException;
/**
* Gets the set correlation ID of the message in raw bytes form. If no ID was
* set then this method may return null or an empty byte array.
*
* @return a byte array containing the correlation ID value in raw form.
*
* @throws JMSException if an error occurs while accessing the property.
*/
byte[] getCorrelationIdBytes() throws JMSException;
/**
* Sets the correlation ID of the message in raw byte form. Setting the value
* as null or an empty byte array will clear any previously set value. If the
* underlying protocol cannot convert or map the given byte value to it's own
* internal representation it should throw a JMSException indicating the error.
*
* @param correlationId
* the byte array to use to set the message correlation ID.
*/
void setCorrelationIdBytes(byte[] correlationId);
/**
* Returns the message ID set on this message if one exists, null otherwise.
* The returned value will include the JMS mandated 'ID:' prefix.
*
* @return the set message ID or null if not set.
*/
String getMessageId();
/**
* Sets the message ID for this message.
*
* @param messageId
* The message ID to set on this message, or null to clear.
* @throws JMSException if an error occurs while setting the message ID.
*/
void setMessageId(String messageId) throws JMSException;
/**
* @return true if this message is tagged as being persistent.
*/
boolean isPersistent();
/**
* Sets the persistent flag on this message.
*
* @param value
* true if the message is to be marked as persistent.
*/
void setPersistent(boolean value);
/**
* Returns the current delivery count of the Message as set in the underlying
* message instance.
*
* @return the current delivery count.
*/
int getDeliveryCount();
/**
* Sets the delivery count on the message.
*
* @param deliveryCount
* the new delivery count to assign the Message.
*/
void setDeliveryCount(int deliveryCount);
/**
* Returns the current redelivery count of the Message as set in the underlying
* message instance.
*
* @return the current redelivery count.
*/
int getRedeliveryCount();
/**
* Used to update the message redelivery after a local redelivery of the Message
* has been performed.
*
* @param redeliveryCount
* the new redelivery count to assign the Message.
*/
void setRedeliveryCount(int redeliveryCount);
/**
* Used to quickly check if a message has been redelivered.
*
* @return true if the message was redelivered, false otherwise.
*/
boolean isRedelivered();
/**
* Used to set the redelivered state of a message. This can serve to clear
* the redelivery counter or set its initial value to one.
*
* @param redelivered
* true if the message is to be marked as redelivered, false otherwise.
*/
void setRedelivered(boolean redelivered);
/**
* Returns the JMSType value as defined by the provider or set by the sending client.
*
* @return a String value that defines the message JMSType.
*/
String getType();
/**
* Sets the String value used to define the Message JMSType by the client.
*
* @param type
* the JMSType value the client assigns to this message.
*/
void setType(String type);
/**
* Returns the assigned priority value of this message in JMS ranged scoping.
*
* If the provider does not define a message priority value in its message objects
* or the value is not set in the message this method should return the JMS default
* value of 4.
*
* @return the priority value assigned to this message.
*/
int getPriority();
/**
* Sets the message priority for this message using a JMS priority scoped value.
*
* @param priority
* the new priority value to set on this message.
*/
void setPriority(int priority);
/**
* Returns the set expiration time for this message.
*
* The value should be returned as an absolute time given in GMT time.
*
* @return the time that this message expires or zero if it never expires.
*/
long getExpiration();
/**
* Sets an expiration time on this message.
*
* The expiration time will be given as an absolute time in GMT time.
*
* @param expiration
* the time that this message should be considered as expired.
*/
void setExpiration(long expiration);
/**
* Returns the set delivery time for this message.
*
* The value should be returned as an absolute time given in GMT time.
*
* @return the earliest time that the message should be made available for delivery.
*/
long getDeliveryTime();
/**
* Sets an desired delivery time on this message.
*
* The delivery time will be given as an absolute time in GMT time.
*
* @param deliveryTime
* the earliest time that the message should be made available for delivery.
* @param transmit
* whether to transmit an annotation containing the value (if non-zero)
*/
void setDeliveryTime(long deliveryTime, boolean transmit);
/**
* Gets the Destination value that was assigned to this message at the time it was
* sent.
*
* @return the destination to which this message was originally sent.
*/
JmsDestination getDestination();
/**
* Sets the Destination that this message is being sent to.
*
* @param destination
* the destination that this message is being sent to.
*/
void setDestination(JmsDestination destination);
/**
* Gets the Destination where replies for this Message are to be sent to.
*
* @return the reply to destination for this message or null if none set.
*/
JmsDestination getReplyTo();
/**
* Sets the Destination where replies to this Message are to be sent.
*
* @param replyTo
* the Destination where replies should be sent, or null to clear.
*/
void setReplyTo(JmsDestination replyTo);
/**
* Returns the ID of the user that sent this message if available.
*
* @return the user ID that was in use when this message was sent or null if not set.
*/
String getUserId();
/**
* Sets the User ID for the connection that is being used to send this message.
*
* @param userId
* the user ID that sent this message or null to clear.
*/
void setUserId(String userId);
/**
* Gets the set user ID of the message in raw bytes form. If no ID was
* set then this method may return null or an empty byte array.
*
* @return a byte array containing the user ID value in raw form.
*
* @throws JMSException if an error occurs while accessing the property.
*/
byte[] getUserIdBytes() throws JMSException;
/**
* Sets the user ID of the message in raw byte form. Setting the value
* as null or an empty byte array will clear any previously set value. If the
* underlying protocol cannot convert or map the given byte value to it's own
* internal representation it should throw a JMSException indicating the error.
*
* @param userId
* the byte array to use to set the message user ID.
*/
void setUserIdBytes(byte[] userId);
/**
* Gets the Group ID that this message is assigned to.
*
* @return the Group ID this message was sent in.
*/
String getGroupId();
/**
* Sets the Group ID to use for this message.
*
* @param groupId
* the Group ID that this message is assigned to.
*/
void setGroupId(String groupId);
/**
* Gets the assigned group sequence of this message.
*
* @return the assigned group sequence of this message.
*/
int getGroupSequence();
/**
* Sets the group sequence value for this message.
*
* @param groupSequence
* the group sequence value to assign this message.
*/
void setGroupSequence(int groupSequence);
/**
* Returns the underlying providers message ID object for this message if one
* exists, null otherwise. In the case the returned value is a String, it is not
* defined whether the JMS mandated 'ID:' prefix will be present.
*
* @return the set provider message ID or null if not set.
*/
Object getProviderMessageIdObject();
/**
* Sets the underlying providers message ID object for this message, or
* clears it if the provided value is null.
*
* @param messageId
* The message ID to set on this message, or null to clear.
*/
void setProviderMessageIdObject(Object messageId);
/**
* Returns true if the underlying message has a body, false if the body is empty.
*
* @return true if the underlying message has a body, false if the body is empty.
*/
boolean hasBody();
/**
* Encodes the protocol level Message instance for transmission.
*
* @return an Object that represents the encoded form of the message for the target provider.
*/
Object encodeMessage();
/**
* Returns whether the delivery time is being transmitted, i.e. incorporates an actual delivery delay.
*
* @return true if delivery time is being transmitted as an annotation
*/
boolean isDeliveryTimeTransmitted();
}