📄 session.java
字号:
/*
* @(#)Session.java 1.44 02/04/10
*
* Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
*
* SUN PROPRIETARY/CONFIDENTIAL.
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package javax.jms;
import java.io.Serializable;
/** <P>A <CODE>Session</CODE> object is a single-threaded context for producing and consuming
* messages. Although it may allocate provider resources outside the Java
* virtual machine (JVM), it is considered a lightweight JMS object.
*
* <P>A session serves several purposes:
*
* <UL>
* <LI>It is a factory for its message producers and consumers.
* <LI>It supplies provider-optimized message factories.
* <LI>It is a factory for <CODE>TemporaryTopics</CODE> and
* <CODE>TemporaryQueues</CODE>.
* <LI> It provides a way to create <CODE>Queue</CODE> or <CODE>Topic</CODE>
* objects for those clients that need to dynamically manipulate
* provider-specific destination names.
* <LI>It supports a single series of transactions that combine work
* spanning its producers and consumers into atomic units.
* <LI>It defines a serial order for the messages it consumes and
* the messages it produces.
* <LI>It retains messages it consumes until they have been
* acknowledged.
* <LI>It serializes execution of message listeners registered with
* its message consumers.
* <LI> It is a factory for <CODE>QueueBrowsers</CODE>.
* </UL>
*
* <P>A session can create and service multiple message producers and
* consumers.
*
* <P>One typical use is to have a thread block on a synchronous
* <CODE>MessageConsumer</CODE> until a message arrives. The thread may then
* use one or more of the <CODE>Session</CODE>'s <CODE>MessageProducer</CODE>s.
*
* <P>If a client desires to have one thread produce messages while others
* consume them, the client should use a separate session for its producing
* thread.
*
* <P>Once a connection has been started, any session with one or more
* registered message listeners is dedicated to the thread of control that
* delivers messages to it. It is erroneous for client code to use this session
* or any of its constituent objects from another thread of control. The
* only exception to this rule is the use of the session or connection
* <CODE>close</CODE> method.
*
* <P>It should be easy for most clients to partition their work naturally
* into sessions. This model allows clients to start simply and incrementally
* add message processing complexity as their need for concurrency grows.
*
* <P>The <CODE>close</CODE> method is the only session method that can be
* called while some other session method is being executed in another thread.
*
* <P>A session may be specified as transacted. Each transacted
* session supports a single series of transactions. Each transaction groups
* a set of message sends and a set of message receives into an atomic unit
* of work. In effect, transactions organize a session's input message
* stream and output message stream into series of atomic units. When a
* transaction commits, its atomic unit of input is acknowledged and its
* associated atomic unit of output is sent. If a transaction rollback is
* done, the transaction's sent messages are destroyed and the session's input
* is automatically recovered.
*
* <P>The content of a transaction's input and output units is simply those
* messages that have been produced and consumed within the session's current
* transaction.
*
* <P>A transaction is completed using either its session's <CODE>commit</CODE>
* method or its session's <CODE>rollback</CODE> method. The completion of a
* session's current transaction automatically begins the next. The result is
* that a transacted session always has a current transaction within which its
* work is done.
*
* <P>The Java Transaction Service (JTS) or some other transaction monitor may
* be used to combine a session's transaction with transactions on other
* resources (databases, other JMS sessions, etc.). Since Java distributed
* transactions are controlled via the Java Transaction API (JTA), use of the
* session's <CODE>commit</CODE> and <CODE>rollback</CODE> methods in
* this context is prohibited.
*
* <P>The JMS API does not require support for JTA; however, it does define
* how a provider supplies this support.
*
* <P>Although it is also possible for a JMS client to handle distributed
* transactions directly, it is unlikely that many JMS clients will do this.
* Support for JTA in the JMS API is targeted at systems vendors who will be
* integrating the JMS API into their application server products.
*
* @version 1.1 February 2, 2002
* @author Mark Hapner
* @author Rich Burridge
* @author Kate Stout
*
* @see javax.jms.QueueSession
* @see javax.jms.TopicSession
* @see javax.jms.XASession
*/
public interface Session extends Runnable {
/** With this acknowledgment mode, the session automatically acknowledges
* a client's receipt of a message either when the session has successfully
* returned from a call to <CODE>receive</CODE> or when the message
* listener the session has called to process the message successfully
* returns.
*/
static final int AUTO_ACKNOWLEDGE = 1;
/** With this acknowledgment mode, the client acknowledges a consumed
* message by calling the message's <CODE>acknowledge</CODE> method.
* Acknowledging a consumed message acknowledges all messages that the
* session has consumed.
*
* <P>When client acknowledgment mode is used, a client may build up a
* large number of unacknowledged messages while attempting to process
* them. A JMS provider should provide administrators with a way to
* limit client overrun so that clients are not driven to resource
* exhaustion and ensuing failure when some resource they are using
* is temporarily blocked.
*
* @see javax.jms.Message#acknowledge()
*/
static final int CLIENT_ACKNOWLEDGE = 2;
/** This acknowledgment mode instructs the session to lazily acknowledge
* the delivery of messages. This is likely to result in the delivery of
* some duplicate messages if the JMS provider fails, so it should only be
* used by consumers that can tolerate duplicate messages. Use of this
* mode can reduce session overhead by minimizing the work the
* session does to prevent duplicates.
*/
static final int DUPS_OK_ACKNOWLEDGE = 3;
/** This value is returned from the method
* <CODE>getAcknowledgeMode</CODE> if the session is transacted.
* If a <CODE>Session</CODE> is transacted, the acknowledgement mode
* is ignored.
*/
static final int SESSION_TRANSACTED = 0;
/** Creates a <CODE>BytesMessage</CODE> object. A <CODE>BytesMessage</CODE>
* object is used to send a message containing a stream of uninterpreted
* bytes.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
BytesMessage
createBytesMessage() throws JMSException;
/** Creates a <CODE>MapMessage</CODE> object. A <CODE>MapMessage</CODE>
* object is used to send a self-defining set of name-value pairs, where
* names are <CODE>String</CODE> objects and values are primitive values
* in the Java programming language.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
MapMessage
createMapMessage() throws JMSException;
/** Creates a <CODE>Message</CODE> object. The <CODE>Message</CODE>
* interface is the root interface of all JMS messages. A
* <CODE>Message</CODE> object holds all the
* standard message header information. It can be sent when a message
* containing only header information is sufficient.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
Message
createMessage() throws JMSException;
/** Creates an <CODE>ObjectMessage</CODE> object. An
* <CODE>ObjectMessage</CODE> object is used to send a message
* that contains a serializable Java object.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
ObjectMessage
createObjectMessage() throws JMSException;
/** Creates an initialized <CODE>ObjectMessage</CODE> object. An
* <CODE>ObjectMessage</CODE> object is used
* to send a message that contains a serializable Java object.
*
* @param object the object to use to initialize this message
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
ObjectMessage
createObjectMessage(Serializable object) throws JMSException;
/** Creates a <CODE>StreamMessage</CODE> object. A
* <CODE>StreamMessage</CODE> object is used to send a
* self-defining stream of primitive values in the Java programming
* language.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
StreamMessage
createStreamMessage() throws JMSException;
/** Creates a <CODE>TextMessage</CODE> object. A <CODE>TextMessage</CODE>
* object is used to send a message containing a <CODE>String</CODE>
* object.
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
TextMessage
createTextMessage() throws JMSException;
/** Creates an initialized <CODE>TextMessage</CODE> object. A
* <CODE>TextMessage</CODE> object is used to send
* a message containing a <CODE>String</CODE>.
*
* @param text the string used to initialize this message
*
* @exception JMSException if the JMS provider fails to create this message
* due to some internal error.
*/
TextMessage
createTextMessage(String text) throws JMSException;
/** Indicates whether the session is in transacted mode.
*
* @return true if the session is in transacted mode
*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -