Пример приложения использующего JMS и MDB |
- Statistics
- Participants
- Translate into Russian
- Translation result
- 45% translated in draft.
Передача корпоративных сообщений становятся все более и более важным компонентом для свободного объединения корпоративных фреймворков. Это проявилось в большей части как быстрое увеличение роста корпоративных приложений и несоизмеримых корпоративных ресурсов наряду с растущей потребностью объединения этих приложений в связанные системы.
За эти годы Сообщения и Ориентированные на сообщения связующие ПО (Message Oriented Middleware (MOM) ) научились предоставлять эту возможность собственными средствами.
Введение в Java Messaging Service (JMS), как в стандарт, устраняет много неудобств в использовании собственных средств MOM. В дополнение Message Driven Beans(MDBs) представляют вместе с Enterprise Java Beans 2.0 обеспечение наилучшего из существующих вложений в J2EE сервера приложений.
Некая компания, в этом примере занимается розничной и оптовой продажей товаров различных категорий. Все размещенные заказы в заявке должны быть одобрены продающим персоналом перед предоставлением их заказчику. Для оптовой торговли, компания разместила своих агентов по всей стране. Они отсылают заказы по несколько штук, как только потребуется необходимое количество груза. Конечные пользователи для оформления заказов используют веб-сайт компании, в то время как агенты управляют отправкой грузов с помощью специального ПО установленного на их рабочих местах. Все отправки товаров должны быть одобрены главным менеджером компании перед их передачей заказчику.
Это типичное приложение, использующее jms, как решение, поскольку грузы в заказе обрабатываются в асинхронном порядке.
После прочтения данной статьи, вы будете способны определять очереди сообщений и их фабрики соединений в Geronimo/ActiveMQ среде окружения, посылать и принимать сообщения, использую различные типы заявок в вашем распределенном приложении.
Эта статья состоит из следующих разделов.
Краткий обзор JMS в среде Geronimo/ActiveMQ .
Краткий обзор приложения.
Конфигурация, разработка и развертывание простого приложения.
Тестирование простого приложения.
* Заключение
Беглый обзор JMS в Geronimo/ActiveMQ окружении
Сервер Geronimo поставляется с компонентами JMS сервера приложений, которые могут получать доступ к JMS ресурсам как к фабрике соединений, частям и очередям в ней. JMS сервер также известен как брокер (посредник) сообщений. По умолчанию брокер сообщений поддерживается Geronimo в помощью ActiveMQ, обычно не нужно даже вносить никаких изменений, с тех пор как сервер стал зрелым и многофункциональным JMS продуктом. Данная реализация использует встроенную базу данных Derby для постоянного представления сообщений.
ActiveMQ поддерживает большое количество протоколов (таких как TCP, SSL, UDP, групповая передача, intra-JVM и NIO) и взаимодействий с клиентом. В контексте Geronimo ActiveMQ поддерживает MDBs, которые являются EJB использующими JMS-сообщения. Это позволяет JMS-приложению использовать специфические возможности J2EE для Geronimo и компонентов приложения, таких как JSP, сервлеты и EJB использующие JMS. Geronimo реализует это JMS API через абстрактный слой для поддержки любого JMS провайдера. Эта способность достигается поддержкой J2EE спецификации коннектора (JCA). JCA 1.5 спецификация обеспечивает взаимоотношения между сервером приложений и драйвером ActiveMQ (адаптером ресурсов). Приложения развертываемые на Geronimo получают доступ к брокеру ресурсов ActiveMQ только через адаптер ресурсов (RA).
Обзор приложения.
Процесс работы приложения определяется двумя очередями сообщений для сохранения заказов и доставки грузов. Ответ на заказ должен быть сгенерирован и отослан посредством корпоративного веб-приложения. Когда ответ на заказ отослан в очередь заказов, MDB будет его обрабатывать. Это перенесет заказ на следующий уровень системы обработки заказов, для сохранения их на сервере. Эти сохраненные заказы будут обработаны сотрудниками компании позже.
Торговые агенты компании используют приложение отправки грузов для отправки грузов (по подшивке заказов) по местам назначения. Сперва они готовят отгрузку как XML файл, и затем передают его приложению как параметр. Приложение отправки грузов должна прочесть содержимое этого XML файла (с запросом груза) и отправить его в очередь отправки грузов. Главный менеджер компании используя приложение отправки грузов находит все запросы на отгрузку. Когда груз отправлен в очередь отправки грузов, приложение закачивает все запросы на компьютер главного менеджера. Он их одобрит и вручную отправит в дальнейшую обработку.
Структура приложения
Ядро приложения размещения заказов должно быть развернуто как EAR на сервере приложений. Обзор структуры EAR дан в следующем описании.
|-Order.ear
|- geronimo-activemq-ra-2.0-SNAPSHOT.rar
|- jms-mdb-sample-ejb-2.0-SNAPSHOT.jar
|-META-INF
|- openejb-jar.xml
|- jms-mdb-sample-ejb-2.0-SNAPSHOT.war
|- index.jsp
|- error.jsp
|- WEB-INF
- web.xml
|- classes
|- META-INF
|- application.xml
|- geronimo-application.xml
MDB Implementation
Message-Driven Bean использует аннотацию @MessageDriven для замены объявления этого MDB в файле ejb-jar.xml.
OrderRecvMDB.java
//
//MessageDrivenBean слушает пункты
// 'OrderQueue' очередь и процесс соответственно
//
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Queue"),
@ActivationConfigProperty(propertyName="destination", propertyValue="OrderQueue")
})
public class OrderRecvMDB implements MessageListener{
private static final String ORDER_MGMT_INFO = "order_mgmt.properties";
private static final String ORDER_REPO = "order.repo";
public OrderRecvMDB() {
}
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("Order Received \n"+ textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
В данном приложении очередь заказов будут обрабатывать MDB. openejb-jar.xml сообщает Geronimo с какими группами ресурсов ассоциируется MDB. Эта связь OrderRecvMDB с очередью заказов OrderQueue, осуществляется с помощью CommonConnectionFactory.
openejb-jar.xml
<openejb-jar
xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1"
xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.1"
xmlns:security="http://geronimo.apache.org/xml/ns/security-1.1"
xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2">
<sys:environment>
<sys:moduleId>
<sys:groupId>${pom.groupId}</sys:groupId>
<sys:artifactId>${pom.artifactId}</sys:artifactId>
<sys:version>${version}</sys:version>
<sys:type>jar</sys:type>
</sys:moduleId>
<sys:dependencies>
<sys:dependency>
<sys:groupId>org.apache.geronimo.configs</sys:groupId>
<sys:artifactId>activemq-broker</sys:artifactId>
<sys:type>car</sys:type>
</sys:dependency>
</sys:dependencies>
<sys:hidden-classes/>
<sys:non-overridable-classes/>
</sys:environment>
<enterprise-beans>
<message-driven>
ejb-name>OrderRecvMDB</ejb-name>
<resource-adapter>
<resource-link>jms-resources</resource-link>
</resource-adapter>
</message-driven>
</enterprise-beans>
</openejb-jar>
geronimo-application.xml и application.xml определяют главне компоненты приложения EAR. Оба EAR компонента и информация о веб-архиве обычно берется из этих файлов. Файл geronimo-application.xml обычно включает секции для для определения JMS очередей и общих фабрик соединений для доступа к ним. Это используется для разворачивания geronimo-activemq-ra.rar включенного в EAR.
geronimo-application.xml
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1">
<environment xmlns="http://geronimo.apache.org/xml/ns/deployment-1.2">
<moduleId>
<groupId>${pom.groupId}</groupId>
<artifactId>${pom.artifactId}</artifactId>
<version>${version}</version>
<type>ear</type>
</moduleId>
