МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра ВТ
ОТЧЕТ по лабораторной работе №4
по дисциплине «Распределенные системы и сети» Тема: Java Message Service
Студентка гр. 8308 |
|
Довженко А.Е. |
|
Преподаватель |
|
Бекенева Я.А. |
|
|
|||
|
|
|
|
Санкт-Петербург, 2022
Цель работы
Знакомство с технологией Java Message Service.
Задание к лабораторной работе
Cоздать приложение, отправляющее сообщение в queue, и message-driven bean, читающий отправленное в queue сообщение.
Выполнение лабораторной работы
Перед созданием проекта необходимо настроить сервер сообщений,
добавив через консоль администратора Connection Factory (рис. 1) и Destination Resource (рис. 2).
Рис 1
Рис 2
2
Далее необходимо создать проект Enterprise Application, указав при создании генерацию модулей EJB и WEB. Следующим шагом является создание
MDB. Переходим к модулю EJB созданного проекта и добавляем туда компонент, управляемый сообщениями, причём выбираем Server Destination, в
качестве которого выбираем созданный ранее Destination Resource.
Код созданного MDB, файл MBeans.java:
/*
*Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
*Click nbfs://nbhost/SystemFileSystem/Templates/J2EE/EJB30/MessageDrivenBean.java to edit this template
*/
package etu.mdb;
import java.util.logging.Level; import java.util.logging.Logger;
import javax.ejb.ActivationConfigProperty; import javax.ejb.MessageDriven;
import javax.jms.JMSException; import javax.jms.Message;
import javax.jms.MessageListener; import javax.jms.TextMessage;
/**
*
* @author amber */
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationLookup", propertyValue = "DestinationResource"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
public class MBean implements MessageListener {
public MBean() {
}
@Override
public void onMessage(Message message) {
TextMessage tmsg = null; tmsg = (TextMessage)message; try {
System.out.println(tmsg.getText()); } catch(JMSException ex){
Logger.getLogger(MBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
3
После создания бина создаём JSP, которая будет обрабатывать введённое
нами сообщение.
Код созданной JSP, файл index.jsp:
<%--
Document |
: index |
|
Created on : |
11 апр. 2022 г., 02:29:36 |
|
Author |
: |
amber |
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html>
<html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title>
</head> <body>
<form action="NewServlet" method="get">
<input name="msg" id="message" type="text"> <input type="submit" value="Ввод"/>
</form> </body>
</html>
Наконец, пишем сервлет, передающий введённое сообщение-строку MDB
из уже созданной JSP.
Код созданного сервлета, файл NewServlet.java:
/*
*Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
*Click nbfs://nbhost/SystemFileSystem/Templates/JSP_Servlet/Servlet.java to edit this template
*/
package etu.mdb;
import java.io.*;
import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.*; import javax.jms.*;
import javax.servlet.http.*; import javax.servlet.annotation.*;
@WebServlet(name = "NewServlet", value = "/NewServlet") public class NewServlet extends HttpServlet {
@Resource(name = "ConnectionFactory") private ConnectionFactory connectionFactory;
@Resource(name = "DestinationResource") private Destination destination;
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/html;charset=UTF-8");
4
request.setCharacterEncoding("UTF-8"); String str = request.getParameter("msg"); try {
Connection connection = connectionFactory.createConnection(); Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(destination); TextMessage textMessage = session.createTextMessage(str); messageProducer.send(textMessage);
connection.close();
} catch (JMSException ex) { Logger.getLogger(NewServlet.class.getName()).
log(Level.SEVERE, null, ex);
}
PrintWriter out = response.getWriter(); out.println("<html><body>");
out.println("<text>Сообщение <b>" + str + " </b>отправлено в логи</text>"); out.println("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
doGet(request, response);
}
public void destroy() {
}
}
5
Иллюстрация работы Web-приложения
Результат работы созданного Web-приложения представлен на рис. 3-6.
Рис 3. JSP-страница для ввода сообщения
Рис 4. Сервлет, передающий сообщение из JSP
Рис 5. Сообщение в логах сервера в среде разработки NetBeans
Рис 6. Сообщение в файле server.log
Вывод
В результате выполнения лабораторной работы ознакомилась с технологией Java Message Service.
Было создано приложение, отправляющее сообщение в queue, и message-
driven bean, читающий отправленное в queue сообщение.
6