<!--

    Copyright (c) 2000, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!--
This is the XML DTD for the EJB 2.0 deployment descriptor.
All EJB 2.0 deployment descriptors must include a DOCTYPE
of the following form:

  <!DOCTYPE ejb-jar PUBLIC
	"-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN"
	"http://java.sun.com/dtd/ejb-jar_2_0.dtd">

-->

<!--
The following conventions apply to all J2EE deployment descriptor
elements unless indicated otherwise.

- In elements that contain PCDATA, leading and trailing whitespace
  in the data may be ignored.

- In elements whose value is an "enumerated type", the value is
  case sensitive.

- In elements that specify a pathname to a file within the same
  JAR file, relative filenames (i.e., those not starting with "/")
  are considered relative to the root of the JAR file's namespace.
  Absolute filenames (i.e., those starting with "/") also specify
  names in the root of the JAR file's namespace.  In general, relative
  names are preferred.  The exception is .war files where absolute
  names are preferred for consistency with the servlet API.
-->


<!--
The ejb-jar element is the root element of the EJB deployment
descriptor. It contains

	- an optional description of the ejb-jar file
	- an optional display name
	- an optional small icon file name
	- an optional large icon file name
	- mandatory structural information about all included
	  enterprise beans
	- a descriptor for container managed relationships, if any
	- an optional application-assembly descriptor
	- an optional name of an ejb-client-jar file for the ejb-jar.
-->
<!ELEMENT ejb-jar (description?, display-name?, small-icon?,
large-icon?, enterprise-beans, relationships?, assembly-descriptor?,
ejb-client-jar?)>

<!--
The abstract-schema-name element specifies the name of the abstract
schema type of an entity bean with cmp-version 2.x. It is used in EJB
QL queries.

For example, the abstract-schema-name for an entity bean whose local
interface is com.acme.commerce.Order might be Order.

