Энтони Гонсалвес - Изучаем Java EE 7

Тут можно читать онлайн Энтони Гонсалвес - Изучаем Java EE 7 - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2014. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Энтони Гонсалвес - Изучаем Java EE 7 краткое содержание

Изучаем Java EE 7 - описание и краткое содержание, автор Энтони Гонсалвес, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java.
Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода.
Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP). В ней вы найдете максимально ценную информацию, изложенную с точки зрения эксперта по технологиям Java для предприятий.
Благодаря этой книге вы:
— познакомитесь с новейшей версией платформы Java EE;
— исследуете и научитесь использовать API EJB и JPA — от компонентов-сущностей, компонентов-сеансов до компонентов, управляемых сообщениями, и многого другого;
— откроете для себя API для разработки на веб-уровне, в частности JSF, Facelet и Expression Language;
— научитесь обращаться с веб-службами SOAP и RESTful, а также с другими службами, доступными в новейшей версии Java EE;
— узнаете, как создавать динамические пользовательские интерфейсы для корпоративных и транзакционных Java-приложений.

Изучаем Java EE 7 - читать онлайн бесплатно полную версию (весь текст целиком)

Изучаем Java EE 7 - читать книгу онлайн бесплатно, автор Энтони Гонсалвес
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

····logger.entering(ic.getTarget(). toString(), ic.getMethod(). getName());

····try {

······return ic.proceed();

····} finally {

······logger.exiting(ic.getTarget(). toString(), ic.getMethod(). getName());

····}

··}

}

Несмотря на аннотацию @AroundInvoke, logMethod() должен иметь следующий образец подписи:

@AroundInvoke

Object (InvocationContext ic) throws Exception;

Следующие правила относятся к методу, предшествующему вызову (а также конструктору, времени задержки или перехватчикам жизненного цикла):

• метод может иметь доступ public, private, protected либо доступ на уровне пакета, но не должно быть доступа static или final;

• метод должен иметь параметр javax.interceptor.InvocationContext и возвращать объект, который является результатом вызванного метода проб;

• метод может генерировать проверяемое исключение.

Объект InvocationContext позволяет перехватчикам контролировать поведение цепочки вызовов. Если несколько перехватчиков соединены в цепочку, то один и тот же экземпляр InvocationContext передается каждому перехватчику, который может добавить контекстуальные данные для обработки другими перехватчиками. Таблица 2.4 описывает API InvocationContext.

Таблица 2.4.Определение интерфейса InvocationContext
Метод Описание
getContextData Позволяет значениям передаваться между методами перехвата в том же экземпляре InvocationContext с использованием Map
getConstructor Возвращает конструктор целевого класса, для которого был вызван перехватчик
getMethod Возвращает метод класса компонентов, для которого был вызван перехватчик
getParameters Возвращает параметры, которые будут использоваться для вызова бизнес-метода
getTarget Возвращает экземпляр компонента, к которому относится перехватываемый метод
getTimer Возвращает таймер, ассоциированный с методом @Timeout
proceed Обеспечивает вызов следующего метода перехватчика по цепочке. Он возвращает результат следующего вызываемого метода. Если метод относится к типу void, то proceed возвращает null
setParameters Модифицирует значение параметров, используемых для вызова методов целевого класса. Типы и количество параметров должны совпадать с подписью метода компонента, иначе будет сгенерировано исключение IllegalArgumentException

Чтобы понять, как работает код в листинге 2.23, взгляните на схему последовательности на рис. 2.6. Вы увидите, что происходит, когда клиент вызывает метод createCustomer(). Прежде всего контейнер перехватывает вызов и вместо прямой обработки createCustomer() сначала вызывает метод logMethod(). Данный метод использует интерфейс InvocationContext для получения имени вызываемого компонента (ic.getTarget()), а вызываемый метод (ic.getMethod()) применяет для регистрации сообщения о входе (logger.entering()). Затем вызывается метод proceed(). Вызов InvocationContext.proceed() очень важен, поскольку сообщает контейнеру, что тот должен обрабатывать следующий перехватчик или вызывать бизнес-метод компонента. При отсутствии вызова proceed() цепочка перехватчиков будет остановлена, а бизнес-метод не будет вызван. В конце вызывается метод createCustomer(), и как только он возвращается, перехватчик прекращает выполнение, регистрируя сообщение о выходе (logger.exiting()). Вызов клиентом метода findCustomerById() происходил бы в той же последовательности.

