-спецификация, предоставляет возможность сохранять в удобном виде Java-объекты в базе данных. Hibernate одна из самых популярных открытых реализаций последней версии спецификации.
//Java Data Objects (JDO)-спецификация, которая описывает ORM(отображение) для любых возможных баз и хранилищ.
Facelets
– это технология, которая применяется для формирования страниц приложений, созданных по спецификации JSF.
Facelets поддерживает все компоненты JSF и создает собственное дерево компонент, отражая view для JSF-приложения.
Ранее для этих целей использовалась технология JSP, но теперь JSP не рекомендуется к применению, её заменила технология Facelets.
Facelets использует XHTML. Соответственно страницы, созданные по технологии Facelets, имеют расширение. xhtml.
В Facelets применяется унифицированный язык выражений (Unified Expression Language).
EXPRESSION LANGUAGE (EL)
Immediate value expressions — выполняются сразу при отображении страницы. Записываются как ${}.
Deferred value expressions — выполняются тогда, когда это необходимо (когда к ним обращаются). Синтаксис: #{expression}.
Мгновенные выражения выполняются и вычисляются на этапе рендера отображения. Отложенные выражения выполняются при непосредственном вызове.
FacesServlet
Обрабатывает запросы с браузера. Формирует объекты-события и вызывает методы-
слушатели.
Конфигурация FacesServlet:

Компоненты
Компоненты расположены на Facelets-шаблонах или страницах JSP. Компоненты реализуют интерфейс javax. ponent. UIComponent. Компоненты на странице объединены в древовидную структуру — представление. Корневым элементом представления является экземпляр класса javax. ponent. UIViewRoot.
Навигация между страницами JSF
Реализуется экземплярами класса NavigationHandler.
Навигация нужна для переходов между представлениями.
● Правила задаются в файле faces-config. xml:
<navigation-rule> Правило навигации
<from-view-id> Источник навигации, т. е. страница.
<navigation-case> Один из вариантов правила навигации.
<from-action> Выполнение определенного метода.
<from-outcome> Условия по которому выбирается данный переход
<to-view-id> Страница, на которую выполняется переход.
<redirect/> Перенаправление с изменением URL страницы.
● Пример перенаправления на другую страницу:![]()
Значение атрибута action, согласно принятому соглашению, является наименование страницы без указания расширения '.xhtml'.
Управляемые бины
Содержат параметры и методы для обработки данных с компонентов. Жизненным циклом управляет JSF Runtime Envronment. Доступ из JSF-страниц осуществляется с
помощью элементов EL.
Для объявлении класса управляемым бином используется аннотация @ManagedBean(name = «beanName», eager = «true\false»).
name: указывает уникальное имя класса (бина) в JSF. Если имя не указано, то имя совпадает с именем класса, где первая буква в нижнем регистре.
eager: указывает на время создания бина. Если стоит true, то бин будет создан на старте приложения, если false, то бин будет создан при первом запросе к нему.
Другим способом объявить управляемый бин — это указать его в faces-config. xml:

Пример

Контекс (scope)
● @NoneScoped — контекст не определён, жизненным
циклом управляют другие бины.
● @RequestScoped (применяется по умолчанию) - контекст — запрос.
● @ViewScoped — контекст — страница.
● @SessionScoped — контекст — сессия.
● @ApplicationScoped — контекст — приложение.
● @CustomScoped — бин сохраняется в Map;
программист сам управляет его жизненным циклом.
Конвертеры данных
Используются для преобразования данных компонента в заданный формат. Реализуют интерфейс javax. faces. convert. Converter. Существуют стандартные конвертеры для
основных типов данных. Можно создавать собственные конвертеры.
f:convertNumber: используется для преобразования строки в число.
f:convertDateTime: используется для преобразования строки в формат даты.
В стандартную поставку JSF входит множество стандартных конвертеров данных, благодаря чему большая часть конвертации происходит автоматически.
Стандартные конвертеры
javax. faces. BigDecimal
javax. faces. BigInteger
javax. faces. Boolean
javax. te
javax. faces. Character
javax. faces. DateTime
javax. faces. Double
javax. faces. Float
Для создания специализированного конвертера необходимо следующее:
- Создать класс, реализующий интерфейс Converter Реализовать метод getAsObject(), который будет вызываться для преобразования строкового значения поля в объект Реализовать метод getAsString, который будет вызываться для получения строкового представления объекта Зарегистрировать конвертеры в файле faces-config. xml, используя элемент <converter>.
Валидация данных JSF-компонентов
Осуществляется перед обновлением значения компонента на уровне модели. Класс, осуществляющий валидацию, должен реализовывать интерфейс
javax. faces. validator. Validator. Существуют стандартные валидаторы для основных типов данных. Можно создавать собственные валидаторы.
Примеры
![]()
![]()
JSF включает в себя три стандартных компонента для валидации:
DoubleRangeValidator: Проверяет, что значение компонента укладывается в интервал, определяемый нижней границей, верхней границей или и тем, и другим. Значение должно быть числом.
LongRangeValidator: Проверяет, что значение укладывается в интервал, определяемый нижней границей, верхней границей или и тем, и другим. Значение должно быть числом, преобразуемым к типу long.
LengthValidator: Проверяет, что длина значения укладывается в интервал, определяемый нижней границей, верхней границей или и тем, и другим. Значение должно быть типа String.
Для создания валидатора необходимо сделать следующее:
- Создать класс, реализующий интерфейс Validator (javax. faces. validator. Validator). Реализовать метод validate(). Зарегистрировать валидатор в файле faces-config. xml. Использовать тег <f:validator/> на страницах JSP.
Жизненный цикл
Восстановление представления.
JSF Runtime формирует представление (начиная с UIViewRoot):
● Создаются объекты компонентов.
● Назначаются слушатели событий, конвертеры и валидаторы.
● Все элементы представления помещаются в FacesContext.
● Если это первый запрос пользователя к странице JSF, то формируется пустое представление.
● Если это запрос к уже существующей странице, то JSF Runtime синхронизирует состояние компонентов представления с клиентом.
Получение значений компонентов
На стороне клиента все значения хранятся в строковом формате — нужна проверка их
корректности:
● Вызывается конвертер в соответствии с типом данных значения.
● Если конвертация заканчивается успешно, значение сохраняется в локальной переменной компонента.
● Если конвертация заканчивается неудачно, создаётся сообщение об ошибке, которое помещается в FacesContext.
Валидация значений компонентов
Вызываются валидаторы, зарегистрированные для компонентов представления.
Если значение компонента не проходит валидацию, формируется сообщение об ошибке, которое сохраняется в FacesContext.
Обновление значений компонентов
Если данные валидны, то значение компонента обновляется. Новое значение присваивается полю объекта компонента.
Вызов приложения
Управление передается слушателям событий. Формируются новые значения компонентов.
Формирование ответа сервера
JSF Runtime обновляет представление в соответствии с результатами обработки запроса. На стороне клиента происходит обновление страницы.
!!!!!!
EJB — технология разработки серверных компонентов, реализующих бизнес-логику.
Жизненным циклом управляет EJB-контейнер (в составе сервера приложений).

