Клиент приложения JMS может создавать более одного активного сеанса, в то время как компоненты web / ejb не могут? - PullRequest
3 голосов
/ 14 апреля 2011

Я читаю учебник JEE5 для JMS .

И мне трудно понять причину этого ' общего правила ':

Общее правило в спецификации платформы Java EE применяется ко всем компонентам Java EE, которые используют JMS API в EJB или веб-контейнерах:

Компоненты приложения в сети и контейнеры EJB не должны пытатьсясоздать более одного активного (не закрытого) объекта сеанса для одного подключения.

Это правило не применяется к клиентам приложений.

Почему это не относится к приложениям-клиентам и относится к компонентам web / EJB .?

1 Ответ

2 голосов
/ 15 апреля 2011

Существует множество правил, касающихся JMS, которые отличаются при использовании его от автономного клиента и от среды Java EE. Одна вещь, которая приходит на ум, - это возможность создать JMS Listener.

И старая (но все еще актуальная цитата из спецификации 1.3):

... Note that the JMS API creates threads to deliver messages to 
message listeners. The use of this message listener facility may be 
limited by the restrictions on the use of threads in various 
containers. In EJB containers, for instance, it is typically not 
possible to create threads. The following methods must not be used by 
application components executing in containers that prevent them 
from creating threads: 
. 
- javax.jms.Session method setMessageListener 
- javax.jms.Session method getMessageListener 
- javax.jms.Session method run 
- javax.jms.QueueConnection method createConnectionConsumer 
- javax.jms.TopicConnection method createConnectionConsumer 
- javax.jms.TopicConnection method createDurableConnectionConsumer 
- javax.jms.MessageConsumer method getMessageListener 
- javax.jms.MessageConsumer method setMessageListener 
. 
In addition, use of the following methods on javax.jms.Connection
objects by applications in Web and EJB containers may interfere with the
connection management functions of the container and must not be used:
- setExceptionListener 
- stop
- setClientID 
A J2EE container may throw a JMSException if the application component 
violates these restrictions. ....

Полагаю, что нельзя создавать несколько сеансов для одного соединения в среде Java EE, поскольку эти соединения управляются, и таким образом их трудно разделить. Но, надеюсь, кто-то может дать более определенный ответ.

Обратите внимание, что новая версия 2.0 JMS для Java EE 7 имеет лучшее и более четкое согласование между базовой спецификацией JMS и Java EE как одной из ее целей. Смотрите здесь: http://jcp.org/en/jsr/detail?id=343

...