Рис 26Вызов перехватываемого бизнесметода Примечание Листинг 223 - фото 22

Рис. 2.6.Вызов перехватываемого бизнес-метода

Примечание

Листинг 2.23 использует новую аннотацию @javax.transaction.Transactional. Она применяется для управления разграничением операций на компонентах CDI, а также сервлетах и оконечных точках сервисов JAX-RS и JAX-WS. Она обеспечивает семантику атрибутов транзакции EJB в CDI. Аннотация @Transactional реализуется с помощью перехватчика. Подробнее о транзакциях рассказывается в главе 9.

Перехватчики классов

Листинг 2.23 определяет перехватчик, доступный только для CustomerService. Но чаще всего вам требуется изолировать сквозную функциональность в отдельный класс и сообщить контейнеру, чтобы он перехватил вызовы нескольких компонентов. Запись информации в журнал (логирование) — типичный пример ситуации, когда вам требуется, чтобы все методы всех ваших компонентов регистрировали сообщения о входе и выходе. Для указания перехватчика класса вам необходимо разработать отдельный класс и дать контейнеру команду применить его на определенном компоненте или методе компонента.

Чтобы обеспечить совместный доступ к коду множественным компонентам, возьмем методы logMethod() из листинга 2.23 и изолируем их в отдельный класс, как показано в листинге 2.24. Обратите внимание на метод init(), который сопровождается аннотацией @AroundConstruct и будет вызван только вместе с конструктором компонента.

Листинг 2.24. Класс перехватчика сAround-Invoke и Around-Construct

public class LoggingInterceptor {

··@Inject

··private Logger logger;

··@AroundConstruct

··private void init(InvocationContext ic) throws Exception {

····logger.fine("Entering constructor");

····try {

······ic.proceed();

····} finally {

······logger.fine("Exiting constructor");

····}

··}

··@AroundInvoke

··public Object logMethod(InvocationContext ic) throws Exception {

····logger.entering(ic.getTarget(). toString(), ic.getMethod(). getName());

····try {

······return ic.proceed();

····} finally {

······logger.exiting(ic.getTarget(). toString(), ic.getMethod(). getName());

····}

··}

}

Теперь LoggingInterceptor может быть прозрачно обернут любым компонентом, заинтересованным в этом перехватчике. Для этого компоненту необходимо сообщить контейнеру аннотацию @javax.interceptor.Interceptors. В листинге 2.25 аннотация задается методом createCustomer(). Это означает, что любой вызов этого метода будет перехвачен контейнером, и будет вызван класс LoggingInterceptor (регистрация сообщения на входе в метод и выходе из него).

Листинг 2.25. CustomerService использует перехватчик водном методе

@Transactional

public class CustomerService {

··@Inject

··private EntityManager em;

··@Interceptors(LoggingInterceptor.class)

··public void createCustomer(Customer customer) {

····em.persist(customer);

··}

··public Customer findCustomerById(Long id) {

····return em.find(Customer.class, id);

··}

}

В листинге 2.25 аннотация @Interceptors прикрепляется только к методу createCustomer(). Это означает, что, если клиент вызывает findCustomerById(), контейнер не будет перехватывать вызов. Если вы хотите, чтобы перехватывались вызовы обоих методов, можете добавить аннотацию @Interceptors либо сразу к обоим методам, либо к самому компоненту. Когда вы это делаете, перехватчик приводится в действие при вызове любого из методов. А поскольку перехватчик имеет аннотацию @AroundConstruct, вызов конструктора тоже будет перехвачен.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Энтони Гонсалвес читать все книги автора по порядку

Энтони Гонсалвес - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Изучаем Java EE 7 отзывы


Отзывы читателей о книге Изучаем Java EE 7, автор: Энтони Гонсалвес. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x