Stateless Session Beans
● Не сохраняют состояние между последовательными обращениями клиента.
● Нет привязки к конкретному клиенту.
● Объявление — аннотация @Stateless.
Stateful Session Beans
● «Привязываются» к конкретному клиенту.
● Можно сохранять контекст в полях класса.
● Объявление — аннотация @Stateful.
Singleton Session Beans
● Контейнер гарантирует существование строго одного экземпляра такого бина.
● Объявление — аннотация @Singleton.
Требования к классам Session Beans
● Должен быть public классом верхнего уровня.
● Не должен быть final и/или abstract.
● Должен иметь public конструктор без параметров.
● Не должен переопределять метод finalize().
● Должен реализовывать все методы бизнес-интерфейса(-ов).
Message-Driven beans — компонент является корпоративным компонентом, который позволяет Java EE приложениям обрабатывать сообщения асинхронно.
Этот тип бинов обычно действует в качестве слушателя JMS-сообщения. Message-Driven beans может обрабатывать не только JMS сообщения но и других видов сообщений.
У stateless и MDB бинов существует 2 события жизненного цикла, которые мы можем перехватить. Это создание и удаление бина.
Метод, который будет вызываться сразу после создании бина помечается аннотацией @PostConstruct, а перед его удалением — @PreDestroy.
У Stateful бина есть третье состояние - пассивный.
!!!!!!
JMS
Позволяет организовать асинхронный обмен сообщениями между компонентами.
Две модели доставки сообщений — «подписка» (topic) и «очередь» (queue).
ConnectionFactory – это, как нетрудно догадаться из названия, обьект, ответственный за создание JMS Connection. Администратор создает данный объект и связывает его с деревом JNDI, так что клиент JMS может получить доступ к ConnectionFactory используя стандартный JNDI lookup-механизм.
Connection – абстрактное представление реального соединения.
Session – обьект, создаваемый JMS Connection и используемый клиентами для посылки и принятия сообщений.
Destination – это либо queue, либо topic. Как и ConnectionFactory, destination связывается с деревом JNDI.
MessageProducer – обьект, который, собственно, и посылает сообщения.
MessageConsumer – обьект, принимающий сообщения. В случае point-to-point модели это javax. jms. QueueReceiver, в случае pub-sub – javax. jms. TopicSubscriber.
Message– сообщение.
!!!!!!
Объектно-реляционное отображение
ORM Ї преобразование данных из объектной формы в реляционную и наоборот.
Объектно-реляционное несоответствие
Сложности, возникающие при попытке отобразить один вид представления данных на другой, называют объектно - реляционным несоответствием.
Основные проявления объектно-реляционного несоответствия:
- Проблема идентичности.
Несколько неидентичных объектов представляют одну строку базы данных.
- Представление наследования и полиморфизма
Существует три способа реализации наследования в ORM:
Все классы иерархии отображаются на одну таблицу базы данных. Каждый класс в иерархии отображается на отдельную таблицу БД Каждый подкласс отображается на отдельную таблицу, которая содержит колонки, соответствующие только полям этого подкласса.- Проблема навигации между данными.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 |


