Статьи

Подключите Glassfish 3 к внешнему брокеру ActiveMQ 5

Введение

Здесь, в 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 Гирта Шуринга в блоге