§ <relationship-role-source>
Определяет имя компонента, экземпляры которого играют данную роль в этом отношении. Внутри тега <ejb-name> задается имя, которое присвоено компоненту в рамках данного дескриптора.
§ <cmr-field>
Определяет имя поля, хранящего ссылки, поддерживающие данное отношение — оно задается в теге <cmr-field-name> и для него в класе компонента должно быть определено абстрактное свойство с тем же именем.
· Раздел <assembly-descriptor>
Этот раздел содержит дополнительные указания для сборки компонентов, в частности следующие.
o <container-transaction>
Возможно несколько, необязателен.
Содержит необязательный элемент <description>, а также приведенные ниже.
Для компонента данных должно быть по одному такому элементу на каждый метод удаленных интерфейсов. Сеансовые компоненты, транзакциями которых управляет контейнер, также должны подчиняться этому правилу.
§ <method>
Возможно несколько.
Содержит теги <ejb-name>, указывающий имя компонента, и <method-name>, указывающий имя метода или знак *, который обозначает применение указанного атрибута ко всем методам.
Может также включать элементы <description>, <method-params> и <method-intf>, который может иметь значения Remote, Home, Local, Local-Home, в зависимости от того, в каком интерфейсе этот метод декларирован — для поддержки возможности декларировать методы с одним именем и набором параметром в разных интерфейсах.
§ <trans-attribute>
Ровно один.
Определяет атрибут транзакции, управляющий политикой включения в транзакции или создания новых.
Для компонентов данных атрибуты транзакции должны быть определены для всех методов удаленного интерфейса и методов декларированных во внешнем интерфейсе, для сеансовых компонентов — для всех методов удаленных интерфейсов.
Может иметь следующие значения.
· NotSupported
Означает, что транзакции не распространяется на данный метод. Если он вызывается из транзакции, она приостанавливается до окончания его работы.
· Supports
Такой метод продолжает существующую транзакцию и не создает новой, если был вызван вне транзакции.
· Required
Такой метод продолжает существующую транзакцию и создает новую, если был вызван вне транзакции.
· RequiresNew
Такой метод при любых обстоятельствах создает новую транзакцию, в рамках которой проходит вся его работа.
· Mandatory
Такой метод всегда должен вызывться из транзакции. Если он вызван вне транзакции, создается исключение.
· Never
Такой метод всегда должен вызываться вне транзакции. Он создает исключение, будучи вызван в контексте транзакции.
o <security-role>
Возможно несколько, необязателен.
Определяет роли безопасности, служащих для контроля доступа к методам компонентов.
В каждом таком элементе могут содержаться теги <description> (необязателен) и <role-name> (обязателен, он и определяет имя роли).
o <method-permission>
Возможно несколько, необязателен.
Указывает правила доступа ролей, определенных в тегах <security-role>, к методам компонентов.
Содержит необязательный тег <description> , несколько или один тег <role-name> и несколько или один тег <method>, кроме того, может присутствовать тег <unchecked/>, который обозначает отсутствие проверки прав доступа во время работы, даже если они описаны.
Каждый тег <method> содержит тег <ejb-name>, указывающий имя компонента, и <method-name>, указывающий имя метода или знак *, который обозначает применение указанного атрибута ко всем методам.
o <exclude-list>
Необязателен.
Содержит один или несколько тегов <method>, определяющих методы, которые не должны вызываться при работе приложения. Каждый вызов такого метода создает исключительную ситуацию.
Пример дескриптора развертывания для описанных ранее компонентов данных приведен ниже.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans
2.0//EN" http://java. /j2ee/dtds/ejb-jar_2_0.dtd">
<ejb-jar>
<enterprise-beans>
<entity>
<ejb-name>OrganizationEJB</ejb-name>
<home>ru. msu. cmc. prtech. examples. ejb. OrganizationHomeRemote</home>
<remote>ru. msu. cmc. prtech. examples. ejb. OrganizationRemote</remote>
<local>ru. msu. cmc. prtech. examples. ejb. OrganizationLocal</local>
<ejb-class>ru. msu. cmc. prtech. examples. ejb. OrganizationEJB</ejb-class>
<primkey-field>id</primkey-field>
<prim-key-class>java. lang. Integer</prim-key-class>
<persistence-type>Container</persistence-type>
<reenterant>false</reenterant>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>name</field-name>
</cmp-field>
</entity>
<entity>
<ejb-name>ClientEJB</ejb-name>
<home>ru. msu. cmc. prtech. examples. ejb. ClientHomeRemote</home>
<remote>ru. msu. cmc. prtech. examples. ejb. ClientRemote</remote>
<local-home>ru. msu. cmc. prtech. examples. ejb. ClientHomeLocal</local-home>
<local>ru. msu. cmc. prtech. examples. ejb. ClientLocal</local>
<ejb-class>ru. msu. cmc. prtech. examples. ejb. ClientEJB</ejb-class>
<primkey-field>id</primkey-field>
<prim-key-class>java. lang. Integer</prim-key-class>
<persistence-type>Container</persistence-type>
<reenterant>false</reenterant>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>firstName</field-name>
</cmp-field>
<cmp-field>
<field-name>lastName</field-name>
</cmp-field>
</entity>
<entity>
<ejb-name>AccountEJB</ejb-name>
<home>ru. msu. cmc. prtech. examples. ejb. AccountHomeRemote</home>
<remote>ru. msu. cmc. prtech. examples. ejb. AccountRemote</remote>
<local-home>ru. msu. cmc. prtech. examples. ejb. AccountHomeLocal
</local-home>
<local>ru. msu. cmc. prtech. examples. ejb. AccountLocal</local>
<ejb-class>ru. msu. cmc. prtech. examples. ejb. AccountEJB</ejb-class>
<primkey-field>id</primkey-field>
<prim-key-class>java. lang. Integer</prim-key-class>
<persistence-type>Container</persistence-type>
<reenterant>false</reenterant>
<cmp-field>
<field-name>id</field-name>
</cmp-field>
<cmp-field>
<field-name>balance</field-name>
</cmp-field>
<cmp-field>
<field-name>credit</field-name>
</cmp-field>
<cmp-field>
<field-name>status</field-name>
</cmp-field>
</entity>
</enterprise-beans>
<relationships>
<ejb-relation>
<ejb-relation-name>Client-Organization</ejb-relation-name>
<eib-relationship-role>
<eib-relationship-role-name>Organization-has-Clients
</eib-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>OrganizationEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>clients</cmr-field-name>
</cmr-field>
</eib-relationship-role>
<eib-relationship-role>
<eib-relationship-role-name>Client-belongs-to-an-Organization
</eib-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<ejb-name>ClientEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>organization</cmr-field-name>
</cmr-field>
</eib-relationship-role>
</ejb-relation>
<ejb-relation>
<ejb-relation-name>Client-Account</ejb-relation-name>
<eib-relationship-role>
<eib-relationship-role-name>Client-has-Accounts
</eib-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source>
<ejb-name>ClientEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>accounts</cmr-field-name>
</cmr-field>
</eib-relationship-role>
<eib-relationship-role>
<eib-relationship-role-name>Account-belongs-to-a-Client
</eib-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source>
<ejb-name>AccountEJB</ejb-name>
</relationship-role-source>
<cmr-field>
<cmr-field-name>client</cmr-field-name>
</cmr-field>
</eib-relationship-role>
</ejb-relation>
</relationships>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>OrganizationEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>ClientEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<container-transaction>
<method>
<ejb-name>AccountEJB</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
<security-role>
<role-name>administrator</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>
<method-permission>
<role-name>administrator</role-name>
<method>
<ejb-name>OrganizationEJB</ejb-name>
<method-name>*</method-name>
</method>
<method>
<ejb-name>ClientEJB</ejb-name>
<method-name>*</method-name>
</method>
<method>
<ejb-name>AccountEJB</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
<method-permission>
<role-name>user</role-name>
<method>
<ejb-name>OrganizationEJB</ejb-name>
<method-name>getName</method-name>
</method>
<method>
<ejb-name>OrganizationEJB</ejb-name>
<method-name>getClients</method-name>
</method>
<method>
<ejb-name>ClientEJB</ejb-name>
<method-name>*</method-name>
</method>
<method>
<ejb-name>AccountEJB</ejb-name>
<method-name>*</method-name>
</method>
</method-permission>
</assembly-descriptor>
</ejb-jar>
[1] Э. Таненбаум, М. ван Стеен. Распределенные системы. Принципы и парадигмы. СПб, Питер, 2003.
[2] http://java.sun.com/j2ee/1.4/docs/index.html
Документация по платформе J2EE
[3] Р. Монсон-Хейфел. Enterprise JavaBeans. СПб., Символ-Плюс, 2002.
[4] П. Аллен, Дж. Бамбара, М. Ашнаульт, Зияд Дин, Т. Гарбен, Ш. Смит. J2EE. Разработка бизнес-приложений. ДиаСофт, 2002.
[5] B. A. Tate, J. Gehtland. Better, Faster, Lighter Java. O’Reilly, 2004.
[6] http://java. /j2se/1.5.0/docs/index. html
Документация по платформе J2SE
[7] Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектно-ориентированного проектирования. Паттерны проектирования. Питер-ДМК, 2001.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 |


