Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

на домен jakarta.*, призвана продолжить развитие базовых концепций Java EE 8 с учетом новых теоретических и технологических тенденций.

Таким образом знания, полученные студентами при изучении данной дисциплины, лягут в основу будущих технологий распределенных систем.

Что касается проблематики создания больших распределенных систем, то студентам рекомендуется познакомиться с монографией С. Дашнера «Изучаем Java EE. Современное программирование для больших предприятий» [16], в которой, опираясь на современные достижения платформы Java EE 8, даются рекомендации по разным вопросам проектирования масштабных информационных систем.

В частности, там обсуждается современная тенденция использования микросервисов (см. [16], глава 8).

Базовая парадигма миросервисов: «… сервер приложений поставляется в контейнере, содержащем только одно приложение. Принцип «одно приложение — один сервер приложений» также соответствует идее архитектуры без разделения ресурсов» [16, стр. 302].

это утверждение обосновываются тем, что совместное использование разделяемых приложениями моделей и данных является плохой идеей, поскольку модели и данные одного приложения обычно тесно связаны друг с другом. С другой стороны, современные контейнеры серверов приложений (делается ссылка на сервер TomEE) занимают всего 150 Мбайт, что по мнению автора является значительно меньшей величиной, чем размеры самого приложения с хранилищем данных (см. [16], стр. 303).

Поскольку наша дисциплина не является курсом по проектированию распределенных систем, то вопросы подобные важности или крайней необходимости применения микросервисов далее рассматриваться не будут.

1.5.3 Apache Maven — сетевая сборка приложений

Apache Maven — официальный фреймворк для автоматизации сборки проектов платформы Java EE.

Современная парадигма развития платформы Java EE предполагает, что разработанные компоненты приложений и сервисов находятся на серверах сети и имеют свою версию, поэтому средства сборки проектов и систем сами являются распределенными системами, обеспечивающими контроль зависимо-

47

стей и версий.

Профессиональная разработка компонент для платформы Java EE предполагает использование Apache Maven, требующего описание всех артефактов и структуры проекта в файле pom.xml (POM, Project Object Model). Официальная документация и описание всех примеров компонент и законченных проектов приводится в предположении, что они собраны с помощью Maven.

К сожалению инфраструктура учебного процесса кафедры АСУ и учебного программного комплекса [21] не позволяет использовать Maven по причине недоступности глобального сетевого ресурса.

1.5.4 Eclipse Enterprise Edition

Основным инструментом разработки проектов данной дисциплины является Eclipse Java EE IDE for Web Developers.

Титульная заставка среды разработки Eclipse EE показана на рисунке 1.17.

Рисунок 1.17 — Титульная заставка Eclipse EE

48

Среда разработки Eclipse EE хорошо знакома студентам по бакалаврскому курсу «Распределенные вычислительные системы», обеспечивает тесное взаимодействие своей среды с сервером приложений Apache TomEE, имеет плагины для сборщиков проектов Ant и Maven.

Учитывая передачу платформы Java EE под управление организации Eclipse Foundation, следует ожидать, что будущие версии данной IDE также хорошо будут поддерживать платформу Jakarta EE.

1.5.5 Тестовый пример

Все технологии, изучаемые в данной дисциплине, демонстрируются конкретными примерами.

В силу современного тренда развития сервис-ориентированных технологий и ограниченных возможностей обучающего процесса, целевая тематика изучаемой дисциплины ориентирована на Web-сервисы, которые сами являются частью Web-технологий. Программная платформа Java EE предоставляет нам все возможности для реализации таких распределенных web-сервис-ориентиро- ванных систем. Тем не менее, для демонстрации таких решений необходимо более детально изучить ряд вопросов, касающихся самих Web-технологий.

Одним из таких вопросов является возможность использования технологи HTTP-сервлетов и JSP-страниц. А поскольку студенты уже в общих чертах знакомы с ней, то сразу рассмотрим пример, который будет решать две задачи:

а) тестовую проверку правильной установки и работоспособности инструментальных средств Eclipse EE и сервера TomEE;

б) реализацию прототипа простейшего приложения, которое будет модифицироваться и реализовываться с применением других сервисных компонент платформы Java EE.

Прикладная часть приложения описывается тремя пунктами:

а) при соединении с сервером пользователю отображается форма, предлагающая ввести произвольный текст;

б) после нажатия кнопки «Отправить», в ответ выводятся: отправленное сообщение и предложение ввести новый текст;

в) в обоих случаях на экран дополнительно выводятся: тип метода сервлета, принявшего запрос, и идентификатор сессии соединения с сервером.

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

49

а) открываем в Eclipse EE проект типа «Dynamic Web Project» с именем test;

б) создаем в проекте сервлет с именем TestTomee и двумя методами doGet и doPost, показанными на листинге 1.1;

в) создаем в проекте JSP-страницу с именем test.jsp и содержимым, показанным на листинге 1.2.

Листинг 1.1 — Исходный текст сервлета TestTomee.java проекта test

package asu.rsos;

import java.io.IOException; import java.util.Date;

import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

* Servlet implementation class TestTomee */

@WebServlet("/TestTomee")

public class TestTomee extends HttpServlet

{

private static final long serialVersionUID = 1L;

// Разделяемый ресурс private String msgs = "";

/**

* @see HttpServlet#HttpServlet() */

public TestTomee() { super();

}

/**

*@see HttpServlet#doGet(HttpServletRequest request,

*HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException

{

/**

*Явная установка кодировок объектов запроса и ответа.

*Стандартная установка контекста ответа.

*/

response.setCharacterEncoding("UTF-8"); response.setContentType("text/html"); /**

50

* Стандартное подключение ресурса сервлета. */

RequestDispatcher disp = request.getRequestDispatcher("/WEB-INF/test.jsp");

disp.forward(request, response);

}

/**

*@see HttpServlet#doPost(HttpServletRequest request,

*HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

request.setCharacterEncoding("UTF-8");

//Сохраняем сообщение Date dt = new Date();

msgs += dt.toString() + "<br>"

+request.getParameter("text") + "<hr>"; request.setAttribute("msgs", msgs);

//Переходим к методу doGet()

doGet(request, response);

}

}

Листинг 1.2 — Исходный текст JSP-страницы test.jsp проекта test

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html> <html>

<head>

<meta charset="UTF-8"> <title>Тест сервера tomee</title>

</head> <body>

<hr>

<b>Вызван метод:

<%=

request.getMethod() %>;</b>

ID сессии:

<%=

session.getId() %>

<hr>

<%

if (request.getMethod().equals("POST")){ out.println(request.getAttribute("msgs"));

}

%>

<form action="TestTomee" method="post" accept-charset="UTF-8"> <p> Введи текст: <br>

<textarea rows="5" cols="40" name="text"></textarea>

</p> <p>

<input type="submit">

</p> </form>

<hr>

51

</body> </html>

Анализ полученного результата проведем, демонстрируя запуск созданного приложения.

Результат первого запуска показан на рисунке 1.18, из которого видно,

что:

a)сервер обработал запрос по методу GET;

b)вызов имеет собственный идентификатор сессии.

Если последовательно отправить на сервер два сообщения «Сообщение 1»

и«Сообщение 2», то получим результат, показанный на рисунке 1.19, из которого следует, что:

а) тестовое приложение работает согласно поставленной задаче;

б) все запросы сервер обрабатывает в пределах одной сессии;

в) сервлет TestTomee кэшируется в памяти сервера, накапливая все полученные сообщения.

Рисунок 1.18 — Первый запуск тестового примера

52