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

2.3 Реализация тестового примера средствами JSF
Учебная цель данного подраздела — изучить базовые средства практического использования компоненты JSF.
Важность практического изучения возможностей JSF связана с явным подобием ее функциональной архитектуры, видимой клиентом Web-приложе- ния и бизнес-парадигмой модели SOA, представленной в предыдущей главе на рисунке 1.12 (см. стр. 32). Действительно, клиент JSF-приложения обращается к Web-приложению посредством указания URI-ресурса в виде файла XHTML, который (на основе Facelets-шаблона) отражает «Представление», скрытого за ним, бизнес-приложения. Аналогично, бизнес-руководитель предприятия к биз- нес-функции уровня приложений, «Представлению» уровня бизнес-логики. Таким образом, технология Web-приложений на основе компоненты JSF — явный кандидат на технологию реализации уровня бизнес-логики предприятия.
Если рассматривать учебный процесс данной дисциплины в интерпретации функционирования предприятия, то учебный материал данного подраздела — это формирование и реализация уровня бизнес-логики такого предприятия.
2.3.1 Создание Facelets-шаблона изучаемой дисциплины
Базовым ресурсом Facelets-компонент являются XHTML-файлы.
Новый шаблон Facelets-компонент создадим по общей схеме предыдущего шаблона, как это приведено в таблице 2.5.
Обратите внимание, что:
а) все компоненты шаблона представлены файлами в XHTML-формате;
б) имена компонент шаблона отличаются от имен старого шаблона только цифрой и располагаются в тех же каталогах;
в) зеленым цветом выделены статические компоненты, не требующие новых знаний;
г) синим цветом выделены компоненты, использующие ссылки; д) красным цветом выделена компонента, использующая список.
85
Таблица 2.5 - Facelets-компонент нового шаблона
Компонента |
Описание |
lab3Templ.xhtml |
Базовый шаблон. Листинг 2.8. |
header3.xhtml |
Заголовок учебной дисциплины. Листинг 2.9. |
subheader3.xhtml |
Вид занятия. Листинг 2.10. |
footer3.xhtml |
Концевик приложения. Листинг 2.11. |
welcome3.xhtml |
Контекст приложения. Основной перезагружаемый компо- |
|
нент. Листинг 2.12. |
menus3.xhtml |
Компонента боковой страницы. Листинг 2.13. |
lab3.xhtml |
Дополнительный ресурс. Листинг 2.14. |
auth3.xhtml |
Дополнительный ресурс. Листинг 2.15. |
default.xhtml |
Доступный ресурс по умолчанию. Листинг 2.16. |
Листинг 2.8 — Базовый шаблон lab3Templ.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>Новый шаблон labs</title>
</head>
<body>
<div id="header"> <ui:insert name="header">
<ui:include src="/WEB-INF/templates/header3.xhtml"/> </ui:insert>
</div>
<div id="subheader"> <ui:insert name="subheader">
<ui:include src="/WEB-INF/templates/subheader3.xhtml"/> </ui:insert>
</div>
<table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr>
<td id="menus" valign="top" width="1px">
<ui:insert name="menus">
<ui:include src="/WEB-INF/templates/menus3.xhtml"/> </ui:insert>
</td>
86
<td id="context" valign="top">
<ui:insert name="content">
<ui:include src="/WEB-INF/templates/welcome3.xhtml"/> </ui:insert>
</td> </tr> </table>
<div id="footer"> <ui:insert name="footer">
<ui:include src="/WEB-INF/templates/footer3.xhtml"/> </ui:insert>
</div>
</body> </html>
В листинге 2.8 комментировать нечего, поскольку в нем изменены только ссылки на компоненты, согласно именам таблицы 2.5.
Листинг 2.9 — Заголовок учебной дисциплины header3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Заголовок</title>
</head> <body>
<div
</div> </body> </html>
align="center" style="width:100%;font-size:26px;line-height:28px; background-color:navy;color:white;padding:10px"> Распределенные сервис-ориентированные системы
В листинге 2.9 изменен только текст и размер шрифта.
Листинг 2.10 — Вид занятия subheader3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Вид занятий</title>
</head> <body>
<div style="background-color:gray;width:100%;
87

