В JMS API вводится концепция JMS-доменов, и определяются домены Точка-Точка и Публикация/Подписка. Эти JMS-домены просто представляют в среде Java модели обмена сообщениями, описанные в разделе 8.1.4 «Модели обмена сообщениями».
В JMS API также определяется набор специфичных для домена интерфейсов, которые позволяют клиентским приложениям посылать и принимать сообщения в данном домене. Однако в версии 1.1 спецификации JMS вводится набор доменно-независимых интерфейсов, называемых общими интерфейсами, для поддержки единой модели обмена сообщениями. Доменно-специфичные интерфейсы сохранены в версии 1.1 спецификации JMS для обратной совместимости.
Предпочтительным подходом при реализации клиентских JMS-приложений является использование общих интерфейсов. По этой причине в примерах кода JMS в данной главе используются общие интерфейсы.
Долгосрочные подписки в домене Публикация/Подписка
В JMS API также осознается необходимость иметь в домене Публикация/Подписка подписки на темы, срок хранения которых превышает время жизни Java-объектов, которые их представляют. В JMS API для выполнения этого требования вводится концепция долгосрочных подписок.
Говорят, что подписчик темы активен, когда существует представляющий его объект Java. То есть, он активен, когда выполняется клиентское JMS-приложение, в котором он определен. Если JMS-приложение не выполняется, говорят, что подписчик темы неактивен.
Недолгосрочные подписки длятся столько времени, сколько длится активность подписчика. Подписчик темы получает только те сообщения, которые опубликованы по данной теме за период, пока он активен. Когда подписчик темы неактивен, он не считается подписанным на тему и, следовательно, не получает никаких сообщений, опубликованных в теме.
С другой стороны, долгосрочные подписки продолжают существовать, когда подписчик темы неактивен. Если для долгосрочной подписки нет активных подписчиков, JMS-провайдер сохраняет все сообщения-публикации до тех пор, пока не истечет срок их хранения. В следующий раз, когда подписчик долгосрочной подписки становится активным, JMS-провайдер доставляет ему все сообщения, которые он хранит для данной долгосрочной подписки. Подписчик темы при создании долгосрочной подписки задает уникальный идентификатор. Последующие подписчики темы, которые укажут тот же уникальный идентификатор, продолжат работу с подпиской с того состояния, в котором ее оставил предыдущий подписчик.