Добавил:
rushevamar@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РИС шпоры для печати.docx
Скачиваний:
29
Добавлен:
31.05.2022
Размер:
1.01 Mб
Скачать

В интерфейсе EntityManager определены следующие группы методов:

- управление жизненным циклом сущностей (persist(), refresh(), remove(), merge());

- поиск экземпляра сущности по первичному ключу (find(), getReference());

- создание объектов типа Query, предназначенных для выполнения запросов (createNamedQuery(), createQuery(), createNativeQuery());

- управление контекстом персистентности (flush(), clear(), close(), getTransaction() и т.д.).

Основные методы:

  • persist() - вводит новый экземпляр сущности в персистентный контекст. При коммите транзакции командой SQL INSERT в БД будет создана соответствующая запись.

  • merge() - переносит состояние отсоединенного экземпляра сущности в персистентный контекст следующим образом: из БД загружается экземпляр с тем же идентификатором, в него переносится состояние переданного Detached экземпляра и возвращается загруженный Managed экземпляр. Далее надо работать именно с возвращенным Managed экземпляром. При коммите транзакции командой SQL UPDATE в БД будет сохранено состояние данного экземпляра.

  • remove() - удалить объект из базы данных, либо, если включен режим мягкого удаления, установить атрибуты deleteTs и deletedBy. Если переданный экземпляр находится в Detached состоянии, сначала выполняется merge().

  • find() - загружает экземпляр сущности по идентификатору. При формировании запроса к БД учитывается представление, переданное в параметре данного метода, либо установленное для всего EntityManager методом setView(). В результате в персистентном контексте окажется граф объектов, для которого загружены все не-lazy атрибуты представления. Остальные атрибуты можно дозагрузить обращением к соответствующим методам доступа объектов, либо вызовом метода fetch().

  • createQuery() - создать объект Query для выполнения JPQL запроса. Рекомендуется использовать вариант метода с передачей класса сущности для получения экземпляра TypedQuery.

  • createNativeQuery() - создать объект Query для выполнения SQL запроса.

  • setView() - устанавливает представление по умолчанию, с которым будет производиться последующая загрузка сущностей методом find() либо JPQL запросами. В результате жадно загружены будут все не-lazy атрибуты представления. Если в данный метод передать null, либо не вызывать его вообще, загрузка будет производиться в соответствие с правилами аннотаций сущностей. Представления, явно переданные в метод find() или установленные в объекте Query имеют приоритет над установленным данным методом.

  • addView() - аналогичен методу setView(), но в случае наличия уже установленного в EntityManager представления, не заменяет его, а добавляет атрибуты переданного представления.

  • fetch() - обеспечивает для экземпляра сущности загрузку всех атрибутов указанного представления, включая lazy атрибуты. Экземпляр сущности должен быть в Managed состоянии. Данный метод рекомендуется вызывать перед коммитом транзакции, если представление содержит lazy атрибуты, а экземпляр сущности нужно отправить на клиентский уровень. В этом случае только после вызова fetch() можно быть уверенным, что все нужные клиентсткому коду атрибуты действительно загружены.

  • reload() - перезагрузить экземпляр сущности с указанным представлением. Обеспечивает загрузку всех атрибутов представления, вызывая внутри себя метод fetch().

32. Технология JSF JSF- как реализация Фреймворка MVC. Основные принципы и компоненты реализации, преимущества технологии JSF по сравнению с аналогичными технологиями разработки веб-приложений. ПОЛИНА

JavaServer Faces (JSF) — это фреймворк для веб-приложений, написанный на Java. Он служит для того, чтобы облегчать разработку пользовательских интерфейсов для Java EE приложений. В отличие от прочих MVC фреймворков, которые управляются запросами, подход JSF основывается на использовании компонентов. Использование компонентов позволяет разрабатывать пользовательский интерфейс на более высоком уровне по сравнению с кодом html. Предусмотрена возможность повторно обращаться к собственным компонентам и применять наборы компонентов сторонних разработчиков.

Состояние компонентов пользовательского интерфейса сохраняется, когда пользователь запрашивает новую страницу и затем восстанавливается, если запрос повторяется. Для отображения данных обычно используется JSP, но JSF можно приспособить и под другие технологии.

При этом модель (Model) – это коллекция классов, которые служат для сохранения, изменения и получения данных; представление (View) – это jsf страница в xhtml формате; поведение (Controller) – это managed bean, который интерпретирует данные, введённые пользователем, и информирует модель о необходимости соответствующей реакции. JSF также хорошо интегрируется со Spring.

Платформа JSF состоит из следующих частей:

1.Набор заранее подготовленных компонентов для использования интерфейса;

2.Модель программирования, управляемая событиями;

3.Модель компонентов, позволяющая сторонним разработчикам предоставлять дополнительные компоненты.

Жизненный цикл обработки запроса JSF:

1)Восстановление представления (запрос поступает на вход сервлета FacesServlet. Последний анализирует данные запроса и извлекает идентификатор представления, определяемый именем страницы JSP)

2)Получение значений запроса (отправленные данные сохраняются в компонентах)

3)Проверка данных (валидация данных)

4)Обновление данных модели (локальные значения используются для обновления бинов, которые привязаны к компонентам)

5)Вызов приложения (вызывает приложение для обработки данных, полученных через форму)

6)Формирование ответа (значения компонентов заполняются из managed bean полей)

Преимущества JSF 2 по сравнению с MVC (servlet + jsp):

  • 1. JSF обеспечивает программиста хорошим набором API, что даёт возможность создавать свои компоненты. Также можно воспользоваться уже готовыми компонентами, такими как: PrimeFaces, ICEfaces, RichFaces, PrettyFaces, OpenFaces и др.

  • 2. С помощью JSF легко указать, с помощью какого Java кода будет обрабатываться форма.

  • 3. JSF расширяет/добавляет возможность валидировать/конвертировать значения.

  • 4. JSF дает вам возможность без использования JavaScript, а также AJAX ориентированных фреймворков, таких, как Jquery, EXT-JS, Prototype и др. писать AJAX ориентированное приложение, используя простые в использовании компоненты JSF.

  • 5. JSF имеет встроенную возможность валидировать поля форм, конвертировать string поля ко многим другим типам данных. Если валидация/конвертация прошла с ошибкой, форма может быть автоматически показана с ошибкой вместе с предыдущими установленными значениями. Валидация/конвертация проходит на серверной стороне.

  • 6. Хотя у JSP есть jsp:include тег для вставки контента, однако JSF имеет полноценную поддержку системы шаблонизации страниц, которая позволяет создавать макет страницы, либо ее часть для дальнейшего использования.

  • 7. Централизованная файловая конфигурации JSF, что позволяет вместо жесткого кодирования данных в программе Java выносить ее в конфигурационный файл. Что позволяет без редактирования Java кода и перекомпиляции изменить эти данные.

Недостатки JSF 2 по сравнению с MVC (servlet + jsp):

  • 1. Если у вас уже есть приложение, которое написано на servlet + jsp, и у вас есть необходимость сделать в нем некоторый AJAX функционал, то гораздо проще использовать, например, Jquery (если вы знаете JavaScript), чем перевести это приложение на JSF.

  • 2. По сравнению с JSP и servlet на JSF написано заметно меньше документации.

  • 3. У JSF приложения есть много моментов, которые тяжело отследить, понять и оптимизировать, например генерация html/css/javascript кода выбранным компонентом, и др.

  • 4. Существует большое количество IDE, которые поддерживают стандартный JSP и servlet, однако JSF 2 начали поддерживать недавно, так как это достаточно новая технология.