#jakarta-ee #jms #ejb #java-ee-5
#jakarta-ee #jms #ejb #java-ee-5
Вопрос:
Я читаю руководство JEE5 по JMS.
И мне трудно понять причину этого «общего правила«:
Общее правило в спецификации платформы Java EE применяется ко всем компонентам Java EE, которые используют JMS API в EJB или веб-контейнерах:
Компоненты приложения в контейнерах web и EJB не должны пытаться создать более одного активного (не закрытого) объекта сеанса для каждого соединения.
Это правило не применяется к клиентам приложений.
Почему это не применяется к клиентам приложений, а применяется к веб-компонентам / EJB.?
Ответ №1:
Существует довольно много правил, касающихся JMS, которые отличаются при использовании его из автономного клиента и из среды Java EE. Единственное, что приходит на ум, — это возможность создания прослушивателя JMS.
И старая (но все еще актуальная цитата из спецификации 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 не разрешено создавать несколько сеансов для каждого соединения, поскольку эти соединения управляются, и таким образом их трудно разделить. Но, надеюсь, кто-нибудь сможет дать более определенный ответ.
Обратите внимание, что новая версия JMS 2.0 для Java EE 7 имеет лучшее и более четкое соответствие между базовой спецификацией JMS и Java EE в качестве одной из своих целей. Смотрите здесь: http://jcp.org/en/jsr/detail?id=343