Статьи

Интеграция приложений JMS на основе Flex и Spring

В этой статье объясняются основы использования проекта Spring BlazeDS для интеграции систем JMS на основе Spring с многофункциональными интернет-приложениями (RIA) на базе Flex. Объясняются основные понятия, связанные с интеграцией Spring и Flex, и иллюстрируется роль проекта Spring BlazeDS и его механика. В дополнение к теоретическому объяснению, включен простой пример, чтобы показать, как такой стек может быть настроен и использован.

Spring — это популярный корпоративный Java-фреймворк с открытым исходным кодом для создания надежных и масштабируемых приложений, тогда как Adobe Flex — это фреймворк с открытым исходным кодом для создания многофункциональных и привлекательных интерфейсов. Adobe BlazeDS — это приложение с открытым исходным кодом, которое позволяет приложениям Flex подключаться к приложениям на стороне сервера Java с помощью удаленных вызовов процедур и обмена сообщениями. 

Приложения Flex могут соединяться со сторонами Spring, используя любой из следующих четырех механизмов:

• HTTP-запросы и ответы
• Веб-службы
• Удаленные вызовы процедур
• Обмен сообщениями

Первые два из четырех перечисленных выше вариантов, а именно запросы и ответы на основе HTTP и веб-службы, не зависят от технологии на стороне сервера, поэтому интеграция Flex и Spring с использованием этих методов не требует особых соображений, помимо стандартной поддержки HTTP и протокол веб-сервисов и доступность данных через эти конечные точки. Обычно текстовые обмены полезной нагрузки, особенно XML, распространены, когда используются HTTP-сервисы и веб-сервисы. При использовании службы HTTP или веб-службы BlazeDS или любой такой посредник не требуется, если только ограничения безопасности не позволяют вам получать данные из удаленных источников. Учитывая, что актуальность BlazeDS ограничена при использовании этих двух методов, я не буду обсуждать использование этих методов далее в этой статье.

Для удаленных вызовов процедур для объектов на стороне сервера и обмена сообщениями, BlazeDS и аналогичные промежуточные продукты играют важную роль. Эти типы взаимодействий и, в частности, обмен сообщениями основаны на этой статье.

До существования проекта Spring BlazeDS, поддерживаемый Adobe проект SpringSource, использующий BlazeDS для соединения с Java-серверами на основе Spring, использовал пользовательскую фабрику для доступа к Spring Beans. Это связано с тем, что Spring Beans и объекты, создаваемые стандартным BlazeDS, находятся в отдельных пространствах имен. Нужно было не только создать собственную фабрику, но и нельзя было использовать конфигурацию в стиле Spring для соединения артефактов BlazeDS. Чтобы настроить его, нужно было использовать определенные XML-конфигурации BlazeDS. Благодаря интеграции Spring BlazeDS большая часть утомительной связи между Spring и BlazeDS была уменьшена до простой унифицированной конфигурации и первоклассной поддержки Spring Beans как удаленных пунктов назначения. Кроме того, связанные с Spring сообщениями вкусности, такие как JMSTemplate и управляемые сообщениями POJO,Безопасность Spring и остальные его компоненты инфраструктуры становятся доступными в качестве серверных аналогов для приложений Flex.

В следующих нескольких разделах я объясню, как можно использовать Spring BlazeDS для интеграции систем JMS на основе Flex и Spring. По мере того, как я это делаю, я предполагаю, что вы обладаете необходимыми знаниями о среде Spring, среде Flex и даже BlazeDS. Если эти предположения не верны для вас, вам может быть полезно освоиться с основами Spring, Flex и BlazeDS, прежде чем продолжить. Таким образом, вы получите максимальную отдачу от этой статьи.

Вот несколько рекомендованных ресурсов для быстрого получения знаний об основах Spring (особенно разработки веб-приложений на основе Spring MVC), Flex и BlazeDS:

Загрузка и настройка программного стека

Чтобы начать загрузку, установите и настройте все следующие необходимые компоненты программного обеспечения:

  • Java 5+
  • ActiveMQ 5.x (или любой другой поставщик JMS)
  • JBoss AS 5.x (или любой другой сервер приложений, который содержит контейнер сервлетов и может размещаться или интегрироваться с поставщиком JMS)
  • Spring Framework 2.5+
  • Затмение 3.4 +
  • Adobe Flex 3.x (предпочтительно Flex Builder, который теперь называется Flash Builder, но как минимум Flex SDK. Используйте версию плагина Eclipse вместо автономной версии)
  • Spring BlazeDS Версия 1.0.0. Выпуск   (также известный как Spring-flex)

