
- •Введение
- •1 Тема 1. Предметная область и терминология РСОС
- •1.1 Этапы развития распределенных систем
- •1.1.1 Классификация систем обработки данных
- •1.1.2 Распределенные вычислительные сети
- •1.1.3 Объектные распределенные системы
- •1.2 Становление систем с сервис-ориентированной архитектурой
- •1.2.1 Развитие web-технологий
- •1.2.2 Развитие концепции SOA
- •1.3 Современные парадигмы сервис-ориентированных архитектур
- •1.3.1 Эталонная модель SOA
- •1.3.2 Модель Захмана
- •1.3.3 Концепция среды открытой системы
- •1.3.4 Бизнес-парадигма модели SOA
- •1.4 Программная платформа Java Enterprise Edition
- •1.4.1 Контейнеры и компоненты Java EE
- •1.4.2 Служебные сервисы контейнеров
- •1.4.3 Артефакты контейнеров
- •1.4.4 Аннотации и дескрипторы развертывания
- •1.4.5 Управляемые компоненты платформы Java EE
- •1.5 Инструментальные средства реализации РСОС
- •1.5.1 Сервера приложений
- •1.5.2 Микросервисы
- •1.5.3 Apache Maven — сетевая сборка приложений
- •1.5.4 Eclipse Enterprise Edition
- •1.5.5 Тестовый пример
- •1.6 Заключение по первой главе
- •1.6.1 Итоги теоретических построений первой главы
- •1.6.2 Тематический план последующих глав
- •Вопросы для самопроверки
- •2 Тема 2. Использование компоненты JSF контейнера Web
- •2.1.1 Языки HTML, JavaScript и протокол HTTP
- •2.1.2 Серверные технологии PHP и HttpServlet
- •2.1.3 Технология AJAX и компонента JavaServer Faces
- •2.2 Шаблон проектирования MVC
- •2.2.1 Контроллер FacesServlet и жизненный цикл запроса
- •2.2.2 Контекст состояния запроса FacesContext
- •2.2.3 Модель в виде компонентов-подложек
- •2.2.4 Представление (View) средствами Facelets
- •2.2.5 JSF OmniFaces
- •2.3 Реализация тестового примера средствами JSF
- •2.3.1 Создание Facelets-шаблона изучаемой дисциплины
- •2.3.2 Прямая реализация тестового примера
- •2.4 Реализация уровня интерфейса сервисов
- •2.4.2 Компонента Users с ЖЦ @ApplicationScoped
- •2.4.3 Компонента RSOS с ЖЦ @SessionScoped
- •2.4.4 Компоненты-подложки с ЖЦ @RequestScoped
- •2.4.5 Приложение авторизации пользователя
- •2.4.6 Компонента подзаголовка проекта
- •2.4.7 Компонента меню лабораторных работ
- •2.4.8 Второй вариант меню лабораторных работ
- •Вопросы для самопроверки
- •3 Тема 3. Современные способы доступа к данным
- •3.1 Учебная инфраструктура темы
- •3.1.1 Учебная задача Letters (Письма)
- •3.1.2 Корпоратиные EJB-компоненты
- •3.1.3 Тестовый HttpServlet проекта lab4
- •3.1.4 Инфраструктура сервера TomEE и СУБД Derby
- •3.2 Технология JPA
- •3.2.1 Сущности
- •3.2.2 Объектно-реляционное отображение
- •3.2.3 Манеджер сущностей
- •3.2.4 Пример использования не-JTA-типа транзакций
- •3.3 Транзакции управляемые контейнером
- •3.3.1 Объектно-ориентированные запросы Criteria API
- •3.3.2 Реализация EJB-компонента с JTA-типом транзакций
- •3.3.3 Реализация JPA-сервлета
- •Вопросы для самопроверки
- •4 Тема 4. Обработка документов XML и JSON
- •4.1 Технология JAXB
- •4.1.1 Программное обеспечение технологии JAXB
- •4.1.2 Аннотации для связывания объектов Java
- •4.1.3 Преобразование объекта Java в документ XML
- •4.2 Технология JSON
- •4.2.1 Программное обеспечение технологии JSON
- •4.2.2 Преобразование объекта Java в документ JSON
- •4.2.3 Пример представления JSON на уровне классов
- •4.2.4 Выводы по результатам изучения главы 4
- •Вопросы для самопроверки
- •5 Тема 5. Web-службы SOAP
- •5.1.1 Протоколы и языки Web-служб
- •5.1.2 Краткое описание языка WSDL
- •5.1.3 Краткое описание протокола SOAP
- •5.1.4 Необязательный реестр Web-служб — UDDI
- •5.1.5 Программные пакеты Java EE, обслуживающие SOAP
- •5.2 Создание Web-служб SOAP
- •5.2.1 Подготовка проекта lab7
- •5.2.2 Аннотации поставщика Web-сервиса
- •5.2.3 Обработка исключений поставщика Web-сервиса
- •5.2.4 Обработка контекста Web-сервиса
- •5.3 Создание потребителя Web-службы SOAP
- •5.3.1 Аннотации для потребителей сервиса
- •5.3.2 Использование утилиты wsimport
- •5.3.3 Реализация тестового примера
- •5.3.4 Выводы по результатам изучения главы 5
- •Вопросы для самопроверки
- •6 Тема 6. Web-службы в стиле REST
- •6.1 Основные положения технологии RESTful
- •6.1.1 Ресурсы, URI, представления и адресуемость
- •6.1.2 Протокол HTTP
- •6.1.3 Языки WADL и HAL
- •6.1.4 Технология JAX-RS
- •6.2 Реализация Web-службы в стиле REST
- •6.2.1 Преобразование сущности Letter
- •6.2.2 Реализация EJB-компоненты Lets9
- •6.2.3 Получение списка записей в формате XML
- •6.2.4 Получение записи по номеру индентификатора
- •6.2.5 Добавление новой записи
- •6.3 Вызов Web-служб в стиле REST
- •6.3.1 Инструментальные средства потребителя сервиса
- •6.3.2 Полная реализация RESTfull-сервиса
- •6.3.3 Шаблон реализации потребителя сервиса
- •6.3.4 Клиент, реализующий методы GET и POST
- •6.3.6 Клиент, реализующий методы DELETE и PUT
- •Вопросы для самопроверки
- •Заключение
- •Список использованных источников
- •Алфавитный указатель

