org.objectweb.joram.client.jms
Class Session

java.lang.Object
  extended by org.objectweb.joram.client.jms.Session
All Implemented Interfaces:
java.lang.Runnable, javax.jms.Session
Direct Known Subclasses:
QueueSession, TopicSession

public class Session
extends java.lang.Object
implements javax.jms.Session

Implements the javax.jms.Session interface.

A Session object is a single-threaded context for producing and consuming messages. A session serves several purposes:

A session can create and service multiple message producers and consumers.


Nested Class Summary
(package private)  class Session.Closer
          This class synchronizes the close.
private static class Session.MessageListenerContext
          Context used to associate a message consumer with a set of messages to consume.
private static class Session.RequestStatus
          The status of the current request.
private  class Session.SessionCloseTask
          The SessionCloseTask class is used by non-XA transacted sessions for taking care of closing them if they tend to be pending, and if a transaction timer has been set.
private  class Session.SessionDaemon
          This thread controls the session in mode LISTENER.
private static class Session.SessionMode
          The way the session is used.
private static class Session.Status
          Status of the session
 
Field Summary
private  int acknowledgeMode
          The acknowledgement mode of the session.
private  boolean asyncSend
          Indicates whether the messages produced are asynchronously sent or not (without or with acknowledgment).
private  boolean asyncSub
          Indicates whether the subscription requests are asynchronously handled or not.
private  boolean autoAck
          true if the session's acknowledgements are automatic.
private  java.util.Vector browsers
          Vector of queue browsers.
private  Session.Closer closer
          Used to synchronize the method close()
private  Session.SessionCloseTask closingTask
          Task for closing the session if it becomes pending.
private  Connection cnx
          The connection the session belongs to.
private  java.util.Vector consumers
          Vector of message consumers.
private  Session.SessionDaemon daemon
          Daemon distributing asynchronous server deliveries.
(package private)  java.util.Hashtable deliveries
          Table holding the identifiers of the messages delivered per destination or subscription, and not acknowledged.
private  java.lang.String ident
          The identifier of the session.
private  boolean implicitAck
          Indicates whether the messages consumed are implicitly acknowledged or not.
private  java.util.List inInterceptors
           
private  int listenerCount
          Counter of message listeners.
static org.objectweb.util.monolog.api.Logger logger
           
private  MessageConsumerListener messageConsumerListener
           
protected  javax.jms.MessageListener messageListener
          The message listener of the session, if any.
private  RequestMultiplexer mtpx
          The request multiplexer used to communicate with the user proxy.
private  java.util.List outInterceptors
           
private  MessageConsumer pendingMessageConsumer
          The message consumer currently making a request (null if none).
private  java.util.Vector producers
          Vector of message producers.
private  int queueMessageReadMax
          Maximum number of messages that can be read at once from a queue.
private  Requestor receiveRequestor
          The requestor used by the session to make 'receive' with the user proxy.
private  boolean recover
          Indicates that the session has been recovered by a message listener.
private  Queue repliesIn
          FIFO queue holding the asynchronous server deliveries.
private  Requestor requestor
          The requestor used by the session to communicate with the user proxy.
private  int requestStatus
          Status of the request: NONE, RUN, DONE.
private  boolean scheduled
          true if the session's transaction is scheduled.
(package private)  java.util.Hashtable sendings
          Table holding the ProducerMessages holding producers' messages and destinated to be sent at commit.
private  int sessionMode
          Mode of the session: NONE, RECEIVE, LISTENER, APP_SERVER
private  java.lang.Thread singleThreadOfControl
          The current active control thread.
private  int status
          Status of the session: STOP, START, CLOSE
private  int topicAckBufferMax
          Maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode.
private  int topicActivationThreshold
          This threshold is the minimum messages number below which the subscription is activated.
private  int topicPassivationThreshold
          This threshold is the maximum messages number over which the subscription is passivated.
(package private)  boolean transacted
          true if the session is transacted.
 
Fields inherited from interface javax.jms.Session
AUTO_ACKNOWLEDGE, CLIENT_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE, SESSION_TRANSACTED
 
Constructor Summary
Session(Connection cnx, boolean transacted, int acknowledgeMode, RequestMultiplexer mtpx)
          Opens a session.
 
Method Summary
(package private)  void acknowledge()
          Method acknowledging the received messages.
protected  void addConsumer(MessageConsumer mc)
          Called here and by sub-classes.
(package private)  MessageConsumerListener addMessageListener(MessageConsumerListener mcl)
          Called by MessageConsumer
protected  void addProducer(MessageProducer mp)
          Called here and by sub-classes.
protected  void checkClosed()
          Checks if the session is closed.
(package private)  void checkConsumers(java.lang.String agentId)
          Called by Connection (i.e. temporary destinations deletion)
