<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
	    targetNamespace="http://java.sun.com/xml/ns/javaee"
	    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
	    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	    elementFormDefault="qualified"
	    attributeFormDefault="unqualified"
	    version="3.0">
  <xsd:annotation>
    <xsd:documentation>
      @(#)ejb-jar_3_0.xsds	1.51 02/23/06
    </xsd:documentation>
  </xsd:annotation>

  <xsd:annotation>
    <xsd:documentation>

      DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.

      Copyright 2003-2007 Sun Microsystems, Inc. All rights reserved.

      The contents of this file are subject to the terms of either the
      GNU General Public License Version 2 only ("GPL") or the Common
      Development and Distribution License("CDDL") (collectively, the
      "License").  You may not use this file except in compliance with
      the License. You can obtain a copy of the License at
      https://glassfish.dev.java.net/public/CDDL+GPL.html or
      glassfish/bootstrap/legal/LICENSE.txt.  See the License for the
      specific language governing permissions and limitations under the
      License.

      When distributing the software, include this License Header
      Notice in each file and include the License file at
      glassfish/bootstrap/legal/LICENSE.txt.  Sun designates this
      particular file as subject to the "Classpath" exception as
      provided by Sun in the GPL Version 2 section of the License file
      that accompanied this code.  If applicable, add the following
      below the License Header, with the fields enclosed by brackets []
      replaced by your own identifying information:
      "Portions Copyrighted [year] [name of copyright owner]"

      Contributor(s):

      If you wish your version of this file to be governed by only the
      CDDL or only the GPL Version 2, indicate your decision by adding
      "[Contributor] elects to include this software in this
      distribution under the [CDDL or GPL Version 2] license."  If you
      don't indicate a single choice of license, a recipient has the
      option to distribute your version of this file under either the
      CDDL, the GPL Version 2 or to extend the choice of license to its
      licensees as provided above.  However, if you add GPL Version 2
      code and therefore, elected the GPL Version 2 license, then the
      option applies only if the new code is made subject to such
      option by the copyright holder.

    </xsd:documentation>
  </xsd:annotation>

  <xsd:annotation>
    <xsd:documentation>
      <![CDATA[

	This is the XML Schema for the EJB 3.0 deployment descriptor.
	The deployment descriptor must be named "META-INF/ejb-jar.xml" in
	the EJB's jar file.  All EJB deployment descriptors must indicate
	the ejb-jar schema by using the Java EE namespace:

	http://java.sun.com/xml/ns/javaee

	and by indicating the version of the schema by
	using the version element as shown below:

	    <ejb-jar xmlns="http://java.sun.com/xml/ns/javaee"
	      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
		  http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"
	      version="3.0">
	      ...
	    </ejb-jar>

	The instance documents may indicate the published version of
	the schema using the xsi:schemaLocation attribute for the
	Java EE namespace with the following location:

	http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd

	]]>
    </xsd:documentation>
  </xsd:annotation>

  <xsd:annotation>
    <xsd:documentation>

      The following conventions apply to all Java EE
      deployment descriptor elements unless indicated otherwise.

      - 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.

    </xsd:documentation>
  </xsd:annotation>

  <xsd:include schemaLocation="javaee_5.xsd"/>


<!-- **************************************************** -->

  <xsd:element name="ejb-jar" type="javaee:ejb-jarType">
    <xsd:annotation>
      <xsd:documentation>

	This is the root of the ejb-jar deployment descriptor.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:key name="ejb-name-key">
      <xsd:annotation>
	<xsd:documentation>

	  The ejb-name element contains the name of an enterprise
	  bean. The name must be unique within the ejb-jar file.

	</xsd:documentation>
      </xsd:annotation>
      <xsd:selector xpath="javaee:enterprise-beans/*"/>
      <xsd:field    xpath="javaee:ejb-name"/>
    </xsd:key>

    <xsd:keyref name="ejb-name-references"
		refer="javaee:ejb-name-key">
      <xsd:annotation>
	<xsd:documentation>

	  The keyref indicates the references from
	  relationship-role-source must be to a specific ejb-name
	  defined within the scope of enterprise-beans element.

	</xsd:documentation>
      </xsd:annotation>
      <xsd:selector
xpath=".//javaee:ejb-relationship-role/javaee:relationship-role-source"/>
      <xsd:field
	   xpath="javaee:ejb-name"/>
    </xsd:keyref>

    <xsd:key name="role-name-key">
      <xsd:annotation>
	<xsd:documentation>

	  A role-name-key is specified to allow the references
	  from the security-role-refs.

	</xsd:documentation>
      </xsd:annotation>
      <xsd:selector xpath="javaee:assembly-descriptor/javaee:security-role"/>
      <xsd:field    xpath="javaee:role-name"/>
    </xsd:key>

    <xsd:keyref name="role-name-references"
		refer="javaee:role-name-key">
      <xsd:annotation>
	<xsd:documentation>

	  The keyref indicates the references from
	  security-role-ref to a specified role-name.

	</xsd:documentation>
      </xsd:annotation>
      <xsd:selector xpath="javaee:enterprise-beans/*/javaee:security-role-ref"/>
      <xsd:field    xpath="javaee:role-link"/>
    </xsd:keyref>
  </xsd:element>


<!-- **************************************************** -->

  <xsd:complexType name="activation-config-propertyType">
    <xsd:annotation>
      <xsd:documentation>

	The activation-config-propertyType contains a name/value
	configuration property pair for a message-driven bean.

	The properties that are recognized for a particular
	message-driven bean are determined by the messaging type.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="activation-config-property-name"
		   type="javaee:xsdStringType">
	<xsd:annotation>
	  <xsd:documentation>

	    The activation-config-property-name element contains
	    the name for an activation configuration property of
	    a message-driven bean.

	    For JMS message-driven beans, the following property
	    names are recognized: acknowledgeMode,
	    messageSelector, destinationType, subscriptionDurability

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="activation-config-property-value"
		   type="javaee:xsdStringType">
	<xsd:annotation>
	  <xsd:documentation>

	    The activation-config-property-value element
	    contains the value for an activation configuration
	    property of a message-driven bean.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="activation-configType">
    <xsd:annotation>
      <xsd:documentation>

	The activation-configType defines information about the
	expected configuration properties of the message-driven bean
	in its operational environment. This may include information
	about message acknowledgement, message selector, expected
	destination type, etc.

	The configuration information is expressed in terms of
	name/value configuration properties.

	The properties that are recognized for a particular
	message-driven bean are determined by the messaging type.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="activation-config-property"
		   type="javaee:activation-config-propertyType"
		   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="application-exceptionType">
    <xsd:annotation>
      <xsd:documentation>

        The application-exceptionType declares an application
        exception. The declaration consists of:

            - the exception class. When the container receives
              an exception of this type, it is required to
              forward this exception as an applcation exception
              to the client regardless of whether it is a checked
              or unchecked exception.
            - an optional rollback element. If this element is
              set to true, the container must rollback the current
              transaction before forwarding the exception to the
              client.  If not specified, it defaults to false.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="exception-class"
		   type="javaee:fully-qualified-classType"/>
      <xsd:element name="rollback"
                   type="javaee:true-falseType"
                   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="around-invokeType">
    <xsd:annotation>
      <xsd:documentation>

        The around-invoke type specifies a method on a
        class to be called during the around invoke portion of an
        ejb invocation.  Note that each class may have only one
        around invoke method and that the method may not be
        overloaded.

        If the class element is missing then
        the class defining the callback is assumed to be the
        interceptor class or component class in scope at the
        location in the descriptor in which the around invoke
        definition appears.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="class"
                   type="javaee:fully-qualified-classType"
                   minOccurs="0"/>
      <xsd:element name="method-name"
                   type="javaee:java-identifierType"/>
    </xsd:sequence>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="assembly-descriptorType">
    <xsd:annotation>
      <xsd:documentation>

	The assembly-descriptorType defines
	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, the definition
        of interceptor bindings, a list of
	methods to be excluded from being invoked, and a list of
        exception types that should be treated as application exceptions.

	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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="security-role"
		   type="javaee:security-roleType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="method-permission"
		   type="javaee:method-permissionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="container-transaction"
		   type="javaee:container-transactionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="interceptor-binding"
                   type="javaee:interceptor-bindingType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="message-destination"
		   type="javaee:message-destinationType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="exclude-list"
		   type="javaee:exclude-listType"
		   minOccurs="0"/>
      <xsd:element name="application-exception"
                   type="javaee:application-exceptionType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="cmp-fieldType">
    <xsd:annotation>
      <xsd:documentation>

	The cmp-fieldType describes a container-managed field. The
	cmp-fieldType contains an optional description of the field,
	and the name of the field.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="field-name"
		   type="javaee:java-identifierType">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="cmp-versionType">
    <xsd:annotation>
      <xsd:documentation>

	The cmp-versionType specifies the version of an entity bean
	with container-managed persistence. It is used by
	cmp-version elements.

	The value must be one of the two following:

	    1.x
	    2.x

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="1.x"/>
	<xsd:enumeration value="2.x"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="cmr-field-typeType">
    <xsd:annotation>
      <xsd:documentation>

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

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="java.util.Collection"/>
	<xsd:enumeration value="java.util.Set"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="cmr-fieldType">
    <xsd:annotation>
      <xsd:documentation>

	The cmr-fieldType 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="cmr-field-name"
		   type="javaee:string">
	<xsd:annotation>
	  <xsd:documentation>

	    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".

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="cmr-field-type"
		   type="javaee:cmr-field-typeType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="container-transactionType">
    <xsd:annotation>
      <xsd:documentation>

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

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="method"
		   type="javaee:methodType"
		   maxOccurs="unbounded"/>
      <xsd:element name="trans-attribute"
		   type="javaee:trans-attributeType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="ejb-classType">
    <xsd:annotation>
      <xsd:documentation>
	<![CDATA[

	  The ejb-classType contains the fully-qualified name of the
	  enterprise bean's class. It is used by ejb-class elements.

	  Example:

	      <ejb-class>com.wombat.empl.EmployeeServiceBean</ejb-class>

	  ]]>
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:fully-qualified-classType"/>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="ejb-jarType">
    <xsd:annotation>
      <xsd:documentation>

	The ejb-jarType defines the root element of the EJB
	deployment descriptor. It contains

	    - an optional description of the ejb-jar file
	    - an optional display name
	    - an optional icon that contains a small and a large
	      icon file name
	    - structural information about all included
	      enterprise beans that is not specified through
              annotations
            - structural information about interceptor classes
	    - 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:group ref="javaee:descriptionGroup"/>
      <xsd:element name="enterprise-beans"
		   type="javaee:enterprise-beansType"
                   minOccurs="0"/>
      <xsd:element name="interceptors"
		   type="javaee:interceptorsType"
                   minOccurs="0"/>
      <xsd:element name="relationships"
		   type="javaee:relationshipsType"
		   minOccurs="0">
	<xsd:unique name="relationship-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      The ejb-relation-name contains the name of a
	      relation. The name must be unique within
	      relationships.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-relation"/>
	  <xsd:field    xpath="javaee:ejb-relation-name"/>
	</xsd:unique>
      </xsd:element>
      <xsd:element name="assembly-descriptor"
		   type="javaee:assembly-descriptorType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

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

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="ejb-client-jar"
		   type="javaee:pathType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>
	    <![CDATA[

	      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.

	      Example:

		  <ejb-client-jar>employee_service_client.jar
		  </ejb-client-jar>

	      ]]>
	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="version"
		   type="javaee:dewey-versionType"
		   fixed="3.0"
		   use="required">
      <xsd:annotation>
	<xsd:documentation>

	  The version specifies the version of the
	  EJB specification that the instance document must
	  comply with. This information enables deployment tools
	  to validate a particular EJB Deployment
	  Descriptor with respect to a specific version of the EJB
	  schema.

	</xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
    <xsd:attribute name="metadata-complete" type="xsd:boolean">
      <xsd:annotation>
	<xsd:documentation>

	  The metadata-complete attribute defines whether this
	  deployment descriptor and other related deployment
	  descriptors for this module (e.g., web service
	  descriptors) are complete, or whether the class
	  files available to this module and packaged with
	  this application should be examined for annotations
	  that specify deployment information.

	  If metadata-complete is set to "true", the deployment
	  tool must ignore any annotations that specify deployment
	  information, which might be present in the class files
	  of the application.

	  If metadata-complete is not specified or is set to
	  "false", the deployment tool must examine the class
	  files of the application for annotations, as
	  specified by the specifications.

	</xsd:documentation>
      </xsd:annotation>

    </xsd:attribute>

    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="ejb-nameType">
    <xsd:annotation>
      <xsd:documentation>
	<![CDATA[

	  The ejb-nameType specifies an enterprise bean's name. It is
	  used by ejb-name elements. 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 used
	  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 must conform to the lexical
	  rules for an NMTOKEN.

	  Example:

	  <ejb-name>EmployeeService</ejb-name>

	  ]]>
      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:xsdNMTOKENType"/>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="ejb-relationType">
    <xsd:annotation>
      <xsd:documentation>

	The ejb-relationType describes a relationship between two
	entity beans with container-managed persistence.  It is used
	by ejb-relation elements. It 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="ejb-relation-name"
		   type="javaee:string"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    The ejb-relation-name element provides a unique name
	    within the ejb-jar file for a relationship.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="ejb-relationship-role"
		   type="javaee:ejb-relationship-roleType"/>
      <xsd:element name="ejb-relationship-role"
		   type="javaee:ejb-relationship-roleType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="ejb-relationship-roleType">
    <xsd:annotation>
      <xsd:documentation>
	<![CDATA[

	  The ejb-relationship-roleType describes a role within a
	  relationship. There are two roles in each relationship.

	  The ejb-relationship-roleType 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.

	  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>
	  </ejb-relation>

	  ]]>
      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="ejb-relationship-role-name"
		   type="javaee:string"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="multiplicity"
		   type="javaee:multiplicityType"/>
      <xsd:element name="cascade-delete"
		   type="javaee:emptyType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="relationship-role-source"
		   type="javaee:relationship-role-sourceType"/>
      <xsd:element name="cmr-field"
		   type="javaee:cmr-fieldType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="enterprise-beansType">
    <xsd:annotation>
      <xsd:documentation>

	The enterprise-beansType declares one or more enterprise
	beans. Each bean can be a session, entity or message-driven
	bean.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:choice maxOccurs="unbounded">
      <xsd:element name="session"
		   type="javaee:session-beanType">
	<xsd:unique name="session-ejb-local-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-local-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="session-ejb-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="session-resource-env-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-env-ref"/>
	  <xsd:field    xpath="javaee:resource-env-ref-name"/>
	</xsd:unique>

	<xsd:unique name="session-message-destination-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      The message-destination-ref-name element specifies the name
	      of a message destination reference; its value is
	      the message destination reference name used in the component
	      code. The name is a JNDI name relative to the
	      java:comp/env context and must be unique within an
	      component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:message-destination-ref"/>
	  <xsd:field    xpath="javaee:message-destination-ref-name"/>
	</xsd:unique>

	<xsd:unique name="session-res-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      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 component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-ref"/>
	  <xsd:field    xpath="javaee:res-ref-name"/>
	</xsd:unique>

	<xsd:unique name="session-env-entry-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:env-entry"/>
	  <xsd:field    xpath="javaee:env-entry-name"/>
	</xsd:unique>
      </xsd:element>

      <xsd:element name="entity"
		   type="javaee:entity-beanType">
	<xsd:unique name="entity-ejb-local-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-local-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="entity-ejb-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="entity-resource-env-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-env-ref"/>
	  <xsd:field    xpath="javaee:resource-env-ref-name"/>
	</xsd:unique>

	<xsd:unique name="entity-message-destination-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      The message-destination-ref-name element specifies the name
	      of a message destination reference; its value is
	      the message destination reference name used in the component
	      code. The name is a JNDI name relative to the
	      java:comp/env context and must be unique within an
	      component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:message-destination-ref"/>
	  <xsd:field    xpath="javaee:message-destination-ref-name"/>
	</xsd:unique>

	<xsd:unique name="entity-res-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      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 component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-ref"/>
	  <xsd:field    xpath="javaee:res-ref-name"/>
	</xsd:unique>

	<xsd:unique name="entity-env-entry-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:env-entry"/>
	  <xsd:field    xpath="javaee:env-entry-name"/>
	</xsd:unique>
      </xsd:element>

      <xsd:element name="message-driven"
		   type="javaee:message-driven-beanType">
	<xsd:unique name="messaged-ejb-local-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-local-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="messaged-ejb-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:ejb-ref"/>
	  <xsd:field    xpath="javaee:ejb-ref-name"/>
	</xsd:unique>

	<xsd:unique name="messaged-resource-env-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-env-ref"/>
	  <xsd:field    xpath="javaee:resource-env-ref-name"/>
	</xsd:unique>

	<xsd:unique name="messaged-message-destination-ref-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      The message-destination-ref-name element specifies the name
	      of a message destination reference; its value is
	      the message destination reference name used in the component
	      code. The name is a JNDI name relative to the
	      java:comp/env context and must be unique within an
	      component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:message-destination-ref"/>
	  <xsd:field    xpath="javaee:message-destination-ref-name"/>
	</xsd:unique>

	<xsd:unique name="messaged-res-ref-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      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 component.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:resource-ref"/>
	  <xsd:field    xpath="javaee:res-ref-name"/>
	</xsd:unique>

	<xsd:unique name="messaged-env-entry-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector xpath="javaee:env-entry"/>
	  <xsd:field    xpath="javaee:env-entry-name"/>
	</xsd:unique>
      </xsd:element>

    </xsd:choice>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="entity-beanType">
    <xsd:annotation>
      <xsd:documentation>

	The entity-beanType declares an entity bean. The declaration
	consists of:

	    - an optional description
	    - an optional display name
	    - an optional icon element that contains a small and a large
	      icon file name
	    - a unique name assigned to the enterprise bean
	      in the deployment descriptor
            - an optional mapped-name element that can be used to provide
              vendor-specific deployment information such as the physical
              jndi-name of the entity bean's remote home interface. This
              element is not required to be supported by all implementations.
              Any use of this element is non-portable.
	    - 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 optional entity bean's persistence management type. If
              this element is not specified it is defaulted to Container.
	    - 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 bean's web
	      service 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 declaration of the bean's message
	      destination 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:group ref="javaee:descriptionGroup"/>
      <xsd:element name="ejb-name"
		   type="javaee:ejb-nameType"/>
      <xsd:element name="mapped-name"
		   type="javaee:xsdStringType"
		   minOccurs="0"/>
      <xsd:element name="home"
		   type="javaee:homeType"
		   minOccurs="0"/>
      <xsd:element name="remote"
		   type="javaee:remoteType"
		   minOccurs="0"/>
      <xsd:element name="local-home"
		   type="javaee:local-homeType"
		   minOccurs="0"/>
      <xsd:element name="local"
		   type="javaee:localType"
		   minOccurs="0"/>
      <xsd:element name="ejb-class"
		   type="javaee:ejb-classType"/>
      <xsd:element name="persistence-type"
		   type="javaee:persistence-typeType"/>
      <xsd:element name="prim-key-class"
		   type="javaee:fully-qualified-classType">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="reentrant"
		   type="javaee:true-falseType">
	<xsd:annotation>
	  <xsd:documentation>

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

	    The reentrant element must be one of the two
	    following: true or false

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="cmp-version"
		   type="javaee:cmp-versionType"
		   minOccurs="0"/>
      <xsd:element name="abstract-schema-name"
		   type="javaee:java-identifierType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="cmp-field"
		   type="javaee:cmp-fieldType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="primkey-field"
		   type="javaee:string"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    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.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
      <xsd:element name="security-role-ref"
		   type="javaee:security-role-refType"
		   minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="security-identity"
		   type="javaee:security-identityType"
		   minOccurs="0"/>
      <xsd:element name="query"
		   type="javaee:queryType"
		   minOccurs="0" maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="exclude-listType">
    <xsd:annotation>
      <xsd:documentation>

	The exclude-listType 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="method"
		   type="javaee:methodType"
		   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="init-methodType">
    <xsd:sequence>
      <xsd:element name="create-method"
		   type="javaee:named-methodType"/>
      <xsd:element name="bean-method"
		   type="javaee:named-methodType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="interceptor-bindingType">
    <xsd:annotation>
      <xsd:documentation>

        The interceptor-bindingType element describes the binding of
        interceptor classes to beans within the ejb-jar.
        It consists of :

          - An optional description.
          - The name of an ejb within the ejb-jar or the wildcard value "*",
            which is used to define interceptors that are bound to all
            beans in the ejb-jar.
          - A list of interceptor classes that are bound to the contents of
            the ejb-name element or a specification of the total ordering
            over the interceptors defined for the given level and above.
          - An optional exclude-default-interceptors element.  If set to true,
            specifies that default interceptors are not to be applied to
            a bean-class and/or business method.
          - An optional exclude-class-interceptors element.  If set to true,
            specifies that class interceptors are not to be applied to
            a business method.
          - An optional set of method elements for describing the name/params
            of a method-level interceptor.

         Interceptors bound to all classes using the wildcard syntax
         "*" are default interceptors for the components in the ejb-jar.
         In addition, interceptors may be bound at the level of the bean
         class (class-level interceptors) or business methods (method-level
         interceptors ).

         The binding of interceptors to classes is additive.  If interceptors
         are bound at the class-level and/or default-level as well as the
         method-level, both class-level and/or default-level as well as
         method-level will apply.

         There are four possible styles of the interceptor element syntax :

         1.
         <interceptor-binding>
           <ejb-name>*</ejb-name>
           <interceptor-class>INTERCEPTOR</interceptor-class>
         </interceptor-binding>

         Specifying the ejb-name as the wildcard value "*" designates
         default interceptors (interceptors that apply to all session and
         message-driven beans contained in the ejb-jar).

         2.
         <interceptor-binding>
           <ejb-name>EJBNAME</ejb-name>
           <interceptor-class>INTERCEPTOR</interceptor-class>
         </interceptor-binding>

         This style is used to refer to interceptors associated with the
         specified enterprise bean(class-level interceptors).

         3.
         <interceptor-binding>
           <ejb-name>EJBNAME</ejb-name>
           <interceptor-class>INTERCEPTOR</interceptor-class>
           <method>
             <method-name>METHOD</method-name>
           </method>
         </interceptor-binding>

         This style is used to associate a method-level interceptor with
         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.  Method-level
         interceptors can only be associated with business methods of the
         bean class.   Note that the wildcard value "*" cannot be used
         to specify method-level interceptors.

         4.
         <interceptor-binding>
           <ejb-name>EJBNAME</ejb-name>
           <interceptor-class>INTERCEPTOR</interceptor-class>
           <method>
             <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>
         </interceptor-binding>

         This style is used to associate a method-level interceptor with
         the specified method of the specified enterprise bean.  This
         style is used to refer to a single method within a set of methods
         with an overloaded name.  The values 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[][]).

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="ejb-name"
		   type="javaee:string"/>
      <xsd:choice>
        <xsd:element name="interceptor-class"
                     type="javaee:fully-qualified-classType"
		     minOccurs="0"
                     maxOccurs="unbounded"/>
        <xsd:element name="interceptor-order"
		     type="javaee:interceptor-orderType"
		     minOccurs="1"/>
      </xsd:choice>
      <xsd:element name="exclude-default-interceptors"
		   type="javaee:true-falseType"
		   minOccurs="0"/>
      <xsd:element name="exclude-class-interceptors"
		   type="javaee:true-falseType"
		   minOccurs="0"/>
      <xsd:element name="method"
		   type="javaee:named-methodType"
                   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="interceptor-orderType">
    <xsd:annotation>
      <xsd:documentation>
        The interceptor-orderType element describes a total ordering
        of interceptor classes.
      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>

      <xsd:element name="interceptor-class"
                   type="javaee:fully-qualified-classType"
		   minOccurs="1"
                   maxOccurs="unbounded"/>

    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="interceptorType">
    <xsd:annotation>
      <xsd:documentation>

        The interceptorType element declares information about a single
        interceptor class.  It consists of :

            - An optional description.
            - The fully-qualified name of the interceptor class.
            - An optional list of around invoke methods declared on the
              interceptor class and/or its super-classes.
            - An optional list environment dependencies for the interceptor
              class and/or its super-classes.
            - An optional list of post-activate methods declared on the
              interceptor class and/or its super-classes.
            - An optional list of pre-passivate methods declared on the
              interceptor class and/or its super-classes.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="interceptor-class"
		   type="javaee:fully-qualified-classType"/>
      <xsd:element name="around-invoke"
                   type="javaee:around-invokeType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
      <xsd:element name="post-activate"
                   type="javaee:lifecycle-callbackType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="pre-passivate"
                   type="javaee:lifecycle-callbackType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="interceptorsType">
    <xsd:annotation>
      <xsd:documentation>

        The interceptorsType element declares one or more interceptor
        classes used by components within this ejb-jar.  The declaration
        consists of :

            - An optional description.
            - One or more interceptor elements.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="interceptor"
		   type="javaee:interceptorType"
		   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="message-driven-beanType">
    <xsd:annotation>
      <xsd:documentation>

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

	    - an optional description
	    - an optional display name
	    - an optional icon element that contains a small and a large
	      icon file name.
	    - a name assigned to the enterprise bean in
	      the deployment descriptor
            - an optional mapped-name element that can be used to provide
              vendor-specific deployment information such as the physical
              jndi-name of destination from which this message-driven bean
              should consume.  This element is not required to be supported
              by all implementations.  Any use of this element is non-portable.
	    - the message-driven bean's implementation class
	    - an optional declaration of the bean's messaging
	      type
            - an optional declaration of the bean's timeout method.
	    - the optional message-driven bean's transaction management
              type. If it is not defined, it is defaulted to Container.
	    - an optional declaration of the bean's
	      message-destination-type
	    - an optional declaration of the bean's
	      message-destination-link
	    - an optional declaration of the message-driven bean's
	      activation configuration properties
            - an optional list of the message-driven bean class and/or
              superclass around-invoke methods.
	    - 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 bean's web service
	      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 declaration of the bean's message
	      destination references

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:group ref="javaee:descriptionGroup"/>
      <xsd:element name="ejb-name"
		   type="javaee:ejb-nameType"/>
      <xsd:element name="mapped-name"
		   type="javaee:xsdStringType"
		   minOccurs="0"/>
      <xsd:element name="ejb-class"
		   type="javaee:ejb-classType"
                   minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>

             The ejb-class element specifies the fully qualified name
             of the bean class for this ejb.  It is required unless
             there is a component-defining annotation for the same
             ejb-name.

          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="messaging-type"
		   type="javaee:fully-qualified-classType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    The messaging-type element specifies the message
	    listener interface of the message-driven bean.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="timeout-method"
                   type="javaee:named-methodType"
                   minOccurs="0"/>
      <xsd:element name="transaction-type"
		   type="javaee:transaction-typeType"
                   minOccurs="0"/>
      <xsd:element name="message-destination-type"
		   type="javaee:message-destination-typeType"
		   minOccurs="0"/>
      <xsd:element name="message-destination-link"
		   type="javaee:message-destination-linkType"
		   minOccurs="0"/>
      <xsd:element name="activation-config"
		   type="javaee:activation-configType"
		   minOccurs="0"/>
      <xsd:element name="around-invoke"
                   type="javaee:around-invokeType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
      <xsd:element name="security-identity"
		   type="javaee:security-identityType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="method-intfType">

    <xsd:annotation>
      <xsd:documentation>

	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 home and
	component interfaces (e.g, in both an enterprise bean's
	remote and local interfaces or in both an enterprise bean's
	home and remote interfaces, etc.); the component and web
	service endpoint interfaces, and so on. The Local applies to
        both local component interface and local business interface.
        Similarly, Remote applies to both remote component interface
        and the remote business interface.

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

	    Home
	    Remote
	    LocalHome
	    Local
	    ServiceEndpoint

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="Home"/>
	<xsd:enumeration value="Remote"/>
	<xsd:enumeration value="LocalHome"/>
	<xsd:enumeration value="Local"/>
	<xsd:enumeration value="ServiceEndpoint"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="method-nameType">
    <xsd:annotation>
      <xsd:documentation>

	The method-nameType 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 client view interfaces.

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string"/>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="method-paramsType">
    <xsd:annotation>
      <xsd:documentation>

	The method-paramsType defines a list of the
	fully-qualified Java type names of the method parameters.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="method-param"
		   type="javaee:java-typeType"
		   minOccurs="0"
		   maxOccurs="unbounded">
	<xsd:annotation>
	  <xsd:documentation>

	    The method-param element contains a primitive
	    or a fully-qualified Java type name of a method
	    parameter.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="method-permissionType">
    <xsd:annotation>
      <xsd:documentation>

	The method-permissionType specifies that one or more
	security roles are allowed to invoke one or more enterprise
	bean methods. The method-permissionType 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-permissionType
	must be defined in the security-role elements of the
	deployment descriptor, and the methods must be methods
	defined in the enterprise bean's business, home, component
        and/or web service endpoint interfaces.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:choice>
	<xsd:element name="role-name"
		     type="javaee:role-nameType"
		     maxOccurs="unbounded"/>
	<xsd:element name="unchecked"
		     type="javaee:emptyType">
	  <xsd:annotation>
	    <xsd:documentation>

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

	    </xsd:documentation>
	  </xsd:annotation>
	</xsd:element>
      </xsd:choice>
      <xsd:element name="method"
		   type="javaee:methodType"
		   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="methodType">
    <xsd:annotation>
      <xsd:documentation>
	<![CDATA[

	  The methodType is used to denote a method of an enterprise
	  bean's business, home, component, and/or web service endpoint
	  interface, or, in the case of a message-driven bean, the
	  bean's message listener method, or a set of such
	  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 the business, home, component, and/or web service
          endpoint nterfaces; 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 using methodType element
	  within a method element:

	  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 business, home, component,
             and/or web service endpoint 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.

	  Examples:

	  Style 1: The following method element refers to all the
	  methods of the EmployeeService bean's business, home,
          component, and/or web service endpoint 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 business, home, component,
          and/or web service endpoint interfaces with the same name and
	  signature. However, if the same method is a method of both the
          local business interface, and the local component interface,
          the same attribute applies to the method for both interfaces.
          Likewise, if the same method is a method of both the remote
          business interface and the remote component interface, the same
          attribute applies to the method for both interfaces.

	  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
          and the remote business interface.

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

	  ]]>
      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0" maxOccurs="unbounded"/>
      <xsd:element name="ejb-name"
		   type="javaee:ejb-nameType"/>
      <xsd:element name="method-intf"
		   type="javaee:method-intfType"
		   minOccurs="0">
      </xsd:element>
      <xsd:element name="method-name"
		   type="javaee:method-nameType"/>
      <xsd:element name="method-params"
		   type="javaee:method-paramsType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="multiplicityType">
    <xsd:annotation>
      <xsd:documentation>

	The multiplicityType describes the multiplicity of the
	role that participates in a relation.

	The value must be one of the two following:

	    One
	    Many

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="One"/>
	<xsd:enumeration value="Many"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="named-methodType">
    <xsd:sequence>
      <xsd:element name="method-name"
		   type="javaee:string"/>
      <xsd:element name="method-params"
		   type="javaee:method-paramsType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="persistence-typeType">
    <xsd:annotation>
      <xsd:documentation>

	The persistence-typeType specifies an entity bean's persistence
	management type.

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

	    Bean
	    Container

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="Bean"/>
	<xsd:enumeration value="Container"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="query-methodType">
    <xsd:annotation>
      <xsd:documentation>
	<![CDATA[

	  The query-method specifies 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.

	  It is used by the query-method element.

	  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>

	  ]]>
      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="method-name"
		   type="javaee:method-nameType"/>
      <xsd:element name="method-params"
		   type="javaee:method-paramsType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="queryType">
    <xsd:annotation>
      <xsd:documentation>

	The queryType defines 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".

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType" minOccurs="0"/>
      <xsd:element name="query-method"
		   type="javaee:query-methodType"/>
      <xsd:element name="result-type-mapping"
		   type="javaee:result-type-mappingType"
		   minOccurs="0"/>
      <xsd:element name="ejb-ql"
		   type="javaee:xsdStringType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="relationship-role-sourceType">
    <xsd:annotation>
      <xsd:documentation>

	The relationship-role-sourceType designates the source of a
	role that participates in a relationship. A
	relationship-role-sourceType is used by
	relationship-role-source elements to uniquely identify an
	entity bean.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="ejb-name"
		   type="javaee:ejb-nameType"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="relationshipsType">
    <xsd:annotation>
      <xsd:documentation>

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

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:element name="ejb-relation"
		   type="javaee:ejb-relationType"
		   maxOccurs="unbounded">

	<xsd:unique name="role-name-uniqueness">
	  <xsd:annotation>
	    <xsd:documentation>

	      The ejb-relationship-role-name contains the name of a
	      relationship role. The name must be unique within
	      a relationship, but can be reused in different
	      relationships.

	    </xsd:documentation>
	  </xsd:annotation>
	  <xsd:selector
	       xpath=".//javaee:ejb-relationship-role-name"/>
	  <xsd:field
	       xpath="."/>
	</xsd:unique>
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="remove-methodType">
    <xsd:sequence>
      <xsd:element name="bean-method"
		   type="javaee:named-methodType"/>
      <xsd:element name="retain-if-exception"
		   type="javaee:true-falseType"
		   minOccurs="0"/>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="result-type-mappingType">
    <xsd:annotation>
      <xsd:documentation>

	The result-type-mappingType 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 value must be one of the following:

	    Local
	    Remote

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="Local"/>
	<xsd:enumeration value="Remote"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="security-identityType">
    <xsd:annotation>
      <xsd:documentation>

	The security-identityType 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.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:element name="description"
		   type="javaee:descriptionType"
		   minOccurs="0"
		   maxOccurs="unbounded"/>
      <xsd:choice>
	<xsd:element name="use-caller-identity"
		     type="javaee:emptyType">
	  <xsd:annotation>
	    <xsd:documentation>

	      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.

	    </xsd:documentation>
	  </xsd:annotation>
	</xsd:element>
	<xsd:element name="run-as"
		     type="javaee:run-asType"/>
      </xsd:choice>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="session-beanType">
    <xsd:annotation>
      <xsd:documentation>

	The session-beanType declares an session bean. The
	declaration consists of:

	    - an optional description
	    - an optional display name
	    - an optional icon element that contains a small and a large
	      icon file name
	    - a name assigned to the enterprise bean
	      in the deployment description
            - an optional mapped-name element that can be used to provide
              vendor-specific deployment information such as the physical
              jndi-name of the session bean's remote home/business interface.
              This element is not required to be supported by all
              implementations. Any use of this element is non-portable.
            - the names of all the remote or local business interfaces,
              if any
	    - 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 name of the session bean's web service endpoint
	      interface, if any
	    - the session bean's implementation class
	    - the session bean's state management type
            - an optional declaration of the session bean's timeout method.
	    - the optional session bean's transaction management type.
              If it is not present, it is defaulted to Container.
            - an optional list of the session bean class and/or
              superclass around-invoke methods.
	    - 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 bean's web
	      service 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 declaration of the bean's message
	      destination 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.

	The service-endpoint element may only be specified if the
	bean is a stateless session bean.

      </xsd:documentation>
    </xsd:annotation>

    <xsd:sequence>
      <xsd:group ref="javaee:descriptionGroup"/>
      <xsd:element name="ejb-name"
		   type="javaee:ejb-nameType"/>
      <xsd:element name="mapped-name"
		   type="javaee:xsdStringType"
		   minOccurs="0"/>
      <xsd:element name="home"
		   type="javaee:homeType"
		   minOccurs="0"/>
      <xsd:element name="remote"
		   type="javaee:remoteType"
		   minOccurs="0"/>
      <xsd:element name="local-home"
		   type="javaee:local-homeType"
		   minOccurs="0"/>
      <xsd:element name="local"
		   type="javaee:localType"
		   minOccurs="0"/>
      <xsd:element name="business-local"
		   type="javaee:fully-qualified-classType"
		   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="business-remote"
		   type="javaee:fully-qualified-classType"
		   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="service-endpoint"
		   type="javaee:fully-qualified-classType"
		   minOccurs="0">
	<xsd:annotation>
	  <xsd:documentation>

	    The service-endpoint element contains the
	    fully-qualified name of the enterprise bean's web
	    service endpoint interface. The service-endpoint
	    element may only be specified for a stateless
	    session bean. The specified interface must be a
	    valid JAX-RPC service endpoint interface.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="ejb-class"
		   type="javaee:ejb-classType"
                   minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>

             The ejb-class element specifies the fully qualified name
             of the bean class for this ejb.  It is required unless
             there is a component-defining annotation for the same
             ejb-name.

          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="session-type"
		   type="javaee:session-typeType"
                   minOccurs="0"/>
      <xsd:element name="timeout-method"
                   type="javaee:named-methodType"
                   minOccurs="0"/>
      <xsd:element name="init-method"
                   type="javaee:init-methodType"
                   minOccurs="0"
                   maxOccurs="unbounded">
        <xsd:annotation>
	  <xsd:documentation>

	    The init-method element specifies the mappings for
	    EJB 2.x style create methods for an EJB 3.0 bean.
	    This element can only be specified for stateful
            session beans.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="remove-method"
                   type="javaee:remove-methodType"
                   minOccurs="0"
                   maxOccurs="unbounded">
        <xsd:annotation>
	  <xsd:documentation>

	    The remove-method element specifies the mappings for
	    EJB 2.x style remove methods for an EJB 3.0 bean.
	    This element can only be specified for stateful
            session beans.

	  </xsd:documentation>
	</xsd:annotation>
      </xsd:element>
      <xsd:element name="transaction-type"
		   type="javaee:transaction-typeType"
                   minOccurs="0"/>
      <xsd:element name="around-invoke"
                   type="javaee:around-invokeType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:group ref="javaee:jndiEnvironmentRefsGroup"/>
      <xsd:element name="post-activate"
                   type="javaee:lifecycle-callbackType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="pre-passivate"
                   type="javaee:lifecycle-callbackType"
                   minOccurs="0"
                   maxOccurs="unbounded"/>
      <xsd:element name="security-role-ref"
		   type="javaee:security-role-refType"
		   minOccurs="0"
		   maxOccurs="unbounded">
      </xsd:element>
      <xsd:element name="security-identity"
		   type="javaee:security-identityType"
		   minOccurs="0">
      </xsd:element>
    </xsd:sequence>
    <xsd:attribute name="id" type="xsd:ID"/>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="session-typeType">
    <xsd:annotation>
      <xsd:documentation>

	The session-typeType describes whether the session bean is a
	stateful session or stateless session. It is used by
	session-type elements.

	The value must be one of the two following:

	    Stateful
	    Stateless

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="Stateful"/>
	<xsd:enumeration value="Stateless"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="trans-attributeType">
    <xsd:annotation>
      <xsd:documentation>

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

	The value must be one of the following:

	    NotSupported
	    Supports
	    Required
	    RequiresNew
	    Mandatory
	    Never

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="NotSupported"/>
	<xsd:enumeration value="Supports"/>
	<xsd:enumeration value="Required"/>
	<xsd:enumeration value="RequiresNew"/>
	<xsd:enumeration value="Mandatory"/>
	<xsd:enumeration value="Never"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

<!-- **************************************************** -->

  <xsd:complexType name="transaction-typeType">
    <xsd:annotation>
      <xsd:documentation>

	The transaction-typeType specifies an enterprise bean's
	transaction management type.

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

	    Bean
	    Container

      </xsd:documentation>
    </xsd:annotation>
    <xsd:simpleContent>
      <xsd:restriction base="javaee:string">
	<xsd:enumeration value="Bean"/>
	<xsd:enumeration value="Container"/>
      </xsd:restriction>
    </xsd:simpleContent>
  </xsd:complexType>

</xsd:schema>

