- •Введение
- •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
- •Вопросы для самопроверки
- •Заключение
- •Список использованных источников
- •Алфавитный указатель
1.4 Программная платформа Java Enterprise Edition
Проблема качественного выбора прикладной платформы упирается в решение двух подпроблем (см. рисунок 1.12):
−выбор платформы, обеспечивающий стабильное представление и легко расширяемую реализацию уровня интерфейсов сервисов;
−выбор платформы, обеспечивающей реализацию стабильных прикладных компонент уровня приложений.
23 мая 1995 года публичная американская компания Sun Microsystems выпустила первую версию программной платформы, включающей:
−язык объектно-ориентированного программирования Java;
−виртуальную машину JVM (Java Virtual Machine).
Позитивная часть этой реализации — обеспечение разработчиков программного обеспечения уровня приложений инструментальными средствами для создания программных компонент, переносимых между аппаратными платформами и платформами операционных систем.
В 1998 году таже компания Sun Microsystems анонсировала платформу JPE (Java Platform for the Enterprise), которая содержала спецификацию технологии написания и поддержки серверных компонентов реализации бизнес-логи- ки обозначаемой как EJB (Enterprise Java Beans). В дальнейшем, реализации этой платформы стали обозначаться как продукты Java EE.
Позитивная составляющая концепции этой платформы — контейнерная технология реализации сервисов, что позволяет унифицировать как реализацию компонент уровня приложений, так и представления уровня сервисов.
Текущее состояние парадигмы Java Enterprise Edition — версия 8.
С момента появления первой реализации Java EE (декабрь 1999 года) прошло много времени, в течении которого технологии JPE постоянно модифицировались и дополнялись сопуствующими технологиями. В настоящее время, текущей и финальной реализацией Java EE является версия 8.0, появившаяся в сентябре 2017 года.
В 2018 году, правоприемница технологий Java и Java EE (корпорация Oracle) передала в руки некоммерческой организации Eclipse Foundation процессы разработки спецификаций, TCK (Technology Compatibility Kit) и эталонную реализацию продукта, но потребовала смены бренда Java EE и главного домена пакета — «javax.*».
На основании сложившейся ситуации, Eclipse Foundation сделала следую-
щее:
31
а) заявила и представила новую платформу Jakarta EE 8;
б) заявила о переходе на новое пространство имен «jakarta.*»;
в) сформировала новый процесс JESP (Jackarta Eclipse Specification Process) — формальный процесс, позволяющий заинтересованным лицам участвовать в формировании будущих версий спецификаций платформ;
г) сформировала рабочую группу Jakarta EE Working Group, которая будет развивать платформу Jakarta EE.
Учебная цель данного подраздела — изучение общей архитектуры приложений, основанных на принципах парадигмы Java Enterprise Edition.
Общие принципы парадигмы Java Enterprise Edition достаточно подробно изложены в современной литературе:
а) общие вопросы и проблематика использования платформы Java EE 8 подробно изложены в монографии Себастьяна Дашнера «Изучаем Java EE. Современное программирование для больших предприятий» [16];
б) фактический учебный материал данного пособия опирается на монографию Энтони Гонсалвеса «Изучаем Java EE 7» [17];
в) частные вопросы применения языка Java опираются на монографию Герберта Шилдта «Java 8. Полное руководство» [18].
Чтобы разобраться с этими принципами Java EE, воспользуемся материалом монографии [17] и рассмотрим следующие вопросы:
а) контейнеры и компоненты Java EE; б) служебные сервисы контейнеров; в) артефакты контейнеров;
г) аннотации и дескрипторы развертывания компонент; д) управляемые компоненты платформы Java EE.
1.4.1 Контейнеры и компоненты Java EE
Основу архитектуры платформы Java EE составляют контейнеры и компоненты, которые написаны на языке Java и функционируют в среде виртуальной машины Java (JVM).
Контейнеры — специальные системные программы языка Java, создающие среду и сервис для функционирования других программных модулей языка Java, называемых компонентами.
Компоненты — специальные расширяемые разработчиками модули языка Java для реализации сервисов, способные работать в среде контейнеров и
32
пользоваться его служебными сервисами.
Платформа Java EE имеет четыре вида стандартных контейнеров, представленных на рисунке 1.13:
а) EJB-контейнер — серверный вид контейнера, способный содержать только один вид компонента — «EJB»;
б) Веб-контейнер — серверный вид контейнера, способный содержать три вида компонент: «EJB Lite», «Servlet (Сервлет)» и «JSF»;
в) контейнер апплета — клиентский вид контейнера, реализуемый в среде браузера (при поддержке JVM) и способный содержать только один вид компонента — «Applet (Апплет)»;
г) контейнер клиентского приложения, способный содержать только один вид компонента — «Application (Приложение)».
Рисунок 1.13 - Стандартные контейнеры Java EE [17]
Сразу же заметим, что контейнер апплетов не получил большой популярности, в основном по причине противодействия разработчиков браузеров, которые не желали поддерживать виртуальную машину Java (JVM). Поэтому он далее не рассматривается.
Обозначение RMI/IIOP читается как «RMI поверх IIOP».
33
RMI (Remote Method Invocation) — программный интерфейс для удаленного вызова методов на языке Java. Используется в реализациях объектного подхода в распределенных системах.
IIOP (Internet Inter-ORB Protocol) — конкретная реализация протокола GIOP на стеке протоколов TCP/IP.
GIOP (General Inter-ORB Protocol) — абстрактный протокол в распределенных объектных системах.
Основу платформы Java EE составляют контейнеры EJB и клиентских приложений.
EJB-контейнеры, именуемые серверами приложений, предназначены для реализации бизнес-логики крупномасштабных сервисов, а контейнеры клиентских приложений предназначены для реализации АРМ-пользователей, обеспечивающих доступ к серверам приложений. Выгоды от такой архитектуры информационных систем заключаются в использовании служебных сервисов предоставляемых контейнерами. Это освобождает разработчиков приложений от необходимости самостоятельного проектирования и реализации множества стандартных системных функций, например, синхронизации доступа к разделяемым ресурсам приложений, обеспечение безопастности и других задач.
Современные разработчики сервисов все больше ориентируются на использование вебконтейнеров.
Крупномасштабные EJB-компоненты требуют большого времени на проектирование, разработку и модификацию. В тех случаях, когда на уровне бизнес-логики (см. рисунок 1.12) масштабные бизнес-процессы представляются как комбинации более мелких бизнес процессов, гораздо эффективней использовать компоненты веб-контейнера (web-container).
Веб-контейнер обеспечивает доступ к нему по широко известным и популярным протоколам HTTP/HTTPS. Кроме контейнеров клиентских приложений можно использовать обычные браузеры, что обеспечивается тремя стандартными компонентами:
а) EJB Light — облегченный вариант EJB-контейнера, обеспечивающий наиболее важные функции реализации бизнес-логики и способный функционировать в веб-контейнере;
б) Сервлет (HttpServlet) — компонента, хорошо известная студентам по бакалаврскому курсу «Распределенные вычислительные системы» и поддерживающая технологию JSP-страниц;
в) JSF (JavaServer Faces) — компонента, обеспечивающая построение пользовательских интерфейсов с помощью XHTML-страниц на стороне серве-
34