Универсальный клиент JMS

Кто-либо знает, выполнимо ли записать Универсальному клиенту JMS - т.е. тот, который работает с JMS от различных поставщиков (например, Звуковой, РОДСТВО IBM, Jboss и т.д.)?

Каждый раз, когда я написал клиентский код JMS, это - всегда очень реализация, конкретная с зависимыми БАНКАМИ и классами Контекста.

Спасибо.

5
задан Damo 21 March 2010 в 23:22
поделиться

3 ответа

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

9
ответ дан 18 December 2019 в 06:49
поделиться

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

6
ответ дан 18 December 2019 в 06:49
поделиться

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

4
ответ дан 18 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: