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

XML-дескриптор развертывания — альтернатива аннотациям, а это означает, что у любой аннотации имеется эквивалентный XML-тег. При одновременном использовании аннотаций и дескрипторов развертывания настройки в дескрипторе развертывания возьмут верх над аннотациями во время процесса развертывания. Я не стану вдаваться в подробности, описывая структуру XML-дескриптора развертывания (с именем ejb-jar.xml), поскольку он является необязательным и может оказаться очень многословным. В качестве примера в листинге 7.18 показано, как мог бы выглядеть файл ejb-jar.xml, связанный с ItemEJB (который был показан ранее в листинге 7.2). Он определяет класс EJB-компонента, удаленный и локальный интерфейсы, его тип (Stateless). Кроме того, здесь имеет место транзакция, управляемая контейнером (CMT) (Container).

Листинг 7.18. Файл ejb-jar.xml

·········xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

·········xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 

·········http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd"

·········version="3.2">

··

····

······ItemEJB

······org.agoncal.book.javaee7.chapter07.ItemRemote

······org.agoncal.book.javaee7.chapter07.ItemLocal

······

······org.agoncal.book.javaee7.chapter07.ItemEJB

······Stateless

······Container

····

··

Если вы решите произвести развертывание сессионного EJB-компонента в файле с расширением. jar, то вам потребуется сохранить дескриптор развертывания в файле META-INF/ejb-jar.xml. А при развертывании сессионного EJB-компонента в файле с расширением. war вам придется сохранить дескриптор развертывания в файле WEB-INF/ejb-jar.xml. XML-конфигурация описывает детали, специфичные для среды, и не должна указываться в коде с помощью аннотаций (например, если EJB-компонент необходимо задействовать одним путем в среде разработки и другим путем — в средах тестирования/производства).

<p>Контекст именования среды</p>

При работе с корпоративными приложениями возникают ситуации, в которых параметры вашего приложения изменяются от одного развертывания к другому (в зависимости от страны, в которой вы его развертываете, версии приложения и т. д.). Например, в приложении CD-BookStore ItemEJB (листинг 7.19) преобразует цену элемента в стоимость в валюте страны, в которой развернуто приложение (с применением changeRate на основе курса доллара). Если вы решите произвести развертывание этого EJB-компонента где-то в Европе, то вам потребуется умножить цену элемента на 0,80 и изменить валюту на евро.

Листинг 7.19. Сессионный EJB-компонент без сохранения состояния, преобразующий цены

@Stateless

public class ItemEJB {

··public Item convertPrice(Item item) {

····item.setPrice(item.getPrice() * 0.80F);

····item.setCurrency("Euros");

····return item;

··}

}

Как вы можете понять, проблема жесткого кодирования этих параметров заключается в том, что вам придется изменить свой код, перекомпилировать его и заново произвести развертывание компонента для каждой страны, в которой валюта будет уже другой. Иной вариант заключается в доступе к базе данных каждый раз, когда вы вызываете метод convertPrice(). Однако это будет расточительством ресурсов. Что вам действительно нужно сделать, так это сохранить соответствующие параметры где-нибудь, чтобы вы смогли изменить их во время развертывания. Дескриптор развертывания — идеальное место для задания этих параметров.

Может, дескриптор развертывания (ejb-jar.xml) и опционален в EJB 3.2, но его допустимо использовать в случае с записями окружения. Они указываются в дескрипторе развертывания и доступны с помощью внедрения зависимостей (или JNDI). Записи окружения поддерживают следующие Java-типы: String, Character, Byte, Short, Integer, Long, Boolean, Double и Float. В листинге 7.20 приведен файл ejb-jar.xml, связанный с ItemEJB, который определяет две записи: currencyEntry типа String со значением Euros и changeRateEntry типа Float со значением 0.80.

Листинг 7.20. Записи окружения ItemEJB в ejb-jar.xml

·········xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

·········xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 

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

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

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

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

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

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

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

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

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