Фабрики соединений JMS

Фабрика соединений является объектом, который клиент JMS (программа JMS, использующая JMS API) использует для создания соединения с провайдером JNDI (провайдером обмена сообщениями, например, IBM® MQ).

С помощью IBM MQ Explorer можно создать фабрики соединений и задать параметры соединений, используемые фабрикой соединений для создания соединений.

Фабрики соединений, такие как целевые объекты, являются администрируемыми объектами и хранятся в пространстве имен JNDI, являющемся заданным расположением для службы каталогов и присвоения имен. Исходный контекст задает корневой объект пространства имен JNDI. В IBM MQ Explorer все фабрики соединений хранятся в папках фабрик соединений в соответствующем контексте и вложенном контексте, как показано на следующем рисунке.

На рисунке фабрика соединений Фабрика соединений 1 хранится в папке фабрики соединений исходного контекста с именем Исходный контекст файловой системы.

Изображение фабрики соединений в папке Фабрики соединений.

При определении фабрики соединений выберите провайдера обмена сообщениями, используемого как провайдер JMS (например, IBM MQ или Real-time); фабрика соединений может создать только соединения с провайдером обмена сообщениями. Для того чтобы клиент JMS создал соединения с другим провайдером обмена сообщениями, следует создать новую фабрику соединений и указать провайдера обмена сообщениями. Транспорт реального времени недоступен в IBM MQ 8.0. В случае применения IBM MQ 8.0 можно указать транспорт реального времени, однако он не сможет создать соединение.

Зависимые от домена фабрики соединений

Есть два домена обмена сообщениями: домен двухточечного обмена сообщениями и домен обмена сообщениями подписки/публикации. Можно создать фабрику соединений для создания соединений специально для двухточечного обмена сообщениями (с помощью интерфейса QueueConnectionFactory) или для обмена сообщениями публикации/подписки (с помощью интерфейса TopicConnectionFactory). Из JNDI можно также создать фабрики соединений, независимые от доменов, которые можно использовать как для двухточечного обмена сообщениями, так и для обмена сообщениями типа публикация/подписка (с помощью интерфейса ConnectionFactory). Для получения дополнительной информации см. Создание фабрики соединений.

Если приложение JMS предназначается для использования только для двухточечного обмена сообщениями или только для обмена сообщениями публикация/подписка, при создании фабрики соединений создается фабрика соединений для определенного домена.

Однако, если требуется выполнить задачу двухточечного обмена сообщениями и обмена сообщениями публикации/подписки за одну транзакцию, можно создать независимую от домена фабрику соединений. Например, если требуется подписка приложения JMS на тему (обмен сообщениями публикация/подписка), то тогда при получении приложением JMS определенного сообщения, оно отправляет другое сообщение в очередь (двухточечный обмен сообщениями). Довольно сложно надежно выполнять одновременно задачи двухточечного обмена сообщениями и обмена сообщениями подписка/публикация в одной транзакции при использовании фабрик соединений для определенных доменов: для этого следует создать отдельную фабрику соединений для каждого домена обмена сообщениями, что означает, что двухточечная работа выполняется в транзакции контролируемой сеансом QueueSession, а задача публикации/подписки выполняется в транзакции, управляемой сеансом TopicSession. Сложно гарантировать, что операции отправки и приема были обе выполнены или отклонены.

Вместо создания одной фабрики для определенного домена для двухточечного обмена и фабрики соединения специального домена для обмена сообщениями типа публикация/подписка, можно создать независимую от доменов фабрику соединений для них обоих. Это означает, что фабрика соединений создает одно соединение, создающее один сеанс. Сеанс создает MessageConsumer из темы и MessageProducer для темы. Когда приложение JMS получает опубликованное сообщение, следующее сообщение может быть отправлено в очередь в той же транзакции сеанса, обе операции можно зафиксировать или откатить назад как одиночное задание.

См. раздел Применение классов IBM MQ для JMS в IBM Knowledge Center.