В.В. Кулямин - Технологии программирования. Компонентный подход (1133554), страница 70
Текст из файла (страница 70)
Они могут содержать следующиевложенные теги.o <ejb-name>Требуется ровно один.Задает имя компонента.o <home>Необязателен, начиная с EJB 2.0. В EJB 1.1 требуется ровно один.Указывает полное имя удаленного исходного интерфейса.o <remote>Необязателен, начиная с EJB 2.0. В EJB 1.1 требуется ровно один.Указывает полное имя удаленного интерфейса.o <local-home>Необязателен.Указывает полное имя локального исходного интерфейса.o <local>Необязателен.Указывает полное имя локального интерфейса.o <ejb-class>Требуется ровно один.Указывает полное имя класса компонента.o <primkey-field>Необязателен, используется в описании компонентов данных.Указывает имя поля, являющегося первичным ключом (если он состоит только изодного поля и синхронизацией компонента с базой данных управляет контейнер).o <prim-key-class>Требуется ровно один, используется в описании компонентов данных.Указывает имя класса первичного ключа.
Можно отложить точное определение классапервичного ключа до развертывания, тогда в этом поле указывается java.lang.Object.o <persistence-type>Требуется ровно один, используется в описании компонентов данных.Имеет значения Bean или Container, в зависимости от того, управляется лисинхронизация компонента с базой данных самим компонентом или контейнером.o <cmp-version>Необязателен.Указывает версию спецификаций EJB, в соответствии с которой разработан компонент,что определяет способ управления этим компонентом. Может иметь значения 2.x и 1.x.254o <abstract-schema-name>Необязателен.Задает уникальный идентификатор компонента для использования в запросах на языкеEJB QL, который используется для описания запросов к схеме данных при реализациикомпонента данных, самостоятельно управляющего связью с СУБД.o <cmp-field>Один или более, используется в описании компонентов данных.Каждый такой элемент описывает одно поле данных, синхронизация которого с СУБДуправляется EJB контейнером.
Он может содержать тег <description> с описаниемполя и должен содержать тег <field-name> с именем поля. В EJB 2.0 это имя совпадаетс именем абстрактного свойства (для которого в классе компонента декларированыметоды getName() и setName()), а в EJB 1.1 — с именем одного из полей классакомпонента.o<security-role-ref>Один или более, необязателен.Указывает роли, используемые данным компонентом. Они при работе приложенияслужат для авторизации доступа — сопоставляются с ролями, которым разрешен доступк тому или иному методу.Может содержать тег <description> (необязателен) и теги <role-name> (обязателен),<role-link> (необязателен, служит для сопоставления указанного имени роли слогической ролью, описанной в <security-role> раздела <assembly-descriptor>).o<security-identity>Необязателен.Определяет, какую логическую роль будет играть данный компонент при обращениях кдругим компонентам.
Для этого может быть использован вложенный тег <runas><role-name>…</role-name></run-as> для указания имени конкретной логическойроли, или <use-caller-identity/> для указания того, что нужно использовать рольвызывающего клиента.o<session-type>Требуется ровно один, используется в описании сеансовых компонентов.Имеет значения Stateful или Stateless, в зависимости от того, использует ли данныйкомпонент состояние сеанса.o<transaction-type>Требуется ровно один, используется в описании сеансовых компонентов.Имеет значения Container или Bean, в зависимости от того, управляет ли транзакциямиданного компонента контейнер или он сам.
В первом случае соответствующиетранзакции должны быть описаны в разделе <assembly-descriptor>, см. далее.o<query>Один или более, необязателен.Используется для описания запросов, с чьей помощью реализуются некоторые методыкомпонентов данных, которые сами управляют связью с базой данных. Запросыописываются на языке EJB QL [X] и привязываются к методам компонента с помощьютегов <query-method>.
Сам код запроса описывается внутри элемента CDATA вовложенном теге <ejb-ql>.Например<query><query-method><method-name>findByName</method-name><method-params><method-param>java.lang.String</method-param></method-params></query-method><ejb-ql><!CDATA[SELECT OBJECT(c) FROM Client c WHERE c.name = ?1255]]</ejb-ql></query>•<relationships>Необязателен. Вложен в <ejb-jar>.Описывает набор отношений между компонентами, которые соответствуют связям в схемебазы данных и автоматически поддерживаются контейнером. Каждое отношениеописывается с помощью вложенного тега <ejb-relation>.o <ejb-relation>Описывает одно отношение и может иметь следующие элементы. <ejb-relation-name>Необязателен, только один. Задает имя отношения. <ejb-relationship-role>Обязательно два.
Описывает одну роль в рамах отношения. В описании ролидолжны присутствовать следующие данные.− Имя роли — во вложенном теге <ejb-relationship-role-name>.− Множественность — сколько экземпляров компонента могут играть такую рольв раках данного отношения с одним экземпляром в другой роли. Описывается втеге <multiplicity> и может иметь значения One или Many.− Имя компонента, экземпляры которого играют данную роль в этом отношении.Определяется в теге <relationship-role-source> внутри тега <ejb-name> ввиде имени, которое присвоено компоненту в рамках данного дескриптора.− Имя поля, которое хранит ссылку или коллекцию ссылок, поддерживающие этоотношение в рамках экземпляра компонента.
Определяется в теге <cmr-field>,во вложенном теге <cmr-field-name>, и для него в классе компонента должнобыть определено абстрактное свойство с тем же именем.•<assembly-descriptor>Этот обязательный тег внутри <ejb-jar> содержит дополнительные указания для сборкикомпонентов, в частности следующие.o <container-transaction>Один или более, необязателен.Содержит необязательный элемент <description>, а также приведенные ниже.Для компонента данных должно быть по одному такому элементу на каждый методудаленного интерфейсов. Сеансовые компоненты, транзакциями которых управляетEJB-контейнер, также должны подчиняться этому правилу. <method>Один или более.Содержит тег <ejb-name>, указывающий имя компонента, и <method-name>,указывающий имя метода или знак *, который обозначает применение указанногоатрибута ко всем методам.Может также включать элементы <description>, <method-params> и <methodintf>, который может иметь значения Remote, Home, Local, Local-Home, взависимости от того, в каком интерфейсе этот метод декларирован — для поддержкивозможности декларировать методы с одним именем и набором параметром вразных интерфейсах. <trans-attribute>Ровно один.Определяет атрибут транзакции, управляющий политикой включения в транзакцииили создания новых транзакций.Для компонентов данных атрибуты транзакции должны быть определены для всехметодов удаленного интерфейса и методов, декларированных в исходном256интерфейсе, для сеансовых компонентов — для всех методов удаленногоинтерфейса.Может иметь значения NotSupported, Supports, Required, RequiresNew, Mandatory,Never.
Об их смысле рассказывалось в предыдущей лекции.o <security-role>Один или более, необязателен.Определяет роли, служащие для контроля доступа к методам компонентов. В такомэлементе должен содержаться тег <role-name>, задающий имя роли.o <method-permission>Один или более, необязателен.Указывает правила доступа ролей, определенных в тегах <security-role>, к методамкомпонентов.Содержит необязательный тег <description>, один или несколько тегов <role-name> иодин или несколько тегов <method> (см.
выше), кроме того, в нем может присутствоватьтег <unchecked/>, который обозначает отсутствие проверки прав доступа во времяработы, даже если они описаны.Каждый тег <method> содержит тег <ejb-name>, указывающий имя компонента, и<method-name>, указывающий имя метода или знак *, который обозначает применениеуказанного атрибута ко всем методам.o <exclude-list>Необязателен.Содержит один или несколько тегов <method> (см. выше), определяющих методы,которые не должны вызываться при работе приложения. Каждый вызов такого методасоздает исключительную ситуацию.Уровень модели данных в .NETВ среде .NET нет средств, полностью аналогичных тем, которые предоставляются в J2EE дляразработки компонентов EJB. Уровень бизнес-логики в .NET-приложениях предлагаетсяреализовывать с помощью обычных классов, что значительно проще, чем реализовыватьспециальные наборы классов и интерфейсов для компонентов EJB.
С другой стороны, связь сбазой данных в .NET не реализуется в виде аналогичного EJB объектного интерфейса, если,конечно, не разрабатывать его целиком самостоятельно (или с использованием библиотеккомпонентов от третьих партий). Вместо этого предлагается для связи с базой данныхиспользовать набор компонентов ADO.NET [4], представляющих собой объектные оберткиреляционной структуры данных.Классы ADO.NET располагаются в сборке System.Data (дополнительные классы можно найти вSystem.Data.OracleClient и System.Data.SqlXml) и пространстве имен System.Data, вместе свложенными в него пространствами.Основным классом, с помощью которого представляются данные из базы данных, являетсяSystem.Data.DataSet.
Он представляет набор таблиц, связанных между собой некоторымисвязями и выполняющими определенные ограничения. Каждая таблица представляется объектомкласса System.Data.DataTable, каждая связь — объектом класса System.Data.Relation, каждоеограничение — объектом класса System.Data.Constraint. Структура таблиц описывается спомощью их полей (представляемых объектами System.Data.DataColumn).