Used in: entity
-->
<!ELEMENT abstract-schema-name (#PCDATA)>

<!--

The acknowledge-mode element specifies whether JMS AUTO_ACKNOWLEDGE or
DUPS_OK_ACKNOWLEDGE message acknowledgment semantics should be used
for the onMessage message of a message-driven bean that uses bean
managed transaction demarcation.

The acknowledge-mode element must be one of the two following:

	<acknowledge-mode>Auto-acknowledge</acknowledge-mode>
	<acknowledge-mode>Dups-ok-acknowledge</acknowledgemode>

Used in: message-driven
-->
<!ELEMENT acknowledge-mode (#PCDATA)>

<!--
The assembly-descriptor element contains application-assembly information.

The application-assembly information consists of the following parts:
the definition of security roles, the definition of method
permissions, the definition of transaction attributes for
enterprise beans with container-managed transaction demarcation and
a list of methods to be excluded from being invoked.

All the parts are optional in the sense that they are omitted if the
lists represented by them are empty.

Providing an assembly-descriptor in the deployment descriptor is
optional for the ejb-jar file producer.

Used in: ejb-jar
-->
<!ELEMENT assembly-descriptor (security-role*, method-permission*,
container-transaction*, exclude-list?)>

<!--
The cascade-delete element specifies that, within a particular
relationship, the lifetime of one or more entity beans is dependent
upon the lifetime of another entity bean. The cascade-delete element
can only be specified for an ejb-relationship-role element contained
in an ejb-relation element in which the other ejb-relationship-role
element specifies a multiplicity of One.

Used in: ejb-relationship-role
-->
<!ELEMENT cascade-delete EMPTY>

<!--
The cmp-field element describes a container-managed field. The
field element includes an optional description of the field, and the
name of the field.

Used in: entity
-->
<!ELEMENT cmp-field (description?, field-name)>

<!--
The cmp-version element specifies the version of an entity bean
with container-managed persistence.

The cmp-version element must be one of the two following:

	<cmp-version>1.x</cmp-version>
	<cmp-version>2.x</cmp-version>

The default value of the cmp-version element is 2.x.

Used in: entity
-->
<!ELEMENT cmp-version (#PCDATA)>

<!--

The cmr-field element describes the bean provider's view of a
relationship. It consists of an optional description, and the name and
the class type of a field in the source of a role of a
relationship. The cmr-field-name element corresponds to the name used
for the get and set accessor methods for the relationship. The
cmr-field-type element is used only for collection-valued
cmr-fields. It specifies the type of the collection that is used.

Used in: ejb-relationship-role
-->
<!ELEMENT cmr-field (description?, cmr-field-name, cmr-field-type?)>

<!--
The cmr-field-name element specifies the name of a logical
relationship field in the entity bean class. The name of the cmr-field
must begin with a lowercase letter. This field is accessed by methods
whose names consist of the name of the field specified by
cmr-field-name in which the first letter is uppercased, prefixed by
"get" or "set".

Used in: cmr-field
-->
<!ELEMENT cmr-field-name (#PCDATA)>

<!--
The cmr-field-type element specifies the class of a
collection-valued logical relationship field in the entity bean
class. The value of the cmr-field-type element must be either:
java.util.Collection or java.util.Set.

Used in: cmr-field
-->
<!ELEMENT cmr-field-type (#PCDATA)>

<!--
The container-transaction element specifies how the container
must manage transaction scopes for the enterprise bean's method
invocations. The element consists of an optional description, a list
of method elements, and a transaction attribute. The transaction
attribute is to be applied to all the specified methods.

Used in: assembly-descriptor
-->
<!ELEMENT container-transaction (description?, method+, trans-attribute)>

<!--
The description element is used to provide text describing the parent
element.  The description element should include any information that
the enterprise bean ejb-jar file producer wants to provide to the consumer of
the enterprise bean ejb-jar file (i.e., to the Deployer). Typically, the tools
used by the enterprise bean ejb-jar file consumer will display the description
when processing the parent element that contains the description.

Used in: cmp-field, cmr-field, container-transaction, ejb-jar,
ejb-local-ref, ejb-ref, ejb-relation, ejb-relationship-role, entity,
env-entry, exclude-list, message-driven, method, method-permission,
query, relationship-role-source, relationships, resource-env-ref,
resource-ref, run-as, security-identity, security-role,
security-role-ref, session
-->
<!ELEMENT description (#PCDATA)>

<!--
The destination-type element specifies the type of the JMS
destination. The type is specified by the Java interface expected to
be implemented by the destination.

The destination-type element must be one of the two following:

<destination-type>javax.jms.Queue</destination-type>
<destination-type>javax.jms.Topic</destination-type>

Used in: message-driven-destination
-->
<!ELEMENT destination-type (#PCDATA)>

<!--
The display-name element contains a short name that is intended to be
displayed by tools.  The display name need not be unique.

Used in: ejb-jar, entity, message-driven, session

Example:

<display-name>Employee Self Service</display-name>
-->
<!ELEMENT display-name (#PCDATA)>

<!--
The ejb-class element contains the fully-qualified name of the
enterprise bean's class.

Used in: entity, message-driven, session

Example:

<ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>
-->
<!ELEMENT ejb-class (#PCDATA)>

<!--
The optional ejb-client-jar element specifies a JAR file that contains
the class files necessary for a client program to access the
enterprise beans in the ejb-jar file.

Used in: ejb-jar

Example:

<ejb-client-jar>employee_service_client.jar</ejb-client-jar>
-->
<!ELEMENT ejb-client-jar (#PCDATA)>

<!--
The ejb-link element is used in the ejb-ref or ejb-local-ref
elements to specify that an EJB reference is linked to an
enterprise bean.

The value of the ejb-link element must be the ejb-name of an
enterprise bean in the same ejb-jar file or in another ejb-jar
file in the same J2EE application unit.

Alternatively, the name in the ejb-link element may be composed of a
path name specifying the ejb-jar containing the referenced enterprise
bean with the ejb-name of the target bean appended and separated from
the path name by "#".  The path name is relative to the ejb-jar file
containing the enterprise bean that is referencing the enterprise bean.
This allows multiple enterprise beans with the same ejb-name to be
uniquely identified.

Used in: ejb-local-ref, ejb-ref

Examples:

	<ejb-link>EmployeeRecord</ejb-link>

	<ejb-link>../products/product.jar#ProductEJB</ejb-link>

-->
<!ELEMENT ejb-link (#PCDATA)>

<!--
The ejb-local-ref element is used for the declaration of a reference to
an enterprise bean's local home. The declaration consists of:

	- an optional description
	- the EJB reference name used in the code of the enterprise bean
	  that's referencing the enterprise bean
	- the expected type of the referenced enterprise bean
	- the expected local home and local interfaces of the referenced
	  enterprise bean
	- optional ejb-link information, used to specify the referenced
	  enterprise bean

Used in: entity, message-driven, session
-->
<!ELEMENT ejb-local-ref (description?, ejb-ref-name, ejb-ref-type,
		local-home, local, ejb-link?)>

<!--
The ejb-name element specifies an enterprise bean's name. This name is
assigned by the ejb-jar file producer to name the enterprise bean in
the ejb-jar file's deployment descriptor. The name must be unique
among the names of the enterprise beans in the same ejb-jar file.

There is no architected relationship between the ejb-name in the
deployment descriptor and the JNDI name that the Deployer will assign
to the enterprise bean's home.

The name for an entity bean with cmp-version 2.x must conform to the
lexical rules for an NMTOKEN. The name for an entity bean with
cmp-version 2.x must not be a reserved literal in EJB QL.

Used in: entity, message-driven, method, relationship-role-source,
session

Example:

<ejb-name>EmployeeService</ejb-name>
-->
<!ELEMENT ejb-name (#PCDATA)>

<!--
The ejb-ql element contains the EJB QL query string that defines
a finder or select query. This element is defined within the scope of
a query element whose contents specify the finder or the select method
that uses the query. The content must be a valid EJB QL query string
for the entity bean for which the query is specified.

The ejb-ql element must be specified for all queries that are
expressible in EJB QL.

Used in: query

Example:
<query>
    <query-method>
        <method-name>ejbSelectPendingLineitems</method-name>
        <method-params/>
    </query-method>
    <ejb-ql>SELECT OBJECT(l) FROM LineItems l WHERE l.shipped <> TRUE
    </ejb-ql>
</query>

-->
<!ELEMENT ejb-ql (#PCDATA)>

<!--
The ejb-ref element is used for the declaration of a reference to
an enterprise bean's home. The declaration consists of:

	- an optional description
	- the EJB reference name used in the code of
	  the enterprise bean that's referencing the enterprise bean
	- the expected type of the referenced enterprise bean
	- the expected home and remote interfaces of the referenced
	  enterprise bean
	- optional ejb-link information, used to specify the referenced
	  enterprise bean

Used in: entity, message-driven, session
-->
<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type,
		home, remote, ejb-link?)>

<!--
The ejb-ref-name element contains the name of an EJB reference. The
EJB reference is an entry in the enterprise bean's environment and is
relative to the java:comp/env context.  The name must be unique
within the enterprise bean.

It is recommended that name is prefixed with "ejb/".

Used in: ejb-local-ref, ejb-ref

Example:

<ejb-ref-name>ejb/Payroll</ejb-ref-name>
-->
<!ELEMENT ejb-ref-name (#PCDATA)>

<!--
The ejb-ref-type element contains the expected type of the
referenced enterprise bean.

The ejb-ref-type element must be one of the following:

	<ejb-ref-type>Entity</ejb-ref-type>
	<ejb-ref-type>Session</ejb-ref-type>

Used in: ejb-local-ref, ejb-ref
-->
<!ELEMENT ejb-ref-type (#PCDATA)>

<!--

The ejb-relation element describes a relationship between two
entity beans with container-managed persistence.  An ejb-relation
element contains a description; an optional ejb-relation-name element;
and exactly two relationship role declarations, defined by the
ejb-relationship-role elements. The name of the relationship, if
specified, is unique within the ejb-jar file.

Used in: relationships
-->
<!ELEMENT ejb-relation (description?, ejb-relation-name?, ejb-relationship-role,
ejb-relationship-role)>

<!--
The ejb-relation-name element provides a unique name for a relationship.

Used in: ejb-relation
-->
<!ELEMENT ejb-relation-name (#PCDATA)>

<!--
The ejb-relationship-role element describes a role within a
relationship. There are two roles in each relationship.

The ejb-relationship-role element contains an optional description; an
optional name for the relationship role; a specification of the
multiplicity of the role; an optional specification of cascade-delete
functionality for the role; the role source; and a declaration of the
cmr-field, if any, by means of which the other side of the
relationship is accessed from the perspective of the role source.

The multiplicity and role-source element are mandatory.

The relationship-role-source element designates an entity bean by
means of an ejb-name element. For bidirectional relationships, both
roles of a relationship must declare a relationship-role-source
element that specifies a cmr-field in terms of which the relationship
is accessed. The lack of a cmr-field element in an
ejb-relationship-role specifies that the relationship is
unidirectional in navigability and the entity bean that participates
in the relationship is "not aware" of the relationship.

Used in: ejb-relation

Example:

<ejb-relation>
    <ejb-relation-name>Product-LineItem</ejb-relation-name>
    <ejb-relationship-role>
        <ejb-relationship-role-name>product-has-lineitems
        </ejb-relationship-role-name>
        <multiplicity>One</multiplicity>
        <relationship-role-source>
        <ejb-name>ProductEJB</ejb-name>
        </relationship-role-source>
     </ejb-relationship-role>

-->
<!ELEMENT ejb-relationship-role (description?, ejb-relationship-role-name?,
multiplicity, cascade-delete?, relationship-role-source, cmr-field?)>

<!--
The ejb-relationship-role-name element defines a name for a role that
is unique within an ejb-relation. Different relationships can use the
same name for a role.

Used in: ejb-relationship-role
-->
<!ELEMENT ejb-relationship-role-name (#PCDATA)>

<!--
The enterprise-beans element contains the declarations of one or more
enterprise beans.
-->
<!ELEMENT enterprise-beans (session | entity | message-driven)+>

<!--
The entity element declares an entity bean. The declaration
consists of:

	- an optional description
	- an optional display name
	- an optional small icon file name
	- an optional large icon file name
	- a unique name assigned to the enterprise bean
	  in the deployment descriptor
	- the names of the entity bean's remote home and remote
          interfaces, if any
	- the names of the entity bean's local home and local
	  interfaces, if any
	- the entity bean's implementation class
	- the entity bean's persistence management type
	- the entity bean's primary key class name
	- an indication of the entity bean's reentrancy
	- an optional specification of the entity bean's cmp-version
	- an optional specification of the entity bean's abstract
	  schema name
	- an optional list of container-managed fields
	- an optional specification of the primary key field
	- an optional declaration of the bean's environment entries
	- an optional declaration of the bean's EJB references
	- an optional declaration of the bean's local EJB references
	- an optional declaration of the security role references
	- an optional declaration of the security identity
	  to be used for the execution of the bean's methods
	- an optional declaration of the bean's resource manager
          connection factory references
	- an optional declaration of the bean's
	  resource environment references
	- an optional set of query declarations
	  for finder and select methods for an entity
	  bean with cmp-version 2.x.

The optional abstract-schema-name element must be specified for an
entity bean with container-managed persistence and cmp-version 2.x.

The optional primkey-field may be present in the descriptor if the
entity's persistence-type is Container.

The optional cmp-version element may be present in the descriptor if
the entity's persistence-type is Container. If the persistence-type is
Container and the cmp-version element is not specified, its value
defaults to 2.x.

The optional home and remote elements must be specified if the entity
bean cmp-version is 1.x.

The optional home and remote elements must be specified if the entity
bean has a remote home and remote interface.

The optional local-home and local elements must be specified if the
entity bean has a local home and local interface.

Either both the local-home and the local elements or both the
home and the remote elements must be specified.

The optional query elements must be present if the persistence-type is
Container and the cmp-version is 2.x and query methods other than
findByPrimaryKey have been defined for the entity bean.

The other elements that are optional are "optional" in the sense that
they are omitted if the lists represented by them are empty.

At least one cmp-field element must be present in the descriptor if
the entity's persistence-type is Container and the cmp-version is 1.x,
and none must not be present if the entity's persistence-type is Bean.

Used in: enterprise-beans

-->
<!ELEMENT entity (description?, display-name?, small-icon?,
		large-icon?, ejb-name, home?, remote?, local-home?,
		local?, ejb-class, persistence-type, prim-key-class,
		reentrant, cmp-version?, abstract-schema-name?,
		cmp-field*, primkey-field?, env-entry*, ejb-ref*,
		ejb-local-ref*, security-role-ref*, security-identity?,
		resource-ref*, resource-env-ref*, query*)>

<!--
The env-entry element contains the declaration of an enterprise bean's
environment entry. The declaration consists of an optional
description, the name of the environment entry, and an optional
value.  If a value is not specified, one must be supplied
during deployment.

Used in: entity, message-driven, session
-->
<!ELEMENT env-entry (description?, env-entry-name, env-entry-type,
		env-entry-value?)>

<!--
The env-entry-name element contains the name of an enterprise bean's
environment entry.  The name is a JNDI name relative to the
java:comp/env context.  The name must be unique within an enterprise bean.

Used in: env-entry

Example:

<env-entry-name>minAmount</env-entry-name>
-->
<!ELEMENT env-entry-name (#PCDATA)>

<!--
The env-entry-type element contains the fully-qualified Java type of
the environment entry value that is expected by the enterprise bean's
code.

The following are the legal values of env-entry-type:

	java.lang.Boolean
	java.lang.Byte
	java.lang.Character
	java.lang.String
	java.lang.Short
	java.lang.Integer
	java.lang.Long
	java.lang.Float
	java.lang.Double


Used in: env-entry

Example:

<env-entry-type>java.lang.Boolean</env-entry-type>
-->
<!ELEMENT env-entry-type (#PCDATA)>

<!--
The env-entry-value element contains the value of an enterprise bean's
environment entry. The value must be a String that is valid for the
constructor of the specified type that takes a single String
parameter, or for java.lang.Character, a single character.

Used in: env-entry

Example:

<env-entry-value>100.00</env-entry-value>
-->
<!ELEMENT env-entry-value (#PCDATA)>

<!--
The exclude list element specifies one or more methods which the
Assembler marks to be uncallable.

If the method permission relation contains methods that are in the
exclude list, the Deployer should consider those methods to be
uncallable.

Used in: assembly-descriptor
-->
<!ELEMENT exclude-list (description?, method+)>

<!--
The field-name element specifies the name of a container managed
field.

The name of the cmp-field of an entity bean with cmp-version 2.x must
begin with a lowercase letter. This field is accessed by methods whose
names consists of the name of the field specified by field-name in
which the first letter is uppercased, prefixed by "get" or "set".

The name of the cmp-field of an entity bean with cmp-version 1.x must
denote a public field of the enterprise bean class or one of its
superclasses.

Used in: cmp-field

Example:


	<field-name>firstName</field-Name>

-->
<!ELEMENT field-name (#PCDATA)>

<!--
The home element contains the fully-qualified name of the enterprise
bean's home interface.

Used in: ejb-ref, entity, session

Example:

<home>com.aardvark.payroll.PayrollHome</home>
-->
<!ELEMENT home (#PCDATA)>

<!--
The large-icon element contains the name of a file
containing a large (32 x 32) icon image. The file
name is a relative path within the enterprise bean's
ejb-jar file.

The image may be either in the JPEG or GIF format.
The icon can be used by tools.

Used in: ejb-jar, entity, message-driven, session

Example:

<large-icon>employee-service-icon32x32.jpg</large-icon>
-->
<!ELEMENT large-icon (#PCDATA)>

<!--

The local element contains the fully-qualified name of the
enterprise bean's local interface.

Used in: ejb-local-ref, entity, session

-->
<!ELEMENT local (#PCDATA)>

<!--

The local-home element contains the fully-qualified name of the
enterprise bean's local home interface.

Used in: ejb-local-ref, entity, session
-->
<!ELEMENT local-home (#PCDATA)>

<!--

The message-driven element declares a message-driven bean. The
declaration consists of:

	- an optional description
	- an optional display name
	- an optional small icon file name
	- an optional large icon file name
	- a name assigned to the enterprise bean in
	  the deployment descriptor
	- the message-driven bean's implementation class
	- the message-driven bean's transaction management type
	- an optional declaration of the message-driven bean's
	  message selector
	- an optional declaration of the
	  acknowledgment mode for the message-driven bean
	  if bean-managed transaction demarcation is used
	- an optional declaration of the
	  intended destination type of the message-driven bean
	- an optional declaration of the bean's environment entries
	- an optional declaration of the bean's EJB references
	- an optional declaration of the bean's local EJB references
	- an optional declaration of the security
	  identity to be used for the execution of the bean's methods
	- an optional declaration of the bean's resource manager
	  connection factory references
	- an optional declaration of the bean's resource
          environment references.

Used in: enterprise-beans
-->
<!ELEMENT message-driven (description?, display-name?, small-icon?,
		large-icon?, ejb-name, ejb-class, transaction-type,
		message-selector?, acknowledge-mode?,
		message-driven-destination?, env-entry*, ejb-ref*,
		ejb-local-ref*, security-identity?, resource-ref*,
		resource-env-ref*)>

<!--
The message-driven-destination element provides advice to the Deployer
as to whether a message-driven bean is intended for a Queue or a
Topic. The declaration consists of: the type of the message-driven
bean's intended destination and an optional declaration of whether a
durable or non-durable subscription should be used if the
destination-type is javax.jms.Topic.

Used in: message-driven
-->
<!ELEMENT message-driven-destination (destination-type,
subscription-durability?)>

<!--
The message-selector element is used to specify the JMS message
selector to be used in determining which messages a message-driven
bean is to receive.

Example:
<message-selector>JMSType = `car' AND color = `blue' AND weight &gt; 2500
</message-selector>

Used in: message-driven
-->
<!ELEMENT message-selector (#PCDATA)>

<!--

The method element is used to denote a method of an enterprise
bean's home or component interface, or, in the case of a message-driven
bean, the bean's onMessage method, or a set of methods. The ejb-name
element must be the name of one of the enterprise beans declared in
the deployment descriptor; the optional method-intf element allows to
distinguish between a method with the same signature that is multiply
defined across in both the home and component interfaces; the
method-name element specifies the method name; and the optional
method-params elements identify a single method among multiple methods
with an overloaded method name.

There are three possible styles of the method element syntax:

1.
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>*</method-name>
</method>

   This style is used to refer to all the methods of the specified
   enterprise bean's home and component interfaces.

2.
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
</method>>

   This style is used to refer to the specified method of the
   specified enterprise bean. If there are multiple methods with
   the same overloaded name, the element of this style refers to
   all the methods with the overloaded name.


3.
<method>
    <ejb-name>EJBNAME</ejb-name>
    <method-name>METHOD</method-name>
    <method-params>
        <method-param>PARAM-1</method-param>
        <method-param>PARAM-2</method-param>
        ...
        <method-param>PARAM-n</method-param>
    </method-params>
<method>


   This style is used to refer to a single method within a set of
   methods with an overloaded name. PARAM-1 through PARAM-n are the
   fully-qualified Java types of the method's input parameters (if
   the method has no input arguments, the method-params element
   contains no method-param elements). Arrays are specified by the
   array element's type, followed by one or more pair of square
   brackets (e.g. int[][]). If there are multiple methods with the
   same overloaded name, this style refers to all of the overloaded
   methods.


Used in: container-transaction, exclude-list, method-permission

Examples:

Style 1: The following method element refers to all the methods of
the EmployeeService bean's home and component interfaces:

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-name>*</method-name>
</method>

Style 2: The following method element refers to all the create
methods of the EmployeeService bean's home interface(s).

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-name>create</method-name>
</method>


Style 3: The following method element refers to the
create(String firstName, String LastName) method of the
EmployeeService bean's home interface(s).

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-name>create</method-name>
    <method-params>
        <method-param>java.lang.String</method-param>
        <method-param>java.lang.String</method-param>
    </method-params>
</method>


The following example illustrates a Style 3 element with
more complex parameter types. The method
foobar(char s, int i, int[] iar, mypackage.MyClass mycl,
mypackage.MyClass[][] myclaar) would be specified as:

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-name>foobar</method-name>
    <method-params>
        <method-param>char</method-param>
        <method-param>int</method-param>
        <method-param>int[]</method-param>
        <method-param>mypackage.MyClass</method-param>
        <method-param>mypackage.MyClass[][]</method-param>
    </method-params>
</method>


The optional method-intf element can be used when it becomes necessary
to differentiate between a method that is multiply defined across the
enterprise bean's home and component interfaces with the same name and
signature.


For example, the method element

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-intf>Remote</method-intf>
    <method-name>create</method-name>
    <method-params>
        <method-param>java.lang.String</method-param>
        <method-param>java.lang.String</method-param>
    </method-params>
</method>


can be used to differentiate the create(String, String) method defined
in the remote interface from the create(String, String) method defined
in the remote home interface, which would be defined as


<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-intf>Home</method-intf>
    <method-name>create</method-name>
    <method-params>
        <method-param>java.lang.String</method-param>
        <method-param>java.lang.String</method-param>
    </method-params>
</method>

and the create method that is defined in the local home interface
which would be defined as

<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-intf>LocalHome</method-intf>
    <method-name>create</method-name>
    <method-params>
        <method-param>java.lang.String</method-param>
        <method-param>java.lang.String</method-param>
    </method-params>
</method>


The method-intf element can be used with all three Styles of the
method element usage. For example, the following method element
example could be used to refer to all the methods of the
EmployeeService bean's remote home interface.


<method>
    <ejb-name>EmployeeService</ejb-name>
    <method-intf>Home</method-intf>
    <method-name>*</method-name>
</method>

-->
<!ELEMENT method (description?, ejb-name, method-intf?, method-name,
method-params?)>

<!--

The method-intf element allows a method element to differentiate
between the methods with the same name and signature that are multiply
defined across the component and home interfaces (e.g, in both an
enterprise bean's remote and local interfaces; in both an enterprise bean's
home and remote interfaces, etc.)

The method-intf element must be one of the following:

	<method-intf>Home</method-intf>
	<method-intf>Remote</method-intf>
	<method-intf>LocalHome</method-intf>
	<method-intf>Local</method-intf>

Used in: method
-->
<!ELEMENT method-intf (#PCDATA)>

<!--
The method-name element contains a name of an enterprise bean method
or the asterisk (*) character. The asterisk is used when the element
denotes all the methods of an enterprise bean's component and home
interfaces.

Used in: method, query-method
-->
<!ELEMENT method-name (#PCDATA)>

<!--
The method-param element contains the fully-qualified Java type name
of a method parameter.

Used in: method-params
-->
<!ELEMENT method-param (#PCDATA)>

<!--
The method-params element contains a list of the fully-qualified Java
type names of the method parameters.

Used in: method, query-method
-->
<!ELEMENT method-params (method-param*)>

<!--

The method-permission element specifies that one or more security
roles are allowed to invoke one or more enterprise bean methods. The
method-permission element consists of an optional description, a list
of security role names or an indicator to state that the method is
unchecked for authorization, and a list of method elements.

The security roles used in the method-permission element must be
defined in the security-role elements of the deployment descriptor,
and the methods must be methods defined in the enterprise bean's
component and/or home interfaces.


Used in: assembly-descriptor
-->
<!ELEMENT method-permission (description?, (role-name+|unchecked), method+)>

<!--
The multiplicity element describes the multiplicity of the role that
participates in a relation.

The multiplicity element must be one of the two following:

	<multiplicity>One</multiplicity>
	<multiplicity>Many</multiplicity>

Used in: ejb-relationship-role
-->
<!ELEMENT multiplicity (#PCDATA)>

<!--
The persistence-type element specifies an entity bean's persistence
management type.

The persistence-type element must be one of the two following:

	<persistence-type>Bean</persistence-type>
	<persistence-type>Container</persistence-type>

Used in: entity
-->
<!ELEMENT persistence-type (#PCDATA)>

<!--
The prim-key-class element contains the fully-qualified name of an
entity bean's primary key class.

If the definition of the primary key class is deferred to deployment
time, the prim-key-class element should specify java.lang.Object.

Used in: entity

Examples:

	<prim-key-class>java.lang.String</prim-key-class>

	<prim-key-class>com.wombat.empl.EmployeeID</prim-key-class>

	<prim-key-class>java.lang.Object</prim-key-class>

-->
<!ELEMENT prim-key-class (#PCDATA)>

<!--
The primkey-field element is used to specify the name of the primary
key field for an entity with container-managed persistence.

The primkey-field must be one of the fields declared in the cmp-field
element, and the type of the field must be the same as the primary key
type.

The primkey-field element is not used if the primary key maps to
multiple container-managed fields (i.e. the key is a compound key). In
this case, the fields of the primary key class must be public, and
their names must correspond to the field names of the entity bean
class that comprise the key.

Used in: entity

Example:

	<primkey-field>EmployeeId</primkey-field>

-->
<!ELEMENT primkey-field (#PCDATA)>

<!--
The query element is used to specify a finder or select query. It
contains
	- an optional description of the query
	- the specification of the finder or select
	  method it is used by
        - an optional specification of the result type mapping, if
          the query is for a select method and entity objects are
          returned.
    	- the EJB QL query string that defines the query.

Queries that are expressible in EJB QL must use the ejb-ql element to
specify the query. If a query is not expressible in EJB QL, the
description element should be used to describe the semantics of the
query and the ejb-ql element should be empty.

The result-type-mapping is an optional element. It can only be present
if the query-method specifies a select method that returns entity
objects.  The default value for the result-type-mapping element is
"Local".


Used in: entity
-->
<!ELEMENT query (description?, query-method, result-type-mapping?, ejb-ql)>

<!--
The query-method element is used to specify the method for a finder or
select query.

The method-name element specifies the name of a finder or select
method in the entity bean's implementation class.

Each method-param must be defined for a query-method using the
method-params element.

Used in: query

Example:

<query>
    <description>Method finds large orders</description>
    <query-method>
        <method-name>findLargeOrders</method-name>
        <method-params></method-params>
    </query-method>
    <ejb-ql>SELECT OBJECT(o) FROM Order o WHERE o.amount &gt; 1000</ejb-ql>
</query>

-->
<!ELEMENT query-method (method-name, method-params)>

<!--
The reentrant element specifies whether an entity bean is reentrant or
not.

The reentrant element must be one of the two following:

	<reentrant>True</reentrant>
	<reentrant>False</reentrant>

Used in: entity
-->
<!ELEMENT reentrant (#PCDATA)>

<!--

The relationship-role-source element designates the source of a role
that participates in a relationship. A relationship-role-source
element uniquely identifies an entity bean.

Used in: ejb-relationship-role
-->
<!ELEMENT relationship-role-source (description?, ejb-name)>

<!--
The relationships element describes the relationships in which
entity beans with container-managed persistence participate. The
relationships element contains an optional description; and a list of
ejb-relation elements, which specify the container managed
relationships.


Used in: ejb-jar
-->
<!ELEMENT relationships (description?, ejb-relation+)>

<!--
The remote element contains the fully-qualified name of the enterprise
bean's remote interface.

Used in: ejb-ref, entity, session

Example:

<remote>com.wombat.empl.EmployeeService</remote>
-->
<!ELEMENT remote (#PCDATA)>

<!--
The res-auth element specifies whether the enterprise bean code signs
on programmatically to the resource manager, or whether the Container
will sign on to the resource manager on behalf of the enterprise bean. In the
latter case, the Container uses information that is supplied by the
Deployer.

The value of this element must be one of the two following:

	<res-auth>Application</res-auth>
	<res-auth>Container</res-auth>

Used in: resource-ref
-->
<!ELEMENT res-auth (#PCDATA)>

<!--
The res-ref-name element specifies the name of a resource manager
connection factory reference.  The name is a JNDI name relative to the
java:comp/env context.  The name must be unique within an enterprise bean.

Used in: resource-ref
-->
<!ELEMENT res-ref-name (#PCDATA)>

<!--
The res-sharing-scope element specifies whether connections obtained
through the given resource manager connection factory reference can be
shared. The value of this element, if specified, must be one of the
two following:

	<res-sharing-scope>Shareable</res-sharing-scope>
	<res-sharing-scope>Unshareable</res-sharing-scope>

The default value is Shareable.

Used in: resource-ref
-->
<!ELEMENT res-sharing-scope (#PCDATA)>

<!--
The res-type element specifies the type of the data source. The type
is specified by the fully qualified Java language class or interface
expected to be implemented by the data source.

Used in: resource-ref
-->
<!ELEMENT res-type (#PCDATA)>

<!--
The resource-env-ref element contains a declaration of an enterprise bean's
reference to an administered object associated with a resource
in the enterprise bean's environment.  It consists of an optional
description, the resource environment reference name, and an
indication of the resource environment reference type expected by
the enterprise bean code.

Used in: entity, message-driven, session

Example:

<resource-env-ref>
    <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
    <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</resource-env-ref>
-->
<!ELEMENT resource-env-ref (description?, resource-env-ref-name,
		resource-env-ref-type)>

<!--
The resource-env-ref-name element specifies the name of a resource
environment reference; its value is the environment entry name used in
the enterprise bean code.  The name is a JNDI name relative to the
java:comp/env context and must be unique within an enterprise bean.

Used in: resource-env-ref
-->
<!ELEMENT resource-env-ref-name (#PCDATA)>

<!--
The resource-env-ref-type element specifies the type of a resource
environment reference.  It is the fully qualified name of a Java
language class or interface.

Used in: resource-env-ref
-->
<!ELEMENT resource-env-ref-type (#PCDATA)>

<!--
The resource-ref element contains a declaration of an enterprise bean's
reference to an external resource. It consists of an optional
description, the resource manager connection factory reference name,
the indication of the resource manager connection factory type
expected by the enterprise bean code, the type of authentication
(Application or Container), and an optional specification of the
shareability of connections obtained from the resource (Shareable or
Unshareable).

Used in: entity, message-driven, session

Example:

    <resource-ref>
	<res-ref-name>jdbc/EmployeeAppDB</res-ref-name>
	<res-type>javax.sql.DataSource</res-type>
	<res-auth>Container</res-auth>
	<res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
-->
<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth,
		res-sharing-scope?)>

<!--

The result-type-mapping element is used in the query element to specify
whether an abstract schema type returned by a query for a select method
is to be mapped to an EJBLocalObject or EJBObject type.

The result-type-mapping element must be one of the following:

        <result-type-mapping>Local</result-type-mapping>
        <result-type-mapping>Remote</result-type-mapping>

Used in: query
-->
<!ELEMENT result-type-mapping (#PCDATA)>

<!--
The role-link element is a reference to a defined security role. The
role-link element must contain the name of one of the security roles
defined in the security-role elements.

Used in: security-role-ref
-->
<!ELEMENT role-link (#PCDATA)>

<!--
The role-name element contains the name of a security role.

The name must conform to the lexical rules for an NMTOKEN.

Used in: method-permission, run-as, security-role, security-role-ref
-->
<!ELEMENT role-name (#PCDATA)>

<!--
The run-as element specifies the run-as identity to be used for the
execution of the enterprise bean. It contains an optional description, and
the name of a security role.

Used in: security-identity
-->
<!ELEMENT run-as (description?, role-name)>

<!--

The security-identity element specifies whether the caller's
security identity is to be used for the execution of the methods of
the enterprise bean or whether a specific run-as identity is to be
used. It contains an optional description and a specification of the
security identity to be used.

Used in: entity, message-driven, session
-->
<!ELEMENT security-identity (description?, (use-caller-identity|run-as))>

<!--
The security-role element contains the definition of a security
role. The definition consists of an optional description of the
security role, and the security role name.

Used in: assembly-descriptor

Example:

    <security-role>
	<description>
	    This role includes all employees who are authorized
	    to access the employee service application.
	</description>
	<role-name>employee</role-name>
    </security-role>
-->
<!ELEMENT security-role (description?, role-name)>

<!--
The security-role-ref element contains the declaration of a security
role reference in the enterprise bean's code. The declaration consists
of an optional description, the security role name used in the code,
and an optional link to a security role. If the security role is not
specified, the Deployer must choose an appropriate security role.

The value of the role-name element must be the String used as the
parameter to the EJBContext.isCallerInRole(String roleName) method
or the HttpServletRequest.isUserInRole(String role) method.

Used in: entity, session

-->
<!ELEMENT security-role-ref (description?, role-name, role-link?)>

<!--
The session element declares an session bean. The declaration consists
of:
	- an optional description
	- an optional display name
	- an optional small icon file name
	- an optional large icon file name
	- a name assigned to the enterprise bean
	  in the deployment description
	- the names of the session bean's remote home and
	  remote interfaces, if any
	- the names of the session bean's local home and
	  local interfaces, if any
	- the session bean's implementation class
	- the session bean's state management type
	- the session bean's transaction management type
	- an optional declaration of the bean's environment entries
	- an optional declaration of the bean's EJB references
	- an optional declaration of the bean's local EJB references
	- an optional declaration of the security role references
	- an optional declaration of the security identity to be
          used for the execution of the bean's methods
	- an optional declaration of the bean's resource manager
	  connection factory references
	- an optional declaration of the bean's resource environment
	  references.

The elements that are optional are "optional" in the sense that they
are omitted when if lists represented by them are empty.

Either both the local-home and the local elements or both the
home and the remote elements must be specified for the session bean.

Used in: enterprise-beans
-->
<!ELEMENT session (description?, display-name?, small-icon?,
large-icon?, ejb-name, home?, remote?, local-home?, local?,
ejb-class, session-type, transaction-type, env-entry*, ejb-ref*,
ejb-local-ref*, security-role-ref*, security-identity?, resource-ref*,
resource-env-ref*)>

<!--
The session-type element describes whether the session bean is a
stateful session or stateless session.

The session-type element must be one of the two following:

	<session-type>Stateful</session-type>
	<session-type>Stateless</session-type>
-->
<!ELEMENT session-type (#PCDATA)>

<!--
The small-icon element contains the name of a file
containing a small (16 x 16) icon image. The file
name is a relative path within the enterprise bean's
ejb-jar file.

The image may be either in the JPEG or GIF format.
The icon can be used by tools.

Used in: ejb-jar, entity, message-driven, session

Example:

<small-icon>employee-service-icon16x16.jpg</small-icon>
-->
<!ELEMENT small-icon (#PCDATA)>

<!--
The subscription-durability element specifies whether a JMS topic
subscription is intended to be durable or nondurable.

The subscription-durability element must be one of the two following:

	<subscription-durability>Durable</subscription-durability>
	<subscription-durability>NonDurable</subscription-durability>

Used in: message-driven-destination
-->
<!ELEMENT subscription-durability (#PCDATA)>

<!--
The trans-attribute element specifies how the container must manage
the transaction boundaries when delegating a method invocation to an
enterprise bean's business method.

The value of trans-attribute must be one of the following:


	<trans-attribute>NotSupported</trans-attribute>
	<trans-attribute>Supports</trans-attribute>
	<trans-attribute>Required</trans-attribute>
	<trans-attribute>RequiresNew</trans-attribute>
	<trans-attribute>Mandatory</trans-attribute>
	<trans-attribute>Never</trans-attribute>

Used in: container-transaction
-->
<!ELEMENT trans-attribute (#PCDATA)>

<!--
The transaction-type element specifies an enterprise bean's
transaction management type.

The transaction-type element must be one of the two following:

	<transaction-type>Bean</transaction-type>
	<transaction-type>Container</transaction-type>

Used in: message-driven, session
-->
<!ELEMENT transaction-type (#PCDATA)>

<!--
The unchecked element specifies that a method is not checked for authorization
by the container prior to invocation of the method.

Used in: method-permission
-->
<!ELEMENT unchecked EMPTY>

<!--

The use-caller-identity element specifies that the caller's security
identity be used as the security identity for the execution of the
enterprise bean's methods.

Used in: security-identity
-->
<!ELEMENT use-caller-identity EMPTY>

<!--
The ID mechanism is to allow tools that produce additional deployment
information (i.e., information beyond the standard deployment
descriptor information) to store the non-standard information in a
separate file, and easily refer from these tool-specific files to the
information in the standard deployment descriptor.

Tools are not allowed to add the non-standard information into the
standard deployment descriptor.
-->

<!ATTLIST abstract-schema-name id ID #IMPLIED>
<!ATTLIST acknowledge-mode id ID #IMPLIED>
<!ATTLIST assembly-descriptor id ID #IMPLIED>
<!ATTLIST cascade-delete id ID #IMPLIED>
<!ATTLIST cmp-field id ID #IMPLIED>
<!ATTLIST cmp-version id ID #IMPLIED>
<!ATTLIST cmr-field id ID #IMPLIED>
<!ATTLIST cmr-field-name id ID #IMPLIED>
<!ATTLIST cmr-field-type id ID #IMPLIED>
<!ATTLIST container-transaction id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST destination-type id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST ejb-class id ID #IMPLIED>
<!ATTLIST ejb-client-jar id ID #IMPLIED>
<!ATTLIST ejb-jar id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
<!ATTLIST ejb-local-ref id ID #IMPLIED>
<!ATTLIST ejb-name id ID #IMPLIED>
<!ATTLIST ejb-ql id ID #IMPLIED>
<!ATTLIST ejb-ref id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST ejb-relation id ID #IMPLIED>
<!ATTLIST ejb-relation-name id ID #IMPLIED>
<!ATTLIST ejb-relationship-role id ID #IMPLIED>
<!ATTLIST ejb-relationship-role-name id ID #IMPLIED>
<!ATTLIST enterprise-beans id ID #IMPLIED>
<!ATTLIST entity id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID #IMPLIED>
<!ATTLIST env-entry-type id ID #IMPLIED>
<!ATTLIST env-entry-value id ID #IMPLIED>
<!ATTLIST exclude-list id ID #IMPLIED>
<!ATTLIST field-name id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST local id ID #IMPLIED>
<!ATTLIST local-home id ID #IMPLIED>
<!ATTLIST message-driven id ID #IMPLIED>
<!ATTLIST message-driven-destination id ID #IMPLIED>
<!ATTLIST message-selector id ID #IMPLIED>
<!ATTLIST method id ID #IMPLIED>
<!ATTLIST method-intf id ID #IMPLIED>
<!ATTLIST method-name id ID #IMPLIED>
<!ATTLIST method-param id ID #IMPLIED>
<!ATTLIST method-params id ID #IMPLIED>
<!ATTLIST method-permission id ID #IMPLIED>
<!ATTLIST multiplicity id ID #IMPLIED>
<!ATTLIST persistence-type id ID #IMPLIED>
<!ATTLIST prim-key-class id ID #IMPLIED>
<!ATTLIST primkey-field id ID #IMPLIED>
<!ATTLIST query id ID #IMPLIED>
<!ATTLIST query-method id ID #IMPLIED>
<!ATTLIST reentrant id ID #IMPLIED>
<!ATTLIST relationship-role-source id ID #IMPLIED>
<!ATTLIST relationships id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-sharing-scope id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST resource-env-ref id ID #IMPLIED>
<!ATTLIST resource-env-ref-name id ID #IMPLIED>
<!ATTLIST resource-env-ref-type id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST result-type-mapping id ID #IMPLIED>
<!ATTLIST role-link id ID #IMPLIED>
<!ATTLIST role-name id ID #IMPLIED>
<!ATTLIST run-as id ID #IMPLIED>
<!ATTLIST security-identity id ID #IMPLIED>
<!ATTLIST security-role id ID #IMPLIED>
<!ATTLIST security-role-ref id ID #IMPLIED>
<!ATTLIST session id ID #IMPLIED>
<!ATTLIST session-type id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
<!ATTLIST subscription-durability id ID #IMPLIED>
<!ATTLIST trans-attribute id ID #IMPLIED>
<!ATTLIST transaction-type id ID #IMPLIED>
<!ATTLIST unchecked id ID #IMPLIED>
<!ATTLIST use-caller-identity id ID #IMPLIED>
