
- •Введение
- •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
- •Вопросы для самопроверки
- •Заключение
- •Список использованных источников
- •Алфавитный указатель

Определение связывания....
</binding>
<service>
Определение сервиса....
</service> </definitions>
Кратко перечислим назначение основных элементов и атрибутов языка WSDL, заданных в виде следующих тегов:
<definitions> — корневой элемент WSDL, определяющий глобальные описания пространств имен, которые видны на протяжении всего документа.
<types> — пределяет типы данных, которые будут использованы в сообщениях.
<message> — определяет формат данных, которые передаются между потребителем Web-службы и самой Web-службой. Они также разделены на запросы и ответы.
<portType> — определяет операции Web-служб (методы), причем каждая операция ссылается на входное и выходное сообщение.
<binding> — описывает конкретный протокол SOAP и форматы данных для операций и сообщений, определенных для конкретного типа порта.
<service> — содержит коллекцию элементов <port>, где каждый порт связан с конечной точкой (сетевым адресом или URL).
<port> — указывает адрес для связывания, таким образом, определяя конечную точку коммуникации.
В целом, WSDL описывает абстрактный интерфейс веб-службы.
5.1.3 Краткое описание протокола SOAP
SOAP предоставляет конкретную реализацию взаимодействия потребителей и поставщиков сервиса, определяя XML-сообщения, которыми обмениваются потребитель и поставщик.
SOAP предназначен для обеспечения независимого, абстрактного протокола связи, который обладает возможностью подключения распределенных Web-служб.
На листинге 5.2 представлен шаблон общей структуры SOAP-сообщения или структура конверта SOAP.
206

Листинг 5.2 — Шаблон общей структуры SOAP-сообщения
<?xml version = "1.0" encoding="utf-8"?> <soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/
...">
<soap:Header>
...
...
</soap:Header>
<soap:Body>
...
...
<soap:Fault>
...
...
</soap:Fault>
...
</soap:Body>
</soap:Envelope>
В структуре сообщений SOAP четко выделяются четыре элемента: Envelope — обязательный корневой элемент, определяющий сообщение и
пространство имен, использованное в документе.
Header — содержит любые необязательные атрибуты сообщения или характерную для приложения инфраструктуру, например, такую как информация о безопасности или о сетевой маршрутизации.
Body — основной обязательный элемент, содержащий сообщение, которым обмениваются приложения.
Fault — необязательный элемент, используемый для предоставления информации об ошибках, произошедших при обработке сообщений.
5.1.4 Необязательный реестр Web-служб — UDDI
Необязательный реестр Web-служб — UDDI призван завершить инфраструктуру технологии Web-сервисов, построенных на протоколе SOAP.
Основная задача UDDI — регистрировать и публиковать для общего использования интерфейсы поставщиков Web-сервисов. После того как потребители сервисов выбрали нужного поставщика, они напрямую взаимодействуют друг с другом по протоколу SOAP.
Нетрудно заметить, что эта идея тесно коррелирует с идеей брокеров, входящих в инфраструктуру объектного подхода CORBA, используемого в распре-
207