color:white;padding:5px"> Лабораторные работы
</div> </body> </html>
В листинге 2.10 изменен только текст.
Для навигации между ресурсами без помощи конпонент-подложек используются тегицелей из библиотеки тегов http://xmlns.jcp.org/jsf/html (см. таблицу 2.3 на стр. 79), которые определенны в таблице 2.6.
Таблица 2.6 — Теги целей [17]
Тег |
Описание |
<h:button> |
Отрисовывает элемент ввода данных HTML для |
|
кнопки, при нажатии на которую создается HTTP-запрос GET. |
<h:link> |
Отрисовывает элемент привязки HTML <a>, при нажатии на |
|
которую создается HTTP-запрос GET. |
Формат использования этих тегов — смотри в листингах 2.11 и 2.12.
Листинг 2.11 — Концевик приложения footer3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Концевик приложения</title>
</head> <body>
<div style="background-color:gray;width:100%;color:white; padding:20px;font-style:italic">
Учебный программный комплекс "УПК АСУ" <br/> Преподаватель: В.Г. Резник <br/>
<h:link outcome="default.xhtml" value="Перейти на главную..."/>
</div>
</body> </html>
Листинг 2.12 — Контекст приложения welcome3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
88

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title>
</head> <body>
<div align="center" style="color:black; width:100%; padding:10px"> <h2>Приветствуем Вас на сайте дисциплины РСОС!</h2>
<p><a href="http://localhost:8080/test/TestTomee"> Запуск тестового примера...</a></p>
<p><h:link outcome="index.xhtml"
value="Показать базовый шаблон..."/> </p>
<p><h:link outcome="lab3.xhtml" value="Лабораторная работа №3"/> </p>
<p><h:button outcome="auth3.xhtml" value="На авторизацию..."/> </p>
</div> </body> </html>
Для удобного ввода информации используется набор тегов-выбора, основанных на двух базовых библиотеках тегов http://xmlns.jcp.org/jsf/html и http://xmlns.jcp.org/jsf/core.
Перечень указанных тегов-выбора представлен в таблице 2.7.
Таблица 2.7 — Теги-выбора [17]
Тег |
Описание |
<h:selectBooleanCheckbox> |
Отображается один флажок, представляющий двоичное |
|
значение. Флажок будет установлен в зависимости от |
|
значения свойства. |
<h:selectManyCheckbox> |
Отрисовывается список флажков. |
<h:selectManyListbox> |
Отрисовывается компонент множественного выбора, где |
|
могут быть выбраны один или несколько вариантов. |
<h:selectManyMenu> |
Отрисовывается HTML-элемент <select>. |
<h:selectOneListbox> |
Отрисовывается компонент одиночного выбора, где может |
|
быть выбран только один вариант. |
<h:selectOneMenu> |
Отрисовывается компонент одиночного выбора, где может |
|
быть выбран только один вариант. Показывает только один |
|
доступный вариант в любой момент времени. |
<h:selectOneRadio> |
Отрисовывает список переключателей. |
89

Следует заметить, что теги-выбора, имея стилизованное графическое представление, предназначены для ввода бизнес-информации и для нормального использования привязывается к компоненте-подложке (бизнес-модели).
В данном пункте, мы создаем Facelets-шаблон изучаемой дисциплины или, другими словами, - уровень бизнес-логики предприятия, который еще не привязан к бизнес модели.
Далее, на листинге 2.13 представлена компонента menus.xhtml, которая в декоративной форме выводит список лабораторных работ с помощью тега
<h:selectOneListbox>.
Листинг 2.13 — Компонента боковой страницы menus3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Боковая страница</title>
</head> <body>
<div style="background-color:lightgray; color:black;padding:10px">
<b>Список работ</b> <hr/>
<h:selectOneMenu>
<f:selectItem itemLabel="Работа №1"/> <f:selectItem itemLabel="Работа №2"/> <f:selectItem itemLabel="Работа №3"/> <f:selectItem itemLabel="Работа №4"/> <f:selectItem itemLabel="Работа №5"/> <f:selectItem itemLabel="Работа №6"/> <f:selectItem itemLabel="Работа №7"/> <f:selectItem itemLabel="Работа №8"/> <f:selectItem itemLabel="Работа №9"/> </h:selectOneMenu> <hr/>
</div> </body> </html>
Далее представлены листинги двух ресурсов lab3.xhtml и lab3.xhtml, которые будут задействованы в следующих пунктах данного подраздела, а здесь участвуют в качестве демонстрационного заполнения.
90
Листинг 2.14 — Доступный пользователю ресурс lab3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xml:lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Приложение lab3</title>
</head> <body>
<ui:composition template="/WEB-INF/templates/lab3Templ.xhtml"> <ui:define name="context">
Работа lab3 еще не сделана! </ui:define>
</ui:composition>
</body> </html>
Листинг 2.15 — Доступный пользователю ресурс auth3.xhtml проекта labs
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xml:lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Приложение auth3</title>
</head> <body>
<ui:composition template="/WEB-INF/templates/lab3Templ.xhtml"> <ui:define name="context">
Работа auth3 еще не сделана! </ui:define>
</ui:composition>
</body> </html>
Прямой доступ к новому Facelets-шаблону осуществляется с помощью ресурса default.xhtml, представленного на следующем листинге.
Листинг 2.16 — Доступный пользователю ресурс default.xhtml проекта labs
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
91

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core" xml:lang="ru">
<ui:composition template="/WEB-INF/templates/lab3Templ.xhtml"> <!--
<ui:define name="menus"></ui:define>
--> </ui:composition>
</html>
Теперь в рапоряжении имеются все компоненты. Запуск файла ресурса default.xhtml покажет нам новый Facelets-шаблон с вполне функциональной заставкой приветствия (см. рисунок 2.20).
Рисунок 2.20 — Новый Facelets-шаблон учебной дисциплины
Обратите внимание, что, если в листинге 2.16 убрать комментарий, то боковая панель показана не будет.
92