- •Введение
- •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
- •Вопросы для самопроверки
- •Заключение
- •Список использованных источников
- •Алфавитный указатель
Указанное программное обеспечение позволяет с помощью аннотаций сделать контейнеры платформы Java EE — CDI-контейнерами, а компоненты этой платформы — CDI-компонентами. Последней версией сервиса является CDI 2.0, а ее спецификации описаны в документе JSR 365 [19], что позволяет разработчикам компонент легко пользоваться контекстом среды исполнения и внедрять зависимости с объектами других компонент.
Сервис CDI-компонент вносит в язык Java декларативный стиль программирования в противовес императивному, требующему от программиста указания конкретных инструкций для достижения требуемого результата. Это повышает уровень абстрагирования программного обеспечения, но требует дополнительных усилий для изучения семантики используемых аннотаций.
«Управляемые компоненты — это объекты CDI, основанные на базовой модели управляемых компонентов. Они имеют улучшенный жизненный цикл для объектов с сохранением состояния; привязаны к четко определенным контекстам; обеспечивают сохранение безопасности типов при внедрении зависимостей, перехвате и декорации; специализируются с помощью аннотаций квалификатора; могут использоваться в языке выражений (EL)» [17].
Идейная концепция CDI имеет целью упростить использование программной платформы Java EE. Как ее использовать зависит от конкретных задач, решаемых конкретными приложениями, и будет показано в последующих главах данного учебного пособия.
1.5 Инструментальные средства реализации РСОС
Программная платформа Java Enterprise Edition — базовый framework, предназначенный для реализации масштабных сервис-ориентированных систем.
Теоретически, Java EE является одним из подходов ориентированных на создание распределенных прикладных систем (РВ-сетей, см. учебное пособие [1]), включающая в себя набор программных компонентов, позволяющих создавать полноценные сервис-ориентированные системы. В частности, среда выполнения Web-контейнеров, доступная в сети по протоколам HTTP/HTTPS и снабженная большим набором служебных (технических) сервисов, позволяет создавать стандартизированные публичные Web-службы, известные как Web-серви- сы. Согласно монографии Машнина Т.С. «Web-сервисы Java» [20, стр. 7]: «Webсервисы представляют собой программные компоненты, имеющие идентификатор URI, и взаимодействие с которыми осуществляется по Интернету с помощью открытых протоколов. Коммуникация с Web-сервисами может выполняться с помощью различных транспортных протоколов, таких как HTTP, HTTPS,
43
FTP, SMTP, BEEP, при этом Web-сервисы можно подразделить на три вида: SOAP Web-сервисы, ориентированные на модель RPC (вызов удаленных процедур), XML Web-сервисы, ориентированные на сообщения, и RESTful Web-сер- висы».
Инфраструктура сервис-ориентированных систем предполагает наличие в сети множества доступных для потребителей сервисов серверов приложений, на которых провайдеры сервисов размещают свои приложения.
Независимо от используемой программной платформы, сервис-ориенти- рованные системы требуют наличия:
а) аппаратных средств ВМ (ЭВМ) с установленной на ней операционной системой (ОС);
б) программных средств сервера приложений, обеспечивающих сетевой доступ к установленной на нем программной платформы содержащей ПО сервисов;
в) инструментальные средства разработки сервисов, включающие средства развертки их в среде сервис-ориентированной программной платформы.
Инфраструктура учебного процесса по данной дисциплине должна в общих чертах отражать инфраструктуру сервис-ориентированных систем.
Тематика данной дисциплины «Распределенные сервис-ориентированные системы» (РСОС) ограничена изучением технологий программной платформы Java EE, в плане последующего применения полученных знаний для целей создания Web-сервисов различного назначения. При этом предполагается, что студент имеет подготовку в пределах бакалаврского курса «Распределенные вычислительные системы» [1] и владеет основами программирования на языке Java в пределах платформы Standart Edition (J2SE).
Инфраструктура учебного процесса данной дисциплины ограничена учебными классами кафедры АСУ и ПО УПК АСУ на базе ОС Linux [21], дополненным:
а) индивидуальной рабочей областью студента: rsos-home.ext4fs.gz; б) СУБД Apache Derby [22];
в) сервером приложений Apache TomEE [23]; г) средой разработки Eclipse EE [24];
д) учебно-методическими пособиями (УМП) по данной дисциплине, помещенными в индивидуальную рабочую область (включая данное учебное пособие).
44
Эти средства обеспечивают достижение учебной цели дисциплины.
Обоснование этого утверждения изложено в следующих пяти пунктах.
1.5.1Сервера приложений
Вданной дисциплине, под сервером приложений понимается комплекс программ, реализующих программную платформу Java EE и позволяющих запускать в себе приложения Java EE.
Куказанному классу относятся многие продукты, например:
а) GlassFish — сервер приложений с открытым исходным кодом, выпущенный компанией Sun Microsystems в июне 2005 года; в качестве контейнера сервлетов использует модифицированный Apache Tomcat;
б) IBM WebSphere Application Server — проприоретарный сервер компании IBM, впервые выпущенный в сентябре 1998 года; является представителем широкого спектра продукции категории middleware (промежуточного ПО), выпускаемой под брендом WebSphere;
в) JBoss Application Server (JBoss AS) — сервер приложений с открытым исходным кодом, выпущенный компанией JBoss в феврале 2008 года, использующий в качестве контейнера сервлетов Apache Tomcat и преобретенный вместе с JBoss компанией RedHat в апреле 2006 года; в настоящее время выпускается под брендом WildFly;
г) Apple WebObjects — проприоретарный сервер приложений, начавший разрабатываться в марте 1996 года корпорацией NeXT Software Inc., которая в сентябре 2008 года выпустила финальную версию 5.4.3;
д) WebLogic Server — проприоретарный сервер приложений компании WebLogic, поглощенной в 1998 году компанией BEA Systems, которую в 2008 году приобрела корпорация Oracle.
В качестве учебного сервера приложений выбран дистрибутив Apache TomEE, титульная страница которого приведена на рисунке 1.16.
Основными преимуществами сервера TomEE являются:
а) компактность (максимальная комплектация порядка 77 МБайт), легкое развертывание, возможность масштабирования установки, хорошая документация и совместимость со средой разработки Eclipse EE;
б) умение студентов работать с базовой частью сервера (Apache Tomcat), полученное из бакалаврского курса «Распределенные вычислительные системы».
45
Рисунок 1.16 — Титульная страница сервера приложений Apache TomEE
Что касается недостатков, то их определить достаточно сложно, учитывая большую авторскую нестабильность приведенных выше примеров и будущую неопределенность перехода продуктов на платформу Jakarta EE.
В целом, Apahe TomEE позицирует себя как Apache Tomcat + Java EE + дополнительное сервисное ПО, которое можно использовать опционально.
Таким образом, TomEE — лучший выбор для учебного процесса!
1.5.2 Микросервисы
Теоретический материал данного пособия опирается на концептуальные положения, изложенные для программной платформы Java EE 7 (июнь 2013 года) и достаточно полно представленные в монографии Э. Гонсалвеса [17]. Что касается выхода финальной платформы Java EE 8, спецификация которой была выпущена 21 сентября 2017 года, то она фактически полностью реализовала идейные положения предыдущей версии, внеся ряд несущественных для данной дисциплины изменений. Соответственно, новая платформа Jakarta EE, кроме дополнительных проблем связанных с переходом с главного домена javax.*
46