private  void checkSessionMode(int expectedSessionMode)
          Checks the session mode.
private  void checkThreadOfControl()
          Checks if the calling thread is the thread of control.
 void close()
          Closes the session.
(package private)  void closeBrowser(QueueBrowser qb)
          Called by Queue browser.
(package private)  void closeConsumer(MessageConsumer mc)
          Called by MessageConsumer.
(package private)  void closeProducer(MessageProducer mp)
          Called by MessageProducer.
 void commit()
          API method.
 javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue)
          Creates a QueueBrowser object to peek at the messages on the specified queue.
 javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue, java.lang.String selector)
          Creates a QueueBrowser object to peek at the messages on the specified queue using a message selector.
 javax.jms.BytesMessage createBytesMessage()
          Creates a BytesMessage object.
 javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest)
          Creates a MessageConsumer for the specified destination.
 javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest, java.lang.String selector)
          Creates a MessageConsumer for the specified destination using a message selector.
 javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest, java.lang.String selector, boolean noLocal)
          Creates a MessageConsumer for the specified destination using a message selector.
private  java.lang.String createDestination(byte type, java.lang.String name)
          Create a destination with the given name and type.
 javax.jms.TopicSubscriber createDurableSubscriber(javax.jms.Topic topic, java.lang.String name)
          Creates or retrieves a durable subscription with the specified name.
 javax.jms.TopicSubscriber createDurableSubscriber(javax.jms.Topic topic, java.lang.String name, java.lang.String selector, boolean noLocal)
          Creates or retrieves a durable subscription with the specified name.
 javax.jms.MapMessage createMapMessage()
          Creates a MapMessage object.
 javax.jms.Message createMessage()
          Creates a Message object.
 javax.jms.ObjectMessage createObjectMessage()
          Creates a ObjectMessage object.
 javax.jms.ObjectMessage createObjectMessage(java.io.Serializable obj)
          Creates a ObjectMessage object.
 javax.jms.MessageProducer createProducer(javax.jms.Destination dest)
          Creates a MessageProducer to send messages to the specified destination.
 javax.jms.Queue createQueue(java.lang.String name)
          This method allows to create or retrieve a Queue with the given name on the local server.
 javax.jms.StreamMessage createStreamMessage()
          Creates a StreamMessage object.
 javax.jms.TemporaryQueue createTemporaryQueue()
          API method.
 javax.jms.TemporaryTopic createTemporaryTopic()
          API method.
 javax.jms.TextMessage createTextMessage()
          Creates a TextMessage object.
 javax.jms.TextMessage createTextMessage(java.lang.String text)
          Creates a TextMessage object with the specified text.
 javax.jms.Topic createTopic(java.lang.String name)
          This method allows to create or retrieve a Topic with the given name on the local server.
private  void deny()
          Method denying the received messages.
private  void denyMessage(java.lang.String targetName, java.lang.String msgId, boolean queueMode)
          Called by: - method run (application server thread) synchronized - method onMessage (SessionDaemon thread) not synchronized but no concurrent call except a close which first stops SessionDaemon.
private  void doAcknowledge()
          Method acknowledging the received messages.
(package private)  void doClose()
           
private  void doRecover()
           
private  void doStart()
           
private  void doStop()
           
(package private)  int getAckMode()
           
 int getAcknowledgeMode()
          API method.
(package private)  Connection getConnection()
           
(package private)  java.lang.String getId()
           
 javax.jms.MessageListener getMessageListener()
          API method.
 int getQueueMessageReadMax()
          Get the maximum number of messages that can be read at once from a queue for this Session.
(package private)  RequestMultiplexer getRequestMultiplexer()
           
 int getTopicAckBufferMax()
          Get the maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode for this session.
 int getTopicActivationThreshold()
          Get the threshold of activation for this session.
 int getTopicPassivationThreshold()
          Get the threshold of passivation for this session.
 boolean getTransacted()
          API method.
 boolean isAsyncSend()
          Indicates whether the messages produced are asynchronously sent or not (without or with acknowledgment).
 boolean isAsyncSub()
          Indicates whether the subscription request is asynchronously handled or not.
 boolean isAutoAck()
           
 boolean isImplicitAck()
          Indicates whether the messages consumed are implicitly acknowledged or not.
(package private)  boolean isStarted()
           
(package private)  void onMessage(Message msg)
          Called by ConnectionConsumer in order to distribute a message through the method run().
(package private)  void onMessage(Message momMsg, MessageConsumerListener mcl)
          Called by onMessages()
private  void onMessages(Session.MessageListenerContext ctx)
          Called by SessionDaemon.
private  void postReceive()
          Final stage after calling the reply has been returned by the roxy.
private  void prepareAck(java.lang.String name, java.lang.String id, boolean queueMode)
          Method called by message consumers when receiving a message for preparing the session to later acknowledge or deny it.
private  void prepareSend(Destination dest, Message msg)
          Method called by message producers when producing a message for preparing the session to later commit it.
private  void preReceive(MessageConsumer mc)
          First stage before calling the proxy and waiting for the reply.
(package private)  void pushMessages(SingleSessionConsumer consumerListener, ConsumerMessages messages)
          Called by MessageConsumerListener (demultiplexer thread from RequestMultiplexer) in order to distribute messages to a message consumer.
(package private)  javax.jms.Message receive(long requestTimeToLive, long waitTimeOut, MessageConsumer mc, java.lang.String targetName, java.lang.String selector, boolean queueMode)
          Called by MessageConsumer.
 void recover()
          API method.
(package private)  void removeMessageListener(MessageConsumerListener mcl, boolean check)
          Called by MessageConsumer.
 void rollback()
          API method.
 void run()
          API method.
(package private)  void send(Destination dest, javax.jms.Message msg, int deliveryMode, int priority, long timeToLive, boolean timestampDisabled)
          Called by MessageProducer.
 void setAsyncSend(boolean asyncSend)
          Sets asynchronously sending for this session.
 void setAsyncSub(boolean asyncSub)
          Sets asynchronous subscription for this session.
 void setImplicitAck(boolean implicitAck)
          Sets implicit acknowledge for this session.
 void setInMessageInterceptors(java.util.List pInInterceptors)
          Sets the list of IN message interceptors.
(package private)  void setMessageConsumerListener(MessageConsumerListener mcl)
          Called by MultiSessionConsumer ASF mode
 void setMessageListener(javax.jms.MessageListener messageListener)
          API method.
 void setOutMessageInterceptors(java.util.List pOutInterceptors)
          Sets the OUT message interceptor.
 void setQueueMessageReadMax(int queueMessageReadMax)
          Set the maximum number of messages that can be read at once from a queue for this Session.
private  void setRequestStatus(int requestStatus)
          Sets the request status.
private  void setSessionMode(int sessionMode)
          Sets the session mode.
private  void setStatus(int status)
          Sets the status of the session.
 void setTopicAckBufferMax(int topicAckBufferMax)
          Set the maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode for this session.
 void setTopicActivationThreshold(int topicActivationThreshold)
          Set the threshold of activation for this session.
 void setTopicPassivationThreshold(int topicPassivationThreshold)
          Set the threshold of passivation for this session.
 void setTransacted(boolean t)
          set transacted.
(package private)  void start()
          Starts the asynchronous deliveries in the session.
(package private)  void stop()
          Stops the asynchronous deliveries processing in the session.
(package private)  AbstractJmsReply syncRequest(AbstractJmsRequest request)
          Called by MessageConsumer.
 java.lang.String toString()
          Returns a String image of this session.
 void unsubscribe(java.lang.String name)
          API method.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

logger

public static org.objectweb.util.monolog.api.Logger logger

closingTask

private Session.SessionCloseTask closingTask
Task for closing the session if it becomes pending.


scheduled

private boolean scheduled
true if the session's transaction is scheduled.


messageListener

protected javax.jms.MessageListener messageListener
The message listener of the session, if any.


ident

private java.lang.String ident
The identifier of the session.


cnx

private Connection cnx
The connection the session belongs to.


transacted

boolean transacted
true if the session is transacted.


acknowledgeMode

private int acknowledgeMode
The acknowledgement mode of the session.


autoAck

private boolean autoAck
true if the session's acknowledgements are automatic.


consumers

private java.util.Vector consumers
Vector of message consumers.


producers

private java.util.Vector producers
Vector of message producers.


browsers

private java.util.Vector browsers
Vector of queue browsers.


repliesIn

private Queue repliesIn
FIFO queue holding the asynchronous server deliveries.


daemon

private Session.SessionDaemon daemon
Daemon distributing asynchronous server deliveries.


listenerCount

private int listenerCount
Counter of message listeners.


sendings

java.util.Hashtable sendings
Table holding the ProducerMessages holding producers' messages and destinated to be sent at commit.

Key: destination name
Object: ProducerMessages


deliveries

java.util.Hashtable deliveries
Table holding the identifiers of the messages delivered per destination or subscription, and not acknowledged.

Key: destination or subscription name
Object: MessageAcks instance


mtpx

private RequestMultiplexer mtpx
The request multiplexer used to communicate with the user proxy.


requestor

private Requestor requestor
The requestor used by the session to communicate with the user proxy.


receiveRequestor

private Requestor receiveRequestor
The requestor used by the session to make 'receive' with the user proxy. This second requestor is necessary because it must be closed during the session close (see method close).


recover

private boolean recover
Indicates that the session has been recovered by a message listener. Doesn't need to be volatile because it is only used by the SessionDaemon thread.


status

private int status
Status of the session: STOP, START, CLOSE


sessionMode

private int sessionMode
Mode of the session: NONE, RECEIVE, LISTENER, APP_SERVER


requestStatus

private int requestStatus
Status of the request: NONE, RUN, DONE.


pendingMessageConsumer

private MessageConsumer pendingMessageConsumer
The message consumer currently making a request (null if none).


singleThreadOfControl

private java.lang.Thread singleThreadOfControl
The current active control thread.


closer

private Session.Closer closer
Used to synchronize the method close()


implicitAck

private boolean implicitAck
Indicates whether the messages consumed are implicitly acknowledged or not. When true messages are immediately removed from queue when delivered. Contrary to Session's AUTO_ACKNOWLEDGE mode there is none acknowledge message from client to server.

See Also:
FactoryParameters.implicitAck

asyncSend

private boolean asyncSend
Indicates whether the messages produced are asynchronously sent or not (without or with acknowledgment).

See Also:
FactoryParameters.asyncSend

queueMessageReadMax

private int queueMessageReadMax
Maximum number of messages that can be read at once from a queue.

This attribute is inherited from Connection at initialization.

See Also:
FactoryParameters.queueMessageReadMax

topicAckBufferMax

private int topicAckBufferMax
Maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode.

This attribute is inherited from Connection at initialization.

See Also:
FactoryParameters.topicAckBufferMax

topicPassivationThreshold

private int topicPassivationThreshold
This threshold is the maximum messages number over which the subscription is passivated.

This attribute is inherited from Connection at initialization, default value is Integer.MAX_VALUE.

See Also:
FactoryParameters.topicPassivationThreshold

topicActivationThreshold

private int topicActivationThreshold
This threshold is the minimum messages number below which the subscription is activated.

This attribute is inherited from Connection at initialization, default value is 0.

See Also:
FactoryParameters.topicActivationThreshold

asyncSub

private boolean asyncSub
Indicates whether the subscription requests are asynchronously handled or not.

Default value is false, the subscription is handled synchronously so the topic must be accessible.


messageConsumerListener

private MessageConsumerListener messageConsumerListener

inInterceptors

private java.util.List inInterceptors

outInterceptors

private java.util.List outInterceptors
Constructor Detail

Session

Session(Connection cnx,
        boolean transacted,
        int acknowledgeMode,
        RequestMultiplexer mtpx)
  throws javax.jms.JMSException
Opens a session.

Parameters:
cnx - The connection the session belongs to.
transacted - true for a transacted session.
acknowledgeMode - 1 (auto), 2 (client) or 3 (dups ok).
Throws:
javax.jms.JMSException - In case of an invalid acknowledge mode.
Method Detail

isImplicitAck

public boolean isImplicitAck()
Indicates whether the messages consumed are implicitly acknowledged or not. If true messages are immediately removed from queue when delivered.

This attribute is inherited from Connection at initialization, by default false.

Returns:
true if messages produced are implicitly acknowledged.
See Also:
implicitAck

setImplicitAck

public void setImplicitAck(boolean implicitAck)
Sets implicit acknowledge for this session.

Determines whether the messages produced are implicitly acknowledged or not. If set to true the messages are immediately removed from queue when delivered.

This attribute is inherited from Connection at initialization, by default false.

Parameters:
implicitAck - if true sets implicit acknowledge for this session.
See Also:
implicitAck

isAsyncSend

public boolean isAsyncSend()
Indicates whether the messages produced are asynchronously sent or not (without or with acknowledgment).

This attribute is inherited from Connection at initialization, by default false.

Returns:
true if messages produced are asynchronously sent.
See Also:
asyncSend

setAsyncSend

public void setAsyncSend(boolean asyncSend)
Sets asynchronously sending for this session.

Determines whether the messages produced are asynchronously sent or not (without or with acknowledgement).

This attribute is inherited from Connection at initialization, by default false.

Parameters:
asyncSend - if true sets asynchronous sending for this session.
See Also:
asyncSend

getQueueMessageReadMax

public final int getQueueMessageReadMax()
Get the maximum number of messages that can be read at once from a queue for this Session.

This attribute is inherited from Connection at initialization, default value is 1.

Returns:
The maximum number of messages that can be read at once from a queue.
See Also:
queueMessageReadMax

setQueueMessageReadMax

public void setQueueMessageReadMax(int queueMessageReadMax)
Set the maximum number of messages that can be read at once from a queue for this Session.

This attribute is inherited from Connection at initialization, default value is 1.

Parameters:
queueMessageReadMax - The maximum number of messages that can be read at once from a queue.
See Also:
queueMessageReadMax

getTopicAckBufferMax

public final int getTopicAckBufferMax()
Get the maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode for this session.

This attribute is inherited from Connection at initialization.

Returns:
The Maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode.
See Also:
FactoryParameters.topicAckBufferMax, topicAckBufferMax

setTopicAckBufferMax

public void setTopicAckBufferMax(int topicAckBufferMax)
Set the maximum number of acknowledgements that can be buffered when using Session.DUPS_OK_ACKNOWLEDGE mode for this session.

This attribute is inherited from Connection at initialization.

Parameters:
topicAckBufferMax - The Maximum number of acknowledgements that can be buffered in Session.DUPS_OK_ACKNOWLEDGE mode.
See Also:
FactoryParameters.topicAckBufferMax, topicAckBufferMax

getTopicPassivationThreshold

public final int getTopicPassivationThreshold()
Get the threshold of passivation for this session.

This threshold is the maximum messages number over which the subscription is passivated.

This attribute is inherited from Connection at initialization, default value is Integer.MAX_VALUE.

Returns:
The maximum messages number over which the subscription is passivated.
See Also:
topicPassivationThreshold

setTopicPassivationThreshold

public void setTopicPassivationThreshold(int topicPassivationThreshold)
Set the threshold of passivation for this session.

This threshold is the maximum messages number over which the subscription is passivated.

This attribute is inherited from Connection at initialization, default value is Integer.MAX_VALUE.

Parameters:
topicPassivationThreshold - The maximum messages number over which the subscription is passivated.
See Also:
topicPassivationThreshold

getTopicActivationThreshold

public final int getTopicActivationThreshold()
Get the threshold of activation for this session.

This threshold is the minimum messages number below which the subscription is activated.

This attribute is inherited from Connection at initialization, default value is 0.

Returns:
The minimum messages number below which the subscription is activated.
See Also:
topicActivationThreshold

setTopicActivationThreshold

public void setTopicActivationThreshold(int topicActivationThreshold)
Set the threshold of activation for this session.

This threshold is the minimum messages number below which the subscription is activated.

This attribute is inherited from Connection at initialization, default value is 0.

Parameters:
topicActivationThreshold - The minimum messages number below which the subscription is activated.
See Also:
topicActivationThreshold

isAsyncSub

public boolean isAsyncSub()
Indicates whether the subscription request is asynchronously handled or not.

Default value is false, the subscription is handled synchronously so the topic must be accessible.

Returns:
true if the subscription requests are asynchronously handled.

setAsyncSub

public void setAsyncSub(boolean asyncSub)
Sets asynchronous subscription for this session.

Determines whether the subscription request is asynchronously handled or not.

Default value is false, the subscription is handled synchronously so the topic must be accessible.

Parameters:
asyncSub - if true sets asynchronous subscription for this session.

setInMessageInterceptors

public void setInMessageInterceptors(java.util.List pInInterceptors)
Sets the list of IN message interceptors.

Parameters:
pInInterceptors -

setOutMessageInterceptors

public void setOutMessageInterceptors(java.util.List pOutInterceptors)
Sets the OUT message interceptor.

Parameters:
pOutInterceptor -

setStatus

private void setStatus(int status)
Sets the status of the session.


isStarted

boolean isStarted()

setSessionMode

private void setSessionMode(int sessionMode)
Sets the session mode.


setRequestStatus

private void setRequestStatus(int requestStatus)
Sets the request status.


checkClosed

protected void checkClosed()
                    throws javax.jms.IllegalStateException
Checks if the session is closed. If true, an IllegalStateException is raised.

Throws:
javax.jms.IllegalStateException

checkThreadOfControl

private void checkThreadOfControl()
                           throws javax.jms.IllegalStateException
Checks if the calling thread is the thread of control. If not, an IllegalStateException is raised.

Throws:
javax.jms.IllegalStateException

checkSessionMode

private void checkSessionMode(int expectedSessionMode)
                       throws javax.jms.IllegalStateException
Checks the session mode. If it is not the expected session mode, raises an IllegalStateException.

Parameters:
expectedSessionMode - the expected session mode.
Throws:
javax.jms.IllegalStateException

toString

public java.lang.String toString()
Returns a String image of this session.

Overrides:
toString in class java.lang.Object

getAcknowledgeMode

public final int getAcknowledgeMode()
                             throws javax.jms.JMSException
API method.

Specified by:
getAcknowledgeMode in interface javax.jms.Session
Throws:
javax.jms.JMSException - Actually never thrown.

getAckMode

int getAckMode()

getTransacted

public final boolean getTransacted()
                            throws javax.jms.JMSException
API method.

Specified by:
getTransacted in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

setTransacted

public void setTransacted(boolean t)
set transacted. see connector ManagedConnectionImpl (Connector).


setMessageListener

public void setMessageListener(javax.jms.MessageListener messageListener)
                        throws javax.jms.JMSException
API method.

Specified by:
setMessageListener in interface javax.jms.Session
Throws:
javax.jms.JMSException - Actually never thrown.