Список программного обеспечения для установки длинный, но я предполагаю, что некоторые из них уже установлены. Как минимум, я предполагаю, что JDK будет установлен на вашем компьютере. Если нет, то это первое программное обеспечение, которое вам нужно получить.

После установки Java загрузите ActiveMQ, JBoss AS, Spring Framework, Eclispe, плагин Flex Builder Eclipse и дистрибутив Spring-flex. Перейдите по URL-адресу, указанному напротив названия программного обеспечения, в списке выше, чтобы перейти на конкретный веб-сайт. В каждом из случаев вы легко сможете найти ссылку для загрузки последней версии сборки для конкретного программного обеспечения. Все части программного обеспечения в списке, кроме плагина Flex Builder Eclipse, имеют открытый исходный код. Вы можете получить 60-дневную пробную версию плагина Flex Builder Eclipse, если решите ознакомиться с инструментом до того, как планируете его приобрести. Предпочтительные версии инструментов перечислены против их соответствующих имен. Рекомендуется придерживаться этих версий, чтобы избежать дополнительных сложностей конфигурации и интеграции.

Процедура установки и настройки каждого из этих компонентов программного обеспечения выходит за рамки этой статьи, но вы найдете достаточно ресурсов в Интернете, чтобы помочь вам в этом отношении. Здесь я укажу только несколько важных шагов установки и детали конфигурации. Вам придется собрать все остальное вместе, хотя я не ожидаю, что у вас будут большие проблемы с этим.

После того, как у вас установлены и установлены JBoss AS и ActiveMQ, что на большинстве платформ означает расширение файла архива в папку, вам следует потратить немного времени на настройку этих двух компонентов для совместной работы. Большой ресурс, который объясняет фундаментальные нюансы интеграции JBoss AS и ActiveMQ в пошаговой манере, доступен по адресу http://activemq.apache.org/integrating-apache-activemq-with-jboss.html., Объяснение для версии 4.x ActiveMQ, но это относится и к версии 5.x Единственный шаг, пропущенный в этом документе, — это включение файла JAR ядра основной пружины в папку activemq-ra.rar, которая находится в папке «deploy» JBoss AS. Если это утверждение сейчас не имеет особого смысла, следуйте пошаговым инструкциям для интеграции JBoss AS и ActiveMQ, а затем добавьте JAR-файл Spring Framework в качестве шага, прежде чем запускать тесты, чтобы подтвердить, что интегрированная установка.

Следующим шагом должна стать настройка IDE, а именно Eclispe и подключаемого модуля Flex Builder. Eclipse можно установить, просто расширив дистрибутив архива. Плагин Flex Builder устанавливается с помощью пошагового мастера. Если вы решили использовать Flex Builder 3.x, используйте Eclispe 3.4. В Flash Builder 4 Beta (новая версия Flex Builder) вы можете использовать Eclispe 3.4 или 3.5.

Наконец, загрузите дистрибутивы Spring Framework и Spring Flex и разверните загруженный архивный файл в папку в вашей файловой системе. Вам потребуется несколько JAR-файлов из этих дистрибутивов, чтобы Flex работал с Spring JMS.

Основная конфигурация Spring-Flex для обмена сообщениями

В этом разделе вы узнаете основы конфигурации Spring-Flex, особенно те, которые касаются взаимодействия между ними на основе сообщений. Чтобы сохранить жизнь и контекст, я воспользуюсь помощью простого примера приложения, которое вы можете создать, читая этот и следующие разделы.

В качестве первого шага откройте Flex Builder (теперь он называется Flash Builder) и создайте новый проект Flex. Выберите серверную часть Java EE (J2EE) и решите создать комбинированный проект Java / Flex с использованием Web Tools Platform (WTP). У вас будет возможность использовать WTP, только если у вас установлен соответствующий плагин Eclipse. Я называю свой проект «FlexSpringJMSExample». Вы можете использовать то же имя или любое другое, которое вам нравится. Ваш экран должен выглядеть как на рисунке 1.
 

Как только вы нажмете «далее», мастер создания проекта Flex Builder откроет вам следующий экран, на котором вам будет необходимо предоставить следующую информацию:

  • Целевая среда выполнения — сервер приложений, на котором будет развернуто приложение. В моем случае локальный экземпляр JBoss настроен. Если вы еще не настроили его, нажмите кнопку «Создать» рядом с этим полем формы и следуйте инструкциям, чтобы создать его.
  • Корень контекста — «Корень контекста» веб-приложения определяет, какие URL-адреса обрабатываются вашим веб-приложением. Это корень вашего веб-приложения.
  • Папка контекста — папка, в которой находится весь веб-контент.
  • Flex WAR file — старые имена иногда остаются слишком длинными! LifeCycle Data Services (LCDS) и его экстракт с открытым исходным кодом BlazeDS появились из более раннего продукта Adobe под названием Flex Data Services, который был упакован под названием flex.war. Это поле формы ожидает, что вы укажете на файл blazeds.war в вашей файловой системе.
  • Параметры компиляции — у вас есть выбор компилировать локально, который я бы порекомендовал для разработки, или компилировать на сервере.
  • Папка вывода — папка, в которой вы хотите разместить скомпилированный вывод Flex вашего приложения.

Посмотрите на рисунок 2, чтобы увидеть, как выглядит соответствующий экран для меня.

Нажав «Далее» на этом втором экране, вы попадете на последний и последний экран мастера создания проекта Flex Builder. На последнем экране вам необходимо указать следующее:

  • Основная исходная папка — обычно в большинстве случаев достаточно значения по умолчанию flex_src.
  • Основной файл приложения. Это имя основного файла приложения Flex. Обычно значение по умолчанию совпадает с именем приложения с добавлением «.mxml». Мне нравится держать его маленьким и простым и придерживаться соглашения называть его main.mxml.
  • URL выходной папки — URL для доступа к приложению. По умолчанию работает в этом случае.

После того, как вы нажмете «Готово» на этом экране, проект Flex / Java с необходимой начальной настройкой будет настроен. Структура папки проекта, если смотреть в перспективе «Разработка Flex», должна быть такой, как показано на рисунке 3.

До сих пор создание и настройка проекта демонстрировали поведение по умолчанию и не включали ничего специфического для Spring или проекта Spring Flex.

Изменение конфигурации для интеграции Spring Flex

Первый файл, который вы хотите изменить, это web.xml, который находится в папке WebContent / WEB-INF / вашего проекта. Файл web.xml — это файл, с которым знакомы веб-разработчики Java. Если вы не являетесь веб-разработчиком на Java, позвольте мне в одном утверждении попытаться объяснить, что делает этот файл. Файл web.xml является важным элементом конфигурации, часто называемым дескриптором развертывания, который определяет, как веб-приложение должно быть развернуто в контейнере сервлета. Когда вы создаете проект Flex со стороной сервера Java EE (J2EE), подключенной через LCDS или BlazeDS, для вас создается файл web.xml по умолчанию. Чтобы ваше приложение работало с Spring, вам нужно изменить этот файл. Новые записи в файле должны быть такими, как показано в листинге 1.

Листинг 1: web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">

<display-name>Spring Flex Remoting Example</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/web-application-config.xml
/WEB-INF/config/web-application-security.xml
</param-value>
</context-param>

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<servlet>
<servlet-name>springflex</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>springflex</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>

<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>main.html</welcome-file>
</welcome-file-list>

</web-app>

 Существенные конфигурации в перечисленном web.xml:

  • Spring MVC DispatcherServlet настроен. DispatcherServlet действует как фронт-контроллер, который отправляет входящие запросы командам. DispatcherServlet в Spring BlazeDS отправляет все соответствующие запросы в BlazeDS MessageBroker.
  • Все запросы, которые включают «/ messagebroker /» в URL, обрабатываются DispatcherServlet
  • Загрузчик контекста загружает пару файлов конфигурации в папку / WEB-INF / config. Они настраивают веб-приложение Spring
  • И index.html, и main.html рассматриваются как отправная точка, если в качестве части URL не указан явный html-файл. Возможно, вы помните, что я назвал основное приложение своих приложений Flex как main.mxml. Html-temnplate генерирует соответствующий файл main.html, который оборачивает в него приложение Flex. Поэтому, указав в браузере http: // localhost: 8080 / FlexSpringJMSExample , загрузится приложение Flex.

