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

Эта проблема была решена, начиная с EJB 3.1, созданием встраиваемого EJB-контейнера. Версия EJB 3.1 привнесла стандартный API-интерфейс для выполнения EJB-компонентов в среде Java SE. Embeddable API (пакет javax.ejb.embeddable) позволяет клиенту создать экземпляр EJB-контейнера, который будет функционировать в рамках своей виртуальной машины Java. Встраиваемый контейнер обеспечивает управляемую среду с поддержкой тех же базовых служб, которые имеют место в контейнере Java EE: внедрение, управление транзакциями, управление жизненным циклом и т. д. Встраиваемые EJB-контейнеры работают только с API-интерфейсом подмножества EJB Lite (никаких EJB-компонентов, управляемых сообщениями, удаленных вызовов и т. д.), то есть они обладают теми же возможностями, что и контейнер EJB Lite (но не контейнер, отвечающий полной версии EJB).

В листинге 7.22 приведен класс Main, который задействует API-интерфейс для начальной загрузки, чтобы запустить контейнер (абстрактный класс javax.ejb.embeddable.EJBContainer), осуществляет поиск EJB-компонента и вызывает методы в нем.

Листинг 7.22. Класс Main, использующий встраиваемый контейнер

public class Main {

··public static void main(String[] args) throws NamingException {

····// Задает путь к классам контейнера

····Map properties = new HashMap<>();

····properties.put(EJBContainer.MODULES, new File("target/classes"));

····// Создает встроенный контейнер и получает JNDI-контекст

····try (EJBContainer ec = EJBContainer.createEJBContainer(properties)) {

······Context ctx = ec.getContext();

······// Создает экземпляр Book

······Book book = new Book();

······book.setTitle("Автостопом по Галактике");

······book.setPrice(12.5F);

······book.setDescription("Научно-фантастическая комедийная книга");

······book.setIsbn("1-84173-742-2");

······book.setNbOfPage(354);

······book.setIllustrations(false);

······// Осуществляет поиск EJB-компонента с представлением без интерфейса

······ItemEJB itemEJB = (ItemEJB) ctx.lookup("java: global/classes/ItemEJB");

······// Обеспечивает постоянство Book в базе данных

······itemEJB.createBook(book);

······// Извлекает информацию обо всех соответствующих книгах из базы данных

······for (Book aBook: itemEJB.findBooks()) {

········System.out.println(aBook);

······}

····}

··}

}

Как вы можете видеть в листинге 7.22, EJBContainer содержит фабричный метод (createEJBContainer()) для создания экземпляра контейнера. По умолчанию встраиваемый контейнер осуществляет поиск, используя путь к классам клиента, чтобы отыскать набор EJB-компонентов для инициализации (либо вы можете задать путь к классам в свойствах). После инициализации контейнера приложение получает JNDI-контекст контейнера (EJBContainer.getContext(), который возвращает javax.naming.Context) для поиска ItemEJB (с использованием синтаксиса переносимых глобальных JNDI-имен).

Следует отметить, что ItemEJB (приведенный ранее в листинге 7.1) является сессионным EJB-компонентом без сохранения состояния, обеспечивающим бизнес-методы с помощью представления без интерфейса. Он использует внедрение, транзакции, управляемые контейнером, и сущность JPA с именем Book. Встраиваемый контейнер заботится о внедрении менеджера сущностей и фиксации или откате любой транзакции. EJBContainer реализует java.lang.AutoCloseable, поэтому блок try-with-resources автоматически вызовет метод EJBContainer.close() для закрытия экземпляра встраиваемого контейнера.

В листинге 7.22 я использовал класс Main, чтобы показать вам, как применять встраиваемый EJB-контейнер. Однако имейте в виду, что в настоящее время EJB-компоненты можно использовать в любой среде Java SE: от тестовых классов до Swing-приложений, и даже при пакетной обработке.

<p>Вызов корпоративных EJB-компонентов</p>
Перейти на страницу:

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

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

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

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

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

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

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

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