Дескриптор развертывания (deployment descriptor)

Теперь наступило время увидеть дескриптор развёртывания. Напоминаю, что этот файл говорит EJB-серверу какие классы являются реализацией объекта, home-интерфейсом и remote-интерфейсом. Если в пакете больше одного EJB-объекта, то в дескрипторе отображается как эти объекты взаимодействуют друг с другом. В нашем примере есть только один EJB-объект, так что мы не должны волноваться об этих связях.

Большинство коммерческих EJB-серверов поставляются с графическими инструментами для создания дескриптора развертывания. У JBoss есть один XML-редактор, но написать дескриптор развёртывания можно и вручную. Вот он:

Рисунок 1.6. Дескриптор развертывания для объекта Interest


<?xml version="1.0" encoding="UTF-8"?>

<ejb-jar>
     <description>JBoss Interest Sample Application</description>
     <display-name>Interest EJB</display-name>
     <enterprise-beans>
       <session>
         <ejb-name>Interest</ejb-name>
         <home>org.jboss.docs.interest.InterestHome</home>
         <remote>org.jboss.docs.interest.Interest</remote>
         <ejb-class>org.jboss.docs.interest.InterestBean</ejb-class>
         <session-type>Stateless</session-type>
         <transaction-type>Bean</transaction-type>
       </session>
     </enterprise-beans>
</ejb-jar>

 

Дескриптор развертывания должен называться ejb-jar.xml и он должен находиться в директории ./META-INF. Обычная ошибка заключается в назывании этой директории "META_INF" (с подчеркиванием, вместо тире) или meta-inf (маленькими буквами) - это не будет работать.

В принципе, то что мы развернём на сервере - это приложение, а не одиночный EJB-объект. В нашем примере приложение содержит только один EJB-объект. В дескрипторе развертывания, секция <ejb-name>Interest</ejb-name> присваивает имя EJB-объекту. По умолчанию, JBoss поместит home-интерфейс в JNDI под именем, указанным в ejb-name, хотя, вы можете самостоятельно определить имя для JNDI.

На практике, клиентские приложения обычно не используют это имя. Обычный разработчик не будет морочиться с определением специальных имен для пространства имен JNDI (JNDI namespace). Однако, реальная инсталляция законченного приложения, содержащего множество объектов, обычно будет использовать различные имена вместо того, которое определено разработчиком. Обычно это будет похоже на "[имя приложения]/[имя объекта]", эту возможность мы будем использовать позже.

Хотя формат файла дескриптора развертывания ejb-jar.xml одинаков для всех EJB-серверов и детально определен в DTD, который можно получить от фирмы Sun, он не определяет всё необходимое для определенного EJB-сервера. Для примера он не включает в себя описание того как переопределить ejb-name для развертывания в JNDI под именем "[имя приложения]/[имя объекта]".

Подход, используемый JBoss заключается в обеспечении базовых возможностей, которые будут работать используя только ejb-jar.xml в большинстве случаев. В случае более сложных конфигураций, вам необходимо определить специфичные для JBoss свойства используя дескриптор развертывания jboss.xml. Обратитесь к разделу "Сложные конфигурации" для более подробного описания jboss.xml. Единственное, что мы настроим для нашего примера в jboss.xml - это имя JNDI, используемое для доступа к home-интерфейсу нашего EJB-объекта Interest.

По умолчанию имя JNDI, используемое для доступа к home-интерфейсу EJB-объекта, совпадает со значением ejb-name в файле ejb-jar.xml. Для нашего примера это значит, что объект Interest будет размещен в дереве JNDI как "Interest". Мы хотим чтобы наш home-интерфейс был доступен как "interest/Interest", так что мы должны определить это используя jboss.xml.

Переназначение имени JNDI в jboss.xml

Для отмены использования имени ejb-name из дескриптора ejb-jar.xml в качестве имени JNDI, вам необходимо определить имя JNDI в файле jboss.xml:

Рисунок 1.7. Дескриптор JBoss XML.


<?xml version="1.0" encoding="UTF-8"?>
<jboss>
  <enterprise-beans>
    <session>
      <ejb-name>Interest</ejb-name>
      <jndi-name>interest/Interest</jndi-name>
    </session>
  </enterprise-beans>
</jboss>

Единственное, о чем говорит это файл - что объект называемый "Interest" должен быть размещен в JNDI под именем "interest/Interest".

Теперь мы создали стандартный дескриптор ejb-jar.xml и специфичный для JBoss дескриптор развертывания jboss.xml. Кроме этого у нас есть EJB-классы, так что мы имеем всё что нам необходимо для создания EJB jar-пакета.

Наши друзья