Читаем Изучаем Java EE 7 полностью

book.setPrice(12.5F);

book.setDescription("Научно-фантастический комедийный сериал, созданный Дугласом Адамсом.");

book.setIsbn("1-84023-742-2");

book.setNbOfPage(354);

statelessService.persistToDatabase(book);

Сессионные EJB-компоненты без сохранения состояния придерживаются архитектуры служб и являются самой эффективной компонентной моделью, поскольку могут быть помещены в пул и совместно использоваться несколькими клиентами. Это означает, что для каждого EJB-компонента без сохранения состояния контейнер оставляет определенное количество экземпляров в памяти (то есть в пуле) и позволяет клиентам совместно использовать их. Поскольку EJB-компоненты без сохранения состояния не обладают клиентским состоянием, все экземпляры являются одинаковыми. Когда клиент вызывает метод в EJB-компоненте без сохранения состояния, контейнер берет экземпляр из пула и присваивает его клиенту. По завершении выполнения клиентского запроса экземпляр возвращается в пул для повторного использования. Это означает, что вам потребуется лишь небольшое количество EJB-компонентов для обслуживания нескольких клиентов, как показано на рис. 7.4. Контейнер не гарантирует одного и того же экземпляра для одного и того же клиента.

Рис. 7.4. Клиенты, осуществляющие доступ к EJB-компонентам без сохранения состояния в пуле

В листинге 7.6 показано, как выглядит EJB-компонент без сохранения состояния: стандартный Java-класс со всего одной аннотацией @Stateless. Поскольку он располагается в контейнере, у него есть возможность использовать любые службы, управляемые контейнером, одна из которых позволяет внедрять зависимости. Мы применяем аннотацию @PersistenceContext для внедрения ссылки на менеджер сущностей. В случае с сессионными EJB-компонентами без сохранения состояния контекст постоянства является транзакционным, а это означает, что любой метод, вызываемый в этом EJB-компоненте (createBook(), createCD() и т. д.), будет транзакционным. Этот процесс более подробно объясняется в главе 9. Следует отметить, что у всех методов есть необходимые параметры для обработки бизнес-логики одним вызовом. Например, метод createBook() принимает объект Book в качестве параметра и обеспечивает его постоянство без расчета на другое состояние.

Листинг 7.6. Сессионный EJB-компонент без сохранения состояния ItemEJB

@Stateless

public class ItemEJB {

··@PersistenceContext(unitName = "chapter07PU")

··private EntityManager em;

··public List findBooks() {

····TypedQuery query = em.createNamedQuery(Book.FIND_ALL, Book.class);

····return query.getResultList();

··}

··public List findCDs() {

····TypedQuery query = em.createNamedQuery(CD.FIND_ALL, CD.class);

····return query.getResultList();

··}

··public Book createBook(Book book) {

····em.persist(book);

····return book;

··}

··public CD createCD(CD cd) {

····em.persist(cd);

····return cd;

··}

}

EJB-компоненты без сохранения состояния зачастую содержат несколько тесно связанных бизнес-методов. Например, ItemEJB из листинга 7.5 определяет методы, связанные с элементами, продажа которых осуществляется в приложении CD-BookStore. Таким образом, вы найдете методы для создания, обновления или поиска экземпляров Book и CD, а также другой связанной бизнес-логики.

Аннотация @Stateless помечает Java-объект ItemEJB как EJB-компонент без сохранения состояния, тем самым превращая простой Java-класс в компонент, поддерживающий контейнер. В листинге 7.7 описывается спецификация аннотации @javax.ejb.Stateless.

Листинг 7.7. API-интерфейс аннотации @Stateless

@Target({TYPE}) @Retention(RUNTIME)

public @interface Stateless {

····String name() default "";

····String mappedName() default "";

····String description() default "";

}

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных