Общий JMS-клиент

Кто-нибудь знает, возможно ли написать Generic JMS client, т.е. тот, который работает с JMS от разных поставщиков (например, Sonic, IBM SIB, Jboss и т. д.)?

Каждый раз, когда я пишу клиентский код JMS, он всегда очень специфичен для реализации с зависимыми JAR и классами контекста.

Спасибо.


person Damo    schedule 21.03.2010    source источник


Ответы (4)


Что ж, одна из лучших практик (по крайней мере, для меня) — использовать не-arg InitialContext конструктор и помещать специфичные для провайдера материалы (такие как начальная фабрика контекста и URL-адрес провайдера) в файл jndi.properties на пути к классу вместо жесткого кодирования этих вещей. Вам также необходимо поместить «правильные» JAR-файлы JMS-провайдера в путь к классам. Другими словами, вы можете иметь общий код, но вам все равно нужно настроить среду выполнения (если вы не запускаете свой клиентский код в контейнере, таком как Spring).

person Pascal Thivent    schedule 21.03.2010

Уже 2 хороших ответа, но я хотел бы добавить небольшое объяснение. JMS — это стандарт API, он не определяет проводной протокол к серверу. Поэтому все реализации JMS имеют разные проводные протоколы, поэтому вам всегда понадобятся JAR-файлы конкретного поставщика. Невозможно создать клиентскую библиотеку JMS, совместимую со всеми поставщиками JMS.
В исходном коде следует избегать функций, специфичных для поставщика (например, TIBCO EMS позволяет получать доступ к местам назначения с не-JNDI, собственными именами и имеет настраиваемые режимы подтверждения). Если вы всегда используете поиск JNDI, то только URL-адрес JNDI и имя фабрики начального контекста будут специфическими для типа сервера.

person Miklos Csuka    schedule 22.03.2010

Для этого и предназначен Spring. У вас будет конкретная реализация поставщика, но код должен быть таким же. См. 19.6 JMS и 21. JMS (служба сообщений Java) из Справочник по Spring 3.0.

person cletus    schedule 21.03.2010

Для тех, кто в будущем ищет универсальный клиент, попробуйте HermesJMS, который поставляется с подключаемыми модулями для основных поставщиков JMS (ActiveMQ , WebSphere MQ и т. д.)

person Damo    schedule 05.01.2011