All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.jms.JMSConsumer Maven / Gradle / Ivy

The newest version!
/**
 * Copyright 2013 ScalAgent Distributed Technologies
 *
 *  Licensed 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.
 *  ---------------------------------------------------------------------
 *  $Id: JMSConsumer.java 6347 2013-03-13 08:52:02Z tachker $
 *  ---------------------------------------------------------------------
 */

package javax.jms;

/**
 * A client using the simplified JMS API introduced for JMS 2.0 uses a
 * {@code JMSConsumer} object to receive messages from a queue or topic. A
 * {@code JMSConsumer} object may be created either created by passing a
 * {@code Queue} or {@code Topic} object to one of the {@code createConsumer}
 * methods on a {@code JMSContext}. or by passing a {@code Topic} object to one
 * of the {@code createSharedConsumer} or {@code createDurableConsumer} methods
 * on a {@code JMSContext}. A client may either synchronously receive a
 * {@code JMSConsumer}'s messages or have the {@code JMSConsumer} asynchronously
 * deliver them as they arrive.
 * 

* For synchronous receipt, a client can request the next message from a * {@code JMSConsumer} using one of its {@code receive} methods. There are * several variations of {@code receive} that allow a client to poll or wait for * the next message. *

* For asynchronous delivery, a client can register a {@code MessageListener} * object with a {@code JMSConsumer}. As messages arrive at the * {@code JMSConsumer}, it delivers them by calling the {@code MessageListener} * 's {@code onMessage} method. *

* It is a client programming mistake for a {@code MessageListener} to throw an * exception. * * @see javax.jms.JMSContext * * @version JMS 2.0 * @since JMS 2.0 * */ public interface JMSConsumer extends AutoCloseable { /** * Gets this {@code JMSConsumer}'s message selector expression. * * @return this {@code JMSConsumer}'s message selector, or null if no message * selector exists for the {@code JMSConsumer} * * @exception JMSRuntimeException * if the JMS provider fails to get the message selector due to * some internal error. */ String getMessageSelector(); /** * Gets the {@code JMSConsumer}'s {@code MessageListener}. * * @return the {@code JMSConsumer}'s {@code MessageListener}, or null if one * was not set * * @exception JMSRuntimeException * if the JMS provider fails to get the {@code MessageListener} * for one of the following reasons: *

    *
  • an internal error has occurred or *
  • this method has been called in a Java EE web or EJB * application (though it is not guaranteed that an exception is * thrown in this case) *
* * @see javax.jms.JMSConsumer#setMessageListener(javax.jms.MessageListener) */ MessageListener getMessageListener() throws JMSRuntimeException; /** * Specifies the {@code JMSConsumer}'s {@code MessageListener}. *

* Setting the {@code MessageListener} to null is the equivalent of unsetting * the {@code MessageListener} for the {@code JMSConsumer}. *

* The effect of calling this method while messages are being consumed by an * existing listener or the {@code JMSConsumer} is being used to consume * messages synchronously is undefined. * * @param listener * the listener to which the messages are to be delivered * * @exception JMSRuntimeException * if the JMS provider fails to set the {@code JMSConsumer}'s * {@code MessageListener} for one of the following reasons: *

    *
  • an internal error has occurred or
  • this method has been * called in a Java EE web or EJB application (though it is not * guaranteed that an exception is thrown in this case) *
* * @see javax.jms.JMSConsumer#getMessageListener() */ void setMessageListener(MessageListener listener) throws JMSRuntimeException; /** * Receives the next message produced for this {@code JMSConsumer}. * *

* This call blocks indefinitely until a message is produced or until this * {@code JMSConsumer} is closed. * * @return the next message produced for this {@code JMSConsumer}, or null if * this {@code JMSConsumer} is concurrently closed * * @exception JMSRuntimeException * if the JMS provider fails to receive the next message due to * some internal error. * */ Message receive(); /** * Gets the next message that arrives within the specified timeout interval. * * @param timeout * the timeout value (in milliseconds) * * @return the next message produced for this {@code JMSConsumer}, or null if * the timeout expires or this {@code JMSConsumer} is concurrently * closed * * @exception JMSRuntimeException * if the JMS provider fails to receive the next message due to * some internal error. */ Message receive(long timeout); /** * Gets the next message if one is immediately available. * * @return the next message produced for this {@code JMSConsumer}, or null if * one is not available * * @exception JMSRuntimeException * if the JMS provider fails to receive the next message due to * some internal error. */ Message receiveNoWait(); /** * Closes the {@code JMSConsumer}. If this method is called whilst a message * listener is in progress in another thread then it will block until the * message listener has completed. This method is the only {@code JMSConsumer} * method that can be called concurrently. * * @exception JMSRuntimeException * if the JMS provider fails to close the consumer due to some * internal error. */ void close(); /** * Receives the next message produced for this {@code JMSConsumer} and returns * its body as an object of the specified type. This method may be used to * receive any type of message except for {@code StreamMessage} and * {@code Message}, so long as the message has a body which is capable of * being assigned to the specified type. This means that the specified class * or interface must either be the same as, or a superclass or superinterface * of, the class of the message body. If the message is not one of the * supported types, or its body cannot be assigned to the specified type, or * it has no body, then a {@code MessageFormatRuntimeException} is thrown. *

* This method does not give access to the message headers or properties (such * as the {@code JMSRedelivered} message header field or the * {@code JMSXDeliveryCount} message property) and should only be used if the * application has no need to access them. *

* This call blocks indefinitely until a message is produced or until this * {@code JMSConsumer} is closed. *

* If this method is called within a transaction, the {@code JMSConsumer} * retains the message until the transaction commits. *

* The result of this method throwing a {@code MessageFormatRuntimeException} * depends on the session mode. * * @param c * The type to which the body of the next message should be assigned.
* If the next message is expected to be a {@code TextMessage} then * this should be set to {@code String.class} or another class to * which a {@code String} is assignable.
* If the next message is expected to be a {@code ObjectMessage} then * this should be set to {@code java.io.Serializable.class} or * another class to which the body is assignable.
* If the next message is expected to be a {@code MapMessage} then * this should be set to {@code java.util.Map.class} (or * {@code java.lang.Object.class}).
* If the next message is expected to be a {@code BytesMessage} then * this should be set to {@code byte[].class} (or * {@code java.lang.Object.class}).
* * @return the body of the next message produced for this {@code JMSConsumer}, * or null if this {@code JMSConsumer} is concurrently closed * * @throws MessageFormatRuntimeException *

    *
  • if the message is not one of the supported types listed above *
  • if the message body cannot be assigned to the specified type *
  • if the message has no body
  • if the message is an * {@code ObjectMessage} and object deserialization fails. *
* @throws JMSRuntimeException * if the JMS provider fails to receive the next message due to some * internal error */ T receiveBody(Class c); /** * Receives the next message produced for this {@code JMSConsumer} that * arrives within the specified timeout period and returns its body as an * object of the specified type. *

* This method does not give access to the message headers or properties (such * as the {@code JMSRedelivered} message header field or the * {@code JMSXDeliveryCount} message property) and should only be used if the * application has no need to access them. *

* This call blocks indefinitely until a message is produced or until this * {@code JMSConsumer} is closed. *

* If this method is called within a transaction, the {@code JMSConsumer} * retains the message until the transaction commits. * * @param c * The type to which the body of the next message should be assigned.
* If the next message is expected to be a {@code TextMessage} then * this should be set to {@code String.class} or another class to * which a {@code String} is assignable.
* If the next message is expected to be a {@code ObjectMessage} then * this should be set to {@code java.io.Serializable.class} or * another class to which the body is assignable.
* If the next message is expected to be a {@code MapMessage} then * this should be set to {@code java.util.Map.class} (or * {@code java.lang.Object.class}).
* If the next message is expected to be a {@code BytesMessage} then * this should be set to {@code byte[].class} (or * {@code java.lang.Object.class}).
* * @return the body of the next message produced for this {@code JMSConsumer}, * or null if the timeout expires or this {@code JMSConsumer} is * concurrently closed * * @throws MessageFormatRuntimeException *

    *
  • if the message is not one of the supported types listed above *
  • if the message body cannot be assigned to the specified type *
  • if the message has no body
  • if the message is an * {@code ObjectMessage} and object deserialization fails. *
* @throws JMSRuntimeException * if the JMS provider fails to receive the next message due to some * internal error */ T receiveBody(Class c, long timeout); /** * Receives the next message produced for this {@code JMSConsumer} if one is * immediately available and returns its body as an object of the specified * type. *

* This method does not give access to the message headers or properties (such * as the {@code JMSRedelivered} message header field or the * {@code JMSXDeliveryCount} message property) and should only be used if the * application has no need to access them. *

* This call blocks indefinitely until a message is produced or until this * {@code JMSConsumer} is closed. *

* If this method is called within a transaction, the {@code JMSConsumer} * retains the message until the transaction commits. * * @param c * The type to which the body of the next message should be assigned.
* If the next message is expected to be a {@code TextMessage} then * this should be set to {@code String.class} or another class to * which a {@code String} is assignable.
* If the next message is expected to be a {@code ObjectMessage} then * this should be set to {@code java.io.Serializable.class} or * another class to which the body is assignable.
* If the next message is expected to be a {@code MapMessage} then * this should be set to {@code java.util.Map.class} (or * {@code java.lang.Object.class}).
* If the next message is expected to be a {@code BytesMessage} then * this should be set to {@code byte[].class} (or * {@code java.lang.Object.class}).
* * @return the body of the next message produced for this {@code JMSConsumer}, * or null if one is not immediately available or this * {@code JMSConsumer} is concurrently closed * * @throws MessageFormatRuntimeException *

    *
  • if the message is not one of the supported types listed above *
  • if the message body cannot be assigned to the specified type *
  • if the message has no body
  • if the message is an * {@code ObjectMessage} and object deserialization fails. *
* * @throws JMSRuntimeException * if the JMS provider fails to receive the next message due to some * internal error */ T receiveBodyNoWait(Class c); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy