What is the purpose of a JMS session? Why isn't a connection alone s开发者_如何学编程ufficient to exchange JMS messages between senders and receivers?
I had the same question and that's what lead me here. Quoting the Doc is not very helpful in this case, as I'm sure OP's question is not about how to use sessions, or what do they do, but why do they really exist, why not combine their capability with Connection. IMHO, this is a meta question.
Loosely speaking Sessions are essentially a thread's view into a Connection, Here is what the JMS spec has to say about the relation between a thread and a Session while accessing the later.
There are no restrictions on the number of threads that can use a session or any objects it creates. The restriction is that the resources of a session should not be used concurrently by multiple threads. It is up to the user to ensure that this concurrency restriction is met. The simplest way to do this is to use one thread. In the case of asynchronous delivery, use one thread for setup in stopped mode and then start asynchronous delivery. In more complex cases the user must provide explicit synchronization.
From the messaging point of view, they hold a logical unit of work. That's why the Transactions got coupled with the Sessions as well.
Having said that, quite often there will be 1:1 mapping between a connection and a Session. That's why I think JMSContext got introduced in 2.0. to simplify things.
Looking at the date of OP's post I think I am almost a decade late. :D
See java.sun.com
A Session 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.
A session serves several purposes:
- It is a factory for its message producers and consumers.
- It supplies provider-optimized message factories.
- It supports a single series of transactions that combine work spanning its producers and consumers into atomic units.
- It defines a serial order for the messages it consumes and the messages it produces.
- It retains messages it consumes until they have been acknowledged.
- It serializes execution of message listeners registered with its message consumers.
A session can create and service multiple message producers and consumers.
One typical use is to have a thread block on a synchronous MessageConsumer until a message arrives. The thread may then use one or more of the Session's MessageProducers.
精彩评论