getMessageListener

public javax.jms.MessageListener getMessageListener()
                                             throws javax.jms.JMSException
API method.

Specified by:
getMessageListener in interface javax.jms.Session
Throws:
javax.jms.JMSException - Actually never thrown.

createMessage

public javax.jms.Message createMessage()
                                throws javax.jms.JMSException
Creates a Message object. API method.

Specified by:
createMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createTextMessage

public javax.jms.TextMessage createTextMessage()
                                        throws javax.jms.JMSException
Creates a TextMessage object. API method.

Specified by:
createTextMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createTextMessage

public javax.jms.TextMessage createTextMessage(java.lang.String text)
                                        throws javax.jms.JMSException
Creates a TextMessage object with the specified text. API method.

Specified by:
createTextMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createBytesMessage

public javax.jms.BytesMessage createBytesMessage()
                                          throws javax.jms.JMSException
Creates a BytesMessage object. API method.

Specified by:
createBytesMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createMapMessage

public javax.jms.MapMessage createMapMessage()
                                      throws javax.jms.JMSException
Creates a MapMessage object. API method.

Specified by:
createMapMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createObjectMessage

public javax.jms.ObjectMessage createObjectMessage()
                                            throws javax.jms.JMSException
Creates a ObjectMessage object. API method.

Specified by:
createObjectMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createObjectMessage

public javax.jms.ObjectMessage createObjectMessage(java.io.Serializable obj)
                                            throws javax.jms.JMSException
Creates a ObjectMessage object. API method.

Specified by:
createObjectMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createStreamMessage

public javax.jms.StreamMessage createStreamMessage()
                                            throws javax.jms.JMSException
Creates a StreamMessage object. API method.

Specified by:
createStreamMessage in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException

createBrowser

public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue,
                                            java.lang.String selector)
                                     throws javax.jms.JMSException
Creates a QueueBrowser object to peek at the messages on the specified queue using a message selector. API method

Specified by:
createBrowser in interface javax.jms.Session
Parameters:
queue - the queue to browse
selector - the expression allowing to filter messages
Throws:
javax.jms.IllegalStateException - if the session is closed.
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.InvalidSelectorException - if the message selector is invalid.
javax.jms.JMSException

createBrowser

public javax.jms.QueueBrowser createBrowser(javax.jms.Queue queue)
                                     throws javax.jms.JMSException
Creates a QueueBrowser object to peek at the messages on the specified queue. API method

Specified by:
createBrowser in interface javax.jms.Session
Parameters:
queue - the queue to browse
Throws:
javax.jms.IllegalStateException - if the session is closed.
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.JMSException

createProducer

public javax.jms.MessageProducer createProducer(javax.jms.Destination dest)
                                         throws javax.jms.JMSException
Creates a MessageProducer to send messages to the specified destination. API method.

Specified by:
createProducer in interface javax.jms.Session
Parameters:
dest - the Destination to send to, or null if this is a producer which does not have a specified destination.
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createConsumer

public javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest,
                                                java.lang.String selector,
                                                boolean noLocal)
                                         throws javax.jms.JMSException
Creates a MessageConsumer for the specified destination using a message selector. API method.

Specified by:
createConsumer in interface javax.jms.Session
Parameters:
dest - the Destination to send to, or null if this is a producer which does not have a specified destination.
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createConsumer

public javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest,
                                                java.lang.String selector)
                                         throws javax.jms.JMSException
Creates a MessageConsumer for the specified destination using a message selector. API method.

Specified by:
createConsumer in interface javax.jms.Session
Parameters:
dest - the Destination to send to, or null if this is a producer which does not have a specified destination.
selector - The selector allowing to filter messages.
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createConsumer

public javax.jms.MessageConsumer createConsumer(javax.jms.Destination dest)
                                         throws javax.jms.JMSException
Creates a MessageConsumer for the specified destination. API method.

Specified by:
createConsumer in interface javax.jms.Session
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createDurableSubscriber

public javax.jms.TopicSubscriber createDurableSubscriber(javax.jms.Topic topic,
                                                         java.lang.String name,
                                                         java.lang.String selector,
                                                         boolean noLocal)
                                                  throws javax.jms.JMSException
Creates or retrieves a durable subscription with the specified name. API method.

Specified by:
createDurableSubscriber in interface javax.jms.Session
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createDurableSubscriber

public javax.jms.TopicSubscriber createDurableSubscriber(javax.jms.Topic topic,
                                                         java.lang.String name)
                                                  throws javax.jms.JMSException
Creates or retrieves a durable subscription with the specified name. API method.

Specified by:
createDurableSubscriber in interface javax.jms.Session
Throws:
javax.jms.InvalidDestinationException - if an invalid destination is specified.
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the creation fails for any other reason.

createQueue