Классический протокол HTTP предоставляет клиенту и серверу восемь методов взаимодействия: GET, POST, OPTIONS, HEAD, PUT, PATCH, DELETE, TRACE и CONNECT. С прикладной точки зрения наиболее популярными являются методы GET и POST, на которые и ориентируются сервис-ориентиро- ванные системы, использующие только браузеры.
2.1.2 Серверные технологии PHP и HttpServlet
Современная парадигма РСОС — серверные технологии.
Студенту настоятельно рекомендуется повторить главу 4 «Web-технологии распределенных систем» учебной дисциплины [1].
Современная парадигма распределенных систем ориентирована на трехзвенные архитектуры «Клиент-сервер», что показано на рисунке 2.6.
Рисунок 2.6 — Трехзвенная архитектура «Клиент-сервер» [1]
Для технологий PHP и HttpServlеt, эта трехзвенная архитектура интерпретируется рисунком 2.7.
|
Web-сервер |
|
Запрос PHP-страницы |
Интерпретатор |
|
|
||
Ответ HTML/XHTML |
PHP |
|
Браузер |
Бизнес- |
|
модель |
||
Запрос сервлета |
||
HttpServlet |
||
Ответ HTML/XHTML |
Рисунок 2.7 — Интерпретация трехзвенной архитектуры
63

Трехзвенная архитектура «Клиент-сервер» освобождает приложение клиента от необходимости детального программирования запросов с помощью языка JavaScript. Это не только повышает безопастность использования web-техно- логий, но также упрощает HTML/XHTML-ответ принимаемый браузером.
Практическое использование компоненты HttpServlet имеет явное преимущество над PHP-интерпретатором, которое выражается двумя пунктами:
а) PHP-интерпретатор проводит синтаксический анализ запрашиваемой PHP-страницы при каждом запросе браузера;
б) HttpServlet является исполняемым классом языка Java, поэтому он уже прошел синтаксический контроль и кэшируется Web-конейнером сервера приложений.
Технология сервлетов реализует шаблон проектирования MVC.
Технология сервлетов, фактически напрямую, реализует шаблон проектирования «Model-View-Controller» (MVC), что наглядно показано на рисунке 2.8. Более подробно (см. [1, глава 4, пункт 4.3.5, «Модель MVC»]).
Рисунок 2.8 — Трехзвенная архитектура, реализуемая моделью MVC [1]
Для наглядности, покажем трехзвенную архитектуру и шаблон MVC, релизованный ранее, в пункте 1.5.5 для тестового примера проекта test.
Сам контроллер реализован сервлетом TestTomee (см. листинг 1.1), функциональность которого обспечивается стандартными методами doGet(...) и doPost(...). Модель шаблона реализована внутри сервлета в виде приватного разделяемого ресурса (строковый объект msgs), как это показано ниже.
64

Представление (View) выполняет JSP-страница test.jsp, ранее приведенная на листинге 1.2 и содержащая показанные ниже JSP-конструкции.
Если теперь запустить тестовый пример подобно тому, как это показано на рисунке 1.19, то полученная браузером страница будет иметь вид, показанный на рисунке 2.9.
Рисунок 2.9 — HTML-страница тестового примера, полученная браузером
К общим недостаткам технологий PHP и HttpServlet следует отнести: а) полная замена HTTP-страницы при каждом обращении к серверу;
б) полностью «ручная» реализация контроллера MVC.
65

2.1.3 Технология AJAX и компонента JavaServer Faces
Общая проблема классической концепции web-технологий — необходимость синхронного способа взаимодействия браузера и Web-сервера, предполагающего загрузку новой страницы при каждом HTTP-запросе браузера.
В 2005 году, Джесси Джеймс Гаррет предложил, а разработчики браузеров реализовали новую технологию AJAX.
AJAX (Asynchronous Javascript and XML) — асинхронный JavaScript и XML, предполагающий наличие в браузере специальной библиотеки (обработчика), доступной с HTML-страницы на языке JavaScript и обеспечивающей асинхронное взаимодействие с Web-сервером.
На рисунке 2.10 показано различие способов классического взаимодействия браузера с Web-сервером и с помощью технологии AJAX.
Рисунок 2.10 — Классический- и AJAX-способы взаимодействия браузера и Web-сервера
Несмотря на достаточно обширный список недостатков, которые мы рассматривать не будем, AJAX имеет ряд преимуществ: экономия сетевого трафика и сетевой нагрузки на сервер, ускорение реакции интерфейса, возможности интерактивной обработки запросов браузера и возможность использования средств мультимедиа. Неудивительно, что технология AJAX получила широкую популярность и существенно снизила интерес к технологии сервлетов.
66

Программная платформа Java EE выбирает технологию JSF.
В марте 2004 года, компания Sun Microsystems выпустила первую версию спецификации JSF 1.0. В октябре 2009 года, спецификация JSF была полностью пересмотрена с учетом опыта разработки и представлена как JSF 2.0. Последняя спецификация JSF 2.3 была выпущена в конце марта 2017 года. Она и является предметом нашего изучения.
Цель проекта JSF — устранение недостатков, присущих технологии JSPстраниц согласно уникальной архитектуре показанной на рисунке 2.11.
Рисунок 2.11 — Общая архитектура технологии JSF [17]
JSF является компонентой Web-контейнера платформы Java EE, где центральное место занимает специальный сервлет Faces (FacesServlet), который опционально может настраиваться собственным дескриптором развертывания в виде файла faces-config.xml.
JSF обрабатывает все HTTP-запросы браузера, включая запросы технологии AJAX, что делает ее современной конкурентной технологией.
Компонента JSF реализует шаблон проектирования MVC, где контроллер реализуется самим сервлетом, представления — менеджером Facelets, а модель — компонентами-подложками.
67