деленных системах. Тем не менее, несмотря на значительные усилия основных «идеологов» сервисных Web-технологий, к которым относятся корпорации IBM, Microsoft и SAP, использование UDDI не получило широкого распространения. В январе 2006 года ряд компаний объявили о закрытии своих общедоступных реестров UDDI. А в конце 2007 года, рабочая группа по UDDI в OASIS объявила о закрытии своего технического комитета.
Таким образом, технология UDDI была признана устаревшей, выведенной из состава программной платформы Java EE и мы не будем ее более рассматривать в данной дисциплине.
5.1.5 Программные пакеты Java EE, обслуживающие SOAP
Глобальный консорциум OASIS (Organization for the Advancement of Structured Information Standards) хранит множество официальных спецификаций, относящихся к технологии
Web-сервисов (Web-служб). Все они опубликованы под общим префиксом WS-*.
Вязыке Java разработка и утверждение всех спецификаций проходит под контролем процесса JCP (Java Community Process) — сформированного в 1998 году. JCP выпускает спецификации JSR под разными номерами, включая те, которые относятся к Web-сервисам.
Внастоящее время, основу технологии Web-сервисов представляют спецификации:
а) JAX-WS 2.2a — спецификация JSR 224;
б) Web Services 1.3 — спецификация JSR 109;
в) Web Services Metadata 2.3 — спецификация JSR 181; г) JAXB 2.2 — спецификация JSR 222.
Технологию JAXB мы рассмотрели в предыдущей главе, а технология Web Services 1.3 определяет модель программирования и поведение программного обеспечения во время выполнения Web-служб в контейнере Java EE и упаковку артефактов для обеспечения переносимости Web-служб на разные реализации серверов.
Технология JAX-WS 2.2a определяет набор API и основные аннотации, позволяющие создавать и использовать Web-службы в Java. Ее пакеты представлены в таблице 5.1. В них определяются API для различных обработчиков сообщений, поэтому, ни потребитель сервиса, ни Web-служба не должны сами генерировать или анализировать SOAP-сообщения. Этой низкоуровневой обработкой занимается программное обеспечение JAX-WS. В частности, JAX-WS интенсивно использует технологию JAXB, «скрывая» от участников взаимодействия все детали достаточно сложных преобразований.
208

Таблица 5.1 — Основные пакеты технологии JAX-WS 2.2a [17]
Пакет |
Описание пакета |
javax.xml.ws |
В этом пакете содержатся основные API JAX-WS. |
javax.xml.ws.http |
Определяет API, характерные для связывания XML/HTTP. |
javax.xml.ws.soap |
Определяет API, характерные для связывания SOAP 1.1/HTTP |
|
или SOAP 1.2/HTTP. |
javax.xml.ws.handler |
В этом пакете определяются API для обработчиков сообщений. |
Технолгия WS-Metadata 2.3 предоставляет аннотации, помогающие определять и развертывать Web-службы. Основная цель WS-Metadata — упростить развитие Web-служб, обеспечивая правильное и надежное отображение используемых объектов между описаниями WSDL и интерфейсами Java. Основные пакеты этой технологии представлены в таблице 5.2.
Таблица 5.2 — Основные пакеты технологии WS-Metadata 2.3 [17]
Пакет |
Описание пакета |
javax.jws |
Содержит аннотации для перехода от Java к WSDL и обратно. |
javax.jws.soap |
API, предназначенные для преобразования Web-служб к протоколу |
|
передачи сообщений SOAP. |
Часто, все перечисленные выше технологи, неофициально обозначают как JWS (Java Web Services) или просто — Web-службы Java. Некоторые из этих технологий были перенесены на уровень Standard Edition и влючены в Runtimeсистему языка Java. Другие, такие как JAX-RPC (JSR 101), на основе которых создавались технологии протокола XML-RPC, были удалены из платформы Java EE по причине их излишней громоздкости и сложности. Тоже самое произошло и с технологией JAXR (Java API for XML Registers), обслуживавшей доступ к службе реестров UDDI и удалена по причине их бесперспективности.
Особо следует отметить набор утилит, присутствующий в Runtime-систе- ме языка Java. Так, в каталоге /usr/lib/jvm/default-runtime/bin учебного дистрибутива ОС УПК АСУ, вы найдете утилиты:
а) wsgen — читает класс реализации Web-сервиса (SEI, Service Endpoint Implementation) и создает все необходимые артефакты для развертывания Web-сервиса и его вызова;
б) wsinport — генерирует на основе описания WSDL необходимые артефакты технологии JAX-WS, которые затем могут быть запакованы в WARархив и размещены на сервере приложений.
Дальнейшее изучение технологии Web-сервисов необходимо привязывать к конкретным примерам.
209