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

··public void addToCache(Long id, Object object) {

····if (!cache.containsKey(id))

······cache.put(id, object);

··}

··public void removeFromCache(Long id) {

····if (cache.containsKey(id))

······cache.remove(id);

··}

··@Lock(LockType.READ)

··public Object getFromCache(Long id) {

····if (cache.containsKey(id))

······return cache.get(id);

····else

······return null;

··}

}

<p>Внедрение зависимостей</p>

Я уже говорил о внедрении зависимостей ранее, и вы столкнетесь с этим механизмом несколько раз в последующих главах. Это простой, но все же мощный механизм, используемый Java EE 7 для внедрения ссылок на ресурсы в атрибуты. Вместо того чтобы приложению искать ресурсы с использованием JNDI, контейнер сам внедряет их. Внедрение осуществляется во время развертывания. Если есть вероятность того, что данные не будут использоваться, EJB-компонент может избежать затрат, связанных с внедрением ресурсов, выполнив JNDI-поиск. JNDI является альтернативой внедрению. При использовании JNDI код выталкивает данные из стека, только если они необходимы, вместо того чтобы принимать подвергнутые проталкиванию в стек данные, которые могут вообще не потребоваться.

Контейнеры могут внедрять ресурсы различных типов в сессионные EJB-компоненты с помощью разных аннотаций (или дескрипторов развертывания):

• @EJB — внедряет ссылку на локальное представление, удаленное представление и представление без интерфейса EJB-компонента в аннотированную переменную;

• @PersistenceContext и @PersistenceUnit — выражают зависимость от EntityManager и EntityManagerFactory соответственно (см. подраздел «Получение менеджера сущностей» раздела «Менеджер сущностей» главы 6);

• @WebServiceRef — внедряет ссылку на веб-службу;

• @Resource — внедряет ряд ресурсов, например источники данных JDBC, SessionContext, пользовательские транзакции, фабрики подключений и пункты назначения JMS, записи окружения, TimerService и т. д.;

• @Inject — внедряет почти все с использованием @Inject и @Produces, как было объяснено в главе 2.

В листинге 7.14 приведен фрагмент кода сессионного EJB-компонента без сохранения состояния. В нем для внедрения различных ресурсов в атрибуты используются разные аннотации. Следует отметить, что этими аннотациями можно снабдить переменные экземпляра, а также методы-сеттеры.

Листинг 7.14. EJB-компонент без сохранения состояния, для которого используется внедрение

@Stateless

public class ItemEJB {

··@PersistenceContext(unitName = "chapter07PU")

··private EntityManager em;

··@EJB

··private CustomerEJB customerEJB;

··@Inject

··private NumberGenerator generator;

··@WebServiceRef

··private ArtistWebService artistWebService;

··private SessionContext ctx;

··@Resource

··public void setCtx(SessionContext ctx) {

····this.ctx = ctx;

··}

··//…

}

<p>API-интерфейс SessionContext</p>

Сессионные EJB-компоненты являются бизнес-компонентами, располагающимися в контейнере. Обычно они не обращаются к контейнеру и не используют контейнерные службы напрямую (управление транзакциями, безопасность, внедрение зависимостей и т. д.). Предусматривается, что контейнер будет прозрачно взаимодействовать с этими службами от имени EJB-компонента (это называется инверсией управления). Однако иногда EJB-компоненту требуется явно использовать контейнерные службы в коде (например, чтобы пометить транзакцию как подлежащую откату). Это можно сделать с помощью интерфейса javax.ejb.SessionContext. API SessionContext разрешает программный доступ к контексту времени выполнения, который обеспечивается для экземпляра сессионного EJB-компонента. Он расширяет интерфейс javax.ejb.EJBContext. В табл. 7.3 приведено описание некоторых методов API-интерфейса SessionContext.

Таблица 7.3. Методы интерфейса SessionContext
Перейти на страницу:

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

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

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

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

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

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

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

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