public javax.jms.Queue createQueue(java.lang.String name)
                            throws javax.jms.JMSException
This method allows to create or retrieve a Queue with the given name on the local server. First a destination with the specified name is searched on the server, if it does not exist it is created. In any case a queue identity with its provider-specific address is returned.

If the given name is a provider-specific name (#x.y.z unique identifier) a queue identity is returned with the specified identifier.

API method.

Clients that depend on this ability are not portable. Normally the physical creation of destination is an administrative task and is not to be initiated by the JMS API.

Specified by:
createQueue in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException - If the topic creation failed.

createTopic

public javax.jms.Topic createTopic(java.lang.String name)
                            throws javax.jms.JMSException
This method allows to create or retrieve a Topic with the given name on the local server. First a destination with the specified name is searched on the server, if it does not exist it is created. In any case a topic identity with its provider-specific address is returned.

If the given name is a provider-specific name (#x.y.z unique identifier) a topic identity is returned with the specified identifier.

API method.

Clients that depend on this ability are not portable. Normally the physical creation of destination is an administrative task and is not to be initiated by the JMS API.

Specified by:
createTopic in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed.
javax.jms.JMSException - If the topic creation failed.

createDestination

private java.lang.String createDestination(byte type,
                                           java.lang.String name)
                                    throws javax.jms.JMSException
Create a destination with the given name and type. If a destination of a corresponding name and type exists it is returned.

Parameters:
type - the type of the destination to create.
name - the name of the destination to create.
Returns:
the unique identifier of the created destination.
Throws:
javax.jms.JMSException

createTemporaryQueue

public javax.jms.TemporaryQueue createTemporaryQueue()
                                              throws javax.jms.JMSException
API method.

Specified by:
createTemporaryQueue in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the request fails for any other reason.

createTemporaryTopic

public javax.jms.TemporaryTopic createTemporaryTopic()
                                              throws javax.jms.JMSException
API method.

Specified by:
createTemporaryTopic in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.JMSException - If the request fails for any other reason.

run

public void run()
API method.

Specified by:
run in interface java.lang.Runnable
Specified by:
run in interface javax.jms.Session

setMessageConsumerListener

void setMessageConsumerListener(MessageConsumerListener mcl)
Called by MultiSessionConsumer ASF mode


commit

public void commit()
            throws javax.jms.JMSException
API method.

Specified by:
commit in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed, or not transacted, or if the connection is broken.
javax.jms.JMSException

rollback

public void rollback()
              throws javax.jms.JMSException
API method.

Specified by:
rollback in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed, or not transacted.
javax.jms.JMSException

recover

public void recover()
             throws javax.jms.JMSException
API method.

Specified by:
recover in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed, or transacted.
javax.jms.JMSException

doRecover

private void doRecover()
                throws javax.jms.JMSException
Throws:
javax.jms.JMSException

unsubscribe

public void unsubscribe(java.lang.String name)
                 throws javax.jms.JMSException
API method.

Specified by:
unsubscribe in interface javax.jms.Session
Throws:
javax.jms.IllegalStateException - If the session is closed or if the connection is broken.
javax.jms.InvalidDestinationException - If the subscription does not exist.
javax.jms.JMSException - If the request fails for any other reason.

close

public void close()
           throws javax.jms.JMSException
Closes the session. API method.

Specified by:
close in interface javax.jms.Session
Throws:
javax.jms.JMSException

doClose

void doClose()
       throws javax.jms.JMSException
Throws:
javax.jms.JMSException

start

void start()
Starts the asynchronous deliveries in the session.

This method is called by a started connection.


doStart

private void doStart()

stop

void stop()
Stops the asynchronous deliveries processing in the session.

This method must be carefully used. When the session is stopped, the connection might very well going on pushing deliveries in the session's queue. If the session is never re-started, these deliveries will never be popped out, and this may lead to a situation of consumed but never acknowledged messages.

This fatal situation never occurs as the stop() method is either called by he Session.close() and Connection.stop() methods, which first empties the session's deliveries and forbid any further push.


doStop

private void doStop()

prepareSend

private void prepareSend(Destination dest,
                         Message msg)
                  throws javax.jms.JMSException
Method called by message producers when producing a message for preparing the session to later commit it.

Parameters:
dest - The destination the message is destinated to.
msg - The message.
Throws:
javax.jms.JMSException

prepareAck

private void prepareAck(java.lang.String name,
                        java.lang.String id,
                        boolean queueMode)
Method called by message consumers when receiving a message for preparing the session to later acknowledge or deny it.

Parameters:
name - Name of the destination or of the proxy subscription the message comes from.
id - Identifier of the consumed message.
queueMode - true if the message consumed comes from a queue.

acknowledge

void acknowledge()
           throws javax.jms.JMSException
Method acknowledging the received messages. Called by Message.

Throws:
javax.jms.JMSException

doAcknowledge

private void doAcknowledge()
                    throws javax.jms.JMSException
Method acknowledging the received messages.

Throws:
javax.jms.JMSException

deny

private void deny()
           throws javax.jms.JMSException
Method denying the received messages. Called from: - rollback -> synchronized client thread - recover -> synchronized client thread - close -> synchronized client thread - onMessage -> not synchronized session daemon. It is the only thread that can run into the session (session mode = LISTENER) except for the method close that can be called concurrently. But close() first stops the session daemon and then calls deny(). The hashtable deliveries is also accessed from: - acknowledge -> synchronized client thread - commit -> synchronized client thread - receive -> synchronized client thread. - onMessage -> not synchronized session daemon (see above).

Throws:
javax.jms.JMSException

receive

javax.jms.Message receive(long requestTimeToLive,
                          long waitTimeOut,
                          MessageConsumer mc,
                          java.lang.String targetName,
                          java.lang.String selector,
                          boolean queueMode)
                    throws javax.jms.JMSException
Called by MessageConsumer. This method is not synchronized because it can be concurrently called by close() and Connection.stop().

Throws:
javax.jms.JMSException

preReceive

private void preReceive(MessageConsumer mc)
                 throws javax.jms.JMSException
First stage before calling the proxy and waiting for the reply. It is synchronized because it locks the session in order to prevent any other thread to make another operation.

Throws:
javax.jms.JMSException

postReceive

private void postReceive()
Final stage after calling the reply has been returned by the roxy. It releases the session and enables another thread to call it.


addConsumer

protected void addConsumer(MessageConsumer mc)
Called here and by sub-classes.


closeConsumer

void closeConsumer(MessageConsumer mc)
Called by MessageConsumer.


checkConsumers

void checkConsumers(java.lang.String agentId)
              throws javax.jms.JMSException
Called by Connection (i.e. temporary destinations deletion)

Throws:
javax.jms.JMSException

addProducer

protected void addProducer(MessageProducer mp)
Called here and by sub-classes.


closeProducer

void closeProducer(MessageProducer mp)
Called by MessageProducer.


closeBrowser

void closeBrowser(QueueBrowser qb)
Called by Queue browser.


addMessageListener

MessageConsumerListener addMessageListener(MessageConsumerListener mcl)
                                     throws javax.jms.JMSException
Called by MessageConsumer

Throws:
javax.jms.JMSException

removeMessageListener

void removeMessageListener(MessageConsumerListener mcl,
                           boolean check)
                     throws javax.jms.JMSException
Called by MessageConsumer. The thread of control and the status must be checked if the call results from a setMessageListener but not from a close.

Throws:
javax.jms.JMSException

pushMessages

void pushMessages(SingleSessionConsumer consumerListener,
                  ConsumerMessages messages)
Called by MessageConsumerListener (demultiplexer thread from RequestMultiplexer) in order to distribute messages to a message consumer. Not synchronized because a concurrent close can be done.

Throws:

onMessage

void onMessage(Message msg)
Called by ConnectionConsumer in order to distribute a message through the method run(). Session mode is APP_SERVER.


denyMessage

private void denyMessage(java.lang.String targetName,
                         java.lang.String msgId,
                         boolean queueMode)
                  throws javax.jms.JMSException
Called by: - method run (application server thread) synchronized - method onMessage (SessionDaemon thread) not synchronized but no concurrent call except a close which first stops SessionDaemon.

Throws:
javax.jms.JMSException

onMessages

private void onMessages(Session.MessageListenerContext ctx)
                 throws javax.jms.JMSException
Called by SessionDaemon. Not synchronized but no concurrent call except a close which first stops SessionDaemon.

Throws:
javax.jms.JMSException

onMessage

void onMessage(Message momMsg,
               MessageConsumerListener mcl)
         throws javax.jms.JMSException
Called by onMessages()

Throws:
javax.jms.JMSException

send

void send(Destination dest,
          javax.jms.Message msg,
          int deliveryMode,
          int priority,
          long timeToLive,
          boolean timestampDisabled)
    throws javax.jms.JMSException
Called by MessageProducer.

Throws:
javax.jms.JMSException

syncRequest

AbstractJmsReply syncRequest(AbstractJmsRequest request)
                       throws javax.jms.JMSException
Called by MessageConsumer. The requestor raises an exception if it is called during another request. This cannot happen as a session is monothreaded. A concurrent close first aborts the current request so it releases the requestor for a subsequent use.

Throws:
javax.jms.JMSException

getConnection

final Connection getConnection()

getId

final java.lang.String getId()

getRequestMultiplexer

final RequestMultiplexer getRequestMultiplexer()

isAutoAck

public final boolean isAutoAck()


Copyright © 2010 ScalAgent D.T.. All Rights Reserved.