В приложениях Spring MVC каждый сервлет с именем «servlet-name» имеет соответствующий файл конфигурации с именем «servlet-name-servlet.xml» в своей папке WEB-INF. Это соглашение. Однако, как и в примере, вы можете не помещать никакую конфигурацию в этот файл и сохранять его довольно пустым, за исключением определений XSD.
Основная конфигурация Spring и Spring BlazeDS для примера приложения находится в /WEB-INF/config/web-application-config.xml. XML-файлы BlazeDS остаются в дополнение к этой конфигурации. Значения в BlazeDS services-config.xml и включенных в него XML-файлах оставлены для записей по умолчанию.

В листинге 2 показано содержимое файла web-application-config.xml. Этот файл содержит определение bean-компонентов Spring для создания и настройки следующего:

  • BlazeDS MessageBroker загружается контейнером Spring. Применяется конфигурация по умолчанию, поэтому только пара строк выполняет эту работу.
  • Подключение к брокеру ActiveMQ, который был настроен с JBoss AS
  • JMS тема для обмена сообщениями
  • Назначение Spring Flex JMS для определенной темы JMS, позволяющее взаимодействовать между Flex и объектами JMS на стороне сервера

 Листинг 2: web-application-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:flex="http://www.springframework.org/schema/flex"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/flex
http://www.springframework.org/schema/flex/spring-flex-1.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-2.0.4.xsd">

<!-- Embedded ActiveMQ broker-->
<bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp:(broker:(tcp://localhost:61616)?persistent=false)?marshal=false"/>
</bean>

<!-- JMS Topic -->
<bean id="jmsTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="sampletopic.inbound"/>
</bean>

<flex:message-broker>
<flex:secured />
</flex:message-broker>

<flex:jms-message-destination id="jmsMsgDestination" jms-destination="jmsTopic" />

</beans>

 Вот и все! Еще несколько деталей конфигурации обсуждаются в разделе «Интеграция службы сообщений», далее в этой статье.

После того, как все настройки выполнены, есть еще один шаг, прежде чем вы будете готовы обмениваться некоторыми сообщениями, используя эту настройку. Пропущенный шаг — скопировать все файлы JAR, связанные с Spring и Spring Flex, чтобы обеспечить работу всей конфигурации на основе bean-компонентов.

Копирование файлов Spring и Spring Flex JAR

Следующие файлы в WEB-INF / lib являются частью обычного дистрибутива BlazeDS:

  • портировать-Util-concurrent.jar
  • cfgatewayadapter.jar
  • Обще-кодек-1.3.jar
  • Обще-HttpClient-3.0.1.jar
  • Обще-logging.jar
  • concurrent.jar
  • Flex-сообщения-common.jar
  • Flex-сообщения-core.jar
  • Flex-сообщения-opt.jar
  • Flex-сообщения-proxy.jar
  • Flex-сообщения-remoting.jar
  • xalan.jar

В дополнение к этому, добавьте как минимум следующие файлы JAR в папку WEB-INF / lib:

  • весенне-каркасного 2.5.6.SEC01 / расстояние / spring.jar
  • весна-флекс-1.0.0.RELEASE / расстояние / org.springframework.flex-1.0.0.RELEASE.jar

Для плавного и быстрого запуска я также рекомендую добавить все файлы JAR зависимых пружинных модулей. Без всех зависимостей ваше приложение не будет развертываться и работать. Альтернативой массовому импорту всех файлов JAR зависимостей Spring является выборочная идентификация необходимых зависимостей и их добавление. В некоторых случаях зависимости неочевидны, и вы поймете, что требуется, только при развертывании приложения на сервере приложений (в в моем случае JBoss) и сервер приложений жалуется на отсутствующие файлы.

После завершения настройки и настройки вы готовы обмениваться несколькими сообщениями между серверными элементами Flex и JMS с помощью вашей новой инфраструктуры.

Простой обмен сообщениями

Чтобы обмениваться сообщениями с помощью нашей новой установки, я создам простую автономную программу на стороне сервера Java и клиент на основе Flex. Программа на Java отправит простые сообщения в тему JMS, а клиент Flex подпишется на ту же тему. Поэтому сообщения будут передаваться из автономной программы в приложение Flex.

Сообщения могут отправляться любым способом, а программы Java, которые выступают в роли производителей и потребителей сообщений JMS, могут полностью управляться Spring, но для простоты я остановлюсь на односторонней связи от автономного производителя Java до потребителя Flex. По пути перехват и передача включаются BlazeDS, который управляется и настраивается с помощью Spring.

Клиент Flex включает в себя простого потребителя сообщений и добавляет все входящие сообщения в простое TextArea. Код для клиента Flex показан в листинге 3.

Листинг 3: Простой Flex JMS-потребитель

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
applicationComplete="consumer.subscribe()">

<mx:Script>
<![CDATA[

import mx.messaging.messages.IMessage;

private function messageHandler(message:IMessage):void
{
messageLog.text += message.body + "\n";
}

]]>
</mx:Script>

<mx:ChannelSet id="channelSet">
<mx:AMFChannel url="http://localhost:8080/messagebroker/amflongpolling"/>
<mx:AMFChannel url="http://localhost:8080/messagebroker/amfpolling"/>
</mx:ChannelSet>

<mx:Consumer id="consumer" destination="jmsMsgDestination" channelSet="{channelSet}" message="messageHandler(event.message)"/>

<mx:Panel title="JMS Consumer" width="100%" height="100%">
<mx:TextArea id="messagelog" width="100%" height="100%"/>
</mx:Panel>

</mx:Application>

 

Производитель JMS одинаково прост. Он подключается к той же теме JMS, что и потребитель, и отправляет простые текстовые сообщения. В нашем случае JMS-провайдер — ActiveMQ. Включите activemq-all-5.2.0.jar в путь к классам вашей отдельной Java-программы, чтобы сделать классы JMS и ActiveMQ доступными для него.

 Листинг 4: TopicProducer.java

package com.treasuryofideas;

import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.TextMessage;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.Topic;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQMapMessage;


public class TopicProducer {

private final String url = "tcp://localhost:61616";

    private Connection connection;

    private Session session;

    private Topic topic;

    private MessageProducer producer;
/**
* @param args
*/
public static void main(String[] args) {
new TopicProducer();
// TODO Auto-generated method stub
}

public TopicProducer() {
try {

            ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(this.url);
            this.connection = factory.createConnection();
            this.session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            this.topic = this.session.createTopic("sampletopic.inbound");

            this.producer = this.session.createProducer(this.topic);
            this.producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
            this.connection.start();
            
            for(int i=0; i<1000; i++) {
            
             TextMessage textMessage = this.session.createTextMessage("test message");
                MapMessage message = this.session.createMapMessage();
                message.setString("userId", "user");
                message.setString("chatMessage", "passoword");
                this.producer.send(message);
                this.producer.send(textMessage);
            
                System.out.println("Message sent" + i);

            }

        } catch (JMSException e) {
            e.printStackTrace();
        }
       
}
}

Для запуска вашего примера сначала разверните приложение Flex Spring BlazeDS и получите доступ к клиенту Flex, а затем запустите JMS-производитель. Эта последовательность необходима, поскольку клиент Flex настраивается в качестве потребителя только для события creationComplete приложения.

Хотя этот пример является элементарным, он ясно показывает, как просто и легко Spring BlazeDS обеспечивает взаимодействие JMS между Flex и Spring. В следующем разделе краткий обзор интеграции службы сообщений предоставляет дополнительные сведения о том, как можно эффективно установить обмен сообщениями между Flex и приложением на основе Spring.

Интеграция службы сообщений

Spring BlazeDS определяет следующие три компонента службы сообщений на стороне сервера:

  • Встроенная система обмена сообщениями BlazeDS AMF
  • Обмен сообщениями JMS с использованием специфичных для Spring компонентов JMS
  • Интеграция обмена сообщениями Spring BlazeDS

Инфраструктура обмена сообщениями в среде Flex накладывает небольшие ограничения на протокол обмена сообщениями или домен обмена сообщениями на стороне сервера. Поэтому можно использовать несколько типов служб обмена сообщениями, как перечислено выше. Давайте еще немного рассмотрим три типа компонентов службы сообщений, чтобы понять, что они привносят в таблицу.

Встроенная система обмена сообщениями BlazeDS AMF

BlazeDS поддерживает ActionScriptAdapter для простой маршрутизации сообщений между двумя или более клиентами Flex. Связь между двумя или более клиентами Flex происходит через серверное место назначения. Этот адаптер обмена сообщениями ограничен в своей функциональности. Основой адаптера обмена сообщениями являются два метода, которые помогают направлять сообщения. Эти два метода:

  • pushMessageToClients — доставляет сообщения всем клиентам, подключенным к серверу
  • sendPushMessageFromPeer — доставляет сообщения на одноранговые серверы в кластере, которые, в свою очередь, доставляют сообщение подключенным клиентам

Чтобы использовать этот адаптер, вы обычно настраиваете назначение на стороне сервера и назначаете ActionScriptAdapter в качестве используемого адаптера. Кроме того, вы также должны настроить канал обмена сообщениями, возможно, опросный канал AMF. В стандартном BlazeDS такая конфигурация находится в конфигурационном файле messaging-config.xml. Файл messaging-config.xml включен в файл services-config.xml по ссылке.

В Spring BlazeDS такой адаптер обмена сообщениями сконфигурирован только с несколькими строками конфигурации следующим образом:

<flex:message-destination 
id="myTopic"
message-broker="messageServiceBroker"
channels="my-polling-amf, my-secure-amf"
subscription-timeout-minutes="0"
allow-subtopics="true"
message-time-to-live="0"
subtopic-separator="."/>

Достаточно просто <flex: message-destination id = «myTopic» />, если вы используете адаптер по умолчанию и канал по умолчанию.

Обмен сообщениями JMS с использованием специфичных для Spring компонентов JMS

Платформа Spring определяет пару компонентов для взаимодействия с доменами сообщений JMS: очереди и темы. Он включает в себя решение на основе шаблонов JmsTemplate для отправки и получения сообщений JMS. JmsTemplate устраняет большую часть стандартного кода, связанного с открытием и закрытием соединений и сеансов, а также отправкой и получением сообщений. Он также преобразует JMSException в часть иерархии исключений среды выполнения Spring. JMSException преобразуется в org.springframework.jms.JmsException. Spring упрощает доступ и программирование со многими ресурсами, такими как JDBC, JNDI и JMS, определяя шаблоны, которые помогают устранить большую часть стандартного кода и позволяют вам сосредоточиться на основных задачах.

Хотя JmsTemplate упрощает отправку и получение сообщений, получение сообщений с использованием JmsTemplate происходит синхронно. Синхронные прослушиватели сообщений неэффективны, так как включают операции блокировки. Ресурсы, такие как потоки, ожидают прибытия сообщения. В асинхронных операциях такие потоки могут успешно выполнять другие операции за это время ожидания. Чтобы разрешить эту ситуацию (когда слушатели синхронных сообщений блокировали ресурсы), в Java EE были введены MessageDriveBeans (MDB). Контейнеры EJB могут затем прослушивать места назначения JMS и запускать MDB при получении сообщения. Среда Spring расширила эту концепцию до POJO и, следовательно, облегчает использование асинхронных прослушивателей сообщений без необходимости в контейнерах EJB. Аналогами Spring для MDB являются POJO, управляемый сообщениями (или MDP).Вы также можете написать асинхронный прослушиватель сообщений JMS без Spring, хотя MDP — это надежный набор асинхронных прослушивателей сообщений, которые вы можете легко использовать.

Вы видели простое использование конфигурации JMS Spring BlazeDS в простом примере ранее в этой статье.

Интеграция обмена сообщениями Spring BlazeDS

Spring BlazeDS определяет org.springframework.flex.messaging.integration.IntegrationAdapter, который позволяет отправлять и получать сообщения по каналам сообщений Spring BlazeDS. Сложная маршрутизация сообщений может быть установлена ​​с помощью этого адаптера. Вы также сможете подключиться к конечным точкам FTP и электронной почты с помощью адаптера интеграции.

Например, проект расширения Spring, называемый SESIA, предоставляет адаптер FTP, который работает с адаптером интеграции. Вы можете получить больше информации о проекте SESIA онлайн на http://opensource.atlassian.com/confluence/spring/display/INTEGRATE/SESIA .

Вывод

С кратким обзором доступных вариантов обмена сообщениями пришло время завершить эту статью. Я предполагаю, что эта статья познакомила вас с тем, как вы можете комбинировать приложения Flex и Spring JMS. С вашим возбужденным аппетитом вы можете с энтузиазмом узнать больше и изучить расширенную конфигурацию. Многие интересные детали описаны в моей книге Professional BlazeDS (Wiley, 2009), о которой вы, возможно, захотите узнать. Кроме того, следите за новыми статьями на эту тему, которые я намереваюсь написать, если позволит время.