В этом руководстве представлены базовые аспекты разработки приложений Java EE 6 и некоторые возможности технологии EJB 3.1, добавленные в спецификацию Java EE 6. В рамках этого руководства будет создано приложение J2EE, позволяющее пользователю отправлять и получать сообщения из базы данных.
Это приложение содержит модуль EJB и веб-модуль. Модуль EJB включает в себя класс сущностей, фасад сеанса класса сущностей и управляемый сообщениями компонент. Веб-модуль содержит сервлеты для отображения и отправки сообщений и единичный сеансный компонент для подсчета числа пользователей в сеансе.
Перед изучением этого руководства необходимо ознакомиться со следующей документацией.
Программное обеспечение или материал
Требуемая версия
IDE NetBeans
Версия 7.0, 7.1, 7.2 или 7.3 Java EE
Предполагается, что читатель обладает базовыми знаниями по следующим технологиям или опытом программирования с их использованием:
Создание сервлета PostMessage
В этом упражнении будет создан сервлет PostMessage, используемый для отправки сообщений. Для добавления созданных ресурсов JMS непосредственно в сервлет используются аннотации с указанием имени переменной и имени, на которое она отображается. Затем необходимо написать код для отправки сообщения JMS и код для формы HTML, предназначенной для добавления сообщения.
- Щелкните проект веб-модуля правой кнопкой мыши и выберите "Создать" > "Сервлет".
- В поле "Имя класса" введите PostMessage.
- Для имени параметра "Пакет" введите web и нажмите "Завершить".
При нажатии кнопки "Готово" в редакторе исходного кода будет открыт класс PostMessage.java. В редакторе исходного кода выполните следующие шаги.
- Используйте аннотации для ввода ресурсов ConnectionFactory и Queue путем добавления следующих объявлений полей (выделено полужирным шрифтом):
@WebServlet(name="PostMessage", urlPatterns={"/PostMessage"})
public class PostMessage extends HttpServlet {
@Resource(mappedName="jms/NewMessageFactory")
private ConnectionFactory connectionFactory;
@Resource(mappedName="jms/NewMessage")
private Queue queue;
- Теперь создадим код для передачи сообщения JMS путем добавления в метод processRequest следующих строк кода, выделенных полужирным шрифтом:
response.setContentType("text/html;charset=UTF-8");
// Add the following code to send the JMS message
String title=request.getParameter("title");
String body=request.getParameter("body");
if ((title!=null) && (body!=null)) {
try {
Connection connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
ObjectMessage message = session.createObjectMessage();
// here we create NewsEntity, that will be sent in JMS message
NewsEntity e = new NewsEntity();
e.setTitle(title);
e.setBody(body);
message.setObject(e);
messageProducer.send(message);
messageProducer.close();
connection.close();
response.sendRedirect("ListNews");
} catch (JMSException ex) {
ex.printStackTrace();
}
}
PrintWriter out = response.getWriter();
- Добавьте следующие строки (выделены жирным шрифтом) к методу processRequest, чтобы добавить веб-форму добавления сообщения. (При необходимости, уберите знак комментария для вывода кода HTML)
out.println("Servlet PostMessage at " + request.getContextPath() + "</h1>");
// The following code adds the form to the web page
out.println("<form>");
out.println("Title: <input type='text' name='title'><br/>");
out.println("Message: <textarea name='body'></textarea><br/>");
out.println("<input type='submit'><br/>");
out.println("</form>");
out.println("</body>");
- Нажмите сочетание клавиш Ctrl+Shift+I для создания обязательных операторов импорта для класса.
Примечание. При выборе библиотек для импорта для Connection, ConnectionFactory, Session и Queue, убедитесь, что импортируются библиотеки javax.jms.

- Сохраните измененный файл.
Теперь проект можно выполнить. При выполнении проекта страница с сервлетом ListNews должна открыться в браузере. Для этого в диалоговом окне "Свойства" для приложения J2EE вводится URL-адрес. Это относительный URL-адрес, связанный с контекстным путем к приложению. После ввода относительного URL-адреса приложение можно собрать, развернуть и запустить в окне "Проекты".
Для указания относительного URL-адреса и запуска приложения необходимо выполнить следующие действия:
- В окне 'Проекты' щелкните правой кнопкой мыши узел приложения корпоративного уровня NewsApp и выберите во всплывающем меню 'Свойства'.
- В панели "Категории" выберите "Выполнить".
- В текстовое поле "Относительный URL-адрес" введите /ListNews.
- Нажмите кнопку "ОК".
- В окне 'Проекты' щелкните правой кнопкой мыши узел приложения корпоративного уровня NewsApp и выберите 'Выполнить'.
При выполнении проекта в браузере откроется сервлет ListNews. В нем отображается список сообщений в базе данных. При первом выполнении проекта база данных пуста, но сообщение можно добавить путем щелчка по ссылке "Добавить сообщение".

При добавлении сообщения с помощью сервлета PostMessage оно передается на постоянное хранение в управляемый сообщениями компонент. Для просмотра сообщений в базе данных вызывается сервлет ListNews. Список сообщений в базе данных, извлеченных сервлетом ListNews, часто выводится без нового сообщения, поскольку служба передачи сообщений работает асинхронно.
Устранение проблем
Ниже приводится ряд проблем, которые могут возникнуть при создании проекта.
Проблема с ресурсами JMS
При создании ресурсов JMS с помощью мастера в окне вывода может появиться следующее сообщение об ошибке сервера:
[com.sun.enterprise.connectors.ConnectorRuntimeException:
JMS resource not created : jms/Queue]
Это сообщение указывает на то, что ресурс JMS не создан или не зарегистрирован на сервере приложений. Для проверки, создания и изменения ресурсов JMS используйте консоль администратора сервера приложений.
Для вызова консоли администратора необходимо выполнить следующие действия.
- Убедитесь в том, что сервер приложений запущен. Для этого разверните узел "Серверы" в окне "Службы" среды IDE. Работающий сервер обозначается зеленой стрелкой рядом с узлом сервера приложений.
- Щелкните правой кнопкой мыши узел сервера приложений и выберите "Просмотр консоли администратора" для открытия в браузере окна входа в систему.
- Выполните вход в систему сервера. По умолчанию используется имя пользователя admin и пароль adminadmin.
- Разверните узлы "Ресурсы" и "Ресурсы JMS" в левом поле консоли администратора в браузере.
- Щелкните ссылки "Фабрики подключений" и "Ресурсы адресатов" в левом поле и проверьте, зарегистрированы ли ресурсы на сервере; при необходимости внесите требуемые изменения. Если ресурсы не существуют, их можно создать при помощи консоли администратора.
Необходимо убедиться в том, что ресурс фабрики подключений JMS в сервлете PostMessage связан с правильным именем JNDI ресурса фабрики подключений JMS, зарегистрированного на сервере приложений Sun Java System Application Server.
- ресурс адресата с именем JNDI jms/NewMessage и типом javax.jms.Queue;
- ресурс фабрики подключений с именем JNDI jms/NewMessageFactory и типом javax.jms.QueueConnectionFactory.
For more information about using IDE NetBeans to develop Java EE applications, see the following resources:
Дополнительные сведения по использованию компонентов уровня предприятия EJB 3.1 см. в руководстве по Java EE 6.
To send comments and suggestions, get support, and keep informed on the latest developments on the IDE NetBeans Java EE development features, join the nbj2ee mailing list.