Чтобы переопределить поведение по умолчанию и заставить помечать транзакции для отката при генерации любых исключений приложения, вам следует написать следующую строку:
@Transactional(rollbackOn={Exception.class})
С другой стороны, если вы не хотите, чтобы транзакция не помечалась перехватчиком для отката при генерации исключения IllegalStateException (непроверенное исключение) или любого из его подклассов, вы можете использовать атрибут dontRollbackOn следующим образом:
@Transactional(dontRollbackOn={IllegalStateException.class})
Вы можете указать оба атрибута для уточнения поведения транзакции. Каждый атрибут принимает массив классов и может использоваться следующим образом:
@Transactional(rollbackOn={SQLException.class},
····dontRollbackOn={SQLWarning.class, ArrayIndexOutOfBoundsException.class})
Не существует особой встроенной информации об исключениях приложения EJB (то есть исключениях с аннотацией @ApplicationException). Поскольку используется перехватчик, эти исключения должны рассматриваться как и любые другие исключения, если только иное не определено атрибутами rollbackOn и dontRollbackOn.
Резюме
В этой главе я показал вам, как управлять транзакциями в EJB и Managed Beans. Вы можете управлять транзакциями декларативно или программно.
Транзакции позволяют бизнес-уровню держать данные в согласованном состоянии, даже если к ним осуществляется одновременный доступ от нескольких приложений. Они следуют правилам ACID и могут быть распределены по нескольким ресурсам (базам данных, конечным точкам JMS, веб-службам и т. д.). CMT позволяет вам легко настроить поведение контейнера EJB с точки зрения разграничения транзакций. Вы можете влиять на это поведение, пометив транзакцию для отката с помощью контекста EJB или исключений. Вы всегда можете использовать BMT, если вам нужно более точное управление разграничением транзакций непосредственно с помощью JTA. Новинкой Java EE 7 является возможность использовать эти понятия для других компонентов, таких как сервлеты или веб-службы, благодаря связыванию перехватчиков CDI.
Глава 10. JavaServer Faces
Если вы хотите графически отобразить информацию, поступающую от сервера, то должны создать пользовательский интерфейс. Он может быть разным: настольное приложение, веб-приложение, работающее в браузере, или мобильное приложение, работающее в портативном устройстве, которое отображает графический интерфейс и взаимодействует с конечным пользователем.
Сегодня мы живем в интернет-зависимом мире. Поскольку наш транзакционный сервер обрабатывает тысячи запросов и общается с гетерогенными системами с помощью веб-служб, нам необходим уровень презентации для взаимодействия с конечными пользователями, предпочтительно работающий в браузере. Браузеры есть везде, пользовательские интерфейсы стали богаче, динамичнее и проще в применении, чем ранее. Многофункциональные веб-приложения становятся все популярнее, поскольку пользователи ожидают большего от работы в Интернете. Они нуждаются в использовании каталогов книг и компакт-дисков в Интернете, а также хотят иметь доступ к электронной почте и документам, получать уведомления по электронной почте. Они также иногда хотят, чтобы обновлялась лишь часть страницы по срабатыванию какого-либо события сервера. Добавьте к этому философию Web 2.0, согласно которой люди могут обмениваться любой информацией с группами друзей и взаимодействовать друг с другом, в результате веб-интерфейсы становятся все более и более сложными для разработки. JavaServer Faces (JSF, или просто Faces) был создан, чтобы облегчить создание графических интерфейсов.
Вдохновленный моделью компонентов Swing и другими фреймворками графических интерфейсов пользователя, JSF позволяет разработчикам думать в терминах компонентов, событий, компонентов-подложек и их взаимодействий, а не в терминах запросов, ответов и языка разметки. Его цель — сделать веб-разработку быстрее и проще, предоставив поддержку компонентов пользовательского интерфейса (таких как текстовые поля, списки, панели вкладок и сеток с данными) с точки зрения подхода быстрой разработки приложений (RAD).
В этой главе описаны веб-страницы, созданные с помощью HTML, CSS и JavaScript. Далее мы сфокусируемся на создании веб-интерфейсов с использованием компонентов JSF, а также научимся создавать собственные компоненты.
Концепция веб-страниц