Здесь, в ONVZ, мы используем Glassfish 3 в качестве сервера для разработки и производства приложений, и мы очень довольны его производительностью и стабильностью, а также большим сообществом, окружающим его. Я редко сталкиваюсь с проблемой, у которой нет подходящего решения на stackoverflow или java.net. В рамках нашей стратегии с открытым исходным кодом мы также запускаем настроенный кластер ActiveMQ под названием «Шина сообщений ONVZ».
Чтобы разрешить компонентам, управляемым сообщениями, и другим EJB-компонентам принимать и создавать сообщения для брокеров сообщений ActiveMQ и от них, игнорируя внутреннего брокера OpenMQ, поставляемого в комплекте с Glassfish, необходимо установить адаптер ресурсов ActiveMQ. К счастью для меня, Свен Хафнер написал сообщение в блоге о запуске встроенного брокера ActiveMQ 5 в Glassfish 3 , и я смог получить информацию, необходимую для подключения к внешнему брокеру . Этот пост описывает, что я сделал, чтобы заставить его работать.
Установите адаптер ресурсов ActiveMQ
- Перед запуском Glassfish скопируйте следующие библиотеки из установочного каталога ActiveMQ или в другое место в Glassfish
- Скопируйте «slf4j-api-1.5.11.jar» из каталога «lib» ActiveMQ в каталог «lib» Glassfish
- Скопируйте «slf4j-log4j12-1.5.11.jar» и «log4j-1.2.14.jar» из каталога « lib / option» ActiveMQ в каталог «lib» Glassfish. Примечание: вместо этих двух вы также можете загрузить «slf4j-jdk14-1.5.11.jar» из репозитория maven в каталог «lib» Glassfish.
- Загрузите адаптер ресурсов (activemq-rar-5.5.1.rar) из следующего расположения
- Разверните адаптер ресурсов в Glassfish
- В консоли администратора Glassfish перейдите в «Приложения» и нажмите «Развернуть»
- Нажмите «Выбрать файл» и выберите rar-файл, который вы только что скачали.
- Обратите внимание, как страница распознала выбранный rar-файл и автоматически выбрала правильный тип и имя приложения и, наконец, нажмите «Ok».
- Создайте конфигурацию адаптера ресурса
- В консоли администратора Glassfish перейдите в раздел «Ресурсы» и нажмите «Конфигурации адаптера ресурса»
- Нажмите «Создать» , выберите адаптер ресурсов ActiveMQ, который мы только что отложили, и выберите пул потоков. (Например, «thread-pool-1?»)
- Установите свойства «ServerUrl», «UserName» и «Password» , оставьте остальные нетронутыми и нажмите «OK» .
- Создайте пул соединителей
- В консоли администратора Glassfish перейдите к разделу «Ресурсы», «Соединители», «Пулы соединительных соединений».
- Нажмите «Создать», введите имя пула, например «jms / connectionFactory», и выберите адаптер ресурсов ActiveMQ. Определение соединения по умолчанию будет «javax.jms.ConnectionFactory», что является правильным, поэтому нажмите «Далее».
- Установите флажок «Пинг» и нажмите «Готово» .
- Создайте ресурс администратора объекта
- В консоли администратора Glassfish перейдите к разделу «Ресурсы», «Соединители», «Ресурсы объектов администратора»
- Нажмите «Создать», установите имя JNDI, например «jms / queue / входящий», и выберите адаптер ресурсов ActiveMQ.
- Опять же, другие поля не нужно менять, поэтому нажмите «ОК»
Теперь у нас есть все (на самом деле в JNDI), чтобы начать обработку сообщений с использованием стандартного Java EE Message Driven Bean. «Пул соединений Connector», который вы только что создали, привел к регистрации ConnectionFactory в JNDI, а «Ресурс объекта администратора» привел к назначению JMS. Вы можете найти эти объекты в консоли администратора, перейдя в «Ресурсы», «Ресурсы JMS». В версии Glassfish, которую я использую (3.1.1), в консоли администратора есть ошибка, из-за которой фабрика соединений и пункты назначения отображаются только в меню, а не в правой части страницы.
Создание и развертывание компонента, управляемого сообщениями
- Создайте новый проект Java Enterprise в вашей любимой среде IDE и создайте компонент, управляемый сообщениями, со следующим содержимым:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
package com.example.activemq.glassfish; import javax.ejb.*; import javax.jms.*; @MessageDriven ( activationConfig = { @ActivationConfigProperty (propertyName = 'destinationType' , propertyValue = 'javax.jms.Queue' ), @ActivationConfigProperty (propertyName = 'destination' , propertyValue = 'jms/queue/incoming' ) } ) public class ExampleMessageBean implements MessageListener { public void onMessage(Message message) { try { System.out.println( 'We' ve received a message: ' + message.getJMSMessageID()); } catch (JMSException e) { e.printStackTrace(); } } } |
Glassfish подключит ваш бин к настроенной очереди, но попытается сделать это с помощью ConnectionFactory по умолчанию, которая подключается к встроенному брокеру OpenMQ. Это не то, что мы хотим, поэтому мы проинструктируем Glassfish, какой ConnectionFactory использовать.
- Добавьте файл с именем glassfish-ejb-jar.xml в папку META-INF и вставьте следующее содержимое:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
<? xml version = '1.0' encoding = 'UTF-8' ?> <! DOCTYPE glassfish-ejb-jar PUBLIC '-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN' 'http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd'> < glassfish-ejb-jar > < enterprise-beans > < ejb > < ejb-name >ExampleMessageBean</ ejb-name > < mdb-connection-factory > < jndi-name >jms/connectionFactory</ jndi-name > </ mdb-connection-factory > < mdb-resource-adapter > < resource-adapter-mid >activemq-rar-5.5.1</ resource-adapter-mid > </ mdb-resource-adapter > </ ejb > </ enterprise-beans > </ glassfish-ejb-jar > |
- Развернуть MDB на Glassfish
Glassfish теперь использует ActiveMQ ConnectionFactory, и все хорошо. Используйте веб-консоль ActiveMQ для отправки сообщения в очередь с именем «jms / queue /coming» или используйте другой инструмент для отправки сообщения. Glassfish перехватывает все операторы sysout и печатает их в файле журнала Glassfish по умолчанию.
Ссылка: Как подключить Glassfish 3 к внешнему брокеру ActiveMQ 5 от нашего партнера JCG Гирта Шуринга в блоге