@JMSDestinationDefinition(
name = "java:comp/jms/webappQueue",
interfaceName = "javax.jms.Queue",
destinationName = "PhysicalWebappQueue")
@Named
@RequestScoped
public class SenderBean {
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Веб-приложения могут использовать JMS API для отправки и получения сообщений, как отмечено в Использование компонентов Java EE для отправки и синхронного получения сообщений. В этом разделе описываются компоненты очень простого веб-приложения, использующего JMS API.
В этом разделе предполагается, что вы знакомы с основами JavaServer Faces, описанной в части III «Веб-слой».
Пример websimplemessage
находится в каталоге tut-install/jms/examples/
. Для отправки и получения он использует страницы Facelets, а также соответствующие вспомогательные бины. Когда пользователь вводит сообщение в текстовое поле отправляющей страницы и кликает кнопку, вспомогательный компонент для страницы отправляет сообщение в очередь и отображает его на странице. Когда пользователь переходит на принимающую страницу и кликает другую кнопку, вспомогательный компонент для этой страницы получает сообщение синхронно и отображает его.
Страницы Facelets для примера следующие.
sender.xhtml
, который предоставляет помеченный тег h:inputText
, в который пользователь вводит сообщение, вместе с двумя командными кнопками. Когда пользователь кликает кнопку «Отправить сообщение», вызывается метод senderBean.sendMessage
, чтобы отправить сообщение в очередь и отобразить его содержимое. Когда пользователь кликает кнопку «Перейти к странице получения», появляется страница receiver.xhtml
.
receive.xhtml
, который также предоставляет две кнопки управления. Когда пользователь кликает кнопку «Получить сообщение», вызывается метод receiveBean.getMessage
, чтобы извлечь сообщение из очереди и отобразить его содержимое. Когда пользователь кликает кнопку «Отправить другое сообщение», страница sender.xhtml появляется снова.
Два Managed-бина для примера следующие.
SenderBean.java
, Managed-бин CDI со свойством messageText
и бизнес-методом sendMessage
. Класс аннотируется @JMSDestinationDefinition
для создания очереди для компонента:
@JMSDestinationDefinition(
name = "java:comp/jms/webappQueue",
interfaceName = "javax.jms.Queue",
destinationName = "PhysicalWebappQueue")
@Named
@RequestScoped
public class SenderBean {
Метод sendMessage
инъецирует JMSContext
(используя фабрику соединений по умолчанию) и очередь, создаёт производителя, отправляет сообщение, введённое пользователем на странице Facelets и создаёт FacesMessage
для отображения на странице Facelets:
@Inject
private JMSContext context;
@Resource(lookup = "java:comp/jms/webappQueue")
private Queue queue;
private String messageText;
...
public void sendMessage() {
try {
String text = "Message from producer: " + messageText;
context.createProducer().send(queue, text);
FacesMessage facesMessage =
new FacesMessage("Sent message: " + text);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
} catch (Throwable t) {
logger.log(Level.SEVERE,
"SenderBean.sendMessage: Exception: {0}",
t.toString());
}
}
ReceiverBean.java
, Managed-бин CDI с бизнес-методом getMessage
. Метод инъецирует JMSContext
(используя фабрику соединений по умолчанию) и очередь, которая была определена в SenderBean
, создаёт получателя, получает сообщение и создаёт FacesMessage
для отображения на странице Facelets:
@Inject
private JMSContext context;
@Resource(lookup = "java:comp/jms/webappQueue")
private Queue queue;
...
public void getMessage() {
try {
JMSConsumer receiver = context.createConsumer(queue);
String text = receiver.receiveBody(String.class);
if (text != null) {
FacesMessage facesMessage =
new FacesMessage("Reading message: " + text);
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
} else {
FacesMessage facesMessage =
new FacesMessage("No message received after 1 second");
FacesContext.getCurrentInstance().addMessage(null, facesMessage);
}
} catch (Throwable t) {
logger.log(Level.SEVERE,
"ReceiverBean.getMessage: Exception: {0}",
t.toString());
}
}
Вы можете использовать IDE NetBeans или Maven для создания, упаковки, развёртывания и запуска приложения websimplemessage
.
Здесь рассматриваются следующие темы:
В этом примере используется очередь, заданная аннотацией, и предустановленная фабрика соединений по умолчанию java:comp/DefaultJMSConnectionFactory
.
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В меню «Файл» выберите «Открыть проект».
В диалоговом окне «Открыть проект» перейдите к:
tut-install/examples/jms
Выберите каталог websimplemessage
.
Нажмите Открыть проект.
На вкладке «Проекты» кликните правой кнопкой мыши проект websimplemessage
и выберите «Сборка».
Эта команда собирает и развёртывает проект.
Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).
В окне терминала перейдите в:
tut-install/examples/jms/websimplemessage/
Чтобы скомпилировать исходные файлы, упаковать и развернуть приложение, используйте следующую команду:
mvn install
В веб-браузере введите следующий URL:
http://localhost:8080/websimplemessage
Введите сообщение в текстовое поле и нажмите «Отправить сообщение».
Например, если вы введёте «Hello, Duke», под кнопками появится следующее:
Sent message: Message from producer: Hello, Duke
Нажмите Перейти на страницу получения.
Нажмите Получить сообщение.
Следующее появляется под кнопками:
Reading message: Message from producer: Hello, Duke
Нажмите «Отправить другое сообщение», чтобы вернуться на страницу отправки.
После завершения работы приложения удалите его, используя вкладку «Службы» в среде IDE NetBeans или команду mvn cargo:undeploy
.
Назад | Вперёд | Содержание |