Энтони Гонсалвес - Изучаем 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 - читать книгу онлайн бесплатно, автор Энтони Гонсалвес
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

·············xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee картинка 24

··································http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"

·············version="1.1" bean-discovery-mode="all">

··

····org.agoncal.book.javaee7.chapter02.FromEightToThirteenDigitsDecorator

··

Если в приложении присутствуют и перехватчики, и декораторы, то перехватчики вызываются в первую очередь.

События

Внедрение зависимостей, перехватчики и декораторы гарантируют слабую связанность, обеспечивая разнообразные варианты дополнительного поведения как во время развертывания, так и во время выполнения. События, кроме того, позволяют компонентам взаимодействовать вне зависимости от времени компиляции. Один компонент может определить событие, другой — инициировать событие, а третий — обработать его. Эта базовая схема следует шаблону проектирования «Наблюдатель» (Observer), разработанному группой Gang of Four.

Производители событий запускают события, используя интерфейс javax.enterprise.event. Производитель инициирует события вызовом метода fire(), передает объект события и не зависит от наблюдателя. В листинге 2.36 BookService запускает событие (bookAddedEvent) каждый раз при создании книги. Код bookAddedEvent.fire(book) инициирует событие и оповещает любые методы наблюдателя, следящие за этим конкретным событием. Содержание этого события — сам объект Book, который будет передан от производителя потребителю.

Листинг 2.36. BookService запускает событие каждый раз, когда создается книга

public class BookService {

··@Inject

··private NumberGenerator numberGenerator;

··@Inject

··private Event bookAddedEvent;

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····bookAddedEvent.fire(book);

····return book;

··}

}

События инициируются производителем событий и на них подписываются наблюдатели. Наблюдатель — это компонент с одним или несколькими «отслеживающими» методами. Каждый из этих методов наблюдателя берет в качестве параметра событие определенного типа, сопровождаемое аннотацией @Observers и опциональными квалификаторами. Метод наблюдателя оповещается о событии, если объект события соответствует типу и всем квалификаторам. В листинге 2.37 показана служба инвентаризации, задача которой — отслеживать новые книжные поступления, дополняя информацию о книжном фонде. Там используется метод addBook, который наблюдает за каждым событием с типом Book. Аннотированный параметр называется параметром события. Поэтому, как только событие инициируется компонентом BookService, контейнер CDI приостанавливает выполнение и передает событие любому зарегистрированному наблюдателю. В нашем случае в листинге 2.37 будет вызван метод addBook, который обновит список книг, а затем контейнер продолжит выполнение кода с того места, где он остановился в компоненте BookService. Это означает, что события в CDI не рассматриваются асинхронно.

Листинг 2.37. InventoryService наблюдает за событием Book

public class InventoryService {

··@Inject

··private Logger logger;

··List inventory = new ArrayList<>();

··public void addBook(@Observes Book book) {

····logger.info("Adding book " + book.getTitle() + "to inventory");

····inventory.add(book);

··}

}

Как и большинство CDI, производство события и подписка являются типобезопасными и позволяют квалификаторам определять, какие наблюдатели событий будут использоваться. Событию может быть назначен один или несколько квалификаторов (с членами либо без таковых), которые позволяют наблюдателям отличить его от остальных событий такого же типа. Листинг 2.38 возвращается к компоненту BookService, добавив туда дополнительное событие. При создании книги инициируется событие bookAddedEvent, а при удалении — событие bookRemovedEvent, оба с типом Book. Чтобы можно было отличать эти события, каждое из них сопровождается аннотацией @Added или @Removed. Код этих квалификаторов идентичен коду в листинге 2.7: аннотация без членов и аннотированная @Qualifier.

Листинг 2.38. BookService инициирует несколько событий

public class BookService {

··@Inject

··private NumberGenerator numberGenerator;

··@Inject @Added

··private Event bookAddedEvent;

··@Inject @Removed

··private Event bookRemovedEvent;

··public Book createBook(String title, Float price, String description) {

····Book book = new Book(title, price, description);

····book.setIsbn(numberGenerator.generateNumber());

····bookAddedEvent.fire(book);

····return book;

··}

··public void deleteBook(Book book) {

····bookRemovedEvent.fire(book);

··}

}

InventoryService в листинге 2.39 наблюдает за обоими событиями, объявив два отдельных метода, один из которых наблюдает за событием о добавлении книги (@Observes @Added Book), а другой — за событием о ее удалении (@Observes @Removed Book).

Листинг 2.39. InventoryService наблюдает за несколькими событиями

public class InventoryService {

··@Inject

··private Logger logger;

··List inventory = new ArrayList<>();

··public void addBook(@Observes @Added Book book) {

····logger.warning("Книга " + book.getTitle() + " добавлена в список");

····inventory.add(book);

··}

··public void removeBook(@Observes @Removed Book book) {

····logger.warning("Книга " + book.getTitle() + " удалена из списка");

····inventory.remove(book);

··}

}

Поскольку модель события использует квалификаторы, вам было бы целесообразно задавать поля квалификаторов или агрегировать их. Следующий код наблюдает за всеми добавленными книгами, цена которых превышает 100:

void addBook(@Observes @Added @Price(greaterThan=100) Book book)

Все вместе

А теперь совместим некоторые из этих понятий, напишем несколько компонентов, производителей, используем внедрение, квалификаторы, альтернативы и связывание с перехватчиком. В этом примере применяется контейнер Weld для запуска класса Main в Java SE, а также интеграционный тест для проверки правильности внедрения.

Рисунок 2.7 показывает схему со всеми классами, необходимыми для запуска этого образца кода, и описывает все точки внедрения.

Рис 27Все вместе Компонент BookService имеет метод для создания - фото 25

Рис. 2.7.Все вместе

• Компонент BookService имеет метод для создания Java-объектов Book.

• Интерфейс NumberGenerator имеет две реализации для генерации номеров ISBN и ISSN (IsbnGenerator и IssnGenerator) и одну альтернативную реализацию, чтобы генерировать имитационные номера для интеграционных тестов (MockGenerator).

• Реализации NumberGenerator используют два квалификатора, чтобы избежать неоднозначного внедрения зависимости: @ThirteenDigits и @EightDigits.

• LoggingProducer делает возможным внедрение Logger благодаря методу-производителю. LoggingInterceptor в паре с перехватчиком Loggable позволяет компонентам CDI сохранять в журнал